open Base open OUnit2 let sample = {|..##....... #...#...#.. .#....#..#. ..#.#...#.# .#...##..#. ..#.##..... .#.#.#....# .#........# #.##...#... #...##....# .#..#...#.#|} let test_parse_map map _ = let _ = Lib.parse_map map in () let test_slope map slope exp _ = let map = Lib.parse_map map in assert_equal (Lib.count_trees_in_slope map slope) exp let test_slopes map slopes exp _ = let map = Lib.parse_map map in let count = Lib.count_trees_in_slope map in let counts = List.map ~f:count slopes in let product = List.fold ~init:1 ~f:(fun x y -> x * y) counts in assert_equal product exp let () = run_test_tt_main ("day three" >::: [ "parse map" >:: test_parse_map sample; "test map" >:: test_slope sample (3, 1) 7; "test map" >:: test_slopes sample Lib.all_slopes 336; ])