import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;

public class GameDieTest
{
    // you can have data fields in a JUnit test class!

    private GameDie die;
    private GameDie decaDie;
    
    /**
        The '@Before' method is run before each '@Test' method
    */
    @Before
    public void setUp() throws Exception
    {
        die = new GameDie();
	decaDie = new GameDie(10);
    }

    @Test
    public void getNumSidesTest()
    {
	assertEquals("newly created default die has 6 sides",
		     6, die.getNumSides());
	assertEquals("newly-created 10-sided die has 10 sides",
		     10, decaDie.getNumSides());
    }

    @Test
    public void getCurrTopTest()
    {
	assertEquals("newly-created die should have top of 1",
		     1, die.getCurrTop());
	assertEquals("newly-created 10-sided die should have top of 1",
		     1, decaDie.getCurrTop());

	int valRolled = die.roll();

	assertEquals("rolled die's top should change to value rolled",
		     valRolled, die.getCurrTop());
    }

    @Test
    public void rollTest()
    {
	int dieRoll;
        int decaRoll;
	
	for (int i=0; i<1000; i++)
	{
	    dieRoll = die.roll();
            decaRoll = decaDie.roll();
	    
            assertTrue("6-sided die can roll 1-6, and here it is " + dieRoll,
		       (dieRoll >= 1) && (dieRoll <= 6));

	    assertTrue("10-sided die can roll 1-10, and here it is "
		       + decaRoll,
		       (decaRoll >= 1) && (decaRoll <= 10));
	}
    }
}