import day_3.{Bank, Digit} import gleam/list import gleeunit pub fn main() -> Nil { gleeunit.main() } pub fn file_parse_test() { assert day_3.file_to_banks("test/calibration.txt") == [ day_3.Bank( [9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1] |> list.map(day_3.Digit), ), day_3.Bank( [8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9] |> list.map(day_3.Digit), ), day_3.Bank( [2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 7, 8] |> list.map(day_3.Digit), ), day_3.Bank( [8, 1, 8, 1, 8, 1, 9, 1, 1, 1, 1, 2, 1, 1, 1] |> list.map(day_3.Digit), ), ] } pub fn split_single_element_bank_test() { assert day_3.split_bank_at_max(Bank([Digit(1)])) == #(Bank([Digit(1)]), Bank([])) } pub fn split_at_first_digit_test() { assert day_3.split_bank_at_max(Bank([Digit(3), Digit(2), Digit(1)])) == #(Bank([Digit(3)]), Bank([Digit(2), Digit(1)])) } // The degenerate case pub fn extract_max_from_accending_test() { assert day_3.split_bank_at_max(Bank([Digit(1), Digit(2), Digit(3)])) == #(Bank([Digit(1), Digit(2)]), Bank([Digit(3)])) } pub fn complex_degnerate_test() { assert day_3.split_bank_at_max(day_3.int_list_to_bank([1, 2, 1, 3])) == #(day_3.int_list_to_bank([1, 2]), day_3.int_list_to_bank([1, 3])) } pub fn bank_to_split_line_4_test() { assert day_3.int_list_to_bank([8, 1, 8, 1, 8, 1, 9, 1, 1, 1, 1, 2, 1, 1, 1]) |> day_3.split_bank_at_max == #( day_3.int_list_to_bank([8, 1, 8, 1, 8, 1, 9]), day_3.int_list_to_bank([1, 1, 1, 1, 2, 1, 1, 1]), ) } pub fn bank_to_max_line_1_test() { assert day_3.int_list_to_bank([9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1]) |> day_3.get_max_from_bank == 98 } pub fn bank_to_max_line_2_test() { assert day_3.int_list_to_bank([8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9]) |> day_3.get_max_from_bank == 89 } pub fn bank_to_max_line_3_test() { assert day_3.int_list_to_bank([2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 7, 8]) |> day_3.get_max_from_bank == 78 } pub fn bank_to_max_line_4_test() { assert day_3.int_list_to_bank([8, 1, 8, 1, 8, 1, 9, 1, 1, 1, 1, 2, 1, 1, 1]) |> day_3.get_max_from_bank == 92 } pub fn calibrate_test() { assert day_3.file_to_max_joltage("test/calibration.txt") == 357 }