summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2005-08-11 07:58:45 (GMT)
committerRaymond Hettinger <python@rcn.com>2005-08-11 07:58:45 (GMT)
commitc991db240ca8ea838c6acb0c8dc5300dca23c39e (patch)
treeb9b4faf8eb589db00390913a6f6d9af56f5df84a /Lib
parent9f3ae3e69d436f474bf46b802d514013807bca18 (diff)
downloadcpython-c991db240ca8ea838c6acb0c8dc5300dca23c39e.zip
cpython-c991db240ca8ea838c6acb0c8dc5300dca23c39e.tar.gz
cpython-c991db240ca8ea838c6acb0c8dc5300dca23c39e.tar.bz2
* Add short-circuit code for in-place operations with self (such as
s|=s, s&=s, s-=s, or s^=s). Add related tests. * Improve names for several variables and functions. * Provide alternate table access functions (next, contains, add, and discard) that work with an entry argument instead of just a key. This improves set-vs-set operations because we already have a hash value for each key and can avoid unnecessary calls to PyObject_Hash(). Provides a 5% to 20% speed-up for quick hashing elements like strings and integers. Provides much more substantial improvements for slow hashing elements like tuples or objects defining a custom __hash__() function. * Have difference operations resize() when 1/5 of the elements are dummies. Formerly, it was 1/6. The new ratio triggers less frequently and only in cases that it can resize quicker and with greater benefit. The right answer is probably either 1/4, 1/5, or 1/6. Picked the middle value for an even trade-off between resize time and the space/time costs of dummy entries.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_set.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py
index cfb17b0..a21d53c 100644
--- a/Lib/test/test_set.py
+++ b/Lib/test/test_set.py
@@ -370,6 +370,18 @@ class TestSet(TestJointOps):
else:
self.assert_(c not in self.s)
+ def test_inplace_on_self(self):
+ t = self.s.copy()
+ t |= t
+ self.assertEqual(t, self.s)
+ t &= t
+ self.assertEqual(t, self.s)
+ t -= t
+ self.assertEqual(t, self.thetype())
+ t = self.s.copy()
+ t ^= t
+ self.assertEqual(t, self.thetype())
+
def test_weakref(self):
s = self.thetype('gallahad')
p = proxy(s)