Renamed core components to have the common prefix Core
[Mograsim.git] / net.mograsim.logic.core / test / net / mograsim / logic / core / tests / ComponentTest.java
diff --git a/net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java b/net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java
deleted file mode 100644 (file)
index 464db58..0000000
+++ /dev/null
@@ -1,463 +0,0 @@
-package net.mograsim.logic.core.tests;
-
-import static org.junit.jupiter.api.Assertions.assertArrayEquals;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.fail;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-
-import net.mograsim.logic.core.components.Demux;
-import net.mograsim.logic.core.components.Mux;
-import net.mograsim.logic.core.components.TriStateBuffer;
-import net.mograsim.logic.core.components.UnidirectionalMerger;
-import net.mograsim.logic.core.components.UnidirectionalSplitter;
-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;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-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);
-
-       @BeforeEach
-       void resetTimeline()
-       {
-               t.reset();
-       }
-
-       @Test
-       void circuitExampleTest()
-       {
-               Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), c = new Wire(t, 1, 10), d = new Wire(t, 2, 1), e = new Wire(t, 1, 1),
-                               f = new Wire(t, 1, 1), g = new Wire(t, 1, 1), h = new Wire(t, 2, 1), i = new Wire(t, 2, 1), j = new Wire(t, 1, 1),
-                               k = new Wire(t, 1, 1);
-               new AndGate(t, 1, f.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd());
-               new NotGate(t, 1, f.createReadOnlyEnd(), g.createReadWriteEnd());
-               new UnidirectionalMerger(t, h.createReadWriteEnd(), c.createReadOnlyEnd(), g.createReadOnlyEnd());
-               new Mux(t, 1, i.createReadWriteEnd(), e.createReadOnlyEnd(), h.createReadOnlyEnd(), d.createReadOnlyEnd());
-               new UnidirectionalSplitter(t, i.createReadOnlyEnd(), k.createReadWriteEnd(), j.createReadWriteEnd());
-
-               a.createReadWriteEnd().feedSignals(Bit.ZERO);
-               b.createReadWriteEnd().feedSignals(Bit.ONE);
-               c.createReadWriteEnd().feedSignals(Bit.ZERO);
-               d.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE);
-               e.createReadWriteEnd().feedSignals(Bit.ZERO);
-
-               t.executeAll();
-
-               assertEquals(Bit.ONE, j.getValue());
-               assertEquals(Bit.ZERO, k.getValue());
-       }
-
-       @Test
-       void splitterTest()
-       {
-               Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), in = new Wire(t, 8, 1);
-               in.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
-               new UnidirectionalSplitter(t, in.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), c.createReadWriteEnd());
-
-               t.executeAll();
-
-               assertBitArrayEquals(a.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO);
-               assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO);
-               assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE);
-       }
-
-       @Test
-       void mergerTest()
-       {
-               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);
-               a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);
-               b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO);
-               c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
-
-               new UnidirectionalMerger(t, out.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
-
-               t.executeAll();
-
-               assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
-       }
-
-       @Test
-       void fusionTest1()
-       {
-               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.width);
-               Wire.fuse(b, out, 0, a.width, b.width);
-               Wire.fuse(c, out, 0, a.width + b.width, c.width);
-               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()
-       {
-               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()
-       {
-               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 fusionTest4()
-       {
-               Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 1);
-               a.createReadWriteEnd();
-               t.executeAll();
-
-               Wire.fuse(a, b);
-               t.executeAll();
-               assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U);
-       }
-
-//     @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()
-       {
-               Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), en = new Wire(t, 1, 1), notEn = new Wire(t, 1, 1);
-               new NotGate(t, 1, en.createReadOnlyEnd(), notEn.createReadWriteEnd());
-               new TriStateBuffer(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd(), en.createReadOnlyEnd());
-               new TriStateBuffer(t, 1, b.createReadOnlyEnd(), a.createReadWriteEnd(), notEn.createReadOnlyEnd());
-
-               ReadWriteEnd enI = en.createReadWriteEnd(), aI = a.createReadWriteEnd(), bI = b.createReadWriteEnd();
-               enI.feedSignals(Bit.ONE);
-               aI.feedSignals(Bit.ONE);
-               bI.feedSignals(Bit.Z);
-
-               t.executeAll();
-
-               assertEquals(Bit.ONE, b.getValue());
-
-               bI.feedSignals(Bit.ZERO);
-
-               t.executeAll();
-
-               assertEquals(Bit.X, b.getValue());
-               assertEquals(Bit.ONE, a.getValue());
-
-               aI.clearSignals();
-               enI.feedSignals(Bit.ZERO);
-
-               t.executeAll();
-
-               assertEquals(Bit.ZERO, a.getValue());
-
-       }
-
-       @Test
-       void muxTest()
-       {
-               Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), out = new Wire(t, 4, 1);
-               ReadWriteEnd selectIn = select.createReadWriteEnd();
-
-               selectIn.feedSignals(Bit.ZERO, Bit.ZERO);
-               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
-               c.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
-
-               new Mux(t, 1, out.createReadWriteEnd(), select.createReadOnlyEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(),
-                               c.createReadOnlyEnd());
-               t.executeAll();
-
-               assertBitArrayEquals(out.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
-               selectIn.feedSignals(Bit.ZERO, Bit.ONE);
-               t.executeAll();
-
-               assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
-
-               selectIn.feedSignals(Bit.ONE, Bit.ONE);
-               t.executeAll();
-
-               assertBitArrayEquals(out.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
-
-       }
-
-       @Test
-       void demuxTest()
-       {
-               Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), in = new Wire(t, 4, 1);
-               ReadWriteEnd selectIn = select.createReadWriteEnd();
-
-               selectIn.feedSignals(Bit.ZERO, Bit.ZERO);
-               in.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
-
-               new Demux(t, 1, in.createReadOnlyEnd(), select.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(),
-                               c.createReadWriteEnd());
-               t.executeAll();
-
-               assertBitArrayEquals(a.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
-               assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
-               assertBitArrayEquals(c.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
-               selectIn.feedSignals(Bit.ZERO, Bit.ONE);
-               t.executeAll();
-
-               assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
-               assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
-               assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
-
-               selectIn.feedSignals(Bit.ONE, Bit.ONE);
-               t.executeAll();
-
-               assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
-               assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
-               assertBitArrayEquals(c.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
-
-       }
-
-       @Test
-       void andTest()
-       {
-               Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1);
-               new AndGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd());
-               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
-               b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
-
-               t.executeAll();
-
-               assertBitArrayEquals(c.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ZERO);
-       }
-
-       @Test
-       void orTest()
-       {
-               Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1);
-               new OrGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd());
-               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
-               b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
-
-               t.executeAll();
-
-               assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ONE);
-       }
-
-       @Test
-       void nandTest()
-       {
-               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()
-       {
-               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()
-       {
-               Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2), c = new Wire(t, 3, 1), d = new Wire(t, 3, 1);
-               new XorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
-               a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE);
-               b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
-               c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
-
-               t.executeAll();
-
-               assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ONE, Bit.ONE);
-       }
-
-       @Test
-       void notTest()
-       {
-               Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2);
-               new NotGate(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd());
-               a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE);
-
-               t.executeAll();
-
-               assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO, Bit.ZERO);
-       }
-
-       @Test
-       void rsLatchCircuitTest()
-       {
-               Wire r = new Wire(t, 1, 1), s = new Wire(t, 1, 1), t1 = new Wire(t, 1, 15), t2 = new Wire(t, 1, 1), q = new Wire(t, 1, 1),
-                               nq = new Wire(t, 1, 1);
-
-               new OrGate(t, 1, t2.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd());
-               new OrGate(t, 1, t1.createReadWriteEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd());
-               new NotGate(t, 1, t2.createReadOnlyEnd(), q.createReadWriteEnd());
-               new NotGate(t, 1, t1.createReadOnlyEnd(), nq.createReadWriteEnd());
-
-               ReadWriteEnd sIn = s.createReadWriteEnd(), rIn = r.createReadWriteEnd();
-
-               sIn.feedSignals(Bit.ONE);
-               rIn.feedSignals(Bit.ZERO);
-
-               t.executeAll();
-
-               assertEquals(Bit.ONE, q.getValue());
-               assertEquals(Bit.ZERO, nq.getValue());
-
-               sIn.feedSignals(Bit.ZERO);
-
-               t.executeAll();
-               assertEquals(Bit.ONE, q.getValue());
-               assertEquals(Bit.ZERO, nq.getValue());
-
-               rIn.feedSignals(Bit.ONE);
-
-               t.executeAll();
-
-               assertEquals(Bit.ZERO, q.getValue());
-               assertEquals(Bit.ONE, nq.getValue());
-       }
-
-       @Test
-       void numericValueTest()
-       {
-               Wire a = new Wire(t, 4, 1);
-               a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ONE, Bit.ONE);
-
-               t.executeAll();
-
-               assertEquals(15, a.getUnsignedValue());
-               assertEquals(-1, a.getSignedValue());
-       }
-
-       boolean flag = false;
-
-       @Test
-       void simpleTimelineTest()
-       {
-               Timeline t = new Timeline(3);
-               flag = false;
-               t.addEvent((e) ->
-               {
-                       if (!flag)
-                               fail("Events executed out of order!");
-                       flag = false;
-               }, 15);
-               t.addEvent((e) ->
-               {
-                       if (flag)
-                               fail("Events executed out of order!");
-                       flag = true;
-               }, 10);
-               t.addEvent((e) ->
-               {
-                       if (flag)
-                               fail("Events executed out of order!");
-                       flag = true;
-               }, 20);
-               t.addEvent((e) ->
-               {
-                       fail("Only supposed to execute until timestamp 20, not 25");
-               }, 25);
-
-               t.executeUntil(t.laterThan(20), 100);
-
-               if (!flag)
-                       fail("Not all events were executed in order!");
-       }
-
-       // TODO: Adapt this test, now that update notifications are issued whenever any input to a wire changes
-       @Disabled("Out of date")
-       @Test
-       void multipleInputs()
-       {
-               Wire w = new Wire(t, 2, 1);
-               ReadWriteEnd wI1 = w.createReadWriteEnd(), wI2 = w.createReadWriteEnd();
-               wI1.feedSignals(Bit.ONE, Bit.Z);
-               wI2.feedSignals(Bit.Z, Bit.X);
-               t.executeAll();
-               assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.X);
-
-               wI2.feedSignals(Bit.ZERO, Bit.Z);
-               t.executeAll();
-               assertBitArrayEquals(w.getValues(), Bit.X, Bit.Z);
-
-               wI2.feedSignals(Bit.Z, Bit.Z);
-               t.executeAll();
-               assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z);
-
-               wI2.feedSignals(Bit.ONE, Bit.Z);
-               ReadEnd rE = w.createReadOnlyEnd();
-               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.registerObserver((i) -> fail("WireEnd notified observer, although it was closed."));
-               wI1.close();
-               assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z);
-       }
-
-       private static void assertBitArrayEquals(BitVector actual, Bit... expected)
-       {
-               assertArrayEquals(expected, actual.getBits());
-       }
-}