From 66013667d8dc0e70f1998e75642329282a50a866 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Wed, 20 Sep 2023 23:21:38 +0100 Subject: [PATCH] gamelog events unit tests --- src/gamelog/events.rs | 7 ++++--- tests/gamelog_test.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ tests/mod.rs | 1 + 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 tests/gamelog_test.rs diff --git a/src/gamelog/events.rs b/src/gamelog/events.rs index 69b353c..bef5ff6 100644 --- a/src/gamelog/events.rs +++ b/src/gamelog/events.rs @@ -5,7 +5,7 @@ use crate::data::names::*; lazy_static! { /// A count of each event that has happened over the run. i.e. "turns", "descended", "ascended" - static ref EVENT_COUNTER: Mutex> = Mutex::new(HashMap::new()); + pub static ref EVENT_COUNTER: Mutex> = Mutex::new(HashMap::new()); // A record of events that happened on a given turn. i.e. "Advanced to level 2". pub static ref EVENTS: Mutex>> = Mutex::new(HashMap::new()); // A record of floors visited, and monsters killed. Used to determine if an event is significant. @@ -41,8 +41,9 @@ pub fn restore_events(events: HashMap>) { } /// Wipes all events - for starting a new game. pub fn clear_events() { - EVENT_COUNTER.lock().unwrap().clear(); - EVENTS.lock().unwrap().clear(); + let (mut events, mut event_counts) = (EVENTS.lock().unwrap(), EVENT_COUNTER.lock().unwrap()); + events.clear(); + event_counts.clear(); } #[allow(unused_mut)] diff --git a/tests/gamelog_test.rs b/tests/gamelog_test.rs new file mode 100644 index 0000000..0e18d44 --- /dev/null +++ b/tests/gamelog_test.rs @@ -0,0 +1,43 @@ +// tests/gamelog_test.rs +use rust_rl::gamelog::*; +use rust_rl::data::events::*; +use lazy_static::lazy_static; +use std::sync::Mutex; + +// To ensure this test module uses a single thread. +lazy_static! { + static ref SINGLE_THREAD: Mutex<()> = Mutex::new(()); +} + +#[test] +fn recording_event() { + let _lock = SINGLE_THREAD.lock(); + clear_events(); + record_event(EVENT::Turn(1)); + record_event(EVENT::Turn(0)); + record_event(EVENT::Turn(-1)); + record_event(EVENT::Killed("mob".to_string())); +} + +#[test] +fn getting_event_count() { + let _lock = SINGLE_THREAD.lock(); + clear_events(); + record_event(EVENT::Turn(1)); + assert_eq!(get_event_count(EVENT::COUNT_TURN), 1); + record_event(EVENT::Turn(3)); + assert_eq!(get_event_count(EVENT::COUNT_TURN), 4); + clear_events(); + assert_eq!(get_event_count(EVENT::COUNT_TURN), 0); +} + +#[test] +fn cloning_events() { + let _lock = SINGLE_THREAD.lock(); + clear_events(); + record_event(EVENT::Level(1)); + record_event(EVENT::Turn(5)); + record_event(EVENT::Identified("item".to_string())); + let cloned_events = clone_events(); + assert_eq!(EVENTS.lock().unwrap().clone(), cloned_events); +} diff --git a/tests/mod.rs b/tests/mod.rs index 53cef07..7575647 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -1,2 +1,3 @@ // tests/mod.rs mod map_test; +mod gamelog_test;