summaryrefslogtreecommitdiff
path: root/perfectly-spherical-houses-in-a-vacuum/pshiav-test.scm
blob: a27dec4451dd92ee3fd1c59e88b9b350d6c8ff77 (plain)
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
77
78
79
80
81
82
83
;; -*- compile-command: "guile -L . pshiav-test.scm"; -*-
(use-modules (srfi srfi-64)
	     (pshiav))

(test-begin "harness")


(define coordinate-accumulator
  (add-coordinates))

(test-equal "don't move"
  '((0 . 0) (0 . 0))
  (coordinate-accumulator '(0 . 0)))

(set! coordinate-accumulator
  (add-coordinates))

(test-equal "move up"
  '((0 . 1) (0 . 0))
  (coordinate-accumulator '(0 . 1)))

(set! coordinate-accumulator
  (add-coordinates))

(test-equal "move up twice"
  '((0 . 2) (0 . 1) (0 . 0))
  (begin (coordinate-accumulator '(0 . 1))
	 (coordinate-accumulator '(0 . 1))))

(test-equal "up maps to +y"
  '(0 . 1)
  (direction->pair #\^))

(test-equal "right maps to +x"
  '(1 . 0)
  (direction->pair #\>))

(test-equal "down maps to -y"
  '(0 . -1)
  (direction->pair #\v))

(test-equal "left maps to -x"
  '(-1 . 0)
  (direction->pair #\<))

(test-equal "? maps to no change"
  '(0 . 0)
  (direction->pair #\?))

(test-equal "empty input visits one place"
  1
  (pshiav "" 1))

(test-equal "down once visits two places"
  2
  (pshiav "v" 1))

(test-equal "down twice visits three places"
  3
  (pshiav "vv" 1))

(test-equal "down twice, up once visits three places"
  3
  (pshiav "vv^" 1))

(test-equal "up down visits three with two visitors"
  3
  (pshiav "^v" 2))

(test-equal "up right down left visits three with two visitors"
  3
  (pshiav "^>v<" 2))

(test-equal "opposite instructions maximizes visits with two"
  11
  (pshiav "^v^v^v^v^v" 2))

(test-equal "opposite instructions maximizes visits with three"
  16
  (pshiav "^v>^v>^v>^v>^v>" 3))


(test-end "harness")