aboutsummaryrefslogtreecommitdiff
path: root/tests/test_keys.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_keys.py')
-rw-r--r--tests/test_keys.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/test_keys.py b/tests/test_keys.py
new file mode 100644
index 0000000..892a620
--- /dev/null
+++ b/tests/test_keys.py
@@ -0,0 +1,57 @@
+import unittest
+
+import cachetools.keys
+
+
+class CacheKeysTest(unittest.TestCase):
+ def test_hashkey(self, key=cachetools.keys.hashkey):
+ self.assertEqual(key(), key())
+ self.assertEqual(hash(key()), hash(key()))
+ self.assertEqual(key(1, 2, 3), key(1, 2, 3))
+ self.assertEqual(hash(key(1, 2, 3)), hash(key(1, 2, 3)))
+ self.assertEqual(key(1, 2, 3, x=0), key(1, 2, 3, x=0))
+ self.assertEqual(hash(key(1, 2, 3, x=0)), hash(key(1, 2, 3, x=0)))
+ self.assertNotEqual(key(1, 2, 3), key(3, 2, 1))
+ self.assertNotEqual(key(1, 2, 3), key(1, 2, 3, x=None))
+ self.assertNotEqual(key(1, 2, 3, x=0), key(1, 2, 3, x=None))
+ self.assertNotEqual(key(1, 2, 3, x=0), key(1, 2, 3, y=0))
+ with self.assertRaises(TypeError):
+ hash(key({}))
+ # untyped keys compare equal
+ self.assertEqual(key(1, 2, 3), key(1.0, 2.0, 3.0))
+ self.assertEqual(hash(key(1, 2, 3)), hash(key(1.0, 2.0, 3.0)))
+
+ def test_typedkey(self, key=cachetools.keys.typedkey):
+ self.assertEqual(key(), key())
+ self.assertEqual(hash(key()), hash(key()))
+ self.assertEqual(key(1, 2, 3), key(1, 2, 3))
+ self.assertEqual(hash(key(1, 2, 3)), hash(key(1, 2, 3)))
+ self.assertEqual(key(1, 2, 3, x=0), key(1, 2, 3, x=0))
+ self.assertEqual(hash(key(1, 2, 3, x=0)), hash(key(1, 2, 3, x=0)))
+ self.assertNotEqual(key(1, 2, 3), key(3, 2, 1))
+ self.assertNotEqual(key(1, 2, 3), key(1, 2, 3, x=None))
+ self.assertNotEqual(key(1, 2, 3, x=0), key(1, 2, 3, x=None))
+ self.assertNotEqual(key(1, 2, 3, x=0), key(1, 2, 3, y=0))
+ with self.assertRaises(TypeError):
+ hash(key({}))
+ # typed keys compare unequal
+ self.assertNotEqual(key(1, 2, 3), key(1.0, 2.0, 3.0))
+
+ def test_addkeys(self, key=cachetools.keys.hashkey):
+ self.assertIsInstance(key(), tuple)
+ self.assertIsInstance(key(1, 2, 3) + key(4, 5, 6), type(key()))
+ self.assertIsInstance(key(1, 2, 3) + (4, 5, 6), type(key()))
+ self.assertIsInstance((1, 2, 3) + key(4, 5, 6), type(key()))
+
+ def test_pickle(self, key=cachetools.keys.hashkey):
+ import pickle
+
+ for k in [key(), key("abc"), key("abc", 123), key("abc", q="abc")]:
+ # white-box test: assert cached hash value is not pickled
+ self.assertEqual(len(k.__dict__), 0)
+ h = hash(k)
+ self.assertEqual(len(k.__dict__), 1)
+ pickled = pickle.loads(pickle.dumps(k))
+ self.assertEqual(len(pickled.__dict__), 0)
+ self.assertEqual(k, pickled)
+ self.assertEqual(h, hash(pickled))