/**
* 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 java.util.Arrays;
import java.util.List;
import org.jskat.AbstractJSkatTest;
import org.jskat.util.Card;
import org.junit.Ignore;
/**
* Test class for {@link AIPlayerNN}
*/
@Ignore
public class AIPlayerNNTest extends AbstractJSkatTest {
List<Card> nullOrder = Arrays.asList(Card.D7, Card.D8, Card.D9, Card.DT,
Card.DJ, Card.DQ, Card.DK, Card.DA, Card.H7, Card.H8, Card.H9,
Card.HT, Card.HJ, Card.HQ, Card.HK, Card.HA, Card.S7, Card.S8,
Card.S9, Card.ST, Card.SJ, Card.SQ, Card.SK, Card.SA, Card.C7,
Card.C8, Card.C9, Card.CT, Card.CJ, Card.CQ, Card.CK, Card.CA);
List<Card> grandOrder = Arrays.asList(Card.CJ, Card.SJ, Card.HJ, Card.DJ,
Card.D7, Card.D8, Card.D9, Card.DQ, Card.DK, Card.DT, Card.DA,
Card.H7, Card.H8, Card.H9, Card.HQ, Card.HK, Card.HT, Card.HA,
Card.S7, Card.S8, Card.S9, Card.SQ, Card.SK, Card.ST, Card.SA,
Card.C7, Card.C8, Card.C9, Card.CQ, Card.CK, Card.CT, Card.CA);
List<Card> clubsOrder = Arrays.asList(Card.CJ, Card.SJ, Card.HJ, Card.DJ,
Card.C7, Card.C8, Card.C9, Card.CQ, Card.CK, Card.CT, Card.CA,
Card.D7, Card.D8, Card.D9, Card.DQ, Card.DK, Card.DT, Card.DA,
Card.H7, Card.H8, Card.H9, Card.HQ, Card.HK, Card.HT, Card.HA,
Card.S7, Card.S8, Card.S9, Card.SQ, Card.SK, Card.ST, Card.SA);
List<Card> spadesOrder = Arrays.asList(Card.CJ, Card.SJ, Card.HJ, Card.DJ,
Card.S7, Card.S8, Card.S9, Card.SQ, Card.SK, Card.ST, Card.SA,
Card.D7, Card.D8, Card.D9, Card.DQ, Card.DK, Card.DT, Card.DA,
Card.H7, Card.H8, Card.H9, Card.HQ, Card.HK, Card.HT, Card.HA,
Card.C7, Card.C8, Card.C9, Card.CQ, Card.CK, Card.CT, Card.CA);
List<Card> heartsOrder = Arrays.asList(Card.CJ, Card.SJ, Card.HJ, Card.DJ,
Card.H7, Card.H8, Card.H9, Card.HQ, Card.HK, Card.HT, Card.HA,
Card.D7, Card.D8, Card.D9, Card.DQ, Card.DK, Card.DT, Card.DA,
Card.S7, Card.S8, Card.S9, Card.SQ, Card.SK, Card.ST, Card.SA,
Card.C7, Card.C8, Card.C9, Card.CQ, Card.CK, Card.CT, Card.CA);
List<Card> diamondsOrder = Arrays.asList(Card.CJ, Card.SJ, Card.HJ,
Card.DJ, Card.D7, Card.D8, Card.D9, Card.DQ, Card.DK, Card.DT,
Card.DA, Card.H7, Card.H8, Card.H9, Card.HQ, Card.HK, Card.HT,
Card.HA, Card.S7, Card.S8, Card.S9, Card.SQ, Card.SK, Card.ST,
Card.SA, Card.C7, Card.C8, Card.C9, Card.CQ, Card.CK, Card.CT,
Card.CA);
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForNullGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.NULL, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForGrandGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.GRAND, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForRamschGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.RAMSCH, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForClubsGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.CLUBS, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForSpadesGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.SPADES, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForHeartsGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.HEARTS, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the calculation of the net input index
// */
// @Test
// public void testGetNetInputIndexForDiamondssGame() {
//
// for (Card card : Card.values()) {
//
// int index = AIPlayerNN.getNetInputIndex(GameType.DIAMONDS, card);
// assertEquals(
// "Wrong index for " + card + ": ", nullOrder.indexOf(card), index); //$NON-NLS-1$//$NON-NLS-2$
// }
// }
//
// /**
// * Tests the setting of the input values for a declarer net
// */
// @Test
// public void testSetDeclarerKnowCards_DeclarerNeurons() {
//
// GameAnnouncementFactory factory = GameAnnouncement.getFactory();
// factory.setGameType(GameType.GRAND);
// factory.setDiscardedCards(new CardList(null, null));
// GameAnnouncement announcement = factory.getAnnouncement();
//
// AIPlayerNN player = new AIPlayerNN();
// player.preparateForNewGame();
// player.newGame(Player.FOREHAND);
// player.startGame();
//
// player.startGame(Player.FOREHAND, announcement);
// player.newTrick(new Trick(0, Player.FOREHAND));
//
// double[] inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[363], 0.0);
//
// player.startGame(Player.MIDDLEHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[0], 0.0);
//
// player.startGame(Player.REARHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[726], 0.0);
//
// player.newGame(Player.MIDDLEHAND);
//
// player.startGame(Player.FOREHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[726], 0.0);
//
// player.startGame(Player.MIDDLEHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[363], 0.0);
//
// player.startGame(Player.REARHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[0], 0.0);
//
// player.newGame(Player.REARHAND);
//
// player.startGame(Player.FOREHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[0], 0.0);
//
// player.startGame(Player.MIDDLEHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[726], 0.0);
//
// player.startGame(Player.REARHAND, announcement);
// inputs = player.getNetInputs(Card.CJ);
// assertEquals(AIPlayerNN.HAS_CARD, inputs[363], 0.0);
// }
//
// /**
// * Tests the setting of the input values for a declarer net
// */
// @Test
// @Ignore
// public void testSetDeclarerKnowCards_PlayedCards() {
//
// GameAnnouncementFactory factory = GameAnnouncement.getFactory();
// factory.setGameType(GameType.GRAND);
// factory.setDiscardedCards(new CardList(null, null));
// GameAnnouncement announcement = factory.getAnnouncement();
//
// AIPlayerNN player = new AIPlayerNN();
// player.preparateForNewGame();
// player.newGame(Player.REARHAND);
// player.startGame();
//
// player.startGame(Player.FOREHAND, announcement);
// player.newTrick(new Trick(0, Player.FOREHAND));
// player.cardPlayed(Player.FOREHAND, Card.SJ);
// player.cardPlayed(Player.MIDDLEHAND, Card.HJ);
//
// double[] inputs = player.getNetInputs(Card.CJ);
//
// // game declarer for player FOREHAND
// assertEquals(AIPlayerNN.ACTIVE, inputs[0], 0.0);
// // trick fore hand for player FOREHAND
// assertEquals(AIPlayerNN.ACTIVE, inputs[1], 0.0);
// // Club Jack for player FOREHAND
// assertEquals(0.0, inputs[2], 0.0);
// // Spade Jack for player FOREHAND
// assertEquals(AIPlayerNN.PLAYED_CARD, inputs[3], 0.0);
// // Heart Jack for player FOREHAND
// assertEquals(0.0, inputs[4], 0.0);
// // Diamond Jack for player FOREHAND
// assertEquals(0.0, inputs[5], 0.0);
//
// // game declarer for player MIDDLEHAND
// assertEquals(0.0, inputs[726], 0.0);
// // trick fore hand for player MIDDLEHAND
// assertEquals(0.0, inputs[1 + 726], 0.0);
// // Club Jack for player MIDDLEHAND
// assertEquals(0.0, inputs[2 + 726], 0.0);
// // Spade Jack for player MIDDLEHAND
// assertEquals(0.0, inputs[3 + 726], 0.0);
// // Heart Jack for player MIDDLEHAND
// assertEquals(AIPlayerNN.PLAYED_CARD, inputs[4 + 726], 0.0);
// // Diamond Jack for player MIDDLEHAND
// assertEquals(0.0, inputs[5 + 726], 0.0);
//
// // game declarer for player REARHAND
// assertEquals(0.0, inputs[363], 0.0);
// // trick fore hand for player MIDDLEHAND
// assertEquals(0.0, inputs[1 + 363], 0.0);
// // Club Jack for player MIDDLEHAND
// assertEquals(AIPlayerNN.PLAYED_CARD_IN_TRICK, inputs[2 + 363], 0.0);
// // Spade Jack for player MIDDLEHAND
// assertEquals(0.0, inputs[3 + 363], 0.0);
// // Heart Jack for player MIDDLEHAND
// assertEquals(0.0, inputs[4 + 363], 0.0);
// // Diamond Jack for player MIDDLEHAND
// assertEquals(0.0, inputs[5 + 363], 0.0);
// }
//
// /**
// * Tests the setting of the input values for a declarer net
// */
// @Test
// @Ignore
// public void testSetDeclarerKnowCards_PlayedCardsTwoTricks() {
//
// GameAnnouncementFactory factory = GameAnnouncement.getFactory();
// factory.setGameType(GameType.GRAND);
// factory.setDiscardedCards(new CardList(null, null));
// GameAnnouncement announcement = factory.getAnnouncement();
//
// AIPlayerNN player = new AIPlayerNN();
// player.preparateForNewGame();
// player.newGame(Player.REARHAND);
// player.startGame();
//
// player.startGame(Player.FOREHAND, announcement);
// player.newTrick(new Trick(0, Player.FOREHAND));
// player.cardPlayed(Player.FOREHAND, Card.SJ);
// player.cardPlayed(Player.MIDDLEHAND, Card.HJ);
// player.cardPlayed(Player.REARHAND, Card.CJ);
// Trick completeTrick = new Trick(0, Player.FOREHAND);
// completeTrick.addCard(Card.SJ);
// completeTrick.addCard(Card.HJ);
// completeTrick.addCard(Card.CJ);
// completeTrick.setTrickWinner(Player.REARHAND);
// player.showTrick(completeTrick);
// player.newTrick(new Trick(1, Player.REARHAND));
//
// double[] inputs = player.getNetInputs(Card.DJ);
//
// // game declarer for player FOREHAND
// assertEquals(AIPlayerNN.ACTIVE, inputs[0], 0.0);
// // trick fore hand for player FOREHAND trick 1
// assertEquals(AIPlayerNN.ACTIVE, inputs[1], 0.0);
// // Club Jack for player FOREHAND trick 1
// assertEquals(0.0, inputs[2], 0.0);
// // Spade Jack for player FOREHAND trick 1
// assertEquals(AIPlayerNN.PLAYED_CARD, inputs[3], 0.0);
// // Heart Jack for player FOREHAND trick 1
// assertEquals(0.0, inputs[4], 0.0);
// // Diamond Jack for player FOREHAND trick 1
// assertEquals(0.0, inputs[5], 0.0);
// // trick fore hand for player FOREHAND trick 2
// assertEquals(0.0, inputs[34], 0.0);
// // Club Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[35], 0.0);
// // Spade Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[36], 0.0);
// // Heart Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[37], 0.0);
// // Diamond Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[38], 0.0);
//
// // game declarer for player MIDDLEHAND
// assertEquals(0.0, inputs[726], 0.0);
// // trick fore hand for player MIDDLEHAND trick 1
// assertEquals(0.0, inputs[1 + 726], 0.0);
// // Club Jack for player MIDDLEHAND trick 1
// assertEquals(0.0, inputs[2 + 726], 0.0);
// // Spade Jack for player MIDDLEHAND trick 1
// assertEquals(0.0, inputs[3 + 726], 0.0);
// // Heart Jack for player MIDDLEHAND trick 1
// assertEquals(AIPlayerNN.PLAYED_CARD, inputs[4 + 726], 0.0);
// // Diamond Jack for player MIDDLEHAND trick 1
// assertEquals(0.0, inputs[5 + 726], 0.0);
// // trick fore hand for player FOREHAND trick 2
// assertEquals(0.0, inputs[34 + 726], 0.0);
// // Club Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[35 + 726], 0.0);
// // Spade Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[36 + 726], 0.0);
// // Heart Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[37 + 726], 0.0);
// // Diamond Jack for player FOREHAND trick 2
// assertEquals(0.0, inputs[38 + 726], 0.0);
//
// // game declarer for player REARHAND
// assertEquals(0.0, inputs[363], 0.0);
// // trick fore hand for player REARHAND trick 1
// assertEquals(0.0, inputs[1 + 363], 0.0);
// // Club Jack for player REARHAND trick 1
// assertEquals(AIPlayerNN.PLAYED_CARD, inputs[2 + 363], 0.0);
// // Spade Jack for player REARHAND trick 1
// assertEquals(0.0, inputs[3 + 363], 0.0);
// // Heart Jack for player REARHAND trick 1
// assertEquals(0.0, inputs[4 + 363], 0.0);
// // Diamond Jack for player REARHAND trick 1
// assertEquals(0.0, inputs[5 + 363], 0.0);
// // trick fore hand for player REARHAND trick 2
// assertEquals(AIPlayerNN.HAS_CARD, inputs[34 + 363], 0.0);
// // Club Jack for player REARHAND trick 2
// assertEquals(0.0, inputs[35 + 363], 0.0);
// // Spade Jack for player REARHAND trick 2
// assertEquals(0.0, inputs[36 + 363], 0.0);
// // Heart Jack for player REARHAND trick 2
// assertEquals(0.0, inputs[37 + 363], 0.0);
// // Diamond Jack for player REARHAND trick 2
// assertEquals(AIPlayerNN.PLAYED_CARD_IN_TRICK, inputs[38 + 363], 0.0);
// }
}