1 use pulley_interpreter::{ 2 decode::{Decoder, SafeBytecodeStream}, 3 op::{MaterializeOpsVisitor, Op}, 4 }; 5 roundtrip(ops: Vec<Op>)6pub 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