fn main() {
let kernel = polydat::dsl::compile_polydat_kernel(
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 kernel = program.create_kernel();
kernel.set_inputs(&[42]);
kernel.pull("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}");
}