aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-02-05 18:48:01 +0000
committerMichael Williamson <mike@zwobble.org>2025-02-05 18:48:01 +0000
commit765d7579b96f558ffc6232b707d471850664a11a (patch)
tree1deb393601bb77d8adf10a6c1c2b8eda30c2585d /src/test/java
parent89394d0fab076765b637b0fe643d8f8950639817 (diff)
Add native types
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java43
1 files changed, 43 insertions, 0 deletions
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");
@@ -281,6 +282,48 @@ public class TypeSubstitutionTests {
}
@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(
Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.INT)