diff options
| author | Cliff Click <cliffc@acm.org> | 2026-09-19 10:58:24 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-09-19 10:58:24 -0700 |
| commit | 0c62c5a642132fc8b2de4905bb4adce31069ece1 (patch) | |
| tree | 9621b562586e309175325f441251b92cae4cb1b9 /chapter23/src/test | |
| parent | bf3e5632ddf21c109f7ef0f61bcc62e2ed0f9d49 (diff) | |
| download | Simple-0c62c5a642132fc8b2de4905bb4adce31069ece1.tar.gz Simple-0c62c5a642132fc8b2de4905bb4adce31069ece1.zip | |
Tighter recursive-struct test
Diffstat (limited to 'chapter23/src/test')
| -rw-r--r-- | chapter23/src/test/java/com/seaofnodes/simple/TypeTest.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/chapter23/src/test/java/com/seaofnodes/simple/TypeTest.java b/chapter23/src/test/java/com/seaofnodes/simple/TypeTest.java index 0fd56607..40264d1d 100644 --- a/chapter23/src/test/java/com/seaofnodes/simple/TypeTest.java +++ b/chapter23/src/test/java/com/seaofnodes/simple/TypeTest.java @@ -7,6 +7,27 @@ import static org.junit.Assert.assertSame; public class TypeTest { + // Struct hashes omit field types, so interning compares unlike leaf kinds. + @Test + public void testCyclicLeafKinds() { + TypeStruct bottom = TypeStruct.make("B14LeafKinds",false, + Field.make("x",Type.BOTTOM,2,false, false)); + TypeStruct one = TypeStruct.make("B14LeafKinds",false, + Field.make("x",TypeFloat.constant(1.0),2,false, false)); + TypeStruct two = TypeStruct.make("B14LeafKinds",false, + Field.make("x",TypeFloat.constant(2.0),2,false, false)); + + // Meeting creates a new struct while cyclic equality is active. Its + // float leaf must compare unequal to the previously interned BOTTOM. + TypeStruct meet = (TypeStruct)one.meet(two); + assertSame(TypeFloat.F32,meet._fields[0]._t); + assertSame(meet,two.meet(one)); + assertSame(meet,TypeStruct.make("B14LeafKinds",false, + Field.make("x",TypeFloat.F32,2,false, false))); + assertSame(bottom,meet.meet(bottom)); + assertSame(meet.dual(),one.dual().join(two.dual())); + } + // Test basic properties and GLB @Test public void testTypeAdHoc() { |
