From 31a75867fa152df96be42467abc88f0168bbf830 Mon Sep 17 00:00:00 2001 From: ryan Date: Mon, 9 Oct 2023 14:10:51 -0700 Subject: [PATCH] add expect tests --- src/day1.ml | 19 ++++++++++++------- src/day10.ml | 19 ++++++++++++++----- src/day11.ml | 22 +++++++++++++--------- src/day2.ml | 19 ++++++++++++------- src/day3.ml | 19 ++++++++++++------- src/day4.ml | 16 ++++++++++------ src/day5.ml | 12 ++++++++---- src/day6.ml | 12 ++++++++---- src/day7.ml | 12 ++++++++---- src/day8.ml | 12 ++++++++---- src/day9.ml | 12 ++++++++---- src/dune | 7 ++++++- 12 files changed, 119 insertions(+), 62 deletions(-) diff --git a/src/day1.ml b/src/day1.ml index b462240..e6978a2 100644 --- a/src/day1.ml +++ b/src/day1.ml @@ -1,4 +1,5 @@ -let part1 lines = +let part1 () = + let lines = Utils.lines_of_input 1 in let rec most_calories most current lines = match lines with | [] -> most @@ -10,7 +11,8 @@ let part1 lines = most_calories 0 0 lines ;; -let part2 lines = +let part2 () = + let lines = Utils.lines_of_input 1 in let accum_calories elves calories = match elves, calories with | elves, "" -> 0 :: elves @@ -23,9 +25,12 @@ let part2 lines = | _ -> failwith "wtf" ;; -let print () = - let lines = Utils.lines_of_input 1 in - Printf.( - printf "Day 1.1: %d\n" @@ part1 lines; - printf "Day 1.2: %d\n" @@ part2 lines) +let%expect_test "Day 1.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 75622 |}] +;; + +let%expect_test "Day 1.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 213159 |}] ;; diff --git a/src/day10.ml b/src/day10.ml index 678ea4b..ab9c9dd 100644 --- a/src/day10.ml +++ b/src/day10.ml @@ -40,9 +40,18 @@ let part2 () = |> List.iter Fun.(print_string %> print_newline) ;; -let print () = - Printf.( - printf "Day 10.1: %d\n" @@ part1 (); - printf "Day 10.2:\n"; - part2 ()) +let%expect_test "Day 10.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 14760 |}] +;; + +let%expect_test "Day 10.2" = + part2 (); + [%expect {| + #### #### ## #### ### # # ### ##### + # # # # # # # # # # # # # + ### ### # ### # # # # # # ### # + # # # ## # ### # # ### # + # # # # # # # # # # # # + #### # ### #### # # ## # # #### |}] ;; diff --git a/src/day11.ml b/src/day11.ml index 4dbab71..f27db90 100644 --- a/src/day11.ml +++ b/src/day11.ml @@ -44,7 +44,7 @@ let parse_monkeys () = let throw item monkey = monkey.items <- List.append [ item ] monkey.items -let round monkies manageable = +let round monkies ~manageable = let divisor = Array.fold_left (fun acc monkey -> acc * monkey.test_num) 1 monkies in let destress score = if manageable then score / 3 else Int.(score mod divisor) in monkies @@ -58,10 +58,10 @@ let round monkies manageable = monkey.items <- []) ;; -let solve rounds manageable = +let solve rounds ~manageable = let monkies = parse_monkeys () in for _ = 1 to rounds do - round monkies manageable + round monkies ~manageable done; monkies |> Array.to_list @@ -73,11 +73,15 @@ let solve rounds manageable = |> Option.get_exn_or "aoc goofed up the input" ;; -let part1 () = solve 20 true -let part2 () = solve 10_000 false +let part1 () = solve 20 ~manageable:true +let part2 () = solve 10_000 ~manageable:false -let print () = - Printf.( - printf "Day 11.1: %d\n" @@ part1 (); - printf "Day 11.2: %d\n" @@ part2 ()) +let%expect_test "Day 11.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 56350 |}] +;; + +let%expect_test "Day 11.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 13954061248 |}] ;; diff --git a/src/day2.ml b/src/day2.ml index 768cae7..fd71073 100644 --- a/src/day2.ml +++ b/src/day2.ml @@ -52,7 +52,8 @@ let match_outcome = function | _, _ -> Lose ;; -let part1 lines = +let part1 () = + let lines = Utils.lines_of_input 2 in let parse_line line = match Re.Pcre.(split ~rex:(regexp {|\s+|}) line) with | them :: me :: _ -> parse_move them, parse_move me @@ -66,7 +67,8 @@ let part1 lines = lines ;; -let part2 lines = +let part2 () = + let lines = Utils.lines_of_input 2 in let parse_line = function%pcre | {|(?\w)\s*(?\w)|} -> parse_move them, parse_outcome outcome @@ -86,9 +88,12 @@ let part2 lines = lines ;; -let print () = - let lines = Utils.lines_of_input 2 in - Printf.( - printf "Day 2.1: %d\n" @@ part1 lines; - printf "Day 2.2: %d\n" @@ part2 lines) +let%expect_test "Day 2.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 11841 |}] +;; + +let%expect_test "Day 2.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 13022 |}] ;; diff --git a/src/day3.ml b/src/day3.ml index 7b68b8d..ade41ac 100644 --- a/src/day3.ml +++ b/src/day3.ml @@ -10,7 +10,8 @@ let priority char = | _ -> failwith @@ Printf.sprintf "'%c' is not a valid item" char ;; -let part1 lines = +let part1 () = + let lines = Utils.lines_of_input 3 in List.fold_left (fun acc line -> let half_len = String.length line / 2 in @@ -30,7 +31,8 @@ let part1 lines = shout out https://doc.sherlocode.com/ for helping me find Containers and its List.chunks and List.reduce functions *) -let part2 lines = +let part2 () = + let lines = Utils.lines_of_input 3 in let groups = List.chunks 3 (List.map set_of_string lines) in List.fold_left (fun acc group -> @@ -44,9 +46,12 @@ let part2 lines = groups ;; -let print () = - let lines = Utils.lines_of_input 3 in - Printf.( - printf "Day 3.1: %d\n" @@ part1 lines; - printf "Day 3.2: %d\n" @@ part2 lines) +let%expect_test "Day 3.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 7446 |}] +;; + +let%expect_test "Day 3.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 2646 |}] ;; diff --git a/src/day4.ml b/src/day4.ml index dc200eb..941414c 100644 --- a/src/day4.ml +++ b/src/day4.ml @@ -19,22 +19,26 @@ let count_overlaps is_overlapping = 0 ;; -let part1 = +let part1 () = count_overlaps (fun pairs -> match pairs with | (l1, r1), (l2, r2) when (l1 <= l2 && r1 >= r2) || (l2 <= l1 && r2 >= r1) -> true | _ -> false) ;; -let part2 = +let part2 () = count_overlaps (fun pairs -> match pairs with | (l1, r1), (l2, r2) when r1 < l2 || r2 < l1 -> false | _ -> true) ;; -let print () = - Printf.( - printf "Day 4.1: %d\n" part1; - printf "Day 4.2: %d\n" part2) +let%expect_test "Day 4.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 547 |}] +;; + +let%expect_test "Day 4.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 843 |}] ;; diff --git a/src/day5.ml b/src/day5.ml index e0ea2d4..7fe33d0 100644 --- a/src/day5.ml +++ b/src/day5.ml @@ -73,8 +73,12 @@ let solve crane_move = let part1 () = solve crane_move1 let part2 () = solve crane_move -let print () = - Printf.( - printf "Day 5.1: %s\n" @@ part1 (); - printf "Day 5.2: %s\n" @@ part2 ()) +let%expect_test "Day 5.1" = + Printf.printf "%s" @@ part1 (); + [%expect {| PSNRGBTFT |}] +;; + +let%expect_test "Day 5.2" = + Printf.printf "%s" @@ part2 (); + [%expect {| BNTZFPMMW |}] ;; diff --git a/src/day6.ml b/src/day6.ml index 9fa8ffd..4cfe9fc 100644 --- a/src/day6.ml +++ b/src/day6.ml @@ -24,8 +24,12 @@ let find_start window = let part1 () = find_start 4 let part2 () = find_start 14 -let print () = - Printf.( - printf "Day 6.1: %d\n" @@ part1 (); - printf "Day 6.2: %d\n" @@ part2 ()) +let%expect_test "Day 6.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 1833 |}] +;; + +let%expect_test "Day 6.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 3425 |}] ;; diff --git a/src/day7.ml b/src/day7.ml index 0e819cc..bcabcc3 100644 --- a/src/day7.ml +++ b/src/day7.ml @@ -101,8 +101,12 @@ let part2 () = | None -> failwith "not possible!!" ;; -let print () = - Printf.( - printf "Day 7.1: %d\n" @@ part1 (); - printf "Day 7.2: %d\n" @@ part2 ()) +let%expect_test "Day 7.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 1453349 |}] +;; + +let%expect_test "Day 7.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 2948823 |}] ;; diff --git a/src/day8.ml b/src/day8.ml index 5583f15..47e4a05 100644 --- a/src/day8.ml +++ b/src/day8.ml @@ -44,8 +44,12 @@ let part2 () = !best_score ;; -let print () = - Printf.( - printf "Day 8.1: %d\n" @@ part1 (); - printf "Day 8.2: %d\n" @@ part2 ()) +let%expect_test "Day 8.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 1803 |}] +;; + +let%expect_test "Day 8.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 268912 |}] ;; diff --git a/src/day9.ml b/src/day9.ml index f8e83da..6761447 100644 --- a/src/day9.ml +++ b/src/day9.ml @@ -61,8 +61,12 @@ let solve length = let part1 () = solve 2 let part2 () = solve 10 -let print () = - Printf.( - printf "Day 9.1: %d\n" @@ part1 (); - printf "Day 9.2: %d\n" @@ part2 ()) +let%expect_test "Day 9.1" = + Printf.printf "%d" @@ part1 (); + [%expect {| 6030 |}] +;; + +let%expect_test "Day 9.2" = + Printf.printf "%d" @@ part2 (); + [%expect {| 2545 |}] ;; diff --git a/src/dune b/src/dune index 35778f6..bdd799d 100644 --- a/src/dune +++ b/src/dune @@ -1,7 +1,12 @@ (library (name aoc) (libraries re containers dune-site) - (preprocess (pps ppx_regexp ppx_deriving.show))) + (inline_tests) + (preprocess (pps + ppx_regexp + ppx_deriving.show + ppx_expect + ppx_inline_test))) (env (dev