Merge from home

PokerGame.java
PokerGameTest.java
This commit is contained in:
2015-04-30 14:47:26 +02:00
15 changed files with 514 additions and 24 deletions

View File

@@ -0,0 +1,22 @@
package session3;
public class Card {
private int value;
private String card;
public Card(String cardAsString) {
this.card = cardAsString;
this.value = "23456789TJQKA".indexOf(cardAsString.substring(0,1)) + 2;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return card;
}
}

View File

@@ -0,0 +1,31 @@
package session3;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class HighCardRule {
public static Player compare(Player player1, Player player2) {
// Hands to lists
List<Card> playerHand1 = player1.getPlayerHand();
List<Card> playerHand2 = player2.getPlayerHand();
PokerGameComparator comparator = new PokerGameComparator();
Collections.sort(playerHand1, comparator);
Collections.sort(playerHand2, comparator);
for (int i = 0; i < playerHand1.size(); i++) {
int p1Value = playerHand1.get(i).getValue();
int p2Value = playerHand2.get(i).getValue();
if (p1Value > p2Value) {
return player1;
}
if (p2Value > p1Value) {
return player2;
}
}
return null;
}
}

View File

@@ -0,0 +1,46 @@
package session3;
import java.util.Collections;
public class PairRule {
public static Player compare(Player left, Player right) {
// if (playerHasPair(left)) {
// return left;
// }
// if (playerHasPair(right)) {
// return right;
// }
int pairValueLeft = getValueOfPairForPlayer(left);
int pairValueRight = getValueOfPairForPlayer(right);
if (pairValueLeft > pairValueRight) {
return left;
}
if (pairValueRight > pairValueLeft) {
return right;
}
return null;
}
private static int getValueOfPairForPlayer(Player left) {
PokerGameComparator comparator = new PokerGameComparator();
Collections.sort(left.getPlayerHand(), comparator);
int cardValue=0;
for (Card card : left.getPlayerHand()) {
if (card.getValue() == cardValue){
return card.getValue();
}
else{
cardValue= card.getValue();
}
}
return 0;
}
}

View File

@@ -0,0 +1,28 @@
package session3;
import java.util.ArrayList;
import java.util.List;
public class Player {
private String name;
private ArrayList<Card> cards;
public Player(String name, String cards) {
this.name = name;
this.cards = new ArrayList<Card>();
String[] split = cards.split(" ");
for (String val : split) {
this.cards.add(new Card(val));
}
}
public String getPlayerName() {
return name;
}
public List<Card> getPlayerHand() {
return this.cards;
}
}

View File

@@ -1,14 +1,6 @@
/**
* PokerGame.java
*
* Course in Software Craftsmenship @ Högskolan Väst
* Poker game kata for testing TDD, Test Driven Development
*
* 2015-04-27
*/
package session3; package session3;
<<<<<<< HEAD
import java.util.Arrays; import java.util.Arrays;
/** /**
@@ -268,10 +260,23 @@ public class PokerGame {
// Find all values // Find all values
for (int i = 0; i < hand.length() - 1; i += 2) { for (int i = 0; i < hand.length() - 1; i += 2) {
temp += hand.charAt(i); temp += hand.charAt(i);
=======
public class PokerGame {
public Player calculateWinningPlayer(Player left, Player right) {
Player twoPairResult = TwoPairRule.compare(left, right);
if(twoPairResult != null){
return twoPairResult;
} }
colors = temp.toCharArray();
Arrays.sort(colors); Player pairResult = PairRule.compare(left, right);
return colors; if(pairResult != null){
return pairResult;
>>>>>>> origin/master
}
return HighCardRule.compare(left, right);
} }
} }

View File

@@ -0,0 +1,12 @@
package session3;
import java.util.Comparator;
public class PokerGameComparator implements Comparator<Card> {
@Override
public int compare(Card arg0, Card arg1) {
return arg1.getValue() - arg0.getValue();
}
}

View File

@@ -0,0 +1,67 @@
package session3;
import java.util.Collections;
public class TwoPairRule {
private static final int[] noPairs = { 0, 0 };
public static Player compare(Player left, Player right) {
int[] pairsLeft = getValuesForTwoPair(left);
int[] pairsRight = getValuesForTwoPair(right);
for (int i = 0; i < 2; i++) {
int pairValueLeft = pairsLeft[i];
int pairValueRight = pairsRight[i];
if (pairValueLeft > pairValueRight) {
return left;
}
if (pairValueRight > pairValueLeft) {
return right;
}
}
return null;
}
private static int[] getValuesForTwoPair(Player player) {
if (!playerHasTwoPair(player)) {
return noPairs;
}
PokerGameComparator comparator = new PokerGameComparator();
Collections.sort(player.getPlayerHand(), comparator);
int[] cardValues = new int[2];
int pairCount = 0;
for (Card card : player.getPlayerHand()) {
if (card.getValue() == cardValues[pairCount]) {
cardValues[pairCount++] = card.getValue();
} else {
cardValues[pairCount] = card.getValue();
}
}
return cardValues;
}
private static boolean playerHasTwoPair(Player player) {
PokerGameComparator comparator = new PokerGameComparator();
Collections.sort(player.getPlayerHand(), comparator);
int cardValue = 0;
int pairCount = 0;
for (Card card : player.getPlayerHand()) {
if (card.getValue() == cardValue) {
pairCount++;
} else {
cardValue = card.getValue();
}
}
if (pairCount == 2) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,24 @@
package session3;
import static org.junit.Assert.*;
import org.junit.Test;
public class CardTest {
@Test
public void give_me_a_card() {
Card card = new Card("4H");
assertEquals(4, card.getValue());
}
@Test
public void test_suited_values() throws Exception {
assertEquals(10, new Card("TD").getValue());
assertEquals(11, new Card("JD").getValue());
assertEquals(12, new Card("QD").getValue());
assertEquals(13, new Card("KD").getValue());
assertEquals(14, new Card("AD").getValue());
}
}

View File

@@ -0,0 +1,50 @@
package session3;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;
public class HighCardRuleTest {
@Test
public void check_High_Card_one_card_per_hand() {
Player player1 = new Player("Anna", "9H");
Player player2 = new Player("Kalle", "4H");
Player winner = HighCardRule.compare(player1, player2);
assertEquals("Anna", winner.getPlayerName());
}
@Test
public void same_cards_returns_tie() throws Exception {
Player player1 = new Player("1", "2H");
Player player2 = new Player("2", "2C");
Player winner = HighCardRule.compare(player1, player2);
assertNull(winner);
}
@Test
public void check_high_card_multiple_cards_per_hand() throws Exception {
Player player1 = new Player("Anna", "4H 4D");
Player player2 = new Player("Kalle", "4C 5C");
Player winner = HighCardRule.compare(player1, player2);
assertEquals("Kalle", winner.getPlayerName());
}
@Test
public void check_high_card_multiple_cards_per_hand_one_differs() throws Exception {
Player player1 = new Player("Anna", "3H 5D 6H 8D 9C");
Player player2 = new Player("Kalle", "4C 5C 6D 9D 8H");
Player winner = HighCardRule.compare(player1, player2);
assertEquals("Kalle", winner.getPlayerName());
}
}

View File

@@ -0,0 +1,40 @@
package session3;
import static org.junit.Assert.*;
import org.junit.Test;
public class PairRuleTest {
@Test
public void pair_wins_over_high_card() {
Player green = new Player("Green", "2S 3C 4D 7H AH");
Player white = new Player("White", "3S 3C 5D 6H KH");
Player winningPlayer = PairRule.compare(green, white);
assertEquals("White", winningPlayer.getPlayerName());
}
@Test
public void higher_pair_wins_over_lower_pair() throws Exception {
Player white = new Player("White", "2S 3C 7D 7H AH");
Player green = new Player("Green", "3S 3C 5D 6H KH");
Player winningPlayer = PairRule.compare(green, white);
assertEquals("White", winningPlayer.getPlayerName());
}
@Test
public void test_if_pair_is_tie() throws Exception {
Player white = new Player("White", "2S 3C 7D 7H AH");
Player green = new Player("Green", "7S 7C 5D 6H KH");
Player winningPlayer = PairRule.compare(green, white);
assertNull(winningPlayer);
}
}

View File

@@ -0,0 +1,52 @@
package session3;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Ignore;
import org.junit.Test;
public class PlayerTest {
@Test
public void getPlayerName() {
assertEquals("Christian", new Player("Christian", "5H").getPlayerName());
}
@Test
public void getPlayerHand() throws Exception {
List<Card> listCard = new ArrayList<Card>();
listCard.add(new Card("5H"));
Player player = new Player("bob", "5H");
List<Card> result = player.getPlayerHand();
assertEquals(listCard.get(0).getValue(), result.get(0).getValue());
}
@Test
public void constructor_handles_multiple_cards() throws Exception {
List<Card> listCard = new ArrayList<Card>();
listCard.add(new Card("5H"));
listCard.add(new Card("3H"));
Player player = new Player("bob", "5H 3H");
List<Card> result = player.getPlayerHand();
assertEquals(listCard.size(), result.size());
}
@Test
public void constructor_handles_multiple_cards_suit_cards() throws Exception {
List<Card> listCard = new ArrayList<Card>();
listCard.add(new Card("5H"));
listCard.add(new Card("3H"));
Player player = new Player("bob", "5H 3H");
List<Card> result = player.getPlayerHand();
assertEquals(listCard.size(), result.size());
}
}

View File

@@ -0,0 +1,28 @@
package session3;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.junit.Test;
public class PokerGameComparatorTest {
@Test
public void test_sort_by_value() {
List<Card> originalList = Arrays.asList(new Card("3H"), new Card("5H"), new Card("2H"));
PokerGameComparator comparator = new PokerGameComparator();
Collections.sort(originalList, comparator);
assertEquals(5, originalList.get(0).getValue());
assertEquals(3, originalList.get(1).getValue());
assertEquals(2, originalList.get(2).getValue());
}
}

View File

@@ -1,20 +1,12 @@
/**
* PokerGame.java
*
* Course in Software Craftsmenship @ Högskolan Väst
* Poker game kata for testing TDD, Test Driven Development
*
* 2015-04-27
*/
package session3; package session3;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.*;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
public class PokerGameTest { public class PokerGameTest {
<<<<<<< HEAD
PokerGame myGame = new PokerGame(); PokerGame myGame = new PokerGame();
@Test @Test
@@ -47,9 +39,18 @@ public class PokerGameTest {
@Test @Test
public void three_of_a_kind_gives_3() throws Exception { public void three_of_a_kind_gives_3() throws Exception {
String hand = "S8H8C8D3S4"; String hand = "S8H8C8D3S4";
=======
int result = myGame.getScore(hand); @Test
public void green_wins_with_highest_card() {
Player green = new Player("Green", "2S 3C 4D 7H AH");
Player white = new Player("White", "3S 4C 5D 6H KH");
PokerGame game = new PokerGame();
>>>>>>> origin/master
Player winningPlayer = game.calculateWinningPlayer(green, white);
<<<<<<< HEAD
assertEquals(3, result); assertEquals(3, result);
} }
@@ -61,9 +62,24 @@ public class PokerGameTest {
int result = myGame.getScore(hand); int result = myGame.getScore(hand);
assertEquals(4, result); assertEquals(4, result);
=======
assertEquals("Green", winningPlayer.getPlayerName());
} }
@Test @Test
public void one_pair_beats_highest_card() throws Exception {
Player green = new Player("Green", "2S 3C 4D 7H AH");
Player white = new Player("White", "3S 3C 5D 6H KH");
PokerGame game = new PokerGame();
Player winningPlayer = game.calculateWinningPlayer(green, white);
assertEquals("White", winningPlayer.getPlayerName());
>>>>>>> origin/master
}
@Test
<<<<<<< HEAD
@Ignore @Ignore
public void flush_gives_5() throws Exception { public void flush_gives_5() throws Exception {
String hand = "S2S6S7S8S9"; String hand = "S2S6S7S8S9";
@@ -111,5 +127,15 @@ public class PokerGameTest {
int result = myGame.getScore(hand); int result = myGame.getScore(hand);
assertEquals(9, result); assertEquals(9, result);
=======
public void two_pair_beats_one_pair() throws Exception {
Player green = new Player("Green", "6S 6C 4D 7H AH");
Player white = new Player("White", "3S 3C 5D 5H KH");
PokerGame game = new PokerGame();
Player winningPlayer = game.calculateWinningPlayer(green, white);
assertEquals("White", winningPlayer.getPlayerName());
>>>>>>> origin/master
} }
} }

View File

@@ -0,0 +1,39 @@
package session3;
import src.session3.Player;
import src.session3.TwoPairRule;
public class TwoPairRuleTest {
@Test
public void two_pair_wins_over_pair() {
Player green = new Player("Green", "6S 6C 4D 7H AH");
Player white = new Player("White", "3S 3C 5D 5H KH");
Player winningPlayer = TwoPairRule.compare(green, white);
assertEquals("White", winningPlayer.getPlayerName());
}
@Test
public void higher_two_pair_wins_over_lower_two_pair() throws Exception {
Player green = new Player("Green", "4S 4C 6D 6H AH");
Player white = new Player("White", "3S 3C 5D 5H KH");
Player winningPlayer = TwoPairRule.compare(white, green);
assertEquals("Green", winningPlayer.getPlayerName());
}
@Test
public void first_pair_tie_second_pair_highest_wins() throws Exception {
Player green = new Player("Green", "9S 9C 6D 6H AH");
Player white = new Player("White", "9H 9D 5D 5H KH");
Player winningPlayer = TwoPairRule.compare(white, green);
assertEquals("Green", winningPlayer.getPlayerName());
}
}

View File

@@ -68,6 +68,26 @@ Inom WhiteBox-test har man möjligheten att kunna titta in i lådan för att se
## 3. Test Double ## 3. Test Double
Inför detta pas gjorde vi som hemarbete den tredje katan, Poker Kata Inför detta pas gjorde vi som hemarbete den tredje katan, Poker Kata
Nu skall den göras på riktigt.
### Klassdiagram
#### Kort
- Färg
- Värde
#### Kortlek
- Kort
- Blanda
#### Spelare
- 5 Kort
#### Spel
- Kortlek
- Regler
- Spelare
- Jämför händer
## 4. Clean Code + ATDD ## 4. Clean Code + ATDD