From: Daniel Kirschten Date: Mon, 16 Sep 2019 07:22:09 +0000 (+0200) Subject: Merge branch 'cont-integr-2' into 'development' X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=58babf45ae7d259a296656451d796dbe601377a4;hp=85ce1e41615e9c530044a1e39d820a9d380afe34 Merge branch 'cont-integr-2' into 'development' Switch to automatic build and test See merge request lrr-tum/students/eragp-misim-2019!1 --- diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/standard/memory/CoreWordAddressableMemory.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/standard/memory/CoreWordAddressableMemory.java index ca557a6b..40abba9f 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/standard/memory/CoreWordAddressableMemory.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/standard/memory/CoreWordAddressableMemory.java @@ -71,12 +71,12 @@ public class CoreWordAddressableMemory extends BasicCoreComponent return e -> data.feedSignals(storedData); } BitVector transData = data.getValues(); - if (transData.equals(memory.getCell(addressed))) - return null; + boolean isNewData = !transData.equals(memory.getCell(addressed)); return e -> { data.clearSignals(); - memory.setCell(addressed, transData); + if (isNewData) + memory.setCell(addressed, transData); }; } diff --git a/tests/net.mograsim.machine.tests/src/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java b/tests/net.mograsim.machine.tests/src/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java index 9d38b894..ae8e8153 100644 --- a/tests/net.mograsim.machine.tests/src/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java +++ b/tests/net.mograsim.machine.tests/src/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; @@ -19,8 +21,9 @@ 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); @@ -34,13 +37,12 @@ class WordAddressableMemoryTest new WordAddressableMemory(MainMemoryDefinition.create(64, 16, 4096L, Long.MAX_VALUE)), data.createReadWriteEnd(), rW.createReadOnlyEnd(), address.createReadOnlyEnd()); - 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'); - 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); @@ -56,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); + } }