48 lines
1.8 KiB
Rust
48 lines
1.8 KiB
Rust
// file: crates/engines/engine-v1-common/unit_tests/game_loop.rs
|
|
// version: 2
|
|
|
|
#[derive(Default)]
|
|
struct CountingGame {
|
|
updates: u64,
|
|
last_frame: std::option::Option<crate::EngineFrame>,
|
|
}
|
|
|
|
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);
|
|
});
|
|
}
|