2022 rust add test cases

This commit is contained in:
Maciej Jur 2022-12-04 19:36:57 +01:00
parent 63a1ed45c2
commit 4bd02db8cd
7 changed files with 151 additions and 3 deletions

View file

@ -3,5 +3,5 @@ mod solutions;
fn main() { fn main() {
solutions::day04::run(); solutions::day05::run();
} }

View file

@ -10,11 +10,12 @@ pub fn run() -> () {
println!("Part 2: {}", solve2(&data)); println!("Part 2: {}", solve2(&data));
} }
fn solve1(data: &Vec<Vec<i32>>) -> i32 { fn solve1(data: &Vec<Vec<i32>>) -> i32 {
data.iter().map(|xs| xs.iter().sum::<i32>()).max().unwrap() data.iter().map(|xs| xs.iter().sum::<i32>()).max().unwrap()
} }
#[inline] #[inline(always)]
fn insert(arr: &mut [i32; 3], to_insert: i32) { fn insert(arr: &mut [i32; 3], to_insert: i32) {
if to_insert > arr[2] { if to_insert > arr[2] {
for idx in (0..3).rev() { for idx in (0..3).rev() {
@ -40,7 +41,6 @@ fn solve2(data: &Vec<Vec<i32>>) -> i32 {
three.iter().sum() three.iter().sum()
} }
fn parse_data(data: Vec<String>) -> Vec<Vec<i32>> { fn parse_data(data: Vec<String>) -> Vec<Vec<i32>> {
data.iter() data.iter()
.fold(vec![vec![]], | mut acc, next| { .fold(vec![vec![]], | mut acc, next| {
@ -54,3 +54,31 @@ fn parse_data(data: Vec<String>) -> Vec<Vec<i32>> {
acc acc
}) })
} }
#[cfg(test)]
mod tests {
use super::*;
fn data() -> Vec<&'static str> {
vec![
"1000", "2000", "3000", "",
"4000", "",
"5000", "6000", "",
"7000", "8000", "9000", "",
"10000",
]
}
#[test]
fn part1() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(24000, solve1(&data));
}
#[test]
fn part2() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(45000, solve2(&data));
}
}

View file

@ -121,3 +121,25 @@ fn parse_data(data: Vec<String>) -> Vec<(char, char)> {
}) })
.collect() .collect()
} }
#[cfg(test)]
mod tests {
use super::*;
fn data() -> Vec<&'static str> {
vec!["A Y", "B X", "C Z"]
}
#[test]
fn part1() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(15, solve1(&data));
}
#[test]
fn part2() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(12, solve2(&data));
}
}

View file

@ -58,3 +58,32 @@ fn parse_data(data: Vec<String>) -> Vec<(HashSet<char>, HashSet<char>)> {
}) })
.collect() .collect()
} }
#[cfg(test)]
mod tests {
use super::*;
fn data() -> Vec<&'static str> {
vec![
"vJrwpWtwJgWrhcsFMMfFFhFp",
"jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL",
"PmmdzqPrVvPwwTWBwg",
"wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn",
"ttgJtRGJQctTZtZT",
"CrZsJsPPZsGzwwsLwLmpwMDw"
]
}
#[test]
fn part1() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(157, solve1(&data));
}
#[test]
fn part2() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(70, solve2(&data));
}
}

View file

@ -47,3 +47,25 @@ fn parse_data(data: Vec<String>) -> Vec<((i32, i32), (i32, i32))> {
}) })
.collect() .collect()
} }
#[cfg(test)]
mod tests {
use super::*;
fn data() -> Vec<&'static str> {
vec!["2-4,6-8", "2-3,4-5", "5-7,7-9", "2-8,3-7", "6-6,4-6", "2-6,4-8"]
}
#[test]
fn part1() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(2, solve1(&data));
}
#[test]
fn part2() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(4, solve2(&data));
}
}

View file

@ -0,0 +1,46 @@
use crate::utils;
pub fn run() -> () {
let data = parse_data(utils::read_lines(utils::Source::Scratch));
println!("Day 5");
println!("Part 1: {}", solve1(&data));
println!("Part 2: {}", solve2(&data));
}
fn solve1(data: &()) -> i32 {
1
}
fn solve2(data: &()) -> i32 {
2
}
fn parse_data(data: Vec<String>) -> () {
()
}
#[cfg(test)]
mod tests {
use super::*;
fn data() -> Vec<&'static str> {
vec![""]
}
#[test]
fn part1() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(1, solve1(&data));
}
#[test]
fn part2() {
let data = parse_data(data().into_iter().map(String::from).collect());
assert_eq!(2, solve2(&data));
}
}

View file

@ -2,3 +2,4 @@ pub mod day01;
pub mod day02; pub mod day02;
pub mod day03; pub mod day03;
pub mod day04; pub mod day04;
pub mod day05;