all repos

gbf @ dc12bd2108cfe4ca80d914ea3f397bf266e2d2ae

⭐ gleaming brainfuck

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 char
import gbf/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([char.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([char.to_code("a"), char.to_code("b")])
  use vm <- result.try(vm.input_byte(vm))

  should.equal(vm.input, [char.to_code("b")])
  Ok("")
}