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/coverage.txt b/coverage.txt new file mode 100644 index 00000000..e69de29b 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 171900b3..b1b74e26 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{} @@ -102,6 +104,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 index e7023495..834e457b 100644 --- a/py/tests/set.py +++ b/py/tests/set.py @@ -56,6 +56,15 @@ d = a ^ b assert 1 in c +doc="__repr__" +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]) b = set("set") @@ -83,4 +92,4 @@ assert a.__eq__({1,2,3}) == True assert a.__ne__({1,2,3}) == False -doc="finished" \ No newline at end of file +doc="finished" 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 }