From 765d7579b96f558ffc6232b707d471850664a11a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 5 Feb 2025 18:48:01 +0000 Subject: Add native types --- .../compiler/types/TypeSubstitutionTests.java | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java b/src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java index c85087fd..451d12f6 100644 --- a/src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java +++ b/src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java @@ -10,6 +10,7 @@ import static org.zwobble.precisely.Matchers.equalTo; public class TypeSubstitutionTests { private static final NamespaceName NAMESPACE_NAME = NamespaceName.of("Example", "Project"); + private static final SimpleNativeType NATIVE_TYPE = Types.nativeType(NAMESPACE_NAME, "Native"); private static final SimpleStructType STRUCT_TYPE = Types.struct(NAMESPACE_NAME, "Struct"); private static final SimpleStructType STRUCT_TYPE_2 = Types.struct(NAMESPACE_NAME, "Struct2"); @@ -280,6 +281,48 @@ public class TypeSubstitutionTests { assertThat(result, equalTo(Types.namespace(NamespaceName.of("A")))); } + @Test + public void substitutingConstructedNativeSubstitutesTypeArgs() { + var typeSubstitutionMap = TypeSubstitutionMap.of( + Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.INT) + ); + + var result = TypeSubstitution.substituteType( + Types.constructedNativeType( + Types.typeConstructor( + List.of(TypeParam.forNativeType(NATIVE_TYPE, "T")), + NATIVE_TYPE + ), + List.of(TypeParam.forStructType(STRUCT_TYPE, "T")) + ), + typeSubstitutionMap + ); + + assertThat(result, equalTo( + Types.constructedNativeType( + Types.typeConstructor( + List.of(TypeParam.forNativeType(NATIVE_TYPE, "T")), + NATIVE_TYPE + ), + List.of(Types.INT) + ) + )); + } + + @Test + public void substitutingSimpleNativeDoesNothing() { + var typeSubstitutionMap = TypeSubstitutionMap.of( + Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.INT) + ); + + var result = TypeSubstitution.substituteType( + Types.nativeType(NamespaceName.of("A"), "B"), + typeSubstitutionMap + ); + + assertThat(result, equalTo(Types.nativeType(NamespaceName.of("A"), "B"))); + } + @Test public void substitutingStringDoesNothing() { var typeSubstitutionMap = TypeSubstitutionMap.of( -- cgit v1.2.3