1. 24 Aug, 2002 4 commits
    • Guido van Rossum's avatar
      Speedup for PyObject_RichCompareBool(): PyObject_RichCompare() almost · 81912d47
      Guido van Rossum authored
      always returns a bool, so avoid calling PyObject_IsTrue() in that
      case.
      81912d47
    • Raymond Hettinger's avatar
      Since instances of _TemporarilyImmutableSet are always thrown away · d5018512
      Raymond Hettinger authored
      immediately after the comparison, there in no use in caching the hashcode.
      The test, 'if self._hashcode is None', never fails.  Removing the caching
      saves a few lines and a little time.
      d5018512
    • Raymond Hettinger's avatar
      Expanded tests for sets of sets. · 045e51a9
      Raymond Hettinger authored
      045e51a9
    • Raymond Hettinger's avatar
      1. Removed module self test in favor of unittests -- Timbot's suggestion. · fa1480f6
      Raymond Hettinger authored
      2. Replaced calls to Set([]) with Set() -- Timbot's suggestion
      3. Fixed subtle bug in sets of sets:
      
      The following code did not work (will add to test suite):
          d = Set('d')
          s = Set([d])  # Stores inner set as an ImmutableSet
          s.remove(d)   # For comparison, wraps d in _TemporarilyImmutableSet
      
      The comparison proceeds by computing the hash of the
      _TemporarilyImmutableSet and finding it in the dictionary.
      It then verifies equality by calling ImmutableSet.__eq__()
      and crashes from the binary sanity check.
      
      The problem is that the code assumed equality would be checked
      with _TemporarilyImmutableSet.__eq__().
      
      The solution is to let _TemporarilyImmutableSet derive from BaseSet
      so it will pass the sanity check and then to provide it with the
      ._data element from the wrapped set so that ImmutableSet.__eq__()
      will find ._data where it expects.
      
      Since ._data is now provided and because BaseSet is the base class,
      _TemporarilyImmutableSet no longer needs .__eq__() or .__ne__().
      
      Note that inheriting all of BaseSet's methods is harmless because
      none of those methods (except ones starting with an underscore)
      can mutate the .data element.  Also _TemporarilyImmutableSet is only
      used internally as is not otherwise visible.
      fa1480f6
  2. 23 Aug, 2002 17 commits
  3. 22 Aug, 2002 19 commits