#[cfg(feature = "bolero")]
use blvm_consensus::transaction::check_transaction;
#[cfg(feature = "bolero")]
use blvm_consensus::Transaction;
#[cfg(feature = "bolero")]
use bolero::check;
#[cfg(feature = "bolero")]
#[test]
fn fuzz_check_transaction_robustness() {
check!().for_each(|data: &[u8]| {
let tx = Transaction {
version: data.get(0).copied().unwrap_or(1) as u64,
inputs: vec![].into(),
outputs: vec![].into(),
lock_time: data.get(1).copied().unwrap_or(0) as u64,
};
let result = check_transaction(&tx);
assert!(result.is_ok(), "check_transaction should never panic");
});
}
#[cfg(feature = "bolero")]
#[test]
fn fuzz_check_transaction_deterministic() {
check!().for_each(|data: &[u8]| {
let tx = Transaction {
version: data.get(0).copied().unwrap_or(1) as u64,
inputs: vec![].into(),
outputs: vec![].into(),
lock_time: data.get(1).copied().unwrap_or(0) as u64,
};
let result1 = check_transaction(&tx);
let result2 = check_transaction(&tx);
assert_eq!(result1, result2, "check_transaction must be deterministic");
});
}
#[cfg(feature = "bolero")]
#[test]
fn fuzz_transaction_structure() {
check!().for_each(|data: &[u8]| {
if data.len() > 0 {
let tx = Transaction {
version: data.get(0).copied().unwrap_or(1) as u64,
inputs: vec![].into(),
outputs: vec![].into(),
lock_time: data.get(1).copied().unwrap_or(0) as u64,
};
let _result = check_transaction(&tx);
}
});
}