feat: implement std.sum

This commit is contained in:
Rohit Jangid 2023-02-15 15:54:18 +05:30 committed by Dave Cunningham
parent b38dfbb86e
commit 83b9f8341f
5 changed files with 20 additions and 0 deletions

View File

@ -1885,6 +1885,22 @@ func builtinNative(i *interpreter, name value) (value, error) {
return &valueNull{}, nil
}
func builtinSum(i *interpreter, arrv value) (value, error) {
arr, err := i.getArray(arrv)
if err != nil {
return nil, err
}
sum := 0.0
for _, elem := range arr.elements {
elemValue, err := i.evaluateNumber(elem)
if err != nil {
return nil, err
}
sum += elemValue.value
}
return makeValueNumber(sum), nil
}
// Utils for builtins - TODO(sbarzowski) move to a separate file in another commit
type builtin interface {
@ -2190,6 +2206,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
&unaryBuiltin{name: "decodeUTF8", function: builtinDecodeUTF8, params: ast.Identifiers{"arr"}},
&generalBuiltin{name: "sort", function: builtinSort, params: []generalBuiltinParameter{{name: "arr"}, {name: "keyF", defaultValue: functionID}}},
&unaryBuiltin{name: "native", function: builtinNative, params: ast.Identifiers{"x"}},
&unaryBuiltin{name: "sum", function: builtinSum, params: ast.Identifiers{"arr"}},
// internal
&unaryBuiltin{name: "$objectFlatMerge", function: builtinUglyObjectFlatMerge, params: ast.Identifiers{"x"}},

View File

@ -137,6 +137,7 @@ func prepareStdlib(g *typeGraph) {
"flattenArrays": g.newSimpleFuncType(anyArrayType, "arrs"),
"sort": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
"uniq": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
"sum": g.newSimpleFuncType(numberType, "arr"),
// Sets

1
testdata/builtinSum.golden vendored Normal file
View File

@ -0,0 +1 @@
6

1
testdata/builtinSum.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
std.sum([1,2,3])

0
testdata/builtinSum.linter.golden vendored Normal file
View File