chore: initial release v0.1.0
Runtime-agnostic oneshot broadcast channel for Rust.
This commit is contained in:
64 files changed
+23966
No files matched your search
@@ -0,0 +1,77 @@
|
||||
#![no_main]
|
||||
|
||||
use libfuzzer_sys::fuzz_target;
|
||||
use announcement::Announcement;
|
||||
use std::sync::Arc;
|
||||
|
||||
fuzz_target!(|data: &[u8]| {
|
||||
// Test various data types and patterns
|
||||
|
||||
// Test with raw bytes
|
||||
if !data.is_empty() {
|
||||
let (announcer, announcement) = Announcement::new();
|
||||
let listener = announcement.listener();
|
||||
|
||||
// Convert to Vec for owned data
|
||||
let vec_data = data.to_vec();
|
||||
let _ = announcer.announce(vec_data.clone());
|
||||
|
||||
// Verify listener receives the data
|
||||
if let Some(received) = listener.try_listen() {
|
||||
assert_eq!(received, vec_data);
|
||||
}
|
||||
}
|
||||
|
||||
// Test with Arc-wrapped data
|
||||
if data.len() >= 4 {
|
||||
let (announcer, announcement) = Announcement::new();
|
||||
let listener1 = announcement.listener();
|
||||
let listener2 = announcement.listener();
|
||||
|
||||
let arc_data = Arc::new(data.to_vec());
|
||||
let _ = announcer.announce(arc_data.clone());
|
||||
|
||||
// Both listeners should get the same Arc
|
||||
if let (Some(r1), Some(r2)) = (listener1.try_listen(), listener2.try_listen()) {
|
||||
assert_eq!(r1, r2);
|
||||
assert_eq!(*r1, data.to_vec());
|
||||
}
|
||||
}
|
||||
|
||||
// Test with String data (if valid UTF-8)
|
||||
if let Ok(string_data) = std::str::from_utf8(data) {
|
||||
let (announcer, announcement) = Announcement::new();
|
||||
let listener = announcement.listener();
|
||||
|
||||
let _ = announcer.announce(string_data.to_string());
|
||||
|
||||
if let Some(received) = listener.try_listen() {
|
||||
assert_eq!(received, string_data);
|
||||
}
|
||||
}
|
||||
|
||||
// Test with numeric data
|
||||
if data.len() >= 8 {
|
||||
let (announcer, announcement) = Announcement::new();
|
||||
let listener = announcement.listener();
|
||||
|
||||
let mut bytes = [0u8; 8];
|
||||
bytes.copy_from_slice(&data[..8]);
|
||||
let num = u64::from_le_bytes(bytes);
|
||||
|
||||
let _ = announcer.announce(num);
|
||||
|
||||
if let Some(received) = listener.try_listen() {
|
||||
assert_eq!(received, num);
|
||||
}
|
||||
}
|
||||
|
||||
// Test is_announced flag
|
||||
{
|
||||
let (announcer, announcement) = Announcement::new();
|
||||
assert!(!announcement.is_announced());
|
||||
|
||||
let _ = announcer.announce(42u32);
|
||||
assert!(announcement.is_announced());
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user