mirror of
https://github.com/allaunthefox/SilverSight.git
synced 2026-07-31 01:25:21 +00:00
76 lines
2 KiB
Julia
76 lines
2 KiB
Julia
using Test
|
|
include("/home/allaun/SilverSight/julia/CoreFormalism/Q16_16.jl")
|
|
include("/home/allaun/SilverSight/julia/AVMIsa/avm.jl")
|
|
using .Q16_16
|
|
using .AVM
|
|
|
|
@testset "AVM ISA" begin
|
|
|
|
@testset "add Q16" begin
|
|
prog = [
|
|
AVM.push_q16(5 * 65536),
|
|
AVM.push_q16(3 * 65536),
|
|
AVM.prim(AVM.ADD_SAT_Q16),
|
|
AVM.halt(),
|
|
]
|
|
state = AVM.State(0)
|
|
final = AVM.run(state, prog, 100)
|
|
@test final.halted
|
|
@test length(final.stack) == 1
|
|
@test AVM.q16_val(final, 1) == 8 * 65536
|
|
@test final.pc == 5
|
|
end
|
|
|
|
@testset "jump_if" begin
|
|
prog = [
|
|
AVM.push_val(true),
|
|
AVM.jump_if(4),
|
|
AVM.push_q16(0),
|
|
AVM.halt(),
|
|
AVM.push_q16(65536),
|
|
AVM.halt(),
|
|
]
|
|
state = AVM.State(0)
|
|
final = AVM.run(state, prog, 100)
|
|
@test final.halted
|
|
@test length(final.stack) == 1
|
|
@test AVM.q16_val(final, 1) == 65536
|
|
@test final.pc == 7 # after halt at position 6, pc → 7
|
|
end
|
|
|
|
@testset "store_load" begin
|
|
prog = [
|
|
AVM.push_q16(42 * 65536),
|
|
AVM.store(0),
|
|
AVM.load(0),
|
|
AVM.halt(),
|
|
]
|
|
state = AVM.State(1)
|
|
final = AVM.run(state, prog, 100)
|
|
@test length(final.stack) == 1
|
|
@test AVM.q16_val(final, 1) == 42 * 65536
|
|
end
|
|
|
|
@testset "type error" begin
|
|
prog = [
|
|
AVM.push_val(true),
|
|
AVM.push_q16(65536),
|
|
AVM.prim(AVM.ADD_SAT_Q16),
|
|
AVM.halt(),
|
|
]
|
|
state = AVM.State(0)
|
|
@test_throws Exception AVM.run(state, prog, 100)
|
|
end
|
|
|
|
@testset "division by zero" begin
|
|
prog = [
|
|
AVM.push_q16(65536),
|
|
AVM.push_q16(0),
|
|
AVM.prim(AVM.DIV_SAT_Q16),
|
|
AVM.halt(),
|
|
]
|
|
state = AVM.State(0)
|
|
@test_throws Exception AVM.run(state, prog, 100)
|
|
end
|
|
|
|
end
|