|
|
||
Some Test CasesThe following test case is typical. Bamboo: 2, 2, 2, 3, 4, 5, 5, 5; dots: 2, 2, 2; green dragon, green dragon, green dragon. In this case, we will attempt to put the three 2 bamboo tiles into a set of four, pop that set, and put them into a set of three. The 3 will be put into a set of four, a set of three and then a straight with the 4 and 5. The next two fives will be put into a set of four, a set of three, a straight and a pair. The 2 dots tiles and the green dragon tiles will both be put into four sets and three sets. The final set stack will have a three set, a straight, a pair, and two three sets. def testHand1(): t1= [ SuitTile( 2, "Bamboo" ), SuitTile( 2, "Bamboo" ), SuitTile( 2, "Bamboo" ), SuitTile( 3, "Bamboo" ), SuitTile( 4, "Bamboo" ), SuitTile( 5, "Bamboo" ), SuitTile( 5, "Bamboo" ), SuitTile( 5, "Bamboo" ), SuitTile( 2, "Dot" ), SuitTile( 2, "Dot" ), SuitTile( 2, "Dot" ), HonorsTile( "Green" ), HonorsTile( "Green" ), HonorsTile( "Green" ), ] h1= Hand( *t1 ) print h1.mahjongg() The following test case is a little more difficult. Bamboo: 2, 2, 2, 2, 3, 4, 3 ×ばつ green dragon, 3 ×ばつ red dragon, 3 ×ばつ north wind. The initial run of four 2 bamboo tiles will be put into a set of four. The next 3 bamboo and 4 bamboo will be put into a four set, three set and straight. The first green dragon won't fit into the straight, causing us to pop the straight, attempt a pair, and pop this. We then pop the initial set of four two's and replace that with a set of three. The 2 bamboo and 3 bamboo will be checked against a four set and a three set before being put into a straight. Here's a challenging test case with two groups of tiles that require multiple retries. def testHand2(): t2= [ SuitTile( 2, "Bamboo" ), SuitTile( 2, "Bamboo" ), SuitTile( 2, "Bamboo" ), SuitTile( 3, "Bamboo" ), SuitTile( 4, "Bamboo" ), SuitTile( 5, "Bamboo" ), SuitTile( 5, "Bamboo" ), SuitTile( 5, "Bamboo" ), SuitTile( 2, "Dot" ), SuitTile( 2, "Dot" ), SuitTile( 2, "Dot" ), SuitTile( 2, "Dot" ), SuitTile( 3, "Dot" ), SuitTile( 4, "Dot" ), ] h2= Hand( *t2 ) print h2.mahjongg() Ideally, your overall unit test looks something like the following. import unittest class TestHand(unittest.TestCase): def testHand1( self ): body of testHand1 self.assert_( h1.mahjongg() ) self.assertEqual( str(h1.sets[0]), "ThreeSet['2B', '2B', '2B']" ) self.assertEqual( str(h1.sets[1]), "SequenceSet['3B', '4B', '5B']" ) self.assertEqual( str(h1.sets[2]), "PairSet['5B', '5B']" ) self.assertEqual( str(h1.sets[3]), "ThreeSet['2D', '2D', '2D']" ) self.assertEqual( str(h1.sets[4]), "ThreeSet['Green', 'Green', 'Green']" ) def testHand2( self ): body of testHand2 self.assert_( h2.mahjongg() ) check individual Sets if __name__ == "__main__": unittest.main() A set of nine interesting test cases can be built around the following set of tiles: ×ばつ1's, 2, 3, 4, 5, 6, 7, 8, and ×ばつ9's all of the same suit. Adding any number tile of the same suit to this set of 13 will create a winning hand. Develop a test function that iterates through the nine possible hands and prints the results. |
||