use multi_codec::Codec;
use multi_sig::{Builder, Error, Multisig};
#[test]
fn test_builder_creation() {
let _builder = Builder::new(Codec::Ed25519Pub);
}
#[test]
fn test_empty_data_handling() {
let builder = Builder::new(Codec::Ed25519Pub);
let result = builder.with_signature_bytes(&[]).try_build();
let _ = result;
}
#[test]
fn test_malformed_data() {
let invalid = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
let result = Multisig::try_from(invalid.as_ref());
assert!(result.is_err());
}
#[test]
fn test_truncated_data() {
let truncated = vec![0xB9, 0x24]; let result = Multisig::try_from(truncated.as_ref());
assert!(result.is_err());
}
#[test]
fn test_empty_bytes() {
let result = Multisig::try_from(&[] as &[u8]);
assert!(result.is_err());
}
#[test]
fn test_concurrent_creation() {
use std::sync::Arc;
use std::thread;
let data = Arc::new(b"concurrent test".to_vec());
let mut handles = vec![];
for _ in 0..4 {
let data_clone = Arc::clone(&data);
let handle = thread::spawn(move || {
for _ in 0..5 {
let builder = Builder::new(Codec::Ed25519Pub);
let _ = builder
.with_signature_bytes(data_clone.as_ref())
.try_build();
}
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
}
#[test]
fn test_error_send_sync() {
fn assert_send<T: Send>() {}
fn assert_sync<T: Sync>() {}
assert_send::<Error>();
assert_sync::<Error>();
}