1#![doc = include_str!("../README.md")]
2
3pub mod core;
4
5pub mod prelude {
6 pub use crate::core::*;
7}
8
9#[cfg(test)]
10pub mod examples {
11 use crate::prelude::*;
12
13 #[test]
14 fn test() {
15 let p: Problem<i32> = Problem::new()
16 .variable("a", vec![1, 2, 3])
17 .variable("b", vec![3, 4, 5, 6])
18 .constraint_unary("a", |a| *a != 1)
19 .constraint_unary("a", |a| *a != 2)
20 .constraint_binary("a", "b", |a, b| a != b);
21
22 println!("{:?}", p.get_solutions());
23 println!("{}", p.get_solutions()[0]);
24
25 let p: Problem<i32> = Problem::new()
26 .variable("a", (0..100).into_iter().collect())
27 .variable("b", (0..100).into_iter().collect())
28 .constraint_binary("a", "b", |a, b| 5 * a + 2 * b <= 20)
29 .constraint_binary("a", "b", |a, b| 10 * a + 12 * b >= 90);
30
31 println!("{:?}", p.get_solutions());
32 println!("{}", p.get_solutions()[0]);
33 }
34
35 #[test]
36 fn cs50_example() {
37 let mut problem: Problem<&str> = Problem::new().variables(
38 vec!["A", "B", "C", "D", "E", "F", "G"],
39 vec!["Monday", "Tuesday", "Wednesday"],
40 );
41
42 let constraints = vec![
43 ("A", "B"),
44 ("A", "C"),
45 ("B", "C"),
46 ("B", "D"),
47 ("B", "E"),
48 ("C", "E"),
49 ("C", "F"),
50 ("D", "E"),
51 ("E", "F"),
52 ("E", "G"),
53 ("F", "G"),
54 ];
55
56 for (x, y) in constraints {
57 problem.add_constraint_binary(x, y, |x, y| x != y)
58 }
59
60 for solution in problem.get_solutions() {
61 println!("{solution}")
62 }
63 }
64}