Skip to content

Commit 6a15a2f

Browse files
eduardosmjohnbartholomew
authored andcommitted
fix: output original value from array in std.minArray and std.maxArray instead of result of keyF
1 parent 106c8f0 commit 6a15a2f

13 files changed

+32
-6
lines changed

builtins.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2293,21 +2293,30 @@ func builtinMinArray(i *interpreter, arguments []value) (value, error) {
22932293
if num == 0 {
22942294
return nil, i.Error("Expected at least one element in array. Got none")
22952295
}
2296-
minVal, err := keyF.call(i, args(arr.elements[0]))
2296+
minVal, err := arr.elements[0].getValue(i)
2297+
if err != nil {
2298+
return nil, err
2299+
}
2300+
minValKey, err := keyF.call(i, args(arr.elements[0]))
22972301
if err != nil {
22982302
return nil, err
22992303
}
23002304
for index := 1; index < num; index++ {
2301-
current, err := keyF.call(i, args(arr.elements[index]))
2305+
current, err := arr.elements[index].getValue(i)
2306+
if err != nil {
2307+
return nil, err
2308+
}
2309+
currentKey, err := keyF.call(i, args(arr.elements[index]))
23022310
if err != nil {
23032311
return nil, err
23042312
}
2305-
cmp, err := valueCmp(i, minVal, current)
2313+
cmp, err := valueCmp(i, minValKey, currentKey)
23062314
if err != nil {
23072315
return nil, err
23082316
}
23092317
if cmp > 0 {
23102318
minVal = current
2319+
minValKey = currentKey
23112320
}
23122321
}
23132322
return minVal, nil
@@ -2329,21 +2338,30 @@ func builtinMaxArray(i *interpreter, arguments []value) (value, error) {
23292338
if num == 0 {
23302339
return nil, i.Error("Expected at least one element in array. Got none")
23312340
}
2332-
maxVal, err := keyF.call(i, args(arr.elements[0]))
2341+
maxVal, err := arr.elements[0].getValue(i)
2342+
if err != nil {
2343+
return nil, err
2344+
}
2345+
maxValKey, err := keyF.call(i, args(arr.elements[0]))
23332346
if err != nil {
23342347
return nil, err
23352348
}
23362349
for index := 1; index < num; index++ {
2337-
current, err := keyF.call(i, args(arr.elements[index]))
2350+
current, err := arr.elements[index].getValue(i)
2351+
if err != nil {
2352+
return nil, err
2353+
}
2354+
currentKey, err := keyF.call(i, args(arr.elements[index]))
23382355
if err != nil {
23392356
return nil, err
23402357
}
2341-
cmp, err := valueCmp(i, maxVal, current)
2358+
cmp, err := valueCmp(i, maxValKey, currentKey)
23422359
if err != nil {
23432360
return nil, err
23442361
}
23452362
if cmp < 0 {
23462363
maxVal = current
2364+
maxValKey = currentKey
23472365
}
23482366
}
23492367
return maxVal, nil

testdata/std.maxArray.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"b1"

testdata/std.maxArray.jsonnet

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
std.maxArray(["a2", "b1"])

testdata/std.maxArray.linter.golden

Whitespace-only changes.

testdata/std.maxArrayKeyF.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"a2"

testdata/std.maxArrayKeyF.jsonnet

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
std.maxArray(["a2", "b1"], keyF=function(x) x[1])

testdata/std.maxArrayKeyF.linter.golden

Whitespace-only changes.

testdata/std.minArray.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"a2"

testdata/std.minArray.jsonnet

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
std.minArray(["a2", "b1"])

testdata/std.minArray.linter.golden

Whitespace-only changes.

0 commit comments

Comments
 (0)