class TestBandit(TestCase): """Tests related to the bandit""" def setUp(self): self.bandit = Bandit() def test_create_bandits(self): """We can create a bunch of 10 bandits""" bandits = [Bandit() for x in range(10)] self.assertEqual(len(bandits), 10, "We are expecting 10 Bandits" "") self.assertEqual(type(bandits[0]), Bandit) def test_bandit_has_choices(self): """Verify that Bandit has 10 actions by default""" self.assertEqual(len(self.bandit.actions), 10, "Bandit should have 10 " "actions") bandit2 = Bandit(20) self.assertEqual(len(bandit2.actions), 20, "Bandit should have 20 " "actions") def test_bandit_explores(self): """Let's explore""" self.assertFalse(self.bandit.last_action) self.bandit.explores() self.assertTrue(self.bandit.last_action) def test_bandit_exploits(self): """Play a greedy move""" # Get the greed move greedy_action = self.bandit.greedy self.bandit.exploits() self.assertIs(self.bandit.last_action, greedy_action, "The last action" " should be the greedy action") def test_bandit_e_greedy(self): """Test that bandit can mix exploitation and exploration""" epsilon = 0 # greedy greedy_move = self.bandit.greedy # greedy might change after a play self.bandit.play_egreedy(epsilon) self.assertIs(self.bandit.last_action, greedy_move, "The last action should be the greedy action") epsilon = 0.1 # play egreedy nb_greedy = 0 for i in range(1000): greedy_move = self.bandit.greedy self.bandit.play_egreedy(epsilon) if self.bandit.last_action == greedy_move: nb_greedy += 1 percent = float(1000 - nb_greedy) / 1000 self.assertLess(percent, 0.13, "%s > 0.1, wrong !" % percent) def test_game(self): """tests on the main.game() function""" self.assertIsNone(game(nb_plays=100, nb_bandits=10)) # Example for tests test_data = Result("Test data") test_data[0] = greedy test_data[0.1] = egreedy_0_1 drawMock = Mock(draw) drawMock(test_data) self.assertTrue(drawMock.called)
def setUp(self): self.bandit = Bandit()