use crate::{orchard::Flags, serialization::ZcashDeserialize};
use crate::orchard::FlagsV6;
#[test]
fn pre_nu6_3_format_rejects_reserved_bits() {
for byte in 0u8..=0b011 {
assert!(
Flags::zcash_deserialize(&[byte][..]).is_ok(),
"pre-NU6.3 flags byte {byte:#05b} must parse"
);
}
assert!(
Flags::zcash_deserialize(&[0b100][..]).is_err(),
"pre-NU6.3 must reject the enableCrossAddress bit"
);
assert!(Flags::zcash_deserialize(&[0b1000][..]).is_err());
assert!(Flags::zcash_deserialize(&[0xFF][..]).is_err());
}
#[test]
fn nu6_3_format_accepts_cross_address_but_rejects_higher_bits() {
for byte in 0u8..=0b111 {
let flags = Flags::from(
FlagsV6::zcash_deserialize(&[byte][..])
.expect("NU6.3 flags byte with only bits 0..2 must parse"),
);
assert_eq!(flags.bits(), byte);
}
let flags = Flags::from(FlagsV6::zcash_deserialize(&[0b100][..]).expect("valid"));
assert!(flags.contains(Flags::ENABLE_CROSS_ADDRESS));
assert!(FlagsV6::zcash_deserialize(&[0b1000][..]).is_err());
assert!(FlagsV6::zcash_deserialize(&[0xFF][..]).is_err());
}