diff options
| author | Mike White <botahamec@outlook.com> | 2021-09-06 08:03:54 -0400 |
|---|---|---|
| committer | Mike White <botahamec@outlook.com> | 2021-09-06 08:03:54 -0400 |
| commit | 21db0e1056d961b83ccf6d7e2feb06eded25174e (patch) | |
| tree | 1e3021ba1a99c171c17dedf1546f591a40ce24f8 /model/src/moves.rs | |
| parent | 744050c4b4747ac4645480e2f4a935a027b8350f (diff) | |
Unit tests
Diffstat (limited to 'model/src/moves.rs')
| -rw-r--r-- | model/src/moves.rs | 109 |
1 files changed, 108 insertions, 1 deletions
diff --git a/model/src/moves.rs b/model/src/moves.rs index 12a26db..720e11a 100644 --- a/model/src/moves.rs +++ b/model/src/moves.rs @@ -30,7 +30,6 @@ impl Move { /// * `direction` - The direction the piece should move in /// * `jump` - Whether or not the piece should jump pub const fn new(start: usize, direction: MoveDirection, jump: bool) -> Self { - // TODO what are the semantics of usize as u32? Self { start: start as u32, direction, @@ -38,10 +37,21 @@ impl Move { } } + /// The stating position of the move pub const fn start(self) -> u32 { self.start } + /// The direction the move goes in + pub const fn direction(self) -> MoveDirection { + self.direction + } + + /// Returns `true` if the move is a jump + pub const fn is_jump(self) -> bool { + self.jump + } + /// Calculates the value of the end position of the move pub const fn end_position(self) -> usize { let dest = match self.jump { @@ -145,5 +155,102 @@ mod tests { assert_eq!(move_test.direction, direction); assert_eq!(move_test.jump, jump); } + + #[test] + fn start(start in 0usize..32, jump in proptest::bool::ANY) { + let direction = MoveDirection::ForwardLeft; + let move_test = Move::new(start, direction, jump); + assert_eq!(move_test.start(), start as u32); + } + + #[test] + fn direction(start in 0usize..32, jump in proptest::bool::ANY) { + let direction = MoveDirection::ForwardLeft; + let move_test = Move::new(start, direction, jump); + assert_eq!(move_test.direction(), direction); + + let direction = MoveDirection::ForwardRight; + let move_test = Move::new(start, direction, jump); + assert_eq!(move_test.direction(), direction); + + let direction = MoveDirection::BackwardLeft; + let move_test = Move::new(start, direction, jump); + assert_eq!(move_test.direction(), direction); + + let direction = MoveDirection::BackwardRight; + let move_test = Move::new(start, direction, jump); + assert_eq!(move_test.direction(), direction); + } + + #[test] + fn is_jump(start in 0usize..32, jump in proptest::bool::ANY) { + let direction = MoveDirection::ForwardLeft; + let move_test = Move::new(start, direction, jump); + assert_eq!(move_test.is_jump(), jump); + } + } + + #[test] + fn end_position_forward_left_slide() { + let direction = MoveDirection::ForwardLeft; + let start = 8; + let move_test = Move::new(start, direction, false); + assert_eq!(move_test.end_position(), 15); + } + + #[test] + fn end_position_forward_right_slide() { + let direction = MoveDirection::ForwardRight; + let start = 26; + let move_test = Move::new(start, direction, false); + assert_eq!(move_test.end_position(), 27); + } + + #[test] + fn end_position_backward_right_slide() { + let direction = MoveDirection::BackwardRight; + let start = 2; + let move_test = Move::new(start, direction, false); + assert_eq!(move_test.end_position(), 27); + } + + #[test] + fn end_position_backward_left_slide() { + let direction = MoveDirection::BackwardLeft; + let start = 16; + let move_test = Move::new(start, direction, false); + assert_eq!(move_test.end_position(), 15); + } + + #[test] + fn end_position_forward_left_jump() { + let direction = MoveDirection::ForwardLeft; + let start = 8; + let move_test = Move::new(start, direction, true); + assert_eq!(move_test.end_position(), 22); + } + + #[test] + fn end_position_forward_right_jump() { + let direction = MoveDirection::ForwardRight; + let start = 26; + let move_test = Move::new(start, direction, true); + assert_eq!(move_test.end_position(), 28); + } + + #[test] + fn end_position_backward_right_jump() { + let direction = MoveDirection::BackwardRight; + let start = 2; + let move_test = Move::new(start, direction, true); + assert_eq!(move_test.end_position(), 20); + } + + #[test] + fn end_position_backward_left_jump() { + let direction = MoveDirection::BackwardLeft; + let start = 16; + let move_test = Move::new(start, direction, true); + assert_eq!(move_test.end_position(), 14); } } |
