mirror of
https://github.com/google/go-jsonnet.git
synced 2025-09-28 17:01:02 +02:00
feat: implement std.sum
This commit is contained in:
parent
b38dfbb86e
commit
83b9f8341f
17
builtins.go
17
builtins.go
@ -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"}},
|
||||
|
@ -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
1
testdata/builtinSum.golden
vendored
Normal file
@ -0,0 +1 @@
|
||||
6
|
1
testdata/builtinSum.jsonnet
vendored
Normal file
1
testdata/builtinSum.jsonnet
vendored
Normal file
@ -0,0 +1 @@
|
||||
std.sum([1,2,3])
|
0
testdata/builtinSum.linter.golden
vendored
Normal file
0
testdata/builtinSum.linter.golden
vendored
Normal file
Loading…
x
Reference in New Issue
Block a user