From a4d8dc4a9693d23faf83612f6bcd0db61553896f Mon Sep 17 00:00:00 2001 From: Jack Park Date: Tue, 8 Oct 2019 10:45:25 +0900 Subject: [PATCH 1/4] Implemented __repr__ of set --- go.mod | 2 ++ py/set.go | 21 +++++++++++++++++++++ py/tests/set.py | 4 ++++ 3 files changed, 27 insertions(+) create mode 100644 py/tests/set.py diff --git a/go.mod b/go.mod index 1bfb6b3f..d5dbd5c0 100644 --- a/go.mod +++ b/go.mod @@ -4,3 +4,5 @@ require ( github.com/gopherjs/gopherwasm v1.0.0 // indirect github.com/peterh/liner v1.1.0 ) + +go 1.13 diff --git a/py/set.go b/py/set.go index cc27a464..d61cecf2 100644 --- a/py/set.go +++ b/py/set.go @@ -8,6 +8,8 @@ package py +import "bytes" + var SetType = NewTypeX("set", "set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.", SetNew, nil) type SetValue struct{} @@ -103,6 +105,25 @@ func (s *Set) M__bool__() (Object, error) { return NewBool(len(s.items) > 0), nil } +func (s * Set) M__repr__() (Object, error) { + var out bytes.Buffer + out.WriteRune('{') + spacer := false + for item := range s.items { + if spacer { + out.WriteString(", ") + } + str, err := ReprAsString(item) + if err != nil { + return nil, err + } + out.WriteString(str) + spacer = true + } + out.WriteRune('}') + return String(out.String()), nil +} + func (s *Set) M__iter__() (Object, error) { items := make(Tuple, 0, len(s.items)) for item := range s.items { diff --git a/py/tests/set.py b/py/tests/set.py new file mode 100644 index 00000000..400bff5d --- /dev/null +++ b/py/tests/set.py @@ -0,0 +1,4 @@ +doc="repr" +assert repr({1,2,3}) == "{1, 2, 3}" + +doc="finished" From ff014f62f2f8cf23435d540794bcd7a59646fe97 Mon Sep 17 00:00:00 2001 From: Jack Park Date: Tue, 8 Oct 2019 10:59:05 +0900 Subject: [PATCH 2/4] Gofmt --- builtin/builtin.go | 4 ++-- parser/lexer_test.go | 2 +- py/range.go | 7 +++---- py/range_repr110.go | 2 +- py/range_repr19.go | 2 +- py/set.go | 2 +- symtable/symtable_data_test.go | 2 +- time/time.go | 4 ++-- 8 files changed, 12 insertions(+), 13 deletions(-) diff --git a/builtin/builtin.go b/builtin/builtin.go index e99969c3..b009090a 100644 --- a/builtin/builtin.go +++ b/builtin/builtin.go @@ -87,8 +87,8 @@ func init() { "object": py.ObjectType, "range": py.RangeType, // "reversed": py.ReversedType, - "set": py.SetType, - "slice": py.SliceType, + "set": py.SetType, + "slice": py.SliceType, "staticmethod": py.StaticMethodType, "str": py.StringType, // "super": py.SuperType, diff --git a/parser/lexer_test.go b/parser/lexer_test.go index d8655605..18e20e5a 100644 --- a/parser/lexer_test.go +++ b/parser/lexer_test.go @@ -574,7 +574,7 @@ func approxEq(a, b float64) bool { log.Printf("ApproxEq(a = %#v, b = %#v)", a, b) diff := a - b log.Printf("ApproxEq(diff = %e)", diff) - if math.Abs(diff) > 1E-10 { + if math.Abs(diff) > 1e-10 { log.Printf("ApproxEq(false)") return false } diff --git a/py/range.go b/py/range.go index a54005c8..1f0513f8 100644 --- a/py/range.go +++ b/py/range.go @@ -226,9 +226,9 @@ func computeRangeSlice(r *Range, s *Slice) (Object, error) { sliceLength = computeRangeLength(startIndex, stopIndex, stepIndex) return &Range{ - Start: startIndex, - Stop: stopIndex, - Step: stepIndex, + Start: startIndex, + Stop: stopIndex, + Step: stepIndex, Length: sliceLength, }, nil } @@ -238,7 +238,6 @@ var _ I__getitem__ = (*Range)(nil) var _ I__iter__ = (*Range)(nil) var _ I_iterator = (*RangeIterator)(nil) - func (a *Range) M__eq__(other Object) (Object, error) { b, ok := other.(*Range) if !ok { diff --git a/py/range_repr110.go b/py/range_repr110.go index 2db201d2..dfe4ee8c 100644 --- a/py/range_repr110.go +++ b/py/range_repr110.go @@ -35,4 +35,4 @@ func (r *Range) repr() (Object, error) { b.WriteString(")") return String(b.String()), nil -} \ No newline at end of file +} diff --git a/py/range_repr19.go b/py/range_repr19.go index ff527aa6..0fd8b791 100644 --- a/py/range_repr19.go +++ b/py/range_repr19.go @@ -35,4 +35,4 @@ func (r *Range) repr() (Object, error) { b.WriteString(")") return String(b.String()), nil -} \ No newline at end of file +} diff --git a/py/set.go b/py/set.go index 11b31409..9f66024d 100644 --- a/py/set.go +++ b/py/set.go @@ -104,7 +104,7 @@ func (s *Set) M__bool__() (Object, error) { return NewBool(len(s.items) > 0), nil } -func (s * Set) M__repr__() (Object, error) { +func (s *Set) M__repr__() (Object, error) { var out bytes.Buffer out.WriteRune('{') spacer := false diff --git a/symtable/symtable_data_test.go b/symtable/symtable_data_test.go index 05ec1da6..b755841d 100644 --- a/symtable/symtable_data_test.go +++ b/symtable/symtable_data_test.go @@ -514,7 +514,7 @@ var symtableTestData = []struct { Children: Children{}, }, }, - }, nil,""}, + }, nil, ""}, {"def fn(a):\n global b\n global b\n return b", "exec", &SymTable{ Type: ModuleBlock, Name: "top", diff --git a/time/time.go b/time/time.go index 84eb8288..88deb94a 100644 --- a/time/time.go +++ b/time/time.go @@ -18,7 +18,7 @@ Return the current time in seconds since the Epoch. Fractions of a second may be present if the system clock provides them.` func time_time(self py.Object) (py.Object, error) { - return py.Float(time.Now().UnixNano()) / 1E9, nil + return py.Float(time.Now().UnixNano()) / 1e9, nil } // func floatclock(_Py_clock_info_t *info) (py.Object, error) { @@ -141,7 +141,7 @@ func time_sleep(self py.Object, args py.Tuple) (py.Object, error) { if secs < 0 { return nil, py.ExceptionNewf(py.ValueError, "sleep length must be non-negative") } - time.Sleep(time.Duration(secs * 1E9)) + time.Sleep(time.Duration(secs * 1e9)) return py.None, nil } From 3a0e87b04e6903f69812424e2e26fb1c96cec14f Mon Sep 17 00:00:00 2001 From: Jack Park Date: Tue, 8 Oct 2019 12:40:06 +0900 Subject: [PATCH 3/4] Fixed test error --- builtin/testfile | 1 + coverage.txt | 0 py/tests/set.py | 2 +- 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 builtin/testfile create mode 100644 coverage.txt diff --git a/builtin/testfile b/builtin/testfile new file mode 100644 index 00000000..1f1d063a --- /dev/null +++ b/builtin/testfile @@ -0,0 +1 @@ +1,2,3, diff --git a/coverage.txt b/coverage.txt new file mode 100644 index 00000000..e69de29b diff --git a/py/tests/set.py b/py/tests/set.py index b598151e..904d3f99 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -56,7 +56,7 @@ d = a ^ b assert 1 in c -doc="repr" +doc="__repr__" assert repr({1,2,3}) == "{1, 2, 3}" doc="set" From 44c330f3751babe6be3115b2b80293edb95d4ddb Mon Sep 17 00:00:00 2001 From: Jack Park Date: Tue, 8 Oct 2019 13:17:58 +0900 Subject: [PATCH 4/4] Fixed test error --- py/tests/set.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/py/tests/set.py b/py/tests/set.py index 904d3f99..780b1ff4 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -57,7 +57,13 @@ assert 1 in c doc="__repr__" -assert repr({1,2,3}) == "{1, 2, 3}" +a = {1, 2, 3} +b = a.__repr__() +assert "{" in b +assert "1" in b +assert "2" in b +assert "3" in b +assert "}" in b doc="set" a = set([1,2,3]) 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