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
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
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
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 fusionTest1()\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
+\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 fusionTest2()\r
+ {\r
+ t.reset();\r
+ Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);\r
+ Wire.fuse(a, b);\r
+ ReadWriteEnd rw = a.createReadWriteEnd();\r
+ t.executeAll();\r
+ assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U);\r
+\r
+ rw.feedSignals(Bit.ONE, Bit.U, Bit.Z);\r
+ t.executeAll();\r
+ assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.U, Bit.Z);\r
+ }\r
+\r
+ @Test\r
+ void fusionTest3()\r
+ {\r
+ t.reset();\r
+ Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);\r
+ a.createReadWriteEnd().feedSignals(Bit.Z, Bit.U, Bit.X);\r
+ t.executeAll();\r
+ Wire.fuse(a, b);\r
+ t.executeAll();\r
+ assertBitArrayEquals(b.getValues(), Bit.Z, Bit.U, Bit.X);\r
+ }\r
+\r
+// @Test\r
+// void connectorTest()\r
+// {\r
+// t.reset();\r
+// Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);\r
+// new Connector(t, a.createReadWriteEnd(), b.createReadWriteEnd()).connect();\r
+//// b.createReadWriteEnd();\r
+// a.createReadWriteEnd();\r
+// t.executeAll();\r
+// assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U);\r
+// }\r
+\r
@Test\r
void triStateBufferTest()\r
{\r
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
\r
TestBitDisplay test = new TestBitDisplay(t, c.createReadOnlyEnd());\r
TestBitDisplay test2 = new TestBitDisplay(t, a.createReadOnlyEnd());\r
- LongConsumer print = time -> System.out.format("Time %2d\n a: %s\n b: %s\n c: %s\n", time, a, b, c);\r
+ LongConsumer print = time -> System.out.format("Time %2d\n a: %s\n b: %s\n c: %s\n", time, a, b, c);\r
\r
cI.feedSignals(Bit.ONE);\r
test.assertAfterSimulationIs(print, Bit.ONE);\r