use std::cell::RefCell; use std::rc::Rc; use circuit_cas::circuit::dag::{Circuit, CircuitExt}; use circuit_cas::var; fn main() { let circuit = Rc::new(RefCell::new(Circuit::new())); // Build (x + y) * (x + z) let x = circuit.leaf(var!("x")); let y = circuit.leaf(var!("y")); let z = circuit.leaf(var!("z")); let x_plus_y = circuit.leaf(var!("x")) + y; let x_plus_z = circuit.leaf(var!("x")) + z; let expr = x_plus_y * x_plus_z; // Deduplication: both x leaves share the same NodeId let x2 = circuit.leaf(var!("x")); assert_eq!(x.id, x2.id); println!("(x + y) * (x + z) root node id: {:?}", expr.id); println!("x node id: {:?}", x.id); println!("x deduplicated node id: {:?}", x2.id); }