pulley_interpreter_fuzz/
roundtrip.rs

1use pulley_interpreter::{
2    decode::{Decoder, SafeBytecodeStream},
3    op::{MaterializeOpsVisitor, Op},
4};
5
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}