1 use pulley_interpreter::{
2     decode::{Decoder, SafeBytecodeStream},
3     op::{MaterializeOpsVisitor, Op},
4 };
5 
roundtrip(ops: Vec<Op>)6 pub fn roundtrip(ops: Vec<Op>) {
7     let _ = env_logger::try_init();
8 
9     log::trace!("input: {ops:#?}");
10 
11     let mut encoded = vec![];
12     for op in &ops {
13         let before = encoded.len();
14         op.encode(&mut encoded);
15         let size = encoded.len() - before;
16         assert_eq!(size, op.width().into());
17     }
18     log::trace!("encoded: {encoded:?}");
19 
20     let mut materializer = MaterializeOpsVisitor::new(SafeBytecodeStream::new(&encoded));
21     let decoded = Decoder::decode_all(&mut materializer).expect("should decode okay");
22     log::trace!("decoded: {decoded:#?}");
23 
24     assert_eq!(
25         decoded, ops,
26         "`decode(encode(ops))` should be equal to the original `ops`"
27     );
28 }
29