aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-22 10:01:51 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-22 10:01:51 +0000
commit867dd179530e90ae16fe481c0abc58dc8f023f94 (patch)
tree66ebe9e2df599bceeecb36506cdf65563c85a895 /src/test/java
parent2dba29dfa74c32a3102a9317455e16cd9a5a35a7 (diff)
Add Shid instructions to store and load methods
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java24
-rw-r--r--src/test/java/org/shedlang/compiler/shid/instructions/Shid.java14
-rw-r--r--src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java22
5 files changed, 62 insertions, 5 deletions
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java
index e760bdae..e389a34c 100644
--- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java
+++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java
@@ -156,7 +156,7 @@ public class ShidCodeGenNamespaceTests {
),
isShidLocalStore("$methods__Example_Project__User__name__0"),
isShidLocalLoad("$methods__Example_Project__User__name__0"),
- isShidNamespaceFieldStore(namespaceName, "$methods__Example_Project__User__name__0")
+ isShidMethodStore(structType, "name")
)));
}
}
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java
index 0ffea260..df6dee0e 100644
--- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java
@@ -82,10 +82,7 @@ public class ShidCodeGenStructDefinitionTests {
),
isShidLocalStore("$methods__Example_Project__User__name__0"),
isShidLocalLoad("$methods__Example_Project__User__name__0"),
- isShidNamespaceFieldStore(
- NamespaceName.of("Example", "Project"),
- "$methods__Example_Project__User__name__0"
- )
+ isShidMethodStore(structType, "name")
));
}
}
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java b/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java
index e97a503a..6018fa88 100644
--- a/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java
@@ -328,6 +328,30 @@ public class ShidSerializerTests {
}
@Test
+ public void canSerializeMethodLoad() {
+ var instruction = Shid.methodLoad(
+ Types.struct(NamespaceName.of("Example", "Lib"), "User"),
+ "name"
+ );
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("(method-load \"Example/Lib.User\" \"name\")"));
+ }
+
+ @Test
+ public void canSerializeMethodStore() {
+ var instruction = Shid.methodStore(
+ Types.struct(NamespaceName.of("Example", "Lib"), "User"),
+ "name"
+ );
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("(method-store \"Example/Lib.User\" \"name\")"));
+ }
+
+ @Test
public void canSerializeNamespaceFieldStore() {
var instruction = Shid.namespaceFieldStore(
new NamespaceName(List.of("Example", "Lib")),
diff --git a/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java b/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java
index ee78a3e3..70db156b 100644
--- a/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java
+++ b/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java
@@ -127,6 +127,20 @@ public class Shid {
return new ShidLoopContinue(Sources.NULL);
}
+ public static ShidInstruction methodLoad(
+ SimpleStructType type,
+ String methodName
+ ) {
+ return new ShidMethodLoad(type, methodName, Sources.NULL);
+ }
+
+ public static ShidInstruction methodStore(
+ SimpleStructType type,
+ String methodName
+ ) {
+ return new ShidMethodStore(type, methodName, Sources.NULL);
+ }
+
public static ShidInstruction namespaceFieldStore(NamespaceName namespaceName, String fieldName) {
return new ShidNamespaceFieldStore(namespaceName, fieldName, Sources.NULL);
}
diff --git a/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java b/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java
index 43226831..8b4a212d 100644
--- a/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java
+++ b/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java
@@ -134,6 +134,28 @@ public class ShidMatchers {
return instanceOf(ShidLoopContinue.class);
}
+ public static Matcher<ShidInstruction> isShidMethodLoad(
+ SimpleStructType type,
+ String methodName
+ ) {
+ return instanceOf(
+ ShidMethodLoad.class,
+ has("type", x -> x.type(), equalTo(type)),
+ has("methodName", x -> x.methodName(), equalTo(methodName))
+ );
+ }
+
+ public static Matcher<ShidInstruction> isShidMethodStore(
+ SimpleStructType type,
+ String methodName
+ ) {
+ return instanceOf(
+ ShidMethodStore.class,
+ has("type", x -> x.type(), equalTo(type)),
+ has("methodName", x -> x.methodName(), equalTo(methodName))
+ );
+ }
+
public static Matcher<ShidInstruction> isShidNamespaceFieldStore(
NamespaceName namespaceName,
String fieldName