From 7aa75e85fad99f25b7db8af932f12201e019d420 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 28 Sep 2023 15:25:14 +0100 Subject: Extract FieldsInfo --- .../patio/PatioCodeGenDefineStructTests.java | 9 ++-- .../compiler/patio/PatioCodeGenFieldLoadTests.java | 8 ++-- .../compiler/patio/PatioCodeGenNamespaceTests.java | 15 +++---- .../compiler/typechecker/TypeCheckerCallTests.java | 2 +- .../typechecker/TypeCheckerFieldAccessTests.java | 4 +- .../typechecker/TypeCheckerNamespaceTests.java | 2 +- .../TypeCheckerStructDefinitionTests.java | 2 +- .../shedlang/compiler/types/FieldsInfoTests.java | 51 ++++++++++++++++++++++ .../compiler/types/NamespaceTypeInfoTests.java | 51 ---------------------- 9 files changed, 70 insertions(+), 74 deletions(-) create mode 100644 src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java delete mode 100644 src/test/java/org/shedlang/compiler/types/NamespaceTypeInfoTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java index 1dba9fd5..50cd5267 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java @@ -5,7 +5,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.shedlang.compiler.stackir.instructions.Instructions; import org.shedlang.compiler.testing.snapshots.SnapshotResolver; import org.shedlang.compiler.testing.snapshots.Snapshotter; -import org.shedlang.compiler.typechecker.TypeCheckerContext; +import org.shedlang.compiler.typechecker.TypeInfos; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.StructTypeInfo; import org.shedlang.compiler.types.Types; @@ -29,12 +29,11 @@ public class PatioCodeGenDefineStructTests { Instructions.defineStructField("isActive") ) ); - var typeInfos = TypeCheckerContext.EMPTY - .addStructTypeInfo(structType, new StructTypeInfo(P.orderedMap( + var typeInfos = TypeInfos.EMPTY + .addStructTypeInfo(structType, StructTypeInfo.fromFields(P.orderedMap( Map.entry("name", Types.STRING), Map.entry("isActive", Types.BOOL) - ))) - .toTypeInfos(); + ))); var context = PatioCodeGenContext.forTypeInfos(typeInfos); var result = PatioCodeGen.generateInstruction(instruction, context); diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java index b43f2d1c..11773d3b 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java @@ -7,6 +7,7 @@ import org.shedlang.compiler.stackir.instructions.Instructions; import org.shedlang.compiler.testing.snapshots.SnapshotResolver; import org.shedlang.compiler.testing.snapshots.Snapshotter; import org.shedlang.compiler.typechecker.TypeCheckerContext; +import org.shedlang.compiler.typechecker.TypeInfos; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.StructTypeInfo; import org.shedlang.compiler.types.Types; @@ -45,13 +46,12 @@ public class PatioCodeGenFieldLoadTests { var namespaceName = NamespaceName.of("Example", "Project"); var structType = Types.struct(namespaceName, "User"); var stackIrInstruction = Instructions.fieldLoad(structType, "id"); - var typeInfos = TypeCheckerContext.EMPTY - .addStructTypeInfo(structType, new StructTypeInfo(P.orderedMap( + var typeInfos = TypeInfos.EMPTY + .addStructTypeInfo(structType, StructTypeInfo.fromFields(P.orderedMap( Map.entry("name", Types.STRING), Map.entry("id", Types.INT), Map.entry("isActive", Types.BOOL) - ))) - .toTypeInfos(); + ))); var context = PatioCodeGenContext.forTypeInfos(typeInfos) .temporaryPush(new PatioLocalRef("a")) .temporaryPush(new PatioLocalRef("b")); diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceTests.java index cf9b252f..5d192172 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceTests.java @@ -39,15 +39,12 @@ public class PatioCodeGenNamespaceTests { ); var instructions = List.of(instruction); var namespaceName = NamespaceName.of("An","Example"); - var context = PatioCodeGenContext.forTypeInfos(new TypeInfos( - P.map( - Map.entry(namespaceName, new NamespaceTypeInfo(P.orderedMap( - Map.entry("x", Types.INT), - Map.entry("y", Types.STRING) - ))) - ), - P.map() - )); + var typeInfos = TypeInfos.EMPTY + .addNamespaceTypeInfo(namespaceName, NamespaceTypeInfo.fromFields(P.orderedMap( + Map.entry("x", Types.INT), + Map.entry("y", Types.STRING) + ))); + var context = PatioCodeGenContext.forTypeInfos(typeInfos); var stackIrNamespace = new StackIrNamespace(namespaceName, instructions); var result = PatioCodeGen.generateNamespace(stackIrNamespace, context); diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java index cb43a057..9cfee363 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java @@ -353,7 +353,7 @@ public class TypeCheckerCallTests { .addNamedArg(Untyped.namedArg("name", Untyped.stringLiteral("Bob"))) .build(); var structType = Types.struct(NamespaceName.of("Example"), "User"); - var structTypeInfo = new StructTypeInfo(P.orderedMap( + var structTypeInfo = StructTypeInfo.fromFields(P.orderedMap( Map.entry("name", Types.STRING) )); var context = TypeCheckerContext.EMPTY diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java index 77e6e867..62971de5 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java @@ -25,7 +25,7 @@ public class TypeCheckerFieldAccessTests { "name" ); var structType = Types.struct(NamespaceName.of("Example"), "User"); - var structTypeInfo = new StructTypeInfo(P.orderedMap(Map.entry("name", Types.STRING))); + var structTypeInfo = StructTypeInfo.fromFields(P.orderedMap(Map.entry("name", Types.STRING))); var context = TypeCheckerContext.EMPTY .enterGlobal(P.map(Map.entry("user", structType))) .addStructTypeInfo(structType, structTypeInfo); @@ -64,7 +64,7 @@ public class TypeCheckerFieldAccessTests { "name" ); var structType = Types.struct(NamespaceName.of("Example"), "User"); - var structTypeInfo = new StructTypeInfo(P.orderedMap(Map.entry("username", Types.STRING))); + var structTypeInfo = StructTypeInfo.fromFields(P.orderedMap(Map.entry("username", Types.STRING))); var context = TypeCheckerContext.EMPTY .enterGlobal(P.map(Map.entry("user", structType))) .addStructTypeInfo(structType, structTypeInfo); diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java index 2c4f844d..7663a0aa 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java @@ -454,7 +454,7 @@ public class TypeCheckerNamespaceTests { assertThat( result.context().namespaceTypeInfo().get(namespaceName), - equalTo(new NamespaceTypeInfo(P.orderedMap( + equalTo(NamespaceTypeInfo.fromFields(P.orderedMap( Map.entry("f", new FunctionType(List.of(), List.of(), Effects.NONE, Types.UNIT)) ))) ); diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java index 6af0a4f0..0e27584a 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java @@ -117,7 +117,7 @@ public class TypeCheckerStructDefinitionTests { assertThat( typed.context().structTypeInfos().get(Types.struct(NAMESPACE_NAME, "ExampleStruct")), // TODO: builder for OrderedPMap - has("fields", x -> x.fields().entryStream().toList(), isSequence( + has("fields", x -> x.fields().stream().toList(), isSequence( equalTo(Map.entry("b", Types.BOOL)), equalTo(Map.entry("a", Types.INT)) )) diff --git a/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java b/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java new file mode 100644 index 00000000..a8976376 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java @@ -0,0 +1,51 @@ +package org.shedlang.compiler.types; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.util.P; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class FieldsInfoTests { + @Test + public void fieldCountReturnsNumberOfFields() { + var namespaceTypeInfo = new FieldsInfo(P.orderedMap( + Map.entry("a", Types.INT), + Map.entry("b", Types.STRING) + )); + + var result = namespaceTypeInfo.fieldCount(); + + assertThat(result, equalTo(2)); + } + + @Test + public void fieldIndexReturnsIndexOfFieldInMap() { + var namespaceTypeInfo = new FieldsInfo(P.orderedMap( + Map.entry("a", Types.INT), + Map.entry("b", Types.STRING) + )); + + var result = namespaceTypeInfo.fieldIndex("b"); + + assertThat(result, equalTo(1)); + } + + @Test + public void whenFieldDoesNotExistThenFieldIndexThrowsError() { + var namespaceTypeInfo = new FieldsInfo(P.orderedMap( + Map.entry("a", Types.INT), + Map.entry("b", Types.STRING) + )); + + var error = assertThrows( + NoSuchFieldInternalError.class, + () -> namespaceTypeInfo.fieldIndex("c") + ); + + assertThat(error.fieldName(), equalTo("c")); + } +} diff --git a/src/test/java/org/shedlang/compiler/types/NamespaceTypeInfoTests.java b/src/test/java/org/shedlang/compiler/types/NamespaceTypeInfoTests.java deleted file mode 100644 index c22f312a..00000000 --- a/src/test/java/org/shedlang/compiler/types/NamespaceTypeInfoTests.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.shedlang.compiler.types; - -import org.junit.jupiter.api.Test; -import org.shedlang.compiler.util.P; - -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.zwobble.precisely.AssertThat.assertThat; -import static org.zwobble.precisely.Matchers.equalTo; - -public class NamespaceTypeInfoTests { - @Test - public void fieldCountReturnsNumberOfFields() { - var namespaceTypeInfo = new NamespaceTypeInfo(P.orderedMap( - Map.entry("a", Types.INT), - Map.entry("b", Types.STRING) - )); - - var result = namespaceTypeInfo.fieldCount(); - - assertThat(result, equalTo(2)); - } - - @Test - public void fieldIndexReturnsIndexOfFieldInMap() { - var namespaceTypeInfo = new NamespaceTypeInfo(P.orderedMap( - Map.entry("a", Types.INT), - Map.entry("b", Types.STRING) - )); - - var result = namespaceTypeInfo.fieldIndex("b"); - - assertThat(result, equalTo(1)); - } - - @Test - public void whenFieldDoesNotExistThenFieldIndexThrowsError() { - var namespaceTypeInfo = new NamespaceTypeInfo(P.orderedMap( - Map.entry("a", Types.INT), - Map.entry("b", Types.STRING) - )); - - var error = assertThrows( - NoSuchFieldInternalError.class, - () -> namespaceTypeInfo.fieldIndex("c") - ); - - assertThat(error.fieldName(), equalTo("c")); - } -} -- cgit v1.2.3