diff --git a/py/bool.go b/py/bool.go index d2e14326..82547754 100644 --- a/py/bool.go +++ b/py/bool.go @@ -93,6 +93,16 @@ func (a Bool) M__ne__(other Object) (Object, error) { return True, nil } +func notEq(eq Object, err error) (Object, error) { + if err != nil { + return nil, err + } + if eq == NotImplemented { + return eq, nil + } + return Not(eq) +} + // Check interface is satisfied var _ I__bool__ = Bool(false) var _ I__index__ = Bool(false) diff --git a/py/slice.go b/py/slice.go index 827ad718..be5594d1 100644 --- a/py/slice.go +++ b/py/slice.go @@ -151,6 +151,31 @@ func (r *Slice) GetIndices(length int) (start, stop, step, slicelength int, err return } +func (a *Slice) M__eq__(other Object) (Object, error) { + b, ok := other.(*Slice) + if !ok { + return NotImplemented, nil + } + + if a.Start != b.Start { + return False, nil + } + + if a.Stop != b.Stop { + return False, nil + } + + if a.Step != b.Step { + return False, nil + } + + return True, nil +} + +func (a *Slice) M__ne__(other Object) (Object, error) { + return notEq(a.M__eq__(other)) +} + func init() { SliceType.Dict["start"] = &Property{ Fget: func(self Object) (Object, error) { diff --git a/py/tests/slice.py b/py/tests/slice.py index 8fb84a84..24b31677 100644 --- a/py/tests/slice.py +++ b/py/tests/slice.py @@ -13,4 +13,15 @@ assert a.stop == 10 assert a.step == 1 +assert slice(1).__eq__(slice(1)) +assert slice(1) != slice(2) +assert slice(1) == slice(None, 1, None) +assert slice(0, 0, 0) == slice(0, 0, 0) + +assert slice(0, 0, 1) != slice(0, 0, 0) +assert slice(0, 1, 0) != slice(0, 0, 0) +assert slice(1, 0, 0) != slice(0, 0, 0) +assert slice(0).__ne__(slice(1)) +assert slice(0, None, 3).__ne__(slice(0, 0, 3)) + doc="finished" \ No newline at end of file