import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
+import java.math.BigInteger;
+import java.util.Random;
import java.util.function.LongConsumer;
+import org.junit.Ignore;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestInstance.Lifecycle;
import net.mograsim.logic.core.components.Connector;
import net.mograsim.logic.core.components.Demux;
{
private Timeline t = new Timeline(11);
+ @BeforeEach
+ void resetTimeline()
+ {
+ t.reset();
+ }
+
@Test
void circuitExampleTest()
{
@Test
void splitterTest()
{
- t.reset();
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 Splitter(t, in.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), c.createReadWriteEnd());
@Test
void mergerTest()
{
- 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);
a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);
b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO);
@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);
+ 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();
@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();
@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();
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()
// {
@Test
void muxTest()
{
- t.reset();
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();
@Test
void demuxTest()
{
- t.reset();
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();
@Test
void andTest()
{
- t.reset();
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);
@Test
void orTest()
{
- t.reset();
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);
@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);
@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);
@Test
void xorTest()
{
- t.reset();
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);
@Test
void notTest()
{
- t.reset();
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);
@Test
void rsLatchCircuitTest()
{
- t.reset();
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);
@Test
void numericValueTest()
{
- t.reset();
-
Wire a = new Wire(t, 4, 1);
a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ONE, Bit.ONE);
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()
{
- t.reset();
Wire w = new Wire(t, 2, 1);
ReadWriteEnd wI1 = w.createReadWriteEnd(), wI2 = w.createReadWriteEnd();
wI1.feedSignals(Bit.ONE, Bit.Z);
assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z);
}
+ @Disabled("Braucht den Connector noch irgendjemand?")
@Test
void wireConnections()
{
// Nur ein Experiment, was über mehrere 'passive' Bausteine hinweg passieren würde
- t.reset();
-
Wire a = new Wire(t, 1, 2);
Wire b = new Wire(t, 1, 2);
Wire c = new Wire(t, 1, 2);