dynamic_program/
dynamic_program.rs1use rusticg::reversal::dynamic_program::{DynamicProgram, Invertible, ReversalError};
2use rusticg::reversal::java;
3use rusticg::reversal::java::java_random;
4use rusticg::util::{Random, JAVA};
5
6fn main() -> Result<(), ReversalError> {
7 let mut program = DynamicProgram::create(JAVA);
8
9 program.add(java::next_int().equal_to(0)?)?;
11
12 program.add(java::next_float().less_than_eq(0.5)?)?;
14
15 program.add(java::next_bound_int(16)?.equal_to(2)?)?;
17
18 program.skip(1);
20
21 program.add_filter(java::next_bound_int(4)?.equal_to(1)?.invert())?;
23
24 let mut iterator = program.reverse();
25
26 for _ in 0..25 {
27 let mut random = Random::of_seed(JAVA, iterator.next().unwrap());
28 let r = &mut random;
29
30 assert_eq!(java_random::next_int(r), 0);
31 assert!(java_random::next_float(r) <= 0.5);
32 assert_eq!(java_random::next_bound_int(r, 16), 2);
33 java_random::next_int(r); assert_ne!(java_random::next_int(r), 1);
35 }
36
37 Ok(())
38}