summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 43c208471fcde3c4de3ff0d69f0534c69f48a72c (plain)
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
#![allow(dead_code)]
mod circuit;
mod gate;
mod pin;
mod types;
use crate::gate::*;
use crate::types::*;
use std::vec;

fn main() {
    {
        let a: u8 = 1;
        let b: u8 = 1;
        let input: Vec<PinValue> = vec![a, b];
        println!("input: {:?}", input);
        let gate_1 = Gate::new(GateType::And, vec![a, a]);
        let gate_2 = Gate::new(GateType::Not, vec![]);
        let gate_1_id = gate_1.id();
        let gate_2_id = gate_2.id();

        let mut nand_1 = Gate::new(GateType::Chip, vec![]);

        nand_1.add_gate(gate_1);
        nand_1.add_gate(gate_2);
        nand_1.connect_gate(gate_1_id, gate_2_id);

        let nand_1_id = nand_1.id();
        let mut double_nand = Gate::new(GateType::Chip, vec![]);

        let gate_3 = Gate::new(GateType::Not, vec![]);
        let gate_3_id = gate_3.id();
        double_nand.add_gate(nand_1);
        double_nand.add_gate(gate_3);

        double_nand.connect_gate(nand_1_id, gate_3_id);

        println!("chip: {:#?}", double_nand);
    }
}