blob: 8d10be10d9da6896f27c49aa43a5d669a71b6b19 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package no.eliashaugsbakk.kompilator;
import java.util.List;
import org.junit.jupiter.api.Test;
class AssemblyBuilderTest {
@Test
void boilerplateGetsGenerated() {
// Setup
AssemblyBuilder builder = new AssemblyBuilder();
// Act
// Assert
String result = builder.createAssembly(List.of());
assert result.contains("""
.intel_syntax noprefix
.global _start
.text
_start:
""");
assert result.contains("""
mov rax, 60
xor rdi, rdi
syscall
""");
assert result.contains(".data");
}
@Test
void handlePrintGeneratesCorrectAssemblyForSingleStatement() {
// Setup
AssemblyBuilder builder = new AssemblyBuilder();
builder.stringVariables.put("greeting", "Hello");
// Act
builder.handlePrint("print(greeting)");
// Assert
String result = builder.text.toString();
assert result.contains("lea rsi, [greeting]");
assert result.contains("lea rdx, [5]"); // "Hello"
}
@Test
void handlePrintWorksCorrectlyWithMultiplePrintStatements() {
// Setup
AssemblyBuilder builder = new AssemblyBuilder();
builder.stringVariables.put("msg1", "Hi");
builder.stringVariables.put("msg2", "World");
// Act
builder.handlePrint("print(msg1)");
builder.handlePrint("print(msg2)");
// Assert
String result = builder.text.toString();
assert (result).contains("lea rsi, [msg1]");
assert (result).contains("lea rsi, [msg2]");
assert (result).contains("lea rdx, [2]"); // "Hi"
assert (result).contains("lea rdx, [5]"); // "World"
}
}
|