diff --git a/tests/main.rs b/tests/main.rs index 7b8e118..1951b9f 100644 --- a/tests/main.rs +++ b/tests/main.rs @@ -1,27 +1,35 @@ use marble_machinations::marble_engine::{grid::Grid, Machine}; +fn no_input_test(steps: usize, output: &[u8], grid: &str) { + let mut engine = Machine::new_empty(); + engine.set_grid(Grid::from_ascii(grid)); + for _ in 0..(steps - 1) { + engine.step(); + } + assert_ne!(engine.output(), output, "output arrived early"); + engine.step(); + assert_eq!(engine.output(), output, "expected output"); +} + #[test] fn creating_marbles_cause_indirect_claim() { - let mut eng = Machine::new_empty(); - eng.set_grid(Grid::from_ascii( - " - I -o 2 - B- o - B | |-*-| - |-+o | | -*-| |* -B B- - - 1 3 - - - - - I I -", - )); - for _ in 0..9 { - eng.step(); - } - assert_eq!(eng.output(), [1, 2, 3]); + no_input_test(3, &[1], " o \n|-*-|\n| 1 |\n-B B-\n I\n"); +} + +#[test] +fn bug_overlapping_marble_creation_blocks_tile_forever() { + no_input_test( + 7, + &[1, 2, 3], + " I \no 3 o\n2I B+*\n B |1\n |-+\n*-| I\n\nI\n", + ); +} + +#[test] +fn bug_equal_comparator_order_lock() { + no_input_test( + 6, + &[1, 2, 3, 4], + "I \n I\n21\n o\nBB|*-++\n|=+ |=-\n |+ BB\n\n 34\n\n I\n I\n", + ); }