use crate::metis::Rhapsody;
use proptest::prelude::*;
use super::{arb_weaves, build};
proptest! {
#[test]
fn prop_rhapsody_bytes_round_trip(weaves in arb_weaves()) {
let rhapsody = build(&weaves);
prop_assert_eq!(Rhapsody::from_bytes(&rhapsody.to_bytes()), Ok(rhapsody));
}
#[test]
fn prop_rhapsody_decode_then_encode_is_identity(weaves in arb_weaves()) {
let bytes = build(&weaves).to_bytes();
let (decoded, tail) = Rhapsody::from_prefix(&bytes).expect("own frame decodes");
prop_assert!(tail.is_empty());
prop_assert_eq!(decoded.to_bytes(), bytes);
}
#[test]
fn prop_rhapsody_bytes_are_canonical(weaves in arb_weaves()) {
let forward = build(&weaves);
let mut reversed = weaves;
reversed.reverse();
let backward = build(&reversed);
if forward == backward {
prop_assert_eq!(forward.to_bytes(), backward.to_bytes());
}
}
}