def runTest(self):
        # Sanity check of the relationship of our parameters
        self.assertLess(TestAddPlayerSecondary.CANDIDATE_POINTS, OptimalLineupTest.OPTIMAL_LINEUP_SS_POINTS)
        self.assertGreater(TestAddPlayerSecondary.CANDIDATE_POINTS, OptimalLineupTest.OPTIMAL_LINEUP_2B_POINTS)
        self.assertLess(TestAddPlayerSecondary.CANDIDATE_SALARY / float(TestAddPlayerSecondary.CANDIDATE_POINTS),
                        OptimalLineupTest.OPTIMAL_LINEUP_2B_SALARY / float(OptimalLineupTest.OPTIMAL_LINEUP_2B_POINTS))
        self.assertLessEqual(OptimalLineupTest.OPTIMAL_LINEUP_TOTAL_SALARY - OptimalLineupTest.OPTIMAL_LINEUP_2B_SALARY +
                             TestAddPlayerSecondary.CANDIDATE_SALARY, Draftkings.CONTEST_SALARY)

        player = PregameHitterGameEntry()
        player.rotowire_id = TestAddPlayerSecondary.CANDIDATE_ID
        player.primary_position = TestAddPlayerSecondary.CANDIDATE_PRIMARY_POS
        player.secondary_position = TestAddPlayerSecondary.CANDIDATE_SECONDARY_POS
        player.predicted_draftkings_points = TestAddPlayerSecondary.CANDIDATE_POINTS
        player.draftkings_salary = TestAddPlayerSecondary.CANDIDATE_SALARY
        self.optimal_lineup.add(player)
        self.assertEqual(self.optimal_lineup.position_map[TestAddPlayerSecondary.CANDIDATE_PRIMARY_POS]._player.rotowire_id,
                         OptimalLineupTest.OPTIMAL_LINEUP_SS_ID)
        self.assertEqual(self.optimal_lineup.position_map[TestAddPlayerSecondary.CANDIDATE_SECONDARY_POS]._player.rotowire_id,
                         TestAddPlayerSecondary.CANDIDATE_ID)

        self.assertEqual(self.optimal_lineup.get_total_salary(),
                         OptimalLineupTest.OPTIMAL_LINEUP_TOTAL_SALARY -
                         OptimalLineupTest.OPTIMAL_LINEUP_2B_SALARY +
                         TestAddPlayerSecondary.CANDIDATE_SALARY)
    def runTest(self):
        player = PregameHitterGameEntry()
        player.rotowire_id = TestAddPlayerWorse.CANDIDATE_ID
        player.primary_position = TestAddPlayerWorse.CANDIDATE_PRIMARY_POS
        player.secondary_position = TestAddPlayerWorse.CANDIDATE_SECONDARY_POS
        player.predicted_draftkings_points = TestAddPlayerWorse.CANDIDATE_POINTS
        player.draftkings_salary = TestAddPlayerWorse.CANDIDATE_SALARY
        self.optimal_lineup.add(player)
        self.assertEqual(self.optimal_lineup[TestAddPlayerWorse.CANDIDATE_PRIMARY_POS].rotowire_id,
                         OptimalLineupTest.OPTIMAL_LINEUP_SS_ID)
        self.assertEqual(self.optimal_lineup[TestAddPlayerWorse.CANDIDATE_SECONDARY_POS].rotowire_id,
                         OptimalLineupTest.OPTIMAL_LINEUP_3B_ID)

        self.assertEqual(self.optimal_lineup.get_total_salary(), OptimalLineupTest.OPTIMAL_LINEUP_TOTAL_SALARY)
    def runTest(self):
        # Add the mediocre player
        player = PregameHitterGameEntry()
        player.rotowire_id = TestAddOutfielder.CANDIDATE_ID
        player.primary_position = TestAddOutfielder.CANDIDATE_PRIMARY_POS
        player.secondary_position = TestAddOutfielder.CANDIDATE_SECONDARY_POS
        player.predicted_draftkings_points = TestAddOutfielder.CANDIDATE_POINTS
        player.draftkings_salary = TestAddOutfielder.CANDIDATE_SALARY
        self.optimal_lineup.add(player)
        self.assertEqual(self.optimal_lineup[TestAddOutfielder.CANDIDATE_PRIMARY_POS][TestAddOutfielder.CANDIDATE_INSERTION_POSITION][1].rotowire_id,
                         TestAddOutfielder.CANDIDATE_ID)
        self.assertEqual(self.optimal_lineup[TestAddOutfielder.CANDIDATE_SECONDARY_POS].rotowire_id,
                         OptimalLineupTest.OPTIMAL_LINEUP_1B_ID)

        self.assertEqual(self.optimal_lineup.get_total_salary(),
                         OptimalLineupTest.OPTIMAL_LINEUP_TOTAL_SALARY -
                         OptimalLineupTest.OPTIMAL_LINEUP_OF3_SALARY +
                         TestAddOutfielder.CANDIDATE_SALARY)

        # Add the best player
        best_player = PregameHitterGameEntry()
        best_player.rotowire_id = TestAddOutfielder.BEST_CANDIDATE_ID
        best_player.primary_position = TestAddOutfielder.BEST_CANDIDATE_PRIMARY_POS
        best_player.secondary_position = TestAddOutfielder.BEST_CANDIDATE_SECONDARY_POS
        best_player.predicted_draftkings_points = TestAddOutfielder.BEST_CANDIDATE_POINTS
        best_player.draftkings_salary = TestAddOutfielder.BEST_CANDIDATE_SALARY
        self.optimal_lineup.add(best_player)
        self.assertEqual(self.optimal_lineup[TestAddOutfielder.BEST_CANDIDATE_PRIMARY_POS][TestAddOutfielder.BEST_CANDIDATE_INSERTION_POSITION][1].rotowire_id,
                         TestAddOutfielder.BEST_CANDIDATE_ID)

        self.assertEqual(self.optimal_lineup.get_total_salary(),
                         OptimalLineupTest.OPTIMAL_LINEUP_TOTAL_SALARY -
                         OptimalLineupTest.OPTIMAL_LINEUP_OF3_SALARY +
                         TestAddOutfielder.CANDIDATE_SALARY -
                         OptimalLineupTest.OPTIMAL_LINEUP_OF2_SALARY +
                         TestAddOutfielder.BEST_CANDIDATE_SALARY)
    def runTest(self):
        # Add the mediocre player
        player = PregameHitterGameEntry()
        player.rotowire_id = TestAddOutfielder.CANDIDATE_ID
        player.primary_position = TestAddOutfielder.CANDIDATE_PRIMARY_POS
        player.secondary_position = TestAddOutfielder.CANDIDATE_SECONDARY_POS
        player.predicted_draftkings_points = TestAddOutfielder.CANDIDATE_POINTS
        player.draftkings_salary = TestAddOutfielder.CANDIDATE_SALARY
        self.optimal_lineup.add(player)
        worst_player = heapq.heappop(self.optimal_lineup.position_map[TestAddOutfielder.CANDIDATE_PRIMARY_POS]._position_heap)
        self.assertEqual(self.optimal_lineup.position_map[TestAddOutfielder.CANDIDATE_PRIMARY_POS]._position_heap[0][1].rotowire_id,
                         OptimalLineupTest.OPTIMAL_LINEUP_OF1_ID)
        heapq.heappush(self.optimal_lineup.position_map[TestAddOutfielder.CANDIDATE_PRIMARY_POS]._position_heap, worst_player)
        self.assertEqual(self.optimal_lineup.position_map[TestAddOutfielder.CANDIDATE_SECONDARY_POS]._player.rotowire_id,
                         OptimalLineupTest.OPTIMAL_LINEUP_1B_ID)

        self.assertEqual(self.optimal_lineup.get_total_salary(),
                         OptimalLineupTest.OPTIMAL_LINEUP_TOTAL_SALARY -
                         OptimalLineupTest.OPTIMAL_LINEUP_1B_SALARY)
    def setUp(self):
        self.optimal_lineup = OptimalLineupDict()
        player1 = PregameHitterGameEntry()
        player1.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_SP1_ID
        player1.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_SP1_SALARY
        player1.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_SP1_POINTS
        player1.primary_position = "SP"
        self.optimal_lineup.add(player1)

        player2 = PregameHitterGameEntry()
        player2.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_SP2_ID
        player2.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_SP2_SALARY
        player2.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_SP2_POINTS
        player2.primary_position = "SP"
        self.optimal_lineup.add(player2)

        player3 = PregameHitterGameEntry()
        player3.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_C_ID
        player3.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_C_SALARY
        player3.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_C_POINTS
        player3.primary_position = "C"
        self.optimal_lineup.add(player3)

        player4 = PregameHitterGameEntry()
        player4.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_1B_ID
        player4.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_1B_SALARY
        player4.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_1B_POINTS
        player4.primary_position = "1B"
        self.optimal_lineup.add(player4)

        player5 = PregameHitterGameEntry()
        player5.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_2B_ID
        player5.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_2B_SALARY
        player5.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_2B_POINTS
        player5.primary_position = "2B"
        self.optimal_lineup.add(player5)

        player6 = PregameHitterGameEntry()
        player6.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_3B_ID
        player6.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_3B_SALARY
        player6.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_3B_POINTS
        player6.primary_position = "3B"
        self.optimal_lineup.add(player6)

        player7 = PregameHitterGameEntry()
        player7.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_SS_ID
        player7.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_SS_SALARY
        player7.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_SS_POINTS
        player7.primary_position = "SS"
        self.optimal_lineup.add(player7)

        player8 = PregameHitterGameEntry()
        player8.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_OF1_ID
        player8.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_OF1_SALARY
        player8.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_OF1_POINTS
        player8.primary_position = "OF"
        self.optimal_lineup.add(player8)

        player9 = PregameHitterGameEntry()
        player9.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_OF2_ID
        player9.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_OF2_SALARY
        player9.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_OF2_POINTS
        player9.primary_position = "OF"
        self.optimal_lineup.add(player9)

        player10 = PregameHitterGameEntry()
        player10.rotowire_id = OptimalLineupTest.OPTIMAL_LINEUP_OF3_ID
        player10.draftkings_salary = OptimalLineupTest.OPTIMAL_LINEUP_OF3_SALARY
        player10.predicted_draftkings_points = OptimalLineupTest.OPTIMAL_LINEUP_OF3_POINTS
        player10.primary_position = "OF"
        self.optimal_lineup.add(player10)