aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-28 00:01:55 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-28 00:01:55 +0000
commitf201f908da4936453580a9e0c4ddf778363aabad (patch)
tree30bd3bac7f9e9b542fea4b09a6e518478802c9a3 /src/test/java
parent80a8f616dd9495619a74b1e920dae662d98b1ecb (diff)
Extract PatioToLlvmTests
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java75
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java79
2 files changed, 82 insertions, 72 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java
index ede84e08..472100e9 100644
--- a/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java
@@ -1,77 +1,8 @@
package org.shedlang.compiler.backends.llvm;
-import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvm;
-import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvmGlobalContext;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTrunc;
-import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableGlobal;
-import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal;
-import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes;
-import org.shedlang.compiler.backends.paths.PartialTargetPath;
-import org.shedlang.compiler.patio.PatioExampleTests;
-import org.shedlang.compiler.patio.PatioCompilationUnit;
-import org.shedlang.compiler.testing.ExecutionResult;
-import org.shedlang.compiler.testing.TestProcessRunner;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Optional;
-
-public class PatioToAmd64Tests extends PatioExampleTests {
+public class PatioToAmd64Tests extends PatioToLlvmTests {
@Override
- protected ExecutionResult run(PatioCompilationUnit patio) throws IOException, InterruptedException {
- var llvmModuleResult = PatioToLlvm.generateCompilationUnit(
- patio,
- PatioToLlvmGlobalContext.EMPTY
- );
- var llvmModule = llvmModuleResult.value();
-
- llvmModule = llvmModule.addTopLevelEntity(new LlvmFunctionDefinition(
- "main",
- LlvmTypes.INT_32,
- List.of(),
- List.of(
- new LlvmBasicBlock(
- Optional.empty(),
- List.of(
- new LlvmCall(
- new LlvmVariableLocal("exitCode"),
- LlvmTypes.INT_64,
- new LlvmVariableGlobal(FUNCTION_NAME),
- List.of()
- ),
- new LlvmTrunc(
- new LlvmVariableLocal("exitCode32"),
- LlvmTypes.INT_64,
- new LlvmVariableLocal("exitCode"),
- LlvmTypes.INT_32
- )
- ),
- new LlvmReturn(LlvmTypes.INT_32, new LlvmVariableLocal("exitCode32"))
- )
- )
- ));
-
- Files.createDirectories(Path.of("tests-tmp"));
- var workingDirectory = Files.createTempDirectory(Path.of("tests-tmp"), "LlvmShidToPatio");
-
- var objectFilePath = LlvmCompiler.compileLlvmModule(
- llvmModule,
- new PartialTargetPath(workingDirectory.resolve("main"))
- );
-
- var executablePath = workingDirectory.resolve("main");
-
- LlvmBackend.forTarget(LlvmTarget.AMD64).link(
- List.of(objectFilePath),
- executablePath
- );
-
- return TestProcessRunner.runCaptureOutput(List.of(executablePath.toString()));
+ protected LlvmTarget llvmTarget() {
+ return LlvmTarget.AMD64;
}
}
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java
new file mode 100644
index 00000000..b364c0a2
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java
@@ -0,0 +1,79 @@
+package org.shedlang.compiler.backends.llvm;
+
+import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvm;
+import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvmGlobalContext;
+import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock;
+import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition;
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall;
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn;
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTrunc;
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableGlobal;
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes;
+import org.shedlang.compiler.backends.paths.PartialTargetPath;
+import org.shedlang.compiler.patio.PatioCompilationUnit;
+import org.shedlang.compiler.patio.PatioExampleTests;
+import org.shedlang.compiler.testing.ExecutionResult;
+import org.shedlang.compiler.testing.TestProcessRunner;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Optional;
+
+public abstract class PatioToLlvmTests extends PatioExampleTests {
+ @Override
+ protected ExecutionResult run(PatioCompilationUnit patio) throws IOException, InterruptedException {
+ var llvmModuleResult = PatioToLlvm.generateCompilationUnit(
+ patio,
+ PatioToLlvmGlobalContext.EMPTY
+ );
+ var llvmModule = llvmModuleResult.value();
+
+ llvmModule = llvmModule.addTopLevelEntity(new LlvmFunctionDefinition(
+ "main",
+ LlvmTypes.INT_32,
+ List.of(),
+ List.of(
+ new LlvmBasicBlock(
+ Optional.empty(),
+ List.of(
+ new LlvmCall(
+ new LlvmVariableLocal("exitCode"),
+ LlvmTypes.INT_64,
+ new LlvmVariableGlobal(FUNCTION_NAME),
+ List.of()
+ ),
+ new LlvmTrunc(
+ new LlvmVariableLocal("exitCode32"),
+ LlvmTypes.INT_64,
+ new LlvmVariableLocal("exitCode"),
+ LlvmTypes.INT_32
+ )
+ ),
+ new LlvmReturn(LlvmTypes.INT_32, new LlvmVariableLocal("exitCode32"))
+ )
+ )
+ ));
+
+ Files.createDirectories(Path.of("tests-tmp"));
+ var workingDirectory = Files.createTempDirectory(Path.of("tests-tmp"), "LlvmShidToPatio");
+
+ var objectFilePath = LlvmCompiler.compileLlvmModule(
+ llvmModule,
+ new PartialTargetPath(workingDirectory.resolve("main"))
+ );
+
+ var executablePath = workingDirectory.resolve("main");
+
+ LlvmBackend.forTarget(this.llvmTarget()).link(
+ List.of(objectFilePath),
+ executablePath
+ );
+
+ return TestProcessRunner.runCaptureOutput(List.of(executablePath.toString()));
+ }
+
+ protected abstract LlvmTarget llvmTarget();
+}