diff options
author | bd <bdunahu@operationnull.com> | 2024-06-26 18:43:31 -0600 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2024-06-26 18:43:31 -0600 |
commit | 03ad9b7eadb02b05e4eb5074d0fdaadf8dc4ee00 (patch) | |
tree | f5852fc851af17e6612711bd7d87db924ddc2661 /cube-conundrum/cc-test.scm | |
parent | fd93afc17c30e480e437a28c6d495b521c0e7fb3 (diff) |
AoC 2023.2 p1+2
Diffstat (limited to 'cube-conundrum/cc-test.scm')
-rw-r--r-- | cube-conundrum/cc-test.scm | 187 |
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") |