// file: crates/engines/engine-v1-common/unit_tests/game_loop.rs // version: 2 #[derive(Default)] struct CountingGame { updates: u64, last_frame: std::option::Option, } impl crate::EngineGame for CountingGame { fn update(&mut self, frame: crate::EngineFrame, _input: crate::InputState) { self.updates = self.updates.saturating_add(1); self.last_frame = std::option::Option::Some(frame); return; } } #[test] fn fixed_step_runner_advances_index_and_elapsed_time() { game_logging_lib::with_test_tracing("fixed_step_runner_advances_index_and_elapsed_time", || { let mut game = CountingGame::default(); let mut runner = crate::FixedStepRunner::new(std::time::Duration::from_millis(16)); runner.tick(&mut game, crate::InputState::none()); runner.tick(&mut game, crate::InputState::none()); assert_eq!(game.updates, 2); assert_eq!(runner.next_frame_index(), 2); assert_eq!(runner.elapsed(), std::time::Duration::from_millis(32)); assert_eq!(game.last_frame.map(crate::EngineFrame::index), std::option::Option::Some(1)); }); } #[test] fn default_quit_policy_exits() { game_logging_lib::with_test_tracing("default_quit_policy_exits", || { let mut game = CountingGame::default(); let request = crate::QuitRequest::new(crate::QuitSource::Escape); assert_eq!(crate::EngineGame::quit_requested(&mut game, request), crate::QuitDecision::Exit); }); } #[test] fn quit_request_preserves_its_source() { game_logging_lib::with_test_tracing("quit_request_preserves_its_source", || { let request = crate::QuitRequest::new(crate::QuitSource::PlatformBack); assert_eq!(request.source(), crate::QuitSource::PlatformBack); }); }