87 lines
2.3 KiB
Gleam
87 lines
2.3 KiB
Gleam
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
|
|
}
|