#![allow(clippy::many_single_char_names, clippy::print_stdout)]
use quoracle::search::{search, SearchConfig};
use quoracle::{Distribution, Node, Objective};
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Quoracle Search Example ===\n");
let a = Node::new("a");
let b = Node::new("b");
let c = Node::new("c");
let d = Node::new("d");
println!("Searching for optimal 4-node quorum system...");
println!("Objective: Minimize load");
println!("Read fraction: 50%");
println!("Timeout: 5 seconds\n");
let config = SearchConfig {
optimize: Objective::Load,
resilience: 1, read_fraction: Some(Distribution::Fixed(0.5)),
timeout: Duration::from_secs(5),
..Default::default()
};
let nodes = vec![a, b, c, d];
let result = search(&nodes, &config)?;
println!("Found optimal system!");
println!("Resilience: {}", result.quorum_system.resilience());
let load = result.strategy.load(Some(&Distribution::Fixed(0.5)), None)?;
println!("Load: {load:.4}");
let capacity = 1.0 / load;
println!("Capacity: {capacity:.4}");
println!("\n=== Search complete ===");
Ok(())
}