use koru_lambda_core::DistinctionEngine;
use std::sync::Arc;
use std::thread;
fn main() {
let engine = Arc::new(DistinctionEngine::new());
println!("Concurrent Synthesis Example");
println!("============================\n");
let mut handles = vec![];
for i in 0..4 {
let engine_clone = Arc::clone(&engine);
let handle = thread::spawn(move || {
let d0 = engine_clone.d0().clone();
let d1 = engine_clone.d1().clone();
let result = engine_clone.synthesize(&d0, &d1);
println!("Thread {} synthesized: {}", i, &result.id()[..16]);
result
});
handles.push(handle);
}
let results: Vec<_> = handles.into_iter().map(|h| h.join().unwrap()).collect();
let first_id = results[0].id();
for (i, result) in results.iter().enumerate() {
assert_eq!(result.id(), first_id);
println!("✓ Thread {} result matches", i);
}
println!("\n✓ All threads produced identical distinctions!");
println!("Final distinction count: {}", engine.distinction_count());
}