Ejemplo n.º 1
0
 def test_save(self):
     cache = DeterministicCache()
     cache[self.test_key] = self.test_value
     cache.save(self.test_save_file)
     with open(self.test_save_file, 'rb') as f:
         text = f.read()
     self.assertEqual(text, self.test_pickle)
Ejemplo n.º 2
0
 def test_save(self):
     cache = DeterministicCache()
     cache[self.test_key] = self.test_value
     cache.save(self.test_save_file)
     with open(self.test_save_file, 'rb') as f:
         text = f.read()
     self.assertEqual(text, self.test_pickle)
Ejemplo n.º 3
0
    def test_load_error_for_inccorect_format(self):
        tmp_file = tempfile.NamedTemporaryFile()
        with open(tmp_file.name, 'wb') as io:
            pickle.dump(range(5), io)

        with self.assertRaises(ValueError):
            cache = DeterministicCache()
            cache.load(tmp_file.name)
Ejemplo n.º 4
0
    def test_load_error_for_inccorect_format(self):
        tmp_file = tempfile.NamedTemporaryFile()
        with open(tmp_file.name, 'wb') as io:
            pickle.dump(range(5), io)

        with self.assertRaises(ValueError):
            cache = DeterministicCache()
            cache.load(tmp_file.name)
Ejemplo n.º 5
0
    def test_load_error_for_inccorect_format(self):
        filename = "test_outputs/test.cache"
        with open(filename, 'wb') as io:
            pickle.dump(range(5), io)

        with self.assertRaises(ValueError):
            cache = DeterministicCache()
            cache.load(filename)
Ejemplo n.º 6
0
    def test_load_error_for_inccorect_format(self):
        filename = "test_outputs/test.cache"
        with open(filename, 'wb') as io:
            pickle.dump(range(5), io)

        with self.assertRaises(ValueError):
            cache = DeterministicCache()
            cache.load(filename)
 def __init__(self):
     global ROUNDS
     global PLAYERS
     self.result = []
     self.game = Game()
     self.turns = ROUNDS
     self.players = list(PLAYERS)
     self._cache = DeterministicCache()
Ejemplo n.º 8
0
 def test_is_valid_key(self):
     cache = DeterministicCache()
     self.assertTrue(cache._is_valid_key(self.test_key))
     # Should return false if key is not a tuple
     self.assertFalse(cache._is_valid_key('test'))
     # Should return false if tuple is not a triplet
     self.assertFalse(cache._is_valid_key(('test', 'test')))
     # Should return false if contents of tuple are not axelrod Players
     # and an integer
     self.assertFalse(cache._is_valid_key(('test', 'test', 'test')))
     self.assertFalse(cache._is_valid_key((TitForTat, 'test', 2)))
     self.assertFalse(cache._is_valid_key(('test', TitForTat, 2)))
     self.assertFalse(cache._is_valid_key(
         (TitForTat, TitForTat, TitForTat)))
     # Should return false if either player class is stochastic
     self.assertFalse(cache._is_valid_key((Random, TitForTat, 2)))
     self.assertFalse(cache._is_valid_key((TitForTat, Random, 2)))
Ejemplo n.º 9
0
 def test_is_valid_key(self):
     cache = DeterministicCache()
     self.assertTrue(cache._is_valid_key(self.test_key))
     # Should return false if key is not a tuple
     self.assertFalse(cache._is_valid_key('test'))
     # Should return false if tuple is not a triplet
     self.assertFalse(cache._is_valid_key(('test', 'test')))
     # Should return false if contents of tuple are not axelrod Players
     # and an integer
     self.assertFalse(cache._is_valid_key(('test', 'test', 'test')))
     self.assertFalse(cache._is_valid_key((TitForTat, 'test', 2)))
     self.assertFalse(cache._is_valid_key(('test', TitForTat, 2)))
     self.assertFalse(cache._is_valid_key((TitForTat, TitForTat, TitForTat)))
     # Should return false if either player class is stochastic
     self.assertFalse(cache._is_valid_key((Random, TitForTat, 2)))
     self.assertFalse(cache._is_valid_key((TitForTat, Random, 2)))
Ejemplo n.º 10
0
 def test_set_immutable_cache(self):
     cache = DeterministicCache()
     cache.mutable = False
     with self.assertRaises(ValueError):
         cache[self.test_key] = self.test_value
 def setUp(self):
     self.cache = DeterministicCache()
Ejemplo n.º 12
0
 def test_set_immutable_cache(self):
     cache = DeterministicCache()
     cache.mutable = False
     with self.assertRaises(ValueError):
         cache[self.test_key] = self.test_value
Ejemplo n.º 13
0
 def setUp(self):
     self.cache = DeterministicCache()
Ejemplo n.º 14
0
 def test_load(self):
     cache = DeterministicCache()
     cache.load(self.test_load_file)
     self.assertEqual(cache[self.test_key], self.test_value)
Ejemplo n.º 15
0
 def test_del_item(self):
     cache = DeterministicCache()
     cache[self.test_key] = self.test_value
     self.assertTrue(self.test_key in cache)
     del cache[self.test_key]
     self.assertFalse(self.test_key in cache)
Ejemplo n.º 16
0
 def test_is_valid_value(self):
     cache = DeterministicCache()
     self.assertTrue(cache._is_valid_value(self.test_value))
     # Should return false if value is not a list
     self.assertFalse(cache._is_valid_value('test'))
Ejemplo n.º 17
0
 def test_basic_init(self):
     cache = DeterministicCache()
     self.assertTrue(cache.mutable)
Ejemplo n.º 18
0
 def test_is_valid_value(self):
     cache = DeterministicCache()
     self.assertTrue(cache._is_valid_value(self.test_value))
     # Should return false if value is not a list
     self.assertFalse(cache._is_valid_value('test'))
Ejemplo n.º 19
0
 def test_load(self):
     cache = DeterministicCache()
     cache.load(self.test_load_file)
     self.assertEqual(cache[self.test_key], self.test_value)
Ejemplo n.º 20
0
 def test_setitem(self):
     cache = DeterministicCache()
     cache[self.test_key] = self.test_value
     self.assertEqual(cache[self.test_key], self.test_value)
Ejemplo n.º 21
0
 def test_init_from_file(self):
     cache = DeterministicCache(file_name=self.test_load_file)
     self.assertEqual(cache[self.test_key], self.test_value)
Ejemplo n.º 22
0
 def test_setitem_invalid_key(self):
     cache = DeterministicCache()
     invalid_key = (1, 2, 3, 4)
     with self.assertRaises(ValueError):
         cache[invalid_key] = 3
Ejemplo n.º 23
0
class TestDeterministicCache(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.test_key = (TitForTat(), Defector())
        cls.test_value = [(C, D), (D, D), (D, D)]
        cls.test_save_file = "test_cache_save.txt"
        cls.test_load_file = "test_cache_load.txt"
        test_data_to_pickle = {("Tit For Tat", "Defector"): [(C, D), (D, D), (D, D)]}
        cls.test_pickle = pickle.dumps(test_data_to_pickle)

        with open(cls.test_load_file, "wb") as f:
            f.write(cls.test_pickle)

    @classmethod
    def tearDownClass(cls):
        os.remove(cls.test_save_file)
        os.remove(cls.test_load_file)

    def setUp(self):
        self.cache = DeterministicCache()

    def test_basic_init(self):
        self.assertTrue(self.cache.mutable)

    def test_init_from_file(self):
        loaded_cache = DeterministicCache(file_name=self.test_load_file)
        self.assertEqual(loaded_cache[self.test_key], self.test_value)

    def test_setitem(self):
        self.cache[self.test_key] = self.test_value
        self.assertEqual(self.cache[self.test_key], self.test_value)

    def test_setitem_invalid_key_not_tuple(self):
        invalid_key = "test"
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_first_two_elements_not_player(self):
        invalid_key = ("test", "test")
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

        invalid_key = (TitForTat(), "test")
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

        invalid_key = ("test", TitForTat())
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_too_many_players(self):
        invalid_key = (TitForTat(), TitForTat(), TitForTat())
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_stochastic_player(self):
        invalid_key = (Random(), TitForTat())
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

        invalid_key = (TitForTat(), Random())
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_value_not_list(self):
        with self.assertRaises(ValueError):
            self.cache[self.test_key] = 5

    def test_setitem_with_immutable_cache(self):
        self.cache.mutable = False
        with self.assertRaises(ValueError):
            self.cache[self.test_key] = self.test_value

    def test_save(self):
        self.cache[self.test_key] = self.test_value
        self.cache.save(self.test_save_file)
        with open(self.test_save_file, "rb") as f:
            text = f.read()
        self.assertEqual(text, self.test_pickle)

    def test_load(self):
        self.cache.load(self.test_load_file)
        self.assertEqual(self.cache[self.test_key], self.test_value)

    def test_load_error_for_inccorect_format(self):
        filename = "test_outputs/test.cache"
        with open(filename, "wb") as io:
            pickle.dump(range(5), io)

        with self.assertRaises(ValueError):
            self.cache.load(filename)

    def test_del_item(self):
        self.cache[self.test_key] = self.test_value
        self.assertTrue(self.test_key in self.cache)
        del self.cache[self.test_key]
        self.assertFalse(self.test_key in self.cache)
Ejemplo n.º 24
0
 def test_setitem_invalid_value(self):
     cache = DeterministicCache()
     with self.assertRaises(ValueError):
         cache[self.test_key] = 5
class TestDeterministicCache(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.test_key = (TitForTat(), Defector(), 3)
        cls.test_value = [(C, D), (D, D), (D, D)]
        cls.test_save_file = "test_cache_save.txt"
        cls.test_load_file = "test_cache_load.txt"
        test_data_to_pickle = {
            ("Tit For Tat", "Defector", 3): [(C, D), (D, D), (D, D)]
        }
        cls.test_pickle = pickle.dumps(test_data_to_pickle)

        with open(cls.test_load_file, "wb") as f:
            f.write(cls.test_pickle)

    @classmethod
    def tearDownClass(cls):
        os.remove(cls.test_save_file)
        os.remove(cls.test_load_file)

    def setUp(self):
        self.cache = DeterministicCache()

    def test_basic_init(self):
        self.assertTrue(self.cache.mutable)

    def test_init_from_file(self):
        loaded_cache = DeterministicCache(file_name=self.test_load_file)
        self.assertEqual(loaded_cache[self.test_key], self.test_value)

    def test_setitem(self):
        self.cache[self.test_key] = self.test_value
        self.assertEqual(self.cache[self.test_key], self.test_value)

    def test_setitem_invalid_key_not_tuple(self):
        invalid_key = "test"
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_too_short(self):
        invalid_key = self.test_key + (4, )
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_too_long(self):
        invalid_key = self.test_key[:2]
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_first_two_elements_not_player(self):
        invalid_key = ("test", "test", 2)
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

        invalid_key = (TitForTat(), "test", 2)
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

        invalid_key = ("test", TitForTat(), 2)
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_last_element_not_integer(self):
        invalid_key = (TitForTat(), TitForTat(), TitForTat())
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_key_stochastic_player(self):
        invalid_key = (Random(), TitForTat(), 2)
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

        invalid_key = (TitForTat(), Random(), 2)
        with self.assertRaises(ValueError):
            self.cache[invalid_key] = self.test_value

    def test_setitem_invalid_value_not_list(self):
        with self.assertRaises(ValueError):
            self.cache[self.test_key] = 5

    def test_setitem_with_immutable_cache(self):
        self.cache.mutable = False
        with self.assertRaises(ValueError):
            self.cache[self.test_key] = self.test_value

    def test_save(self):
        self.cache[self.test_key] = self.test_value
        self.cache.save(self.test_save_file)
        with open(self.test_save_file, "rb") as f:
            text = f.read()
        self.assertEqual(text, self.test_pickle)

    def test_load(self):
        self.cache.load(self.test_load_file)
        self.assertEqual(self.cache[self.test_key], self.test_value)

    def test_load_error_for_inccorect_format(self):
        filename = "test_outputs/test.cache"
        with open(filename, "wb") as io:
            pickle.dump(range(5), io)

        with self.assertRaises(ValueError):
            self.cache.load(filename)

    def test_del_item(self):
        self.cache[self.test_key] = self.test_value
        self.assertTrue(self.test_key in self.cache)
        del self.cache[self.test_key]
        self.assertFalse(self.test_key in self.cache)