From 7d566b87d82fd69246a5bc491505b09af318200f Mon Sep 17 00:00:00 2001 From: SanggiHong Date: Sun, 29 Sep 2019 15:56:29 +0900 Subject: [PATCH 1/4] set: Implement initialization set with sequence --- py/sequence.go | 20 ++++++++++++++++++++ py/set.go | 7 ++++--- py/tests/set.py | 12 ++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/py/sequence.go b/py/sequence.go index 53e78295..430471c8 100644 --- a/py/sequence.go +++ b/py/sequence.go @@ -43,6 +43,26 @@ func SequenceList(v Object) (*List, error) { } } +// Converts a sequence object v into a Set +func SequenceSet(v Object) (*Set, error) { + switch x := v.(type) { + case Tuple: + return NewSetFromItems(x), nil + case *List: + return NewSetFromItems(x.Items), nil + default: + s := NewSet() + err := Iterate(v, func(item Object) bool { + s.Add(item) + return false + }) + if err != nil { + return nil, err + } + return s, nil + } +} + // Call __next__ for the python object // // Returns the next object diff --git a/py/set.go b/py/set.go index a27143ba..cf118be7 100644 --- a/py/set.go +++ b/py/set.go @@ -56,11 +56,12 @@ func SetNew(metatype *Type, args Tuple, kwargs StringDict) (Object, error) { if err != nil { return nil, err } - if iterable == nil { - return NewSet(), nil + if iterable != nil { + return SequenceSet(iterable) } + return NewSet(), nil // FIXME should be able to initialise from an iterable! - return NewSetFromItems(iterable.(Tuple)), nil + // return NewSetFromItems(iterable.(Tuple)), nil } var FrozenSetType = NewType("frozenset", "frozenset() -> empty frozenset object\nfrozenset(iterable) -> frozenset object\n\nBuild an immutable unordered collection of unique elements.") diff --git a/py/tests/set.py b/py/tests/set.py index f6fa539a..34c227f6 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -55,6 +55,18 @@ d = a ^ b assert 1 in c + +doc="set" +a = set([1,2,3]) +b = set("set") +c = set((4,5)) +assert 1 in a +assert 2 in a +assert 3 in a +assert "s" in b +assert "e" in b +assert "t" in b +>>>>>>> set-init-with-list assert 4 in c assert 5 in c From b64c1d23669da7a7f3ac4cb0436b05cfc8d5674b Mon Sep 17 00:00:00 2001 From: SanggiHong Date: Sun, 29 Sep 2019 16:03:24 +0900 Subject: [PATCH 2/4] Remove comment --- py/set.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/py/set.go b/py/set.go index cf118be7..a09cc8d2 100644 --- a/py/set.go +++ b/py/set.go @@ -60,8 +60,6 @@ func SetNew(metatype *Type, args Tuple, kwargs StringDict) (Object, error) { return SequenceSet(iterable) } return NewSet(), nil - // FIXME should be able to initialise from an iterable! - // return NewSetFromItems(iterable.(Tuple)), nil } var FrozenSetType = NewType("frozenset", "frozenset() -> empty frozenset object\nfrozenset(iterable) -> frozenset object\n\nBuild an immutable unordered collection of unique elements.") From bfd0cb301a7944e36008bfda1782d5ee0b378d73 Mon Sep 17 00:00:00 2001 From: SanggiHong Date: Sun, 29 Sep 2019 16:09:35 +0900 Subject: [PATCH 3/4] Remove typo --- py/tests/set.py | 1 - 1 file changed, 1 deletion(-) diff --git a/py/tests/set.py b/py/tests/set.py index 34c227f6..4bcca49b 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -66,7 +66,6 @@ assert "s" in b assert "e" in b assert "t" in b ->>>>>>> set-init-with-list assert 4 in c assert 5 in c From 130d715354caf41a3a3567ef9c373b4fbfd564b3 Mon Sep 17 00:00:00 2001 From: SanggiHong Date: Sun, 29 Sep 2019 16:53:18 +0900 Subject: [PATCH 4/4] set: Improve test code --- py/tests/set.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/py/tests/set.py b/py/tests/set.py index 4bcca49b..f2f867a7 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -60,6 +60,9 @@ a = set([1,2,3]) b = set("set") c = set((4,5)) +assert len(a) == 3 +assert len(b) == 3 +assert len(c) == 2 assert 1 in a assert 2 in a assert 3 in a 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