From 61b18456d7c8a89fdddee64dd410ff9d30a6327e Mon Sep 17 00:00:00 2001 From: Zhang Eric Date: Mon, 11 May 2020 23:34:50 +0800 Subject: [PATCH] #234 Added new func to std_seq.go. --- syntax/std_seq.go | 36 ++++++++++++++++++++++++++++++++++++ syntax/std_seq_test.go | 5 +++++ 2 files changed, 41 insertions(+) diff --git a/syntax/std_seq.go b/syntax/std_seq.go index 4259ad2e..fda3b94e 100644 --- a/syntax/std_seq.go +++ b/syntax/std_seq.go @@ -64,5 +64,41 @@ func stdSeq() rel.Attr { return rel.NewTupleAttr("seq", rel.NewNativeFunctionAttr("concat", stdSeqConcat), rel.NewNativeFunctionAttr("repeat", stdSeqRepeat), + createNestedFuncAttr("contains", 2, func(args ...rel.Value) rel.Value { + return rel.NewBool(strings.Contains(mustAsString(args[0]), mustAsString(args[1]))) + }), + createNestedFuncAttr("split", 2, func(args ...rel.Value) rel.Value { + splitted := strings.Split(mustAsString(args[0]), mustAsString(args[1])) + vals := make([]rel.Value, 0, len(splitted)) + for _, s := range splitted { + vals = append(vals, rel.NewString([]rune(s))) + } + return rel.NewArray(vals...) + }), + createNestedFuncAttr("sub", 3, func(args ...rel.Value) rel.Value { + return rel.NewString( + []rune( + strings.ReplaceAll( + mustAsString(args[0]), + mustAsString(args[1]), + mustAsString(args[2]), + ), + ), + ) + }), + createNestedFuncAttr("has_prefix", 2, func(args ...rel.Value) rel.Value { + return rel.NewBool(strings.HasPrefix(mustAsString(args[0]), mustAsString(args[1]))) + }), + createNestedFuncAttr("has_suffix", 2, func(args ...rel.Value) rel.Value { + return rel.NewBool(strings.HasPrefix(mustAsString(args[0]), mustAsString(args[1]))) + }), + createNestedFuncAttr("join", 2, func(args ...rel.Value) rel.Value { + strs := args[0].(rel.Set) + toJoin := make([]string, 0, strs.Count()) + for i, ok := strs.(rel.Set).ArrayEnumerator(); ok && i.MoveNext(); { + toJoin = append(toJoin, mustAsString(i.Current())) + } + return rel.NewString([]rune(strings.Join(toJoin, mustAsString(args[1])))) + }), ) } diff --git a/syntax/std_seq_test.go b/syntax/std_seq_test.go index 9365218a..7b73ad70 100644 --- a/syntax/std_seq_test.go +++ b/syntax/std_seq_test.go @@ -36,3 +36,8 @@ func TestSeqRepeat(t *testing.T) { AssertCodePanics(t, `//seq.repeat(2, 3.4)`) } + +func TestSeqContains(t *testing.T) { + t.Parallel() + +}