aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-25 11:47:18 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-25 12:07:37 +0000
commitd94641005c2b35800ee4499d2c17ba06579dabe6 (patch)
treef38132ca76f995a9d41e22f9b3ae3d7accfa6886 /src/test/java
parent32420dc979cfeaa905f78b84f43b58af09ea3984 (diff)
Add type substitution for function types
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java54
1 files changed, 54 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 b7eaa0aa..cd676d71 100644
--- a/src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java
+++ b/src/test/java/org/shedlang/compiler/types/TypeSubstitutionTests.java
@@ -36,6 +36,60 @@ public class TypeSubstitutionTests {
}
@Test
+ public void substitutingFunctionSubstitutesPositionalArgs() {
+ var typeSubstitutionMap = TypeSubstitutionMap.of(
+ Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.INT)
+ );
+
+ var result = TypeSubstitution.substitute(
+ FunctionType.builder()
+ .addPositionalParam(TypeParam.forStructType(STRUCT_TYPE, "T"))
+ .build(),
+ typeSubstitutionMap
+ );
+
+ assertThat(result, equalTo(FunctionType.builder()
+ .addPositionalParam(Types.INT)
+ .build()));
+ }
+
+ @Test
+ public void substitutingFunctionSubstitutesNamedArgs() {
+ var typeSubstitutionMap = TypeSubstitutionMap.of(
+ Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.INT)
+ );
+
+ var result = TypeSubstitution.substitute(
+ FunctionType.builder()
+ .addNamedParam("x", TypeParam.forStructType(STRUCT_TYPE, "T"))
+ .build(),
+ typeSubstitutionMap
+ );
+
+ assertThat(result, equalTo(FunctionType.builder()
+ .addNamedParam("x", Types.INT)
+ .build()));
+ }
+
+ @Test
+ public void substitutingFunctionSubstitutesReturnType() {
+ var typeSubstitutionMap = TypeSubstitutionMap.of(
+ Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.INT)
+ );
+
+ var result = TypeSubstitution.substitute(
+ FunctionType.builder()
+ .withReturnType(TypeParam.forStructType(STRUCT_TYPE, "T"))
+ .build(),
+ typeSubstitutionMap
+ );
+
+ assertThat(result, equalTo(FunctionType.builder()
+ .withReturnType(Types.INT)
+ .build()));
+ }
+
+ @Test
public void substitutingIntDoesNothing() {
var typeSubstitutionMap = TypeSubstitutionMap.of(
Map.entry(TypeParam.forStructType(STRUCT_TYPE, "T"), Types.BOOL)