fn main() {
let kernel = polydat::dsl::compile_gk(r#"
input cycle: u64
user_id := mod(hash(cycle), 1000000)
"#).expect("compile failed");
let program = kernel.into_program();
let threads = 2;
let results: Vec<u64> = std::thread::scope(|s| {
let handles: Vec<_> = (0..threads).map(|_| {
let program = program.clone();
s.spawn(move || {
let mut state = program.create_state();
state.set_inputs(&[42]);
state.pull(&program, "user_id").as_u64()
})
}).collect();
handles.into_iter().map(|h| h.join().unwrap()).collect()
});
println!("two threads, coord=42 → results: {results:?}");
let first = results[0];
for (i, v) in results.iter().enumerate() {
assert_eq!(*v, first, "thread {i} disagreed: {v} vs {first}");
}
println!("all threads agreed: user_id = {first}");
}