Merge commit '28314e7a9a3c3ebfcc4db8e9f1875507063ae6e6' into development
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / tests / ComponentTest.java
index e97836b..0505b4c 100644 (file)
@@ -1,6 +1,5 @@
 package net.mograsim.logic.core.tests;\r
 \r
-import static org.junit.Assert.assertTrue;\r
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;\r
 import static org.junit.jupiter.api.Assertions.assertEquals;\r
 import static org.junit.jupiter.api.Assertions.fail;\r
@@ -16,6 +15,8 @@ import net.mograsim.logic.core.components.Mux;
 import net.mograsim.logic.core.components.Splitter;\r
 import net.mograsim.logic.core.components.TriStateBuffer;\r
 import net.mograsim.logic.core.components.gates.AndGate;\r
+import net.mograsim.logic.core.components.gates.NandGate;\r
+import net.mograsim.logic.core.components.gates.NorGate;\r
 import net.mograsim.logic.core.components.gates.NotGate;\r
 import net.mograsim.logic.core.components.gates.OrGate;\r
 import net.mograsim.logic.core.components.gates.XorGate;\r
@@ -26,6 +27,7 @@ import net.mograsim.logic.core.wires.Wire;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;\r
 \r
+@SuppressWarnings("unused")\r
 class ComponentTest\r
 {\r
        private Timeline t = new Timeline(11);\r
@@ -85,6 +87,36 @@ class ComponentTest
                assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);\r
        }\r
 \r
+       @Test\r
+       void fusionTest()\r
+       {\r
+               t.reset();\r
+               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);\r
+               Wire.fuse(a, out, 0, 0, a.length);\r
+               Wire.fuse(b, out, 0, a.length, b.length);\r
+               Wire.fuse(c, out, 0, a.length + b.length, c.length);\r
+               ReadWriteEnd rA = a.createReadWriteEnd();\r
+               rA.feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);\r
+               ReadWriteEnd rB = b.createReadWriteEnd();\r
+               rB.feedSignals(Bit.ONE, Bit.ZERO);\r
+               ReadWriteEnd rC = c.createReadWriteEnd();\r
+               rC.feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);\r
+               t.executeAll();\r
+               assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);\r
+               out.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);\r
+               t.executeAll();\r
+               assertBitArrayEquals(rA.getValues(), Bit.X, Bit.X, Bit.X);\r
+               assertBitArrayEquals(rB.getValues(), Bit.X, Bit.X);\r
+               assertBitArrayEquals(rC.getValues(), Bit.X, Bit.X, Bit.X);\r
+               rA.clearSignals();\r
+               rB.clearSignals();\r
+               rC.clearSignals();\r
+               t.executeAll();\r
+               assertBitArrayEquals(rA.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE);\r
+               assertBitArrayEquals(rB.getValues(), Bit.ZERO, Bit.ONE);\r
+               assertBitArrayEquals(rC.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO);\r
+       }\r
+\r
        @Test\r
        void triStateBufferTest()\r
        {\r
@@ -207,6 +239,36 @@ class ComponentTest
                assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ONE);\r
        }\r
 \r
+       @Test\r
+       void nandTest()\r
+       {\r
+               t.reset();\r
+               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);\r
+               new NandGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());\r
+               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);\r
+               b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);\r
+               c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);\r
+\r
+               t.executeAll();\r
+\r
+               assertBitArrayEquals(d.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ONE);\r
+       }\r
+\r
+       @Test\r
+       void norTest()\r
+       {\r
+               t.reset();\r
+               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);\r
+               new NorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());\r
+               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);\r
+               b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);\r
+               c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);\r
+\r
+               t.executeAll();\r
+\r
+               assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ZERO, Bit.ONE, Bit.ZERO);\r
+       }\r
+\r
        @Test\r
        void xorTest()\r
        {\r