1. 24 Aug, 2002 6 commits
    • Guido van Rossum's avatar
      Speedup for PyObject_IsTrue(): check for True and False first. · 6248f441
      Guido van Rossum authored
      Because all built-in tests return bools now, this is the most common
      path!
      6248f441
    • Raymond Hettinger's avatar
      At Tim Peter's suggestion, propagated GvR's binary operator changes to · 1b9f5d4c
      Raymond Hettinger authored
      the inplace operators.  The strategy is to have the operator overloading
      code do the work and then to define equivalent method calls which rely on
      the operators.  The changes facilitate proper application of TypeError
      and NonImplementedErrors.
      
      Added corresponding tests to the test suite to make sure both the operator
      and method call versions get exercised.
      
      Add missing tests for difference_update().
      1b9f5d4c
    • 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 17 commits