th_rust/
lib.rs

1extern crate nalgebra as na;
2pub mod gate;
3pub mod simulator;
4pub mod pbit;
5pub mod circuit;
6
7#[cfg(test)]
8mod tests {
9    use gate::{Not, Or, And};
10    use pbit::GridPbit;
11    use circuit::Circuit;
12    use simulator::MCMC;
13
14    use super::*;
15
16    #[test]
17    fn it_runs_copy_gate() {
18        let p0 = GridPbit::new(0, 0);
19        let p1 = GridPbit::new(0, 1);
20
21        let cp0 = Not::new(p0, p1);
22
23        let circuit = Circuit::from_vector(vec![Box::new(cp0)]);
24
25        let mut sim = MCMC::new(circuit);
26        sim.run();
27    }
28
29    #[test]
30    fn it_runs_and_gate() {
31        let p0 = GridPbit::new(0, 0);
32        let p1 = GridPbit::new(0, 1);
33        let p2 = GridPbit::new(1, 0);
34
35        let and0 = And::new(p0, p1, p2);
36
37        let circuit = Circuit::from_vector(vec![Box::new(and0)]);
38
39        let mut sim = MCMC::new(circuit);
40        sim.run();
41    }
42
43    #[test]
44    fn it_runs_or_gate() {
45        let p0 = GridPbit::new(0, 0);
46        let p1 = GridPbit::new(0, 1);
47        let p2 = GridPbit::new(1, 0);
48
49        let and0 = Or::new(p0, p1, p2);
50
51        let circuit = Circuit::from_vector(vec![Box::new(and0)]);
52
53        let mut sim = MCMC::new(circuit);
54        sim.run();
55    }
56
57    #[test]
58    fn it_runs_composed_circuit() {
59        let p1 = GridPbit::new(0, 0);
60        let p2 = GridPbit::new(0, 1);
61        let p3 = GridPbit::new(1, 0);
62        let p4 = GridPbit::new(2, 0);
63        let p5 = GridPbit::new(2, 1);
64
65        // Constructo circuit and compose
66        let mut circuit = Circuit::new();
67        circuit.append(Box::new(And::new(p1, p2, p3)));
68        circuit.append(Box::new(Or::new(p3, p4, p5)));
69        circuit.compile();
70
71        let mut sim = MCMC::new(circuit);
72        sim.run();
73    }
74}