summaryrefslogtreecommitdiff
path: root/chapter24/src/test/java/com/seaofnodes
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-09-26 16:02:24 -0700
committerCliff Click <cliffc@acm.org>2026-09-26 16:02:24 -0700
commit4391fcc03a214e6296e19ca42487de023ab12f6a (patch)
tree7eca88e0bea31cdae4d5f485b84604a41c82f795 /chapter24/src/test/java/com/seaofnodes
parentdd907c2d86eaaad0910e7bfe3f0d25e5caf8bdf7 (diff)
downloadSimple-4391fcc03a214e6296e19ca42487de023ab12f6a.tar.gz
Simple-4391fcc03a214e6296e19ca42487de023ab12f6a.zip
bug fix widen
Failed lattice law tests mixing constants and have wide type ints; or mixing wide ints and constant arrays.
Diffstat (limited to 'chapter24/src/test/java/com/seaofnodes')
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/TypeTest.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/TypeTest.java b/chapter24/src/test/java/com/seaofnodes/simple/TypeTest.java
index 40264d1d..ba7d2a1e 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/TypeTest.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/TypeTest.java
@@ -7,6 +7,22 @@ import static org.junit.Assert.assertSame;
public class TypeTest {
+ // Removing zero must not reset the widening history of a remaining range.
+ @Test public void testNonZeroWidening() {
+ for( byte widen=0; widen<=3; widen++ ) {
+ TypeInteger pos = TypeInteger.make(0,255,widen).nonZero();
+ TypeInteger neg = TypeInteger.make(-255,0,widen).nonZero();
+ Assert.assertEquals("positive range widening",widen,pos._widen);
+ Assert.assertEquals("negative range widening",widen,neg._widen);
+ assertSame(TypeInteger.make(1,255,widen),pos);
+ assertSame(TypeInteger.make(-255,-1,widen),neg);
+ // Singleton ranges retain their widening level too.
+ assertSame(TypeInteger.make(1,1,widen),TypeInteger.make(0,1,widen).nonZero());
+ assertSame(TypeInteger.make(-1,-1,widen),TypeInteger.make(-1,0,widen).nonZero());
+ }
+ Assert.assertNull(TypeInteger.ZERO.nonZero());
+ }
+
// Struct hashes omit field types, so interning compares unlike leaf kinds.
@Test
public void testCyclicLeafKinds() {