X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Ftest%2Fnet%2Fmograsim%2Fmachine%2Fstandard%2Fmemory%2FWordAddressableMemoryTest.java;h=ae8e81537805676ef4e67c86bff5b5d029d57950;hb=be391655605fed71095d1ac7dafb8c4d6f06312d;hp=02a4090d0db64a0508c06d9147419e4e601f9cb6;hpb=91f076c44a4f00786343beb923ab01894672416f;p=Mograsim.git diff --git a/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java b/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java index 02a4090d..ae8e8153 100644 --- a/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java +++ b/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java @@ -4,8 +4,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.math.BigInteger; import java.util.Random; +import java.util.stream.LongStream; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.types.Bit; @@ -14,36 +16,33 @@ import net.mograsim.logic.core.wires.CoreWire; import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; import net.mograsim.machine.MainMemoryDefinition; -class WordAddressableMemoryTest { - +class WordAddressableMemoryTest +{ + private Timeline t = new Timeline(10); - @Test - public void wordAddressableMemoryLargeTest() + @ParameterizedTest(name = "seed = {0}") + @MethodSource("seedsForRandom") + public void wordAddressableMemoryLargeTest(long seed) { CoreWire rW = new CoreWire(t, 1, 2); CoreWire data = new CoreWire(t, 16, 2); CoreWire address = new CoreWire(t, 64, 2); - CoreWire clock = new CoreWire(t, 1, 2); ReadWriteEnd rWI = rW.createReadWriteEnd(); ReadWriteEnd dataI = data.createReadWriteEnd(); ReadWriteEnd addressI = address.createReadWriteEnd(); - ReadWriteEnd clockI = clock.createReadWriteEnd(); @SuppressWarnings("unused") - CoreWordAddressableMemory memory = new CoreWordAddressableMemory(t, 4, new WordAddressableMemory(MainMemoryDefinition.create(64, 16, 4096L, Long.MAX_VALUE)), data.createReadWriteEnd(), - rW.createReadOnlyEnd(), address.createReadOnlyEnd(), clock.createReadOnlyEnd()); + CoreWordAddressableMemory memory = new CoreWordAddressableMemory(t, 4, + new WordAddressableMemory(MainMemoryDefinition.create(64, 16, 4096L, Long.MAX_VALUE)), data.createReadWriteEnd(), + rW.createReadOnlyEnd(), address.createReadOnlyEnd()); - clockI.feedSignals(Bit.ONE); - - Random r = new Random(); + Random r = new Random(seed); for (long j = 1; j > 0; j *= 2) { - for (int i = 0; i < 50; i++) + for (int i = 0; i < 100; i++) { - String sAddress = String.format("%64s", BigInteger.valueOf(4096 + i + j).toString(2)).replace(' ', '0'); - sAddress = new StringBuilder(sAddress).reverse().toString(); - BitVector bAddress = BitVector.parse(sAddress); + BitVector bAddress = BitVector.from(4096 + i + j, 64); addressI.feedSignals(bAddress); t.executeAll(); String random = BigInteger.valueOf(Math.abs(r.nextInt())).toString(5); @@ -59,9 +58,13 @@ class WordAddressableMemoryTest { dataI.clearSignals(); t.executeAll(); - assertEquals(dataI.getValues(), vector); + assertEquals(vector, dataI.getValues(), "seed=" + seed + ", j=" + j + ", i=" + i); } } } + public static LongStream seedsForRandom() + { + return LongStream.range(0, 20); + } }