80 lines
1.4 KiB
Elixir
80 lines
1.4 KiB
Elixir
|
defmodule AssemblerTest do
|
||
|
use ExUnit.Case
|
||
|
doctest Assembler
|
||
|
|
||
|
test "assembles empty program" do
|
||
|
assert Assembler.assemble("") == []
|
||
|
end
|
||
|
|
||
|
test "assembles simple program" do
|
||
|
program = """
|
||
|
add 1, 2, 10
|
||
|
mul 2, 3, 11
|
||
|
add $10, $11, 12
|
||
|
hlt
|
||
|
"""
|
||
|
|
||
|
assert Assembler.assemble(program) == [
|
||
|
1101,
|
||
|
1,
|
||
|
2,
|
||
|
10,
|
||
|
1102,
|
||
|
2,
|
||
|
3,
|
||
|
11,
|
||
|
1,
|
||
|
10,
|
||
|
11,
|
||
|
12,
|
||
|
99
|
||
|
]
|
||
|
end
|
||
|
|
||
|
test "assembles simple program with a label" do
|
||
|
program = """
|
||
|
add 1, 2, 10
|
||
|
jnz $10, nonZero
|
||
|
nonZero:
|
||
|
hlt
|
||
|
"""
|
||
|
|
||
|
assert Assembler.assemble(program) == [
|
||
|
1101,
|
||
|
1,
|
||
|
2,
|
||
|
10,
|
||
|
1005,
|
||
|
10,
|
||
|
7,
|
||
|
99
|
||
|
]
|
||
|
end
|
||
|
|
||
|
test "assembles a simple program with a data label" do
|
||
|
program = """
|
||
|
add 1, 2, var
|
||
|
out $var
|
||
|
var: 0
|
||
|
"""
|
||
|
|
||
|
assert Assembler.assemble(program) == [
|
||
|
1101,
|
||
|
1,
|
||
|
2,
|
||
|
6,
|
||
|
4,
|
||
|
6,
|
||
|
0
|
||
|
]
|
||
|
end
|
||
|
|
||
|
test "assembles a program with a _self label" do
|
||
|
program = """
|
||
|
add 1, 2, _self
|
||
|
"""
|
||
|
|
||
|
assert Assembler.assemble(program) == [1101, 1, 2, 3]
|
||
|
end
|
||
|
end
|