all repos

scratch @ 0d2ab83bc28c9eb22c22bfeb78aac53dd6af1ea7

⭐ me doing recreational ~~drugs~~ programming

scratch/brainfuck/test/gbf_vm_test.gleam (view raw)

1
import gbf/internal/ascii
2
import gbf/internal/vm.{type VirtualMachine}
3
import gleam/result
4
import gleeunit/should
5
6
fn setup(input) -> VirtualMachine {
7
  vm.new(input)
8
}
9
10
pub fn get_cell_test() {
11
  let vm = setup([])
12
13
  vm.get_cell(vm, 3)
14
  |> should.equal(Ok(0))
15
}
16
17
pub fn get_cell_out_of_tape_test() {
18
  let vm = setup([])
19
20
  vm.get_cell(vm, vm.tape_size + 1)
21
  |> should.equal(Error(vm.PointerRanOffTape))
22
}
23
24
pub fn set_cell_test() {
25
  let vm = setup([])
26
27
  vm.set_cell(vm, 2, 22)
28
  |> should.be_ok
29
}
30
31
pub fn set_cell_errors_test() {
32
  let vm = setup([])
33
34
  vm.set_cell(vm, vm.tape_size + 1, 22)
35
  |> should.be_error
36
37
  vm.set_cell(vm, 2, vm.cell_size + 1)
38
  |> should.be_error
39
}
40
41
pub fn set_pointer_test() {
42
  let vm = setup([])
43
44
  vm.set_pointer(vm, 2)
45
  |> should.be_ok
46
}
47
48
pub fn output_byte_empty_test() {
49
  let vm = setup([])
50
51
  vm.output_byte(vm)
52
  |> should.equal(Error(vm.InvalidChar(0)))
53
}
54
55
pub fn output_byte_test() {
56
  let vm = setup([ascii.to_code("a")])
57
  use vm <- result.try(vm.output_byte(vm))
58
59
  should.equal(vm.output, "a")
60
  Ok("")
61
}
62
63
pub fn input_byte_empty_test() {
64
  let vm = setup([])
65
66
  vm.input_byte(vm)
67
  |> should.equal(Error(vm.EmptyInput))
68
}
69
70
pub fn input_byte_test() {
71
  let vm = setup([ascii.to_code("a"), ascii.to_code("b")])
72
  use vm <- result.try(vm.input_byte(vm))
73
74
  should.equal(vm.input, [ascii.to_code("b")])
75
  Ok("")
76
}