rust_constraint/
lib.rs

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}