diff --git a/dict_test.go b/dict_test.go index 93aa413..ebede3a 100644 --- a/dict_test.go +++ b/dict_test.go @@ -23,22 +23,9 @@ func TestDictParser(t *testing.T) { inputs := []inputType{ /* 1 */ {`{}`, map[any]any{}, nil}, /* 2 */ {`{123}`, nil, errors.New(`[1:6] expected ":", got "}"`)}, - /* 3 */ {`{1:"one",2:"two",3:"three"}`, map[int64]any{int64(1):"one", int64(2):"two", int64(3):"three"}, nil}, + /* 3 */ {`{1:"one",2:"two",3:"three"}`, map[int64]any{int64(1): "one", int64(2): "two", int64(3): "three"}, nil}, /* 4 */ {`{1:"one",2:"two",3:"three"}.2`, "three", nil}, - // /* 3 */ {`[1,2,"hello"]`, []any{int64(1), int64(2), "hello"}, nil}, - // /* 4 */ {`[1+2, not true, "hello"]`, []any{int64(3), false, "hello"}, nil}, - // /* 5 */ {`[1,2]+[3]`, []any{int64(1), int64(2), int64(3)}, nil}, - // /* 6 */ {`[1,4,3,2]-[3]`, []any{int64(1), int64(4), int64(2)}, nil}, - // /* 7 */ {`add([1,4,3,2])`, int64(10), nil}, - // /* 8 */ {`add([1,[2,2],3,2])`, int64(10), nil}, - // /* 9 */ {`mul([1,4,3.0,2])`, float64(24.0), nil}, - // /* 10 */ {`add([1,"hello"])`, nil, errors.New(`add(): param nr 2 (2 in 1) has wrong type string, number expected`)}, - // /* 11 */ {`[a=1,b=2,c=3] but a+b+c`, int64(6), nil}, - // /* 12 */ {`[1,2,3] << 2+2`, []any{int64(1), int64(2), int64(3), int64(4)}, nil}, - // /* 13 */ {`2-1 >> [2,3]`, []any{int64(1), int64(2), int64(3)}, nil}, - // /* 14 */ {`[1,2,3].1`, int64(2), nil}, - // /* 15 */ {`ls=[1,2,3] but ls.1`, int64(2), nil}, - // /* 16 */ {`ls=[1,2,3] but ls.(-1)`, int64(3), nil}, + /* 5 */ {`#{1:"one",2:"two",3:"three"}`, int64(3), nil}, } succeeded := 0 diff --git a/operator-length.go b/operator-length.go index 1e91a2a..28bea6f 100644 --- a/operator-length.go +++ b/operator-length.go @@ -29,6 +29,9 @@ func evalLength(ctx ExprContext, self *term) (v any, err error) { } else if IsString(childValue) { s, _ := childValue.(string) v = int64(len(s)) + } else if IsDict(childValue) { + m, _ := childValue.(map[any]any) + v = int64(len(m)) } else if it, ok := childValue.(Iterator); ok { if extIt, ok := childValue.(ExtIterator); ok && extIt.HasOperation(countName) { count, _ := extIt.CallOperation(countName, nil)