On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com

How To Guides
Virtualization
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions

## Some Test Cases

The 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: 3×1's, 2, 3, 4, 5, 6, 7, 8, and 3×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.

 Published under the terms of the Open Publication License Design by Interspire