1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//! Quoracle: A library for constructing and analyzing read-write quorum systems
//!
//! This library provides tools for defining, optimizing, and analyzing quorum systems
//! used in distributed systems research. It supports:
//!
//! - **Expression algebra** for defining quorum systems using operators (OR, AND, Choose)
//! - **Linear programming-based optimization** for finding optimal read/write strategies
//! - **Multi-metric analysis** including load, capacity, network overhead, and latency
//! - **Resilience calculation** for fault tolerance analysis
//! - **Heuristic search** for discovering optimal quorum configurations
//!
//! # Examples
//!
//! ```rust
//! use quoracle::*;
//! use std::time::Duration;
//!
//! // Create nodes
//! let a = Expr::Node(Node::new('a'));
//! let b = Expr::Node(Node::new('b'));
//! let c = Expr::Node(Node::new('c'));
//!
//! // Build a quorum system where reads need any single node
//! // and writes (the dual) need all nodes.
//! let qs = QuorumSystem::from_reads(a + b + c);
//!
//! assert_eq!(qs.read_resilience(), 2);
//! assert_eq!(qs.write_resilience(), 0);
//!
//! // Find the load-optimal strategy for 50% reads.
//! let fr = Distribution::fixed(0.5).unwrap();
//! let limits = StrategyLimits::default();
//! let strategy = qs.strategy(
//! Objective::Load,
//! Some(&fr), None, &limits, 0,
//! ).unwrap();
//!
//! let load = strategy.load(Some(&fr), None).unwrap();
//! assert!(load > 0.0);
//! ```
// Re-export main types
pub use Distribution;
pub use Error;
pub use ;
pub use ;
pub use search;