From fdd9ec19239f5f2e9f94bdc29f424be0bf0390a5 Mon Sep 17 00:00:00 2001 From: DoDaek Date: Sun, 22 Sep 2019 21:36:29 +0900 Subject: [PATCH 1/2] set: Implement __sub__ of set --- py/set.go | 17 +++++++++++++++++ py/tests/set.py | 15 +++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/py/set.go b/py/set.go index af4eb4e5..6fa10a8f 100644 --- a/py/set.go +++ b/py/set.go @@ -142,6 +142,23 @@ func (s *Set) M__or__(other Object) (Object, error) { return ret, nil } +func (s *Set) M__sub__(other Object) (Object, error) { + ret := NewSet() + b, ok := other.(*Set) + if !ok { + return nil, ExceptionNewf(TypeError, "unsupported operand type(s) for &: '%s' and '%s'", s.Type().Name, other.Type().Name) + } + for j := range s.items { + ret.items[j] = SetValue{} + } + for i := range b.items { + if _, ok := s.items[i]; ok { + delete(ret.items, i) + } + } + return ret, nil +} + // Check interface is satisfied var _ I__len__ = (*Set)(nil) var _ I__bool__ = (*Set)(nil) diff --git a/py/tests/set.py b/py/tests/set.py index e46b412a..1309c016 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -30,4 +30,19 @@ assert 4 in c assert 5 in c +doc="__sub__" +a = {1, 2, 3} +b = {2, 3, 4, 5} +c = a.__sub__(b) +d = b.__sub__(a) +assert 1 in c +assert 4 in d +assert 5 in d + +e = a - b +f = b - a +assert 1 in c +assert 4 in d +assert 5 in d + doc="finished" \ No newline at end of file From 3b404c485c16f3a5e92beceefc7d4cd10676ac90 Mon Sep 17 00:00:00 2001 From: DoDaek Date: Sun, 22 Sep 2019 21:37:47 +0900 Subject: [PATCH 2/2] set: Implement __xor__ of set --- py/set.go | 20 ++++++++++++++++++++ py/tests/set.py | 13 +++++++++++++ 2 files changed, 33 insertions(+) diff --git a/py/set.go b/py/set.go index 6fa10a8f..a27143ba 100644 --- a/py/set.go +++ b/py/set.go @@ -159,6 +159,26 @@ func (s *Set) M__sub__(other Object) (Object, error) { return ret, nil } +func (s *Set) M__xor__(other Object) (Object, error) { + ret := NewSet() + b, ok := other.(*Set) + if !ok { + return nil, ExceptionNewf(TypeError, "unsupported operand type(s) for &: '%s' and '%s'", s.Type().Name, other.Type().Name) + } + for j := range s.items { + ret.items[j] = SetValue{} + } + for i := range b.items { + _, ok := s.items[i] + if ok { + delete(ret.items, i) + } else { + ret.items[i] = SetValue{} + } + } + return ret, nil +} + // Check interface is satisfied var _ I__len__ = (*Set)(nil) var _ I__bool__ = (*Set)(nil) diff --git a/py/tests/set.py b/py/tests/set.py index 1309c016..f6fa539a 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -45,4 +45,17 @@ assert 4 in d assert 5 in d +doc="__xor__" +a = {1, 2, 3} +b = {2, 3, 4, 5} +c = a.__xor__(b) +assert 1 in c +assert 4 in c +assert 5 in c + +d = a ^ b +assert 1 in c +assert 4 in c +assert 5 in c + doc="finished" \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy