gbf/test/gbf_vm_test.gleam(view raw)
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 66 67 68 69 70 71 72 73 74 75 76 |
import ascii
import gbf/internal/vm.{type VirtualMachine}
import gleam/result
import gleeunit/should
fn setup(input) -> VirtualMachine {
vm.new(input)
}
pub fn get_cell_test() {
let vm = setup([])
vm.get_cell(vm, 3)
|> should.equal(Ok(0))
}
pub fn get_cell_out_of_tape_test() {
let vm = setup([])
vm.get_cell(vm, vm.tape_size + 1)
|> should.equal(Error(vm.PointerRanOffTape))
}
pub fn set_cell_test() {
let vm = setup([])
vm.set_cell(vm, 2, 22)
|> should.be_ok
}
pub fn set_cell_errors_test() {
let vm = setup([])
vm.set_cell(vm, vm.tape_size + 1, 22)
|> should.be_error
vm.set_cell(vm, 2, vm.cell_size + 1)
|> should.be_error
}
pub fn set_pointer_test() {
let vm = setup([])
vm.set_pointer(vm, 2)
|> should.be_ok
}
pub fn output_byte_empty_test() {
let vm = setup([])
vm.output_byte(vm)
|> should.equal(Error(vm.InvalidChar(0)))
}
pub fn output_byte_test() {
let vm = setup([ascii.to_code("a")])
use vm <- result.try(vm.output_byte(vm))
should.equal(vm.output, "a")
Ok("")
}
pub fn input_byte_empty_test() {
let vm = setup([])
vm.input_byte(vm)
|> should.equal(Error(vm.EmptyInput))
}
pub fn input_byte_test() {
let vm = setup([ascii.to_code("a"), ascii.to_code("b")])
use vm <- result.try(vm.input_byte(vm))
should.equal(vm.input, [ascii.to_code("b")])
Ok("")
}
|