From: Raymond Hettinger Date: Mon, 16 Dec 2019 09:54:14 +0000 (-0800) Subject: Add tests and design notes for Counter subset/superset operations. (GH-17625) X-Git-Tag: v3.9.0a2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1ca8fb187eb320f87a74b82c2a20acb89f429841;p=thirdparty%2FPython%2Fcpython.git Add tests and design notes for Counter subset/superset operations. (GH-17625) --- diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index a2a66a757220..92520b09bb8f 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -2064,6 +2064,29 @@ class TestCounter(unittest.TestCase): set_result = setop(set(p.elements()), set(q.elements())) self.assertEqual(counter_result, dict.fromkeys(set_result, 1)) + def test_subset_superset_not_implemented(self): + # Verify that multiset comparison operations are not implemented. + + # These operations were intentionally omitted because multiset + # comparison semantics conflict with existing dict equality semantics. + + # For multisets, we would expect that if p<=q and p>=q are both true, + # then p==q. However, dict equality semantics require that p!=q when + # one of sets contains an element with a zero count and the other + # doesn't. + + p = Counter(a=1, b=0) + q = Counter(a=1, c=0) + self.assertNotEqual(p, q) + with self.assertRaises(TypeError): + p < q + with self.assertRaises(TypeError): + p <= q + with self.assertRaises(TypeError): + p > q + with self.assertRaises(TypeError): + p >= q + def test_inplace_operations(self): elements = 'abcd' for i in range(1000):