def testBoardEightLow(self): for board in [ "AC 2C 3C 4C 5C", "AC AH 3C 4C 9C", "AC 2C 8C TC KC" ]: self.assertEqual(Board.fromString(board).eightLowPossible(), True, "%s not True" % board) for board in [ "AC AH 8C 9D TH", "AC AH 2D TC JH", "8C 9H TD JC QH", "AC 2C 9C TC JD" ]: self.assertEqual(Board.fromString(board).eightLowPossible(), False, "%s not False" % board)
def testOmahaNoLow(self): """Test Omaha low hand ranking of hand without low with EightLowRanker.""" ranker = EightLowRanker() hand = Omaha.Hand.fromString("QC AH TC 9C") board = Board.fromString("2H JH 4D 6H 3H") hand.setBoard(board) rank = ranker.rankHand(hand) self.assertIsNone(rank) hand = Omaha.Hand.fromString("QC AH TC 8C") board = Board.fromString("2H JH KD JS 3H") hand.setBoard(board) rank = ranker.rankHand(hand) self.assertIsNone(rank)
def testHiLoGame(self): """Test OmahaHiLoGame.""" game = Omaha.HiLoGame() game.setBoard(Board.fromString("5C 2S 4D")) game.addHand(Omaha.Hand.fromString("AC 2C")) game.addHand(Omaha.Hand.fromString("AH KH")) game.simulateGames(numGames=10)
def testBoardCombinations(self): """Test combinations with board.""" hand = HoldEm.Hand.fromString("AD 2D") board = Board.fromString("3D 4D 5D") hand.setBoard(board) count = 0 for combs in hand.combinations(2): count += 1 self.assertEquals(len(combs), 2) self.assertEquals(count, 10) count = 0 for combs in hand.combinations(5): count += 1 self.assertEquals(len(combs), 5) self.assertEquals(count, 1) board.addCardFromString("6D") count = 0 for combs in hand.combinations(5): count += 1 self.assertEquals(len(combs), 5) self.assertEquals(count, 6) board.addCardFromString("7D") count = 0 for combs in hand.combinations(5): count += 1 self.assertEquals(len(combs), 5) self.assertEquals(count, 21)
def testGame(self): """Test HoleEmGame.""" game = HoldEm.Game() game.setBoard(Board.fromString("5C 2S 4D")) game.addHand(HoldEm.Hand.fromString("AC 2C")) game.addHand(HoldEm.Hand.fromString("AH KH")) game.simulateGames(numGames=10)
def testCombinations(self): """Testing Omaha combinations.""" hand = Omaha.Hand.fromString("AC 2C 3C 4C"); board = Board.fromString("5C 6C 7C 8C 9C"); hand.setBoard(board) self.assert_iterator(hand.combinations(2), count=6, assert_item_function=lambda i: len(i) == 2) self.assert_iterator(hand.hands(), count=60, assert_item_function=lambda i: len(i) == 5)
def testOmaha(self): """Test basic Omaha hand ranking.""" hand = Omaha.Hand.fromString("7S QD 2D TD") board = Board.fromString("AS AD 4H TH 8D") hand.setBoard(board) rank = self.ranker.rankHand(hand) self.assertEqual(rank.getType(), PokerRank.TWO_PAIR, "rank = %s" % rank) self.assertEqual(rank.getPrimaryCardRank(), Rank.ACE, "primaryCard = %s" % rank.getPrimaryCardRank()) self.assertEqual(rank.getSecondaryCardRank(), Rank.TEN, "secondaryCard = %s" % rank.getSecondaryCardRank())
def testOmahaLow2(self): """Test Omaha low hand ranking.""" hand = Omaha.Hand.fromString("QC AH TC 8C") board = Board.fromString("2H JH 4D 6H 3H") hand.setBoard(board) rank = self.ranker.rankHand(hand) self.assertEqual(rank.getType(), PokerRank.HIGH_CARD, "rank = %s" % rank) self.assertEqual(rank.getPrimaryCardRank(), Rank.EIGHT, "primaryCard = %s kickers = %s" % (rank.getPrimaryCardRank(), rank.kickersAsString()))
def testOmahaLow3(self): """Test Omaha low hand ranking with EightLowRanker.""" ranker = EightLowRanker() hand = Omaha.Hand.fromString("QC AH TC 5C") board = Board.fromString("2H JH 4D 6H KH") hand.setBoard(board) rank = ranker.rankHand(hand) self.assertIsNotNone(rank) self.assertEqual(rank.getType(), PokerRank.HIGH_CARD, "rank = %s" % rank) self.assertEqual(rank.getPrimaryCardRank(), Rank.SIX, "primaryCard = %s kickers = %s" % (rank.getPrimaryCardRank(), rank.kickersAsString()))
def test_combinations_of_eight_or_lower(self): """Test combinations_of_eight_or_lower() method on hand with board""" # Hand doesn't have two low cards, can't make low hand = Omaha.Hand.fromString("AD 9D JS QS") board = Board.fromString("3D 4D 5D") hand.setBoard(board) self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=0) # Board doesn't have three low cards, can't make low hand = Omaha.Hand.fromString("AD 9D 7D QS") board = Board.fromString("3D KD 5D") hand.setBoard(board) self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=0) # Three low cards in hand, 3 on board == 3 possible lows hand = Omaha.Hand.fromString("AD 9D 7D 8S") board = Board.fromString("3D 4D 5D") hand.setBoard(board) self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=3, assert_item_function=lambda i: len(i)==5) # Two low cards in hand, 3 on board == 1 possible low hand = Omaha.Hand.fromString("AD 9D 7D QS") board = Board.fromString("3D 4D 5D") hand.setBoard(board) self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=1, assert_item_function=lambda i: len(i)==5) # Add a low card to the board for 2 in hand, 4 on board == 4 combos board.addCardFromString("6D") self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=4, assert_item_function=lambda i: len(i)==5) # Add a high card to board, should have no change board.addCardFromString("TD") self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=4, assert_item_function=lambda i: len(i)==5)
def testBoard(self): """Verify ranking with board.""" board = Board.fromString("5C 2S 4D") hand = HoldEm.Hand.fromString("AC 2C") hand.setBoard(board) rank = self.ranker.rankHand(hand) self.assertEqual(rank.getType(), PokerRank.PAIR, "rankType = %d" % rank.getType()) board.addCardFromString("AD") rank = self.ranker.rankHand(hand) self.assertEqual(rank.getType(), PokerRank.TWO_PAIR, "rank = %d" % rank.getType()) board.addCardFromString("3H") rank = self.ranker.rankHand(hand) self.assertEqual(rank.getType(), PokerRank.STRAIGHT, "rank = %d" % rank.getType())
def testCombinations(self): """Testing Omaha combinations.""" hand = Omaha.Hand.fromString("AC 2C 3C 4C"); board = Board.fromString("5C 6C 7C 8C 9C"); hand.setBoard(board) count = 0 for combs in hand.combinations(2): count += 1 self.assertEquals(len(combs), 2, "combs = %s (len = %d)" % (combs, len(combs))) self.assertEquals(count, 6) count = 0 for combs in hand.hands(): count += 1 self.assertEquals(len(combs), 5, "combs = %s (len = %d)" % (combs, len(combs))) self.assertEquals(count, 60)
def testBoardCombinations(self): """Test combinations with board.""" hand = HoldEm.Hand.fromString("AD 2D") board = Board.fromString("3D 4D 5D") hand.setBoard(board) self.assert_iterator(hand.combinations(2), count=10, assert_item_function=lambda i: len(i) == 2) self.assert_iterator(hand.combinations(5), count=1, assert_item_function=lambda i: len(i) == 5) board.addCardFromString("6D") self.assert_iterator(hand.combinations(5), count=6, assert_item_function=lambda i: len(i) == 5) board.addCardFromString("7D") self.assert_iterator(hand.combinations(5), count=21, assert_item_function=lambda i: len(i) == 5)
def test_combinations_of_eight_or_lower_with_board(self): """Test combinations_of_eight_or_lower() method on hand with board""" hand = HoldEm.Hand.fromString("AD 2D") board = Board.fromString("3D 4D 5D") hand.setBoard(board) self.assert_iterator(hand.combinations_of_eight_or_lower(2), count=10, assert_item_function=lambda i: len(i)==2) self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=1, assert_item_function=lambda i: len(i)==5) board.addCardFromString("6D") self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=6, assert_item_function=lambda i: len(i)==5) # Now add a card that should have no effect on results board.addCardFromString("TD") self.assert_iterator(hand.combinations_of_eight_or_lower(5), count=6, assert_item_function=lambda i: len(i)==5)
game.addHandGenerator(hg) handNum += 1 if handNum == 0: print "No hands read from %s. Quitting." % configFileName sys.exit(0) if options.verbose: print "Read %d hands" % handNum try: boardStr = config.get("board", "cards") except: pass else: board = Board.fromString(boardStr) if options.verbose: print "Setting board: %s" % board game.setBoard(board) if options.verbose: callback=showHandCallback else: callback=None if options.verbose: print "Running..." game.simulateGames(options.numGames, callback=callback) print game.statsToString()
predefined_hands.append(hg) if len(predefined_hands) == 0: print "No hands read from %s. Quitting." % configFileName sys.exit(0) if options.verbose: print "Read %d hands" % len(predefined_hands) predefined_board = None try: boardStr = config.get("board", "cards") except: pass else: predefined_boardboard = Board.fromString(boardStr) if options.verbose: print "Setting board: %s" % board game.setBoard(board) if options.verbose: callback=showHandCallback else: callback=None if options.verbose: print "Running..." simulator = HoldEm.Simulator(predefined_hands=predefined_hands, predefined_board=predefined_board)
def testBoardToString(self): board = Board.fromString("7C 8C 9C") self.assertEqual("%s" % board, "7C 8C 9C xx xx")
def main(argv=None): if argv is None: argv = sys.argv usage = "usage: %prog [<options>]" version = "%prog version 1.0" parser = OptionParser(usage) parser.add_option("-B", "--board", type="string", dest="board", metavar="cards", help="specify the flop") parser.add_option("-g", "--game", type="string", dest="game", default="holdem", help="game to simulate") parser.add_option("-H", "--hand", type="string", dest="hands", metavar="cards", action="append", help="add a hand") parser.add_option("-n", "--numGames", type="int", dest="numGames", default=100, help="number of games to simulate") parser.add_option("-N", "--numHands", type="int", dest="numHands", default=10, help="number of hands in play") parser.add_option("-p", "--showProgress", action="store_true", dest="showProgress", default=False, help="show progress") parser.add_option("-P", "--profile", type="string", dest="profile", default=None, help="enable profiling") parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False, help="run quietly") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="show results of each hand") (options, args) = parser.parse_args() game = { "holdem" : HoldEm.Game, "5cardstud" : FiveCardStud.Game, "fivecardstud" : FiveCardStud.Game, "5cardstudhilo" : FiveCardStud.HiLoGame, "fivecardstudhilo" : FiveCardStud.HiLoGame, "7cardstud" : SevenCardStud.Game, "sevencardstud" : SevenCardStud.Game, "7cardstudhilo" : SevenCardStud.HiLoGame, "sevencardstudhilo" : SevenCardStud.HiLoGame, "omaha" : Omaha.Game, "omahahilo" : Omaha.HiLoGame, } if game.has_key(options.game): GameClass = game[options.game] else: print "Unknown game type \"%s\"" % options.game print "Known games are:" for name in game.keys(): print "\t%s" % name sys.exit(1) maxHands = GameClass.getMaxHands() if options.numHands > maxHands: options.numHands = maxHands if options.verbose: print "Reducing number of hands to %d" % maxHands game = GameClass(numHands = options.numHands) HandClass = GameClass.getHandClass() if options.hands is not None: hands = Hands() for hand in options.hands: hands.addHand(HandClass.fromString(hand)) game.addHands(hands) if options.board: game.setBoard(Board.fromString(options.board)) if options.verbose: callback=showHandCallback print "Simulating %d games of %s" % (options.numGames, GameClass.gameName) print "%d Hands" % game.getNumHands(), if game.hands: print ": %s" % game.hands else: print if game.board: print "Board: %s" % game.board elif options.showProgress: callback=showProgressCallback else: callback=None cmd="game.simulateGames(options.numGames, callback=callback)" if options.profile: import cProfile if options.verbose: print "Profiling to file %s" % options.profile # Need to supply context here as run() will just use __main__ cProfile.runctx(cmd, globals(), locals(), filename=options.profile) else: eval(cmd) if options.showProgress: print if not options.quiet: print game.statsToString()