Ejemplo n.º 1
0
 def test_endgame_remain_16(self):
     board = BitBoard()
     endgame = _EndGame(depth=16)
     key = endgame.__class__.__name__ + str(os.getpid())
     Measure.elp_time[key] = {'min': 10000, 'max': 0, 'ave': 0, 'cnt': 0}
     Measure.count[key] = 0
     color = 'black'
     board._black_bitboard = 0xC07DBF650158381C
     board._white_bitboard = 0x0009A7CA6C4E0
     board.update_score()
     self.assertEqual(endgame.next_move(color, board), (6, 6))
     print()
     print(key, 'remain = 16')
     print(' min :', Measure.elp_time[key]['min'], '(s)')
     print(' max :', Measure.elp_time[key]['max'], '(s)')
     print(' ave :', Measure.elp_time[key]['ave'], '(s)')
     print('(5417116 / 1.94s)', Measure.count[key])
Ejemplo n.º 2
0
    def test_fullreading_remain_9(self):
        class Test:
            pass

        board = BitBoard()
        fullreading = _FullReading(remain=9, base=Test())
        key = fullreading.__class__.__name__ + str(os.getpid())
        Measure.elp_time[key] = {'min': 10000, 'max': 0, 'ave': 0, 'cnt': 0}
        color = 'white'

        # pattern 1
        board._black_bitboard = 0x3FFFEE3E192CC07E
        board._white_bitboard = 0x400011C0E4523900
        board.update_score()
        self.assertEqual(fullreading.next_move(color, board), (0, 0))

        # pattern 2
        board._black_bitboard = 0x81878F170B470000
        board._white_bitboard = 0x7C387068F4381F3F
        board.update_score()
        self.assertEqual(fullreading.next_move(color, board), (6, 0))

        # pattern 3
        board._black_bitboard = 0xF27FBF650158381E
        board._white_bitboard = 0x9AFEA6C4E0
        board.update_score()
        self.assertEqual(fullreading.next_move(color, board), (7, 7))

        # pattern 4
        board._black_bitboard = 0x5C2353046C3874BA
        board._white_bitboard = 0x80DCACFB93850B00
        board.update_score()
        self.assertEqual(fullreading.next_move(color, board), (7, 0))

        # pattern 5
        board._black_bitboard = 0x828522161C1C07FF
        board._white_bitboard = 0x4858DC69E3E3B800
        board.update_score()
        self.assertEqual(fullreading.next_move(color, board), (7, 2))

        print()
        print(key, 'remain = 9')
        print(' min :', Measure.elp_time[key]['min'], '(s)')
        print(' max :', Measure.elp_time[key]['max'], '(s)')
        print(' ave :', Measure.elp_time[key]['ave'], '(s)')
Ejemplo n.º 3
0
 def test_endgame_remain_12(self):
     # Windows10 Celeron 1.6GHz 4.00GB
     board = BitBoard()
     endgame = _EndGame(depth=12)
     key = endgame.__class__.__name__ + str(os.getpid())
     Measure.elp_time[key] = {'min': 10000, 'max': 0, 'ave': 0, 'cnt': 0}
     Measure.count[key] = 0
     color = 'black'
     board._black_bitboard = 0xF07DBF650158381C
     board._white_bitboard = 0x2009A7EA6C4E0
     board.update_score()
     self.assertEqual(endgame.next_move(color, board), (7, 0))
     print()
     print(key, 'remain = 12')
     print(' min :', Measure.elp_time[key]['min'], '(s)')
     print(' max :', Measure.elp_time[key]['max'], '(s)')
     print(' ave :', Measure.elp_time[key]['ave'], '(s)')
     print('(101890 / 0.03s)', Measure.count[key])
Ejemplo n.º 4
0
    def test_fullreading_remain_12(self):
        class Test:
            pass

        board = BitBoard()
        fullreading = _FullReading(remain=12, base=Test())
        key = fullreading.__class__.__name__ + str(os.getpid())
        Measure.elp_time[key] = {'min': 10000, 'max': 0, 'ave': 0, 'cnt': 0}
        color = 'black'

        board._black_bitboard = 0xF07DBF650158380E
        board._white_bitboard = 0x0009AFEA6C4E0
        board.update_score()
        self.assertEqual(fullreading.next_move(color, board), (7, 6))

        print()
        print(key, 'remain = 12')
        print(' min :', Measure.elp_time[key]['min'], '(s)')
        print(' max :', Measure.elp_time[key]['max'], '(s)')
        print(' ave :', Measure.elp_time[key]['ave'], '(s)')
Ejemplo n.º 5
0
    def test_fullreading_next_move(self):
        class Test:
            def next_move(self, color, board):
                return (3, 3)

        board = BitBoard()

        color = 'white'
        board._black_bitboard = 0x3FFFEE3E192CC07E
        board._white_bitboard = 0x400011C0E4523900
        board.update_score()

        # remain = 9 : base
        fullreading = FullReading(remain=8, base=Test())
        self.assertEqual(fullreading.next_move(color, board), (3, 3))

        fullreading = _FullReading(remain=8, base=Test())
        self.assertEqual(fullreading.next_move(color, board), (3, 3))

        # remain = 8 : fullreading
        board.put_disc(color, 0, 0)
        color = 'black'
        self.assertEqual(fullreading.next_move(color, board), (7, 5))
Ejemplo n.º 6
0
    def test_endgame_get_best_move(self):
        endgame = _EndGame_()

        # O--OOOOX
        # -OOOOOOX
        # OOXXOOOX
        # OOXOOOXX
        # OOOOOOXX
        # ---OOOOX
        # ----O--X
        # --------
        # X
        board = BitBoard()
        board._black_bitboard = 0x0101312303010100
        board._white_bitboard = 0x9E7ECEDCFC1E0800
        board.update_score()

        # depth=20 : black : a2
        board.put_disc('black', 0, 1)

        # depth=19 : white : b1
        board.put_disc('white', 1, 0)

        # depth=18 : black : c1
        board.put_disc('black', 2, 0)

        # depth=17 : white : --
        # depth=17 : black : b6
        board.put_disc('black', 1, 5)
        # print(board)
        # print(board._black_score, board._white_score)

        # depth=16 : white : c7
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((1, 6), {
                (1, 6): -38.0,
                (2, 6): -38.0
            }))
        board.put_disc('white', 2, 6)

        # depth=15 : black : a7
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((0, 6), {
                (0, 5): 16.0,
                (0, 6): 38.0,
                (1, 7): 38.0,
                (2, 5): 30.0,
                (3, 6): 38.0,
                (3, 7): 38.0,
                (4, 7): 38.0,
                (5, 6): 38.0,
                (5, 7): 38.0,
                (6, 6): 38.0
            }))  # noqa: E501
        board.put_disc('black', 0, 6)

        # depth=14 : white : b7
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((1, 6), {
                (1, 6): -38.0
            }))
        board.put_disc('white', 1, 6)

        # depth=13 : black : b8
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((1, 7), {
                (0, 5): 8.0,
                (1, 7): 38.0,
                (2, 5): 36.0,
                (3, 6): 36.0,
                (3, 7): 38.0,
                (4, 7): 38.0,
                (5, 6): 36.0,
                (5, 7): 38.0,
                (6, 6): 36.0
            }))  # noqa: E501
        board.put_disc('black', 1, 7)

        # depth=12 : white : d7
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((3, 6), {
                (2, 5): -42.0,
                (3, 6): -38.0,
                (3, 7): -38.0
            }))
        board.put_disc('white', 3, 6)

        # depth=11 : black : f8
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((5, 7), {
                (0, 5): 2.0,
                (2, 5): 36.0,
                (2, 7): 36.0,
                (3, 7): 36.0,
                (4, 7): 36.0,
                (5, 6): 36.0,
                (5, 7): 38.0,
                (6, 6): 36.0
            }))  # noqa: E501
        board.put_disc('black', 5, 7)

        # depth=10 : white : c6
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((2, 5), {
                (2, 5): -38.0,
                (3, 7): -38.0,
                (4, 7): -38.0,
                (5, 6): -38.0
            }))  # noqa: E501
        board.put_disc('white', 2, 5)

        # depth=9 : black : f7
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((5, 6), {
                (0, 5): -8.0,
                (0, 7): 38.0,
                (2, 7): 38.0,
                (3, 7): 38.0,
                (5, 6): 38.0,
                (6, 6): 38.0
            }))  # noqa: E501
        board.put_disc('black', 5, 6)

        # depth=8 : white : g7
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((6, 6), {
                (4, 7): -38.0,
                (6, 6): -38.0,
                (6, 7): -38.0
            }))
        board.put_disc('white', 6, 6)

        # depth=7 : black : a8
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((0, 7), {
                (0, 5): 6.0,
                (0, 7): 38.0,
                (2, 7): 38.0,
                (3, 7): 38.0,
                (4, 7): 38.0,
                (6, 7): 38.0
            }))  # noqa: E501
        board.put_disc('black', 0, 7)

        # depth=6 : white : --
        # depth=6 : black : d8
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((3, 7), {
                (0, 5): 34.0,
                (2, 7): 34.0,
                (3, 7): 38.0,
                (4, 7): 38.0,
                (6, 7): 38.0
            }))  # noqa: E501
        board.put_disc('black', 3, 7)

        # depth=5 : white : e8
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((4, 7), {
                (4, 7): -38.0
            }))
        board.put_disc('white', 4, 7)

        # depth=4 : balck : c8
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((2, 7), {
                (0, 5): 22.0,
                (2, 7): 38.0,
                (6, 7): 38.0,
                (7, 7): 38.0
            }))  # noqa: E501
        board.put_disc('black', 2, 7)

        # depth=3 : white ; g8
        self.assertEqual(
            endgame.get_best_move('white', board,
                                  board.get_legal_moves('white')),
            ((6, 7), {
                (6, 7): -38.0
            }))
        board.put_disc('white', 6, 7)

        # depth=2 : balck : a6
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((0, 5), {
                (0, 5): 38.0,
                (7, 7): 38.0
            }))
        board.put_disc('black', 0, 5)

        # depth=1 : white : --
        # depth=1 : black : h8
        self.assertEqual(
            endgame.get_best_move('black', board,
                                  board.get_legal_moves('black')),
            ((7, 7), {
                (7, 7): 38.0
            }))
Ejemplo n.º 7
0
    def test_specific_evaluator(self):
        board8 = BitBoard(8)
        board8.put_disc('black', 3, 2)
        board8.put_disc('white', 2, 2)
        board8.put_disc('black', 2, 3)
        board8.put_disc('white', 4, 2)
        board8.put_disc('black', 1, 1)
        board8.put_disc('white', 0, 0)

        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))

        # Evaluator_T
        evaluator = coord.Evaluator_T()
        score_b = evaluator.evaluate('black', board8, None, None)
        score_w = evaluator.evaluate('white', board8, None, None)
        self.assertEqual(score_b, -22)
        self.assertEqual(score_w, -22)

        # Evaluator_P
        evaluator = coord.Evaluator_P()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, 5)

        # Evaluator_O
        evaluator = coord.Evaluator_O()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -8.25)

        # Evaluator_W
        evaluator = coord.Evaluator_W()

        board8._black_bitboard = 0xFFFFFFFFFFFFFFFF  # black win
        board8._white_bitboard = 0x0000000000000000
        board8.update_score()
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        score_w = evaluator.evaluate('white', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, 10064)
        self.assertEqual(score_w, 10064)

        board8._black_bitboard = 0x0000000000000000
        board8._white_bitboard = 0xFFFFFFFFFFFFFFFF  # white win
        board8.update_score()
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        score_w = evaluator.evaluate('white', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -10064)
        self.assertEqual(score_w, -10064)

        # Evaluator_N
        board8 = BitBoard(8)
        board8.put_disc('black', 3, 2)
        board8.put_disc('white', 2, 2)
        board8.put_disc('black', 2, 3)
        board8.put_disc('white', 4, 2)
        board8.put_disc('black', 1, 1)
        board8.put_disc('white', 0, 0)

        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))

        evaluator = coord.Evaluator_N()
        score_b = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score_b, -6)

        # Evaluator_N_Fast
        evaluator = coord.Evaluator_N_Fast()
        score_b = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score_b, -6)

        # Evaluator_E
        evaluator = coord.Evaluator_E()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, 0)

        # Evaluator_C
        evaluator = coord.Evaluator_C()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, 0)

        # Evaluator_B
        evaluator = coord.Evaluator_B()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, 19)

        # Evaluator_Ec
        evaluator = coord.Evaluator_Ec()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -16)

        # Evaluator_TP
        evaluator = coord.Evaluator_TP()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -17)

        # Evaluator_TPO
        evaluator = coord.Evaluator_TPO()
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -25.25)

        # Evaluator_NW
        evaluator = coord.Evaluator_NW()
        score = evaluator.evaluate(None, board8, None, None)
        self.assertEqual(score, -10006)
        score = evaluator.evaluate(None, board8, possibility_b, possibility_w)
        self.assertEqual(score, -6)

        # Evaluator_PW
        evaluator = coord.Evaluator_PW()
        score = evaluator.evaluate(None, board8, None, None)
        self.assertEqual(score, -10006)
        score = evaluator.evaluate(None, board8, possibility_b, possibility_w)
        self.assertEqual(score, 5)

        # Evaluator_TPW
        evaluator = coord.Evaluator_TPW()
        score = evaluator.evaluate(None, board8, None, None)
        self.assertEqual(score, -10006)
        score = evaluator.evaluate(None, board8, possibility_b, possibility_w)
        self.assertEqual(score, -17)

        # Evaluator_TPW_Fast
        board8 = BitBoard(8)
        board8.put_disc('black', 3, 2)
        board8.put_disc('white', 2, 2)
        board8.put_disc('black', 2, 3)
        board8.put_disc('white', 4, 2)
        board8.put_disc('black', 1, 1)

        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))

        evaluator = coord.Evaluator_TPW_Fast()
        score = evaluator.evaluate(None, board8, None, None)
        self.assertEqual(score, 10001)

        board8.put_disc('white', 0, 0)

        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))

        score = evaluator.evaluate(None, board8, None, None)
        self.assertEqual(score, -10006)
        score = evaluator.evaluate(None, board8, possibility_b, possibility_w)
        self.assertEqual(score, -17)

        # Evaluator_TPOW
        evaluator = coord.Evaluator_TPOW()
        score_b = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score_b, -10006)
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -25.25)

        # Evaluator_TPWE
        evaluator = coord.Evaluator_TPWE()
        board8._black_bitboard = 0x0000002010003C7E
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -81)

        board8._black_bitboard = 0x0000002010003C7C
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -61)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)

        # Evaluator_TPWE_Fast
        board8 = BitBoard(8)
        board8.put_disc('black', 3, 2)
        board8.put_disc('white', 2, 2)
        board8.put_disc('black', 2, 3)
        board8.put_disc('white', 4, 2)
        board8.put_disc('black', 1, 1)

        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))

        evaluator = coord.Evaluator_TPWE_Fast()
        score = evaluator.evaluate(None, board8, None, None)
        self.assertEqual(score, 10001)

        board8.put_disc('white', 0, 0)

        board8._black_bitboard = 0x0000002010003C7E
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -81)

        board8._black_bitboard = 0x0000002010003C7C
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -61)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)

        board4 = BitBoard(4)
        possibility_b = board4.get_bit_count(
            board4.get_legal_moves_bits('black'))
        possibility_w = board4.get_bit_count(
            board4.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board4, possibility_b,
                                   possibility_w)
        self.assertEqual(score, 0)

        # -------------------------------

        # Evaluator_TPWEC
        evaluator = coord.Evaluator_TPWEC()
        board8._black_bitboard = 0x0000002010003C7C
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -61)
        board8._black_bitboard = 0x0703012010003C7E
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, 422)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)

        # Evaluator_PWE
        evaluator = coord.Evaluator_PWE()
        board8._black_bitboard = 0x0000002010003C7C
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, 10)
        board8._black_bitboard = 0x0703012010003C7E
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, 310)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)

        # Evaluator_BW
        evaluator = coord.Evaluator_BW()
        board8._black_bitboard = 0x0000002010003C7C
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, 2)
        board8._black_bitboard = 0x0703012010003C7E
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -2)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)

        # Evaluator_EcW
        evaluator = coord.Evaluator_EcW()
        board8._black_bitboard = 0x0000002010003C7C
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -16)
        board8._black_bitboard = 0x0703012010003C7E
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, 0)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)

        # Evaluator_BWEc
        evaluator = coord.Evaluator_BWEc()
        board8._black_bitboard = 0x0000002010003C7C
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -14)
        board8._black_bitboard = 0x0703012010003C7E
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -2)

        score = evaluator.evaluate('black', board8, None, None)
        self.assertEqual(score, -10006)
Ejemplo n.º 8
0
    def test_general_evaluator_evaluate(self):
        evaluator = coord.Evaluator(
            separated=[
                coord.WinLoseScorer(),
            ],
            combined=[
                coord.TableScorer(),
                coord.PossibilityScorer(),
                coord.EdgeScorer(),
            ],
        )

        board8 = BitBoard(8)
        board8._black_bitboard = 0xFFFFFFFFFFFFFFFF  # black win
        board8._white_bitboard = 0x0000000000000000
        board8.update_score()
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        score_w = evaluator.evaluate('white', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, 10064)
        self.assertEqual(score_w, 10064)

        board8._black_bitboard = 0x0000000000000000
        board8._white_bitboard = 0xFFFFFFFFFFFFFFFF  # white win
        board8.update_score()
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score_b = evaluator.evaluate('black', board8, possibility_b,
                                     possibility_w)
        score_w = evaluator.evaluate('white', board8, possibility_b,
                                     possibility_w)
        self.assertEqual(score_b, -10064)
        self.assertEqual(score_w, -10064)

        board8 = BitBoard(8)
        board8.put_disc('black', 3, 2)
        board8.put_disc('white', 2, 2)
        board8.put_disc('black', 2, 3)
        board8.put_disc('white', 4, 2)
        board8.put_disc('black', 1, 1)
        board8.put_disc('white', 0, 0)
        board8._black_bitboard = 0x0000002010003C7E
        possibility_b = board8.get_bit_count(
            board8.get_legal_moves_bits('black'))
        possibility_w = board8.get_bit_count(
            board8.get_legal_moves_bits('white'))
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -81)

        board8._black_bitboard = 0x0000002010003C7C
        score = evaluator.evaluate('black', board8, possibility_b,
                                   possibility_w)
        self.assertEqual(score, -61)