Add oving3

This commit is contained in:
Andreas Omholt Olsen
2026-01-22 22:01:08 +01:00
parent 0586d24f49
commit 26163d3029
12 changed files with 684 additions and 0 deletions

View File

@@ -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));
}
}

View File

@@ -0,0 +1,123 @@
package oving3;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class RPNCalcTest {
private RPNCalc calc;
@BeforeEach
public void setUp() {
calc = new RPNCalc();
}
@Test
@DisplayName("Push")
public void testPush() {
calc.push(1.0);
assertEquals(1.0, calc.peek(0));
calc.push(2.0);
assertEquals(2.0, calc.peek(0));
calc.push(3.0);
assertEquals(3.0, calc.peek(0));
}
@Test
@DisplayName("Pop")
public void testPop() {
calc.push(1.0);
calc.push(2.0);
calc.push(3.0);
assertEquals(3.0, calc.peek(0));
assertEquals(3.0, calc.pop());
assertEquals(2.0, calc.peek(0));
assertEquals(2.0, calc.pop());
assertEquals(1.0, calc.peek(0));
calc.push(2.0);
assertEquals(2.0, calc.peek(0));
assertEquals(2.0, calc.pop());
assertEquals(1.0, calc.peek(0));
assertEquals(1.0, calc.pop());
assertEquals(0, calc.getSize());
}
@Test
@DisplayName("Peek")
public void testPeek() {
calc.push(0.0);
calc.push(1.0);
calc.push(2.0);
assertEquals(2.0, calc.peek(0));
assertEquals(1.0, calc.peek(1));
assertEquals(0.0, calc.peek(2));
}
@Test
@DisplayName("Empty stack")
public void testEmptyStack() {
assertEquals(Double.NaN, calc.peek(3));
assertEquals(Double.NaN, calc.peek(-1));
}
@Test
@DisplayName("Size")
public void testGetSize() {
assertEquals(0, calc.getSize());
calc.push(1.0);
assertEquals(1, calc.getSize());
calc.push(2.0);
assertEquals(2, calc.getSize());
}
@Test
@DisplayName("Addition")
public void testAddOperation() {
calc.push(3.0);
calc.push(4.0);
calc.performOperation('+');
assertEquals(1, calc.getSize());
assertEquals(7.0, calc.peek(0));
}
@Test
@DisplayName("Subtraction")
public void testSubOperation() {
calc.push(7.0);
calc.push(2.0);
calc.performOperation('-');
assertEquals(1, calc.getSize());
assertEquals(5.0, calc.peek(0));
}
@Test
@DisplayName("Multiplication")
public void testMultOperation() {
calc.push(5.0);
calc.push(2.0);
calc.performOperation('*');
assertEquals(1, calc.getSize());
assertEquals(10.0, calc.peek(0));
}
@Test
@DisplayName("Division")
public void testDivOperation() {
calc.push(10.0);
calc.push(4.0);
calc.performOperation('/');
assertEquals(1, calc.getSize());
assertEquals(2.5, calc.peek(0));
}
}

View File

@@ -0,0 +1,42 @@
package oving3.card;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class CardDeckTest {
private static void checkDeck(CardDeck deck, List<String> expected) {
assertEquals(expected.size(), deck.getCardCount(), "Wrong number of cards in deck");
for (int i = 0; i < expected.size(); i++) {
String expectedCard = expected.get(i);
Card actual = deck.getCard(i);
String cardString = String.valueOf(actual.getSuit()) + actual.getFace();
assertEquals(expectedCard, cardString);
}
}
@Test
@DisplayName("Constructor")
public void testConstructor() {
assertThrows(IllegalArgumentException.class, () -> new CardDeck(-1));
assertThrows(IllegalArgumentException.class, () -> new CardDeck(14));
CardDeckTest.checkDeck(new CardDeck(0), Collections.emptyList());
CardDeckTest.checkDeck(new CardDeck(2),
List.of("S1", "S2", "H1", "H2", "D1", "D2", "C1", "C2"));
}
@Test
@DisplayName("#shufflePerfectly()")
public void testShufflePerfectly() {
CardDeck cardDeck = new CardDeck(2);
cardDeck.shufflePerfectly();
CardDeckTest.checkDeck(cardDeck, List.of("S1", "D1", "S2", "D2", "H1", "C1", "H2", "C2"));
}
}

View File

@@ -0,0 +1,46 @@
package oving3.card;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class CardTest {
private static boolean checkState(Card card, char suit, int face) {
return card.getSuit() == suit && card.getFace() == face;
}
@Test
@DisplayName("Constructor")
public void testConstructor() {
assertTrue(CardTest.checkState(new Card('S', 1), 'S', 1));
assertTrue(CardTest.checkState(new Card('S', 13), 'S', 13));
assertTrue(CardTest.checkState(new Card('H', 1), 'H', 1));
assertTrue(CardTest.checkState(new Card('H', 13), 'H', 13));
assertTrue(CardTest.checkState(new Card('D', 1), 'D', 1));
assertTrue(CardTest.checkState(new Card('D', 13), 'D', 13));
assertTrue(CardTest.checkState(new Card('C', 1), 'C', 1));
assertTrue(CardTest.checkState(new Card('C', 13), 'C', 13));
assertThrows(IllegalArgumentException.class, () -> {
new Card('X', 1);
});
assertThrows(IllegalArgumentException.class, () -> {
new Card('S', 0);
});
assertThrows(IllegalArgumentException.class, () -> {
new Card('C', 14);
});
}
@Test
@DisplayName("#toString()")
public void testToString() {
assertEquals("S1", new Card('S', 1).toString());
assertEquals("H13", new Card('H', 13).toString());
}
}