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 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}