From a3a609178c0f6b9886a8b1e4d723f0525cb30e80 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 4 Mar 2017 17:29:12 +0100 Subject: [PATCH] fixed a bug witch result in values always zero if 64 bit values are used. --- .../neemann/digital/core/ObservableValue.java | 5 +++- .../digital/core/ObservableValueTest.java | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/test/java/de/neemann/digital/core/ObservableValueTest.java diff --git a/src/main/java/de/neemann/digital/core/ObservableValue.java b/src/main/java/de/neemann/digital/core/ObservableValue.java index 336dd7971..56cb85336 100644 --- a/src/main/java/de/neemann/digital/core/ObservableValue.java +++ b/src/main/java/de/neemann/digital/core/ObservableValue.java @@ -39,7 +39,10 @@ public class ObservableValue extends Observable implements PinDescription { super(); this.bits = bits; this.highZ = highZ; - mask = (1L << bits) - 1; + if (bits > 63) + mask = -1; + else + mask = (1L << bits) - 1; this.name = name; supportsHighZ = highZ; } diff --git a/src/test/java/de/neemann/digital/core/ObservableValueTest.java b/src/test/java/de/neemann/digital/core/ObservableValueTest.java new file mode 100644 index 000000000..8b5f53d10 --- /dev/null +++ b/src/test/java/de/neemann/digital/core/ObservableValueTest.java @@ -0,0 +1,28 @@ +package de.neemann.digital.core; + +import junit.framework.TestCase; + +/** + * Created by hneemann on 04.03.17. + */ +public class ObservableValueTest extends TestCase { + + public void testSetValue1() throws Exception { + ObservableValue v = new ObservableValue("z", 64); + v.setValue(5); + assertEquals(5, v.getValue()); + } + + public void testSetValue2() throws Exception { + ObservableValue v = new ObservableValue("z", 63); + v.setValue(-1); + assertEquals((1l << 63) - 1, v.getValue()); + } + + public void testSetValue3() throws Exception { + ObservableValue v = new ObservableValue("z", 62); + v.setValue(-1); + assertEquals((1l << 62) - 1, v.getValue()); + } + +} \ No newline at end of file