package edu.marlboro.cs.prisoner; /** *

Tests for various other class methods.

*

Usage:

*
 *    $ javac *.java
 *    $ java edu.marlboro.cs.prisoner.Tests
 * 
* * @author Jim Mahoney * @version $Id: Tests.java 12775 2007-04-17 15:23:12Z mahoney $ */ public class Tests { private static boolean showDiagnostics = false; private static TrivialTestEngine tester = new TrivialTestEngine(); /** * Run all the tests. */ public static void main(String[] args){ // Game class tests tester.ok(Game.getPayoff(Game.COOPERATE, Game.COOPERATE)==Game.R, "Game.getPayoff reward"); tester.ok(Game.getPayoff(Game.COOPERATE, Game.DEFECT)==Game.S, "Game.getPayoff sucker"); tester.ok(Game.getPayoff(Game.DEFECT, Game.COOPERATE)==Game.T, "Game.getPayoff temptation"); tester.ok(Game.getPayoff(Game.DEFECT, Game.DEFECT)==Game.P, "Game.getPayoff punishment"); // generic Player class tests int id1 = Player.getUniqueId(); int id2 = Player.getUniqueId(); tester.ok(id1 != id2, "Player.getUniqueId()"); Player p = new Player("defector"); tester.ok(p.getName().equals("defector"), "Player.getName()"); tester.ok(p.getNextMove()==Game.DEFECT, "Player.getNextMove() for default defect guy"); Player coop = new Player("coop", Game.COOPERATE); tester.ok(coop.getNextMove()==Game.COOPERATE, "Player.getNextMove() for cooperative guy"); printDiagnostic("RandomPlayer state", p.getInternalState()); // Random player tests double r = 0.75; RandomPlayer rp = new RandomPlayer(Double.toString(r), r); printDiagnostic("random player state", rp.getInternalState()); double prob = measureCooperateProbability(rp); printDiagnostic("measured prob.", prob); tester.ok( Math.abs(r-prob)/prob<0.05, "RandomPlayer.getMove() within 5% of expected"); // Game.play() tests Player playerA = new Player("A", Game.DEFECT); Player playerB = new Player("B", Game.COOPERATE); tester.ok(playerA.getScore()==0 && playerA.getScore()==0, "initial player score is zero"); Game.play(playerA, playerB); tester.ok(playerA.getScore()==Game.T && playerB.getScore()==Game.S, "players defect/cooperate get T,S payoffs"); printline(tester.getReport()); } /** * Return measured probability that p.getNextMove() cooperates. */ public static double measureCooperateProbability(Player p){ final int SAMPLE_SIZE = 1000; int cooperateCount = 0; for (int i=0; i