/**
* Copyright (C) 2017 Jan Schäfer (jansch@users.sourceforge.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jskat.ai.nn;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.jskat.AbstractJSkatTest;
import org.jskat.util.Card;
import org.jskat.util.CardDeck;
import org.jskat.util.CardList;
import org.jskat.util.Player;
import org.junit.Test;
/**
* Tests for CardDeckSimulator
*/
public class CardDeckSimulatorTest extends AbstractJSkatTest {
/**
* Checks simulation of unknown cards<br />
* all cards are unknown
*/
@Test
public void simulateUnknownCards_AllCards() {
CardList cards = new CardList();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.FOREHAND, cards);
assertEquals(32, simCards.size());
}
/**
* Checks simulation of unknown cards<br />
* Fore hand cards are known
*/
@Test
public void simulateUnknownCards_ForeHandKnown() {
CardList cards = getKnownHandCards();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.FOREHAND, cards);
assertEquals(32, simCards.size());
assertTrue(cards.contains(simCards.get(0)));
assertTrue(cards.contains(simCards.get(1)));
assertTrue(cards.contains(simCards.get(2)));
assertTrue(cards.contains(simCards.get(11)));
assertTrue(cards.contains(simCards.get(12)));
assertTrue(cards.contains(simCards.get(13)));
assertTrue(cards.contains(simCards.get(14)));
assertTrue(cards.contains(simCards.get(23)));
assertTrue(cards.contains(simCards.get(24)));
assertTrue(cards.contains(simCards.get(25)));
}
/**
* Checks simulation of unknown cards<br />
* Fore hand cards and skat are known
*/
@Test
public void simulateUnknownCards_ForeHandAndSkatKnown() {
CardList cards = getKnownHandCards();
CardList skat = getKnownSkatCards();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.FOREHAND, cards, skat);
assertEquals(32, simCards.size());
assertTrue(cards.contains(simCards.get(0)));
assertTrue(cards.contains(simCards.get(1)));
assertTrue(cards.contains(simCards.get(2)));
assertTrue(skat.contains(simCards.get(9)));
assertTrue(skat.contains(simCards.get(10)));
assertTrue(cards.contains(simCards.get(11)));
assertTrue(cards.contains(simCards.get(12)));
assertTrue(cards.contains(simCards.get(13)));
assertTrue(cards.contains(simCards.get(14)));
assertTrue(cards.contains(simCards.get(23)));
assertTrue(cards.contains(simCards.get(24)));
assertTrue(cards.contains(simCards.get(25)));
}
/**
* Checks simulation of unknown cards<br />
* Middle hand cards are known
*/
@Test
public void simulateUnknownCards_MiddleHandKnown() {
CardList cards = getKnownHandCards();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.MIDDLEHAND, cards);
assertEquals(32, simCards.size());
assertTrue(cards.contains(simCards.get(3)));
assertTrue(cards.contains(simCards.get(4)));
assertTrue(cards.contains(simCards.get(5)));
assertTrue(cards.contains(simCards.get(15)));
assertTrue(cards.contains(simCards.get(16)));
assertTrue(cards.contains(simCards.get(17)));
assertTrue(cards.contains(simCards.get(18)));
assertTrue(cards.contains(simCards.get(26)));
assertTrue(cards.contains(simCards.get(27)));
assertTrue(cards.contains(simCards.get(28)));
}
/**
* Checks simulation of unknown cards<br />
* Middle hand cards and skat are known
*/
@Test
public void simulateUnknownCards_MiddleHandAndSkatKnown() {
CardList cards = getKnownHandCards();
CardList skat = getKnownSkatCards();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.MIDDLEHAND, cards, skat);
assertEquals(32, simCards.size());
assertTrue(cards.contains(simCards.get(3)));
assertTrue(cards.contains(simCards.get(4)));
assertTrue(cards.contains(simCards.get(5)));
assertTrue(skat.contains(simCards.get(9)));
assertTrue(skat.contains(simCards.get(10)));
assertTrue(cards.contains(simCards.get(15)));
assertTrue(cards.contains(simCards.get(16)));
assertTrue(cards.contains(simCards.get(17)));
assertTrue(cards.contains(simCards.get(18)));
assertTrue(cards.contains(simCards.get(26)));
assertTrue(cards.contains(simCards.get(27)));
assertTrue(cards.contains(simCards.get(28)));
}
/**
* Checks simulation of unknown cards<br />
* Rearhand cards are known
*/
@Test
public void simulateUnknownCards_RearHandKnown() {
CardList cards = getKnownHandCards();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.REARHAND, cards);
assertEquals(32, simCards.size());
assertTrue(cards.contains(simCards.get(6)));
assertTrue(cards.contains(simCards.get(7)));
assertTrue(cards.contains(simCards.get(8)));
assertTrue(cards.contains(simCards.get(19)));
assertTrue(cards.contains(simCards.get(20)));
assertTrue(cards.contains(simCards.get(21)));
assertTrue(cards.contains(simCards.get(22)));
assertTrue(cards.contains(simCards.get(29)));
assertTrue(cards.contains(simCards.get(30)));
assertTrue(cards.contains(simCards.get(31)));
}
/**
* Checks simulation of unknown cards<br />
* Rearhand cards and skat are known
*/
@Test
public void simulateUnknownCards_RearHandAndSkatKnown() {
CardList cards = getKnownHandCards();
CardList skat = getKnownSkatCards();
CardDeck simCards = CardDeckSimulator.simulateUnknownCards(
Player.REARHAND, cards, skat);
assertEquals(32, simCards.size());
assertTrue(cards.contains(simCards.get(6)));
assertTrue(cards.contains(simCards.get(7)));
assertTrue(cards.contains(simCards.get(8)));
assertTrue(skat.contains(simCards.get(9)));
assertTrue(skat.contains(simCards.get(10)));
assertTrue(cards.contains(simCards.get(19)));
assertTrue(cards.contains(simCards.get(20)));
assertTrue(cards.contains(simCards.get(21)));
assertTrue(cards.contains(simCards.get(22)));
assertTrue(cards.contains(simCards.get(29)));
assertTrue(cards.contains(simCards.get(30)));
assertTrue(cards.contains(simCards.get(31)));
}
private CardList getKnownHandCards() {
return new CardList(Card.CJ, Card.SJ, Card.HJ, Card.SJ, Card.CA,
Card.CT, Card.CK, Card.CQ, Card.C9, Card.C8);
}
private CardList getKnownSkatCards() {
return new CardList(Card.C7, Card.S7);
}
}