(i *interpreter, arguments []value)
| 2328 | } |
| 2329 | |
| 2330 | func builtinMinArray(i *interpreter, arguments []value) (value, error) { |
| 2331 | arrv := arguments[0] |
| 2332 | keyFv := arguments[1] |
| 2333 | onEmpty := arguments[2] |
| 2334 | |
| 2335 | arr, err := i.getArray(arrv) |
| 2336 | if err != nil { |
| 2337 | return nil, err |
| 2338 | } |
| 2339 | keyF, err := i.getFunction(keyFv) |
| 2340 | if err != nil { |
| 2341 | return nil, err |
| 2342 | } |
| 2343 | num := arr.length() |
| 2344 | if num == 0 { |
| 2345 | if onEmpty == nil { |
| 2346 | return nil, i.Error("Expected at least one element in array. Got none") |
| 2347 | } else { |
| 2348 | return onEmpty, nil |
| 2349 | } |
| 2350 | } |
| 2351 | minVal, err := arr.elements[0].getValue(i) |
| 2352 | if err != nil { |
| 2353 | return nil, err |
| 2354 | } |
| 2355 | minValKey, err := keyF.call(i, args(arr.elements[0])) |
| 2356 | if err != nil { |
| 2357 | return nil, err |
| 2358 | } |
| 2359 | for index := 1; index < num; index++ { |
| 2360 | current, err := arr.elements[index].getValue(i) |
| 2361 | if err != nil { |
| 2362 | return nil, err |
| 2363 | } |
| 2364 | currentKey, err := keyF.call(i, args(arr.elements[index])) |
| 2365 | if err != nil { |
| 2366 | return nil, err |
| 2367 | } |
| 2368 | cmp, err := valueCmp(i, minValKey, currentKey) |
| 2369 | if err != nil { |
| 2370 | return nil, err |
| 2371 | } |
| 2372 | if cmp > 0 { |
| 2373 | minVal = current |
| 2374 | minValKey = currentKey |
| 2375 | } |
| 2376 | } |
| 2377 | return minVal, nil |
| 2378 | } |
| 2379 | |
| 2380 | func builtinMaxArray(i *interpreter, arguments []value) (value, error) { |
| 2381 | arrv := arguments[0] |
nothing calls this directly
no test coverage detected
searching dependent graphs…