On Sat, 2 Sept 2023 at 12:15, 'Martin R' via sage-devel
<sage-devel@googlegroups.com> wrote:
>
> On Saturday, 2 September 2023 at 11:39:12 UTC+2 Oscar Benjamin wrote:
>
> On Sat, 2 Sept 2023 at 08:44, 'Martin R' via sage-devel
> <sage-...@googlegroups.com> wrote:
>
> ...
>
>  It is easy for this sort of thing to be overlooked in test code and in fact
> messing with __eq__/__ne__ (more so __eq__) can invalidate much of the
> test suite so I would tread carefully.
>
> Could you provide an example?  I would think that in such a case a doctest 
> should catch the problem - what other purpose would a doctest have?

It is not so much an issue with doctests but in SymPy most tests are
pytest-style tests that look something like:

def test_A():
    assert A(1) == A(10)
    assert A(2) == A(7)
    assert A(3) != A(5)
    ...

Now if you change your class A to look like:

class A:
    def __eq__(self, other):
        return True
    def __ne__(self, other):
        return True

Then your test suite will pass regardless of what any of the rest of
the code does because every == or != returns True all the time.
Obviously you would not literally write "return True" but an
undetected bug having that sort of effect could invalidate many of the
tests so you have to be very careful how you write and test methods
like __eq__ and __ne__. That would make me nervous about wholesale
removal of __ne__ without some careful checking because it is not
*always* the case that removing __ne__ will have no effect.

The first contributor who submitted a PR for this in SymPy did not do
careful checking and did not seem to understand all of the
implications of removing __ne__ and so I did not trust the PR to be
merged regardless of the tests eventually passing (when the __ne__
methods that were still needed were restored). Subsequently the PR was
rewritten by a more experienced contributor and then merged. Some
other contributors seemed not to appreciate my concern over this at
the time but at least for SymPy removing some harmlessly redundant
__ne__ methods brought close to zero benefit in exchange for a
moderate risk of introducing bugs.

--
Oscar

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAHVvXxQrhhbDJSijpb5Mo4071FPsg6vU13TT_SbkPK%2B2O6GJLg%40mail.gmail.com.

Reply via email to