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])