Add oving3
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
package oving3;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class NimTest {
|
||||
|
||||
private Nim nim;
|
||||
|
||||
private static boolean checkValidMove(Nim game, int pieces, boolean legal) {
|
||||
return (legal == game.isValidMove(pieces, 0) && (legal == game.isValidMove(pieces, 1))
|
||||
&& (legal == game.isValidMove(pieces, 2)));
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
public void setUp() {
|
||||
nim = new Nim(5);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Constructor")
|
||||
public void testConstructor() {
|
||||
assertEquals(5, nim.getPile(0));
|
||||
assertEquals(5, nim.getPile(1));
|
||||
assertEquals(5, nim.getPile(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Remove pieces")
|
||||
public void testRemovePieces() {
|
||||
nim.removePieces(3, 0);
|
||||
nim.removePieces(2, 1);
|
||||
nim.removePieces(1, 2);
|
||||
assertEquals(2, nim.getPile(0));
|
||||
assertEquals(3, nim.getPile(1));
|
||||
assertEquals(4, nim.getPile(2));
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
nim.removePieces(-1, 0);
|
||||
}, "Cannot remove negative number of pieces");
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
nim.removePieces(0, 0);
|
||||
}, "Cannot remove too few pieces");
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
nim.removePieces(6, 0);
|
||||
}, "Cannot remove too many pieces");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Game over")
|
||||
public void testGameOver() {
|
||||
assertFalse(nim.isGameOver());
|
||||
|
||||
nim.removePieces(5, 0);
|
||||
assertEquals(0, nim.getPile(0));
|
||||
assertTrue(nim.isGameOver());
|
||||
|
||||
assertThrows(IllegalStateException.class, () -> {
|
||||
nim.removePieces(5, 0);
|
||||
}, "Cannot remove pieces when game is over");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Valid moves")
|
||||
public void testIsValidMove() {
|
||||
assertTrue(NimTest.checkValidMove(nim, 2, true));
|
||||
assertTrue(NimTest.checkValidMove(nim, -2, false));
|
||||
assertTrue(NimTest.checkValidMove(nim, 0, false));
|
||||
assertTrue(NimTest.checkValidMove(nim, 6, false));
|
||||
|
||||
nim.removePieces(5, 0);
|
||||
assertTrue(NimTest.checkValidMove(nim, 2, false));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user