Commented GUIWire
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / tests / ComponentTest.java
index a47f792..29bc971 100644 (file)
@@ -1,6 +1,5 @@
 package net.mograsim.logic.core.tests;
 
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -16,6 +15,8 @@ import net.mograsim.logic.core.components.Mux;
 import net.mograsim.logic.core.components.Splitter;
 import net.mograsim.logic.core.components.TriStateBuffer;
 import net.mograsim.logic.core.components.gates.AndGate;
+import net.mograsim.logic.core.components.gates.NandGate;
+import net.mograsim.logic.core.components.gates.NorGate;
 import net.mograsim.logic.core.components.gates.NotGate;
 import net.mograsim.logic.core.components.gates.OrGate;
 import net.mograsim.logic.core.components.gates.XorGate;
@@ -26,6 +27,7 @@ import net.mograsim.logic.core.wires.Wire;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;
 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
 
+@SuppressWarnings("unused")
 class ComponentTest
 {
        private Timeline t = new Timeline(11);
@@ -85,6 +87,76 @@ class ComponentTest
                assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
        }
 
+       @Test
+       void fusionTest1()
+       {
+               t.reset();
+               Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), out = new Wire(t, 8, 1);
+               Wire.fuse(a, out, 0, 0, a.length);
+               Wire.fuse(b, out, 0, a.length, b.length);
+               Wire.fuse(c, out, 0, a.length + b.length, c.length);
+               ReadWriteEnd rA = a.createReadWriteEnd();
+               rA.feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);
+               ReadWriteEnd rB = b.createReadWriteEnd();
+               rB.feedSignals(Bit.ONE, Bit.ZERO);
+               ReadWriteEnd rC = c.createReadWriteEnd();
+               rC.feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
+
+               t.executeAll();
+               assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
+               out.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
+               t.executeAll();
+               assertBitArrayEquals(rA.getValues(), Bit.X, Bit.X, Bit.X);
+               assertBitArrayEquals(rB.getValues(), Bit.X, Bit.X);
+               assertBitArrayEquals(rC.getValues(), Bit.X, Bit.X, Bit.X);
+               rA.clearSignals();
+               rB.clearSignals();
+               rC.clearSignals();
+               t.executeAll();
+               assertBitArrayEquals(rA.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE);
+               assertBitArrayEquals(rB.getValues(), Bit.ZERO, Bit.ONE);
+               assertBitArrayEquals(rC.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO);
+       }
+
+       @Test
+       void fusionTest2()
+       {
+               t.reset();
+               Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);
+               Wire.fuse(a, b);
+               ReadWriteEnd rw = a.createReadWriteEnd();
+               t.executeAll();
+               assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U);
+
+               rw.feedSignals(Bit.ONE, Bit.U, Bit.Z);
+               t.executeAll();
+               assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.U, Bit.Z);
+       }
+
+       @Test
+       void fusionTest3()
+       {
+               t.reset();
+               Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);
+               a.createReadWriteEnd().feedSignals(Bit.Z, Bit.U, Bit.X);
+               t.executeAll();
+               Wire.fuse(a, b);
+               t.executeAll();
+               assertBitArrayEquals(b.getValues(), Bit.Z, Bit.U, Bit.X);
+       }
+
+//     @Test
+//     void connectorTest()
+//     {
+//             t.reset();
+//             Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);
+//             new Connector(t, a.createReadWriteEnd(), b.createReadWriteEnd()).connect();
+////           b.createReadWriteEnd();
+//             a.createReadWriteEnd();
+//             t.executeAll();
+//             assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U);
+//     }
+
        @Test
        void triStateBufferTest()
        {
@@ -207,6 +279,36 @@ class ComponentTest
                assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ONE);
        }
 
+       @Test
+       void nandTest()
+       {
+               t.reset();
+               Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1), d = new Wire(t, 4, 1);
+               new NandGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
+               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
+               b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
+               c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
+
+               t.executeAll();
+
+               assertBitArrayEquals(d.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ONE);
+       }
+
+       @Test
+       void norTest()
+       {
+               t.reset();
+               Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1), d = new Wire(t, 4, 1);
+               new NorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
+               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
+               b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
+               c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
+
+               t.executeAll();
+
+               assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ZERO, Bit.ONE, Bit.ZERO);
+       }
+
        @Test
        void xorTest()
        {
@@ -295,19 +397,19 @@ class ComponentTest
                t.addEvent((e) ->
                {
                        if (!flag)
-                               fail();
+                               fail("Events executed out of order!");
                        flag = false;
                }, 15);
                t.addEvent((e) ->
                {
                        if (flag)
-                               fail();
+                               fail("Events executed out of order!");
                        flag = true;
                }, 10);
                t.addEvent((e) ->
                {
                        if (flag)
-                               fail();
+                               fail("Events executed out of order!");
                        flag = true;
                }, 20);
                t.addEvent((e) ->
@@ -318,7 +420,7 @@ class ComponentTest
                t.executeUntil(t.laterThan(20), 100);
 
                if (!flag)
-                       fail();
+                       fail("Not all events were executed in order!");
        }
 
        @Test
@@ -342,12 +444,12 @@ class ComponentTest
 
                wI2.feedSignals(Bit.ONE, Bit.Z);
                ReadEnd rE = w.createReadOnlyEnd();
-               rE.addObserver((i, oldValues) -> fail("WireEnd notified observer, although value did not change."));
+               rE.registerObserver((i) -> fail("WireEnd notified observer, although value did not change."));
                t.executeAll();
                rE.close();
                wI1.feedSignals(Bit.X, Bit.X);
                t.executeAll();
-               wI1.addObserver((i, oldValues) -> fail("WireEnd notified observer, although it was closed."));
+               wI1.registerObserver((i) -> fail("WireEnd notified observer, although it was closed."));
                wI1.close();
                assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z);
        }
@@ -368,7 +470,7 @@ class ComponentTest
 
                TestBitDisplay test = new TestBitDisplay(t, c.createReadOnlyEnd());
                TestBitDisplay test2 = new TestBitDisplay(t, a.createReadOnlyEnd());
-               LongConsumer print = time -> System.out.format("Time %2d\n   a: %s\n   b: %s\n   c: %s\n", time, a, b, c);
+               LongConsumer print = time -> System.out.format("Time %2d\n a: %s\n b: %s\n c: %s\n", time, a, b, c);
 
                cI.feedSignals(Bit.ONE);
                test.assertAfterSimulationIs(print, Bit.ONE);