summaryrefslogtreecommitdiff
path: root/cube-conundrum/cc-test.scm
diff options
context:
space:
mode:
Diffstat (limited to 'cube-conundrum/cc-test.scm')
-rw-r--r--cube-conundrum/cc-test.scm187
1 files changed, 187 insertions, 0 deletions
diff --git a/cube-conundrum/cc-test.scm b/cube-conundrum/cc-test.scm
new file mode 100644
index 0000000..6b4ff06
--- /dev/null
+++ b/cube-conundrum/cc-test.scm
@@ -0,0 +1,187 @@
+;; -*- compile-command: "guile -L . cc-test.scm"; -*-
+(use-modules (srfi srfi-64)
+ (cc))
+
+(test-begin "harness")
+
+
+(test-equal "max rgb all zeros"
+ '(0 0 0)
+ (take-max-instances '(0 0 0) '(0 0 0)))
+
+(test-equal "max rgb no change"
+ '(0 0 0)
+ (take-max-instances '(0 0 0) '(-1 -2 -3)))
+
+(test-equal "max rgb all change"
+ '(-1 -2 -3)
+ (take-max-instances '(-2 -3 -4) '(-1 -2 -3)))
+
+(test-equal "max rgb red change"
+ '(99 0 0)
+ (take-max-instances '(0 0 0) '(99 0 -1)))
+
+(test-equal "max rgb mix"
+ '(42 53 69)
+ (take-max-instances '(42 7 13) '(21 53 69)))
+
+(test-equal "zero all empty string"
+ '(0 0 0)
+ (draw->colors ""))
+
+(test-equal "1 red draw"
+ '(1 0 0)
+ (draw->colors "1 red"))
+
+(test-equal "1 green draw"
+ '(0 1 0)
+ (draw->colors "1 green,"))
+
+(test-equal "2 blue draw"
+ '(0 0 2)
+ (draw->colors "2 blue,"))
+
+(test-equal "1 of each"
+ '(1 1 1)
+ (draw->colors "1 red, 1 green, 1 blue,"))
+
+(test-equal "mix of each, random order"
+ '(72 56 24)
+ (draw->colors "56 green, 24 blue, 72 red"))
+
+(test-equal "zero draw game"
+ '(0 0 0)
+ (game->seen ""))
+
+(test-equal "two red single"
+ '(2 0 0)
+ (game->seen " 2 red"))
+
+(test-equal "one red repeat"
+ '(1 0 0)
+ (game->seen "1 red; 1 red; 1 red"))
+
+(test-equal "one red one blue repeat"
+ '(1 0 1)
+ (game->seen "1 red; 1 blue; 1 red"))
+
+(test-equal "escalating reds"
+ '(3 0 0)
+ (game->seen "1 red; 2 red; 3 red"))
+
+(test-equal "deescalating reds"
+ '(3 0 0)
+ (game->seen "3 red; 2 red; 1 red"))
+
+(test-equal "realistic game"
+ '(4 2 6)
+ (game->seen "3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green"))
+
+(test-equal "zero games returns empty alist"
+ '()
+ (games->at-least ""))
+
+(test-equal "one game zero draws returns zeros"
+ '((0 . (0 0 0)))
+ (games->at-least "
+Game 0:
+"))
+
+(test-equal "one game one draw one color"
+ '((0 . (0 1 0)))
+ (games->at-least "
+Game 0: 1 green
+"))
+
+(test-equal "varied game counter one game one draw"
+ '((42 . (0 1 0)))
+ (games->at-least "
+Game 42: 1 green
+"))
+
+(test-equal "two games of one draw"
+ '((1 . (1 0 0))
+ (0 . (0 1 0)))
+ (games->at-least "
+Game 0: 1 green
+Game 1: 1 red
+"))
+
+(test-equal "two games of multiple draws"
+ '((2 . (1 6 1))
+ (0 . (0 1 2)))
+ (games->at-least "
+Game 0: 1 green; 2 blue
+Game 2: 1 red; 6 green, 1 blue
+"))
+
+(test-equal "many games many draws"
+ '((5 . (6 3 2))
+ (4 . (14 3 15))
+ (3 . (20 13 6))
+ (2 . (1 3 4))
+ (1 . (4 2 6)))
+ (games->at-least "
+Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
+"))
+
+(test-equal "no games results in no possible games"
+ '()
+ (filter-possible-games '() '(0 0 0)))
+
+(test-equal "one impossible game"
+ '()
+ (filter-possible-games '((1 . (99 99 99))) '(0 0 0)))
+
+(test-equal "one possible game"
+ '((1 . (0 0 0)))
+ (filter-possible-games '((1 . (0 0 0))) '(99 99 99)))
+
+(test-equal "one possible game borderline"
+ '((1 . (99 99 99)))
+ (filter-possible-games '((1 . (99 99 99))) '(99 99 99)))
+
+(test-equal "game crossed one"
+ '()
+ (filter-possible-games '((1 . (99 99 100))) '(99 99 99)))
+
+(test-equal "two possible zero impossible"
+ '((1 . (99 98 99))
+ (3 . (101 52 99)))
+ (filter-possible-games '((1 . (99 98 99))
+ (3 . (101 52 99))) '(101 99 99)))
+
+(test-equal "zero possible two impossible"
+ '()
+ (filter-possible-games '((1 . (99 98 99))
+ (3 . (101 52 99))) '(100 97 99)))
+
+(test-equal "one possible one impossible"
+ '((1 . (99 98 99)))
+ (filter-possible-games '((1 . (99 98 99))
+ (3 . (101 52 99))) '(100 99 99)))
+
+(test-equal "sum zero possible games"
+ '(0 . 0)
+ (cc "Game 0: 99 red" 0 0 0))
+
+(test-equal "sum one possible games"
+ '(1 . 0)
+ (cc "Game 1: -1 red" 0 0 0))
+
+(test-equal "sum realistic input"
+ '(8 . 2286)
+ (cc "
+Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
+" 12 13 14))
+
+
+(test-end "harness")