Files
k-mood/crates/domain/tests/entry/day_mood_test.rs
Gabriel Kaszewski 23d052278a
All checks were successful
CI / ci (push) Successful in 19m38s
changes
2026-08-26 20:58:14 +02:00

58 lines
1.5 KiB
Rust

use domain::entry::{DayMood, Mood};
#[test]
fn a_day_of_one_awful_and_one_rad_sits_in_the_middle() {
let day = DayMood::of(&[Mood::Awful, Mood::Rad]).unwrap();
assert!((day.value() - 3.0).abs() < f64::EPSILON);
assert_eq!(day.rounded(), Mood::Meh);
}
#[test]
fn a_day_with_no_entries_has_no_mood() {
assert!(DayMood::of(&[]).is_none());
}
#[test]
fn one_bad_day_among_four_middling_ones_still_shows() {
let mostly_meh = DayMood::of(&[Mood::Meh, Mood::Meh, Mood::Meh, Mood::Meh, Mood::Awful])
.unwrap()
.value();
let all_meh = DayMood::of(&[Mood::Meh, Mood::Meh, Mood::Meh, Mood::Meh, Mood::Meh])
.unwrap()
.value();
assert!(mostly_meh < all_meh);
}
#[test]
fn a_single_entry_is_the_whole_day() {
let day = DayMood::of(&[Mood::Bad]).unwrap();
assert!((day.value() - 2.0).abs() < f64::EPSILON);
assert_eq!(day.rounded(), Mood::Bad);
}
#[test]
fn a_day_exactly_between_two_moods_shows_the_better_one() {
let day = DayMood::of(&[Mood::Meh, Mood::Good]).unwrap();
assert!((day.value() - 3.5).abs() < f64::EPSILON);
assert_eq!(day.rounded(), Mood::Good);
}
#[test]
fn every_whole_mean_rounds_to_its_own_mood() {
let pairs = [
(Mood::Awful, Mood::Awful),
(Mood::Bad, Mood::Bad),
(Mood::Meh, Mood::Meh),
(Mood::Good, Mood::Good),
(Mood::Rad, Mood::Rad),
];
for (logged, expected) in pairs {
assert_eq!(DayMood::of(&[logged, logged]).unwrap().rounded(), expected);
}
}