예제 #1
0
        public void Not2(VoltageSignal voltage, VoltageSignal input, VoltageSignal expected)
        {
            // arrange
            var not = new NOT("test");

            // act
            not.V.V     = voltage;
            not.Input.V = input;

            // assert
            Assert.AreEqual(expected, not.Output.V, $"V: {not.V}; I:{not.Input}");
        }
예제 #2
0
        public void Relay_Inverted(VoltageSignal voltage, VoltageSignal input, VoltageSignal expected)
        {
            // arrage
            var relay = new Relay("test", true);

            // act
            relay.Voltage.V = voltage;
            relay.Input.V   = input;

            // assert
            Assert.AreEqual(expected, relay.Output.V, $"V: {voltage}; I:{input}");
        }
예제 #3
0
        public void AND(VoltageSignal voltage, VoltageSignal a, VoltageSignal b, VoltageSignal expected)
        {
            // arrage
            var and = new AND("test");

            // act
            and.V.V = voltage;
            and.A.V = a;
            and.B.V = b;

            // assert
            Assert.AreEqual(expected, and.O.V, $"V:{and.V}; A:{and.A}; B:{and.B}");
        }
예제 #4
0
        public void NOR(VoltageSignal voltage, VoltageSignal a, VoltageSignal b, VoltageSignal expected)
        {
            // arrage
            var nor = new NOR("test");

            // act
            nor.V.V = voltage;
            nor.A.V = a;
            nor.B.V = b;

            // assert
            Assert.AreEqual(expected, nor.O.V, $"V:{nor.V}; A:{nor.A}; B:{nor.B}");
        }
예제 #5
0
        public void XOR(VoltageSignal voltage, VoltageSignal a, VoltageSignal b, VoltageSignal expected)
        {
            // arrage
            var xor = new XOR("test");

            // act
            xor.V.V = voltage;
            xor.A.V = a;
            xor.B.V = b;

            // assert
            Assert.AreEqual(expected, xor.O.V, $"V:{xor.V}; A:{xor.A}; B:{xor.B}");
        }
예제 #6
0
        public void HalfAdder_Carry(VoltageSignal voltage, VoltageSignal a, VoltageSignal b, VoltageSignal expected)
        {
            // arrage
            var halfAdder = new HalfAdder("test");

            // act
            halfAdder.V.V = voltage;
            halfAdder.A.V = a;
            halfAdder.B.V = b;

            // assert
            Assert.AreEqual(expected, halfAdder.Carry.V, $"V:{halfAdder.V.V}; A:{halfAdder.A.V}; B:{halfAdder.B.V}");
        }
예제 #7
0
        public void NOR3(VoltageSignal voltage, VoltageSignal a, VoltageSignal b, VoltageSignal c, VoltageSignal expected)
        {
            // arrage
            var nor3 = new NOR3("test");

            // act
            nor3.V.V = voltage;
            nor3.A.V = a;
            nor3.B.V = b;
            nor3.C.V = c;

            // assert
            Assert.AreEqual(expected, nor3.O.V, $"V:{nor3.V.V}; A:{nor3.A}; B:{nor3.B}; C:{nor3.C}");
        }
예제 #8
0
        public void Selector2to1_Output(VoltageSignal voltage, VoltageSignal a, VoltageSignal b, VoltageSignal select, VoltageSignal expected)
        {
            // arrange
            var selector = new Selector2to1("test");

            // act
            selector.V.V      = voltage;
            selector.A.V      = a;
            selector.B.V      = b;
            selector.Select.V = select;

            // assert
            Assert.AreEqual(expected, selector.O.V);
        }
예제 #9
0
        public void FullAdder_Carry(VoltageSignal v, VoltageSignal carryIn, VoltageSignal a, VoltageSignal b, VoltageSignal expected)
        {
            // arrange
            var fullAdder = new FullAdder("test");

            // act
            fullAdder.V.V       = v;
            fullAdder.CarryIn.V = carryIn;
            fullAdder.A.V       = a;
            fullAdder.B.V       = b;

            // assert
            Assert.AreEqual(expected, fullAdder.Carry.V, $"V:{fullAdder.V}; CarryIn:{fullAdder.CarryIn}; A:{fullAdder.A}; B:{fullAdder.B}");
        }
        public void ClockAndData()
        {
            // arrange
            var flip = new DFlipFlopEdgeWithPresetAndClear("test");

            // act, assert
            flip.V.V = VoltageSignal.HIGH;
            Assert.AreEqual(VoltageSignal.LOW, flip.Q.V, "Gate on: Q L");
            Assert.AreEqual(VoltageSignal.HIGH, flip.Qnot.V, "Gate on: Qnot H");

            flip.Clk.V = VoltageSignal.HIGH;
            Assert.AreEqual(VoltageSignal.LOW, flip.Q.V, "Gate on: D: L; Clk: ^: Q L");
            Assert.AreEqual(VoltageSignal.HIGH, flip.Qnot.V, "Gate on: D: L; Clk: ^: Qnot H");

            flip.Clk.V = VoltageSignal.LOW;
            Assert.AreEqual(VoltageSignal.LOW, flip.Q.V, "Gate on: D: L; Clk: v: Q L");
            Assert.AreEqual(VoltageSignal.HIGH, flip.Qnot.V, "Gate on: D: L; Clk: v: Qnot H");

            flip.D.V = VoltageSignal.HIGH;
            VoltageSignal oldQ = flip.Q.V, oldQnot = flip.Qnot.V;

            Assert.AreEqual(oldQ, flip.Q.V, "Gate on: D: ^; Clk: L: Q Q");
            Assert.AreEqual(oldQnot, flip.Qnot.V, "Gate on: D: ^; Clk: L: Qnot Qnot");

            flip.Clk.V = VoltageSignal.HIGH;
            Assert.AreEqual(VoltageSignal.HIGH, flip.Q.V, "Gate on: D: H; Clk: ^: Q H");
            Assert.AreEqual(VoltageSignal.LOW, flip.Qnot.V, "Gate on: D: H; Clk: ^: Qnot L");

            flip.Clk.V = VoltageSignal.LOW;
            oldQ       = flip.Q.V;
            oldQnot    = flip.Qnot.V;
            Assert.AreEqual(oldQ, flip.Q.V, "Gate on: D: H; Clk: v: Q Q");
            Assert.AreEqual(oldQnot, flip.Qnot.V, "Gate on: D: H; Clk: v: Qnot Qnot");

            flip.D.V   = VoltageSignal.LOW;
            flip.Clk.V = VoltageSignal.HIGH;
            flip.D.V   = VoltageSignal.HIGH;
            Assert.AreEqual(VoltageSignal.LOW, flip.Q.V, "Gate on: D: L; Clk: ^: D: ^: Q L");
            Assert.AreEqual(VoltageSignal.HIGH, flip.Qnot.V, "Gate on: D: L; Clk: ^: D: ^: Qnot H");

            flip.Clk.V = VoltageSignal.LOW;
            flip.Clk.V = VoltageSignal.HIGH;
            flip.D.V   = VoltageSignal.LOW;
            Assert.AreEqual(VoltageSignal.HIGH, flip.Q.V, "Gate on: D: H; Clk: ^: D: v; Q H");
            Assert.AreEqual(VoltageSignal.LOW, flip.Qnot.V, "Gate on: D: H; Clk: ^: D: v; Qnot L");
        }
예제 #11
0
 private static char Bulb(VoltageSignal voltage) => voltage == VoltageSignal.HIGH ? 'Ȳ' : '.';