From 03bde106496e0b11a9227a655de0bb4ebe37f7cc Mon Sep 17 00:00:00 2001 From: Stephen Amar Date: Thu, 17 Apr 2025 23:36:51 -0700 Subject: [PATCH] Fix std.min/maxArray --- sjsonnet/src/sjsonnet/Std.scala | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sjsonnet/src/sjsonnet/Std.scala b/sjsonnet/src/sjsonnet/Std.scala index 97e4514d..3e0f8517 100644 --- a/sjsonnet/src/sjsonnet/Std.scala +++ b/sjsonnet/src/sjsonnet/Std.scala @@ -188,7 +188,10 @@ class Std(private val additionalNativeFunctions: Map[String, Val.Builtin] = Map. } else if (keyF.isInstanceOf[Val.False]) { arr.asStrictArray.min(ev) } else { - arr.asStrictArray.map(v => keyF.asInstanceOf[Val.Func].apply1(v, pos.fileScope.noOffsetPos)(ev)).min(ev) + val minTuple = arr.asStrictArray + .map(v => keyF.asInstanceOf[Val.Func].apply1(v, pos.fileScope.noOffsetPos)(ev)) + .zipWithIndex.min((x: (Val, Int), y: (Val, Int)) => ev.compare(x._1, y._1)) + arr.force(minTuple._2) } } } @@ -207,7 +210,10 @@ class Std(private val additionalNativeFunctions: Map[String, Val.Builtin] = Map. } else if (keyF.isInstanceOf[Val.False]) { arr.asStrictArray.max(ev) } else { - arr.asStrictArray.map(v => keyF.asInstanceOf[Val.Func].apply1(v, pos.fileScope.noOffsetPos)(ev)).max(ev) + val maxTuple = arr.asStrictArray + .map(v => keyF.asInstanceOf[Val.Func].apply1(v, pos.fileScope.noOffsetPos)(ev)) + .zipWithIndex.max((x: (Val, Int), y: (Val, Int)) => ev.compare(x._1, y._1)) + arr.force(maxTuple._2) } } }