From 90c142104b3670e4f3a1ed8ff56839668ed732cf Mon Sep 17 00:00:00 2001 From: Carl Verge Date: Tue, 19 Mar 2024 09:11:22 -0700 Subject: [PATCH 1/2] implement std any all --- sjsonnet/src/sjsonnet/Std.scala | 16 +++++++++++++++- .../src/sjsonnet/Std0150FunctionsTests.scala | 14 ++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/sjsonnet/src/sjsonnet/Std.scala b/sjsonnet/src/sjsonnet/Std.scala index d47e1b0..9c79d0c 100644 --- a/sjsonnet/src/sjsonnet/Std.scala +++ b/sjsonnet/src/sjsonnet/Std.scala @@ -124,6 +124,18 @@ class Std { } } + private object All extends Val.Builtin1("arr") { + def evalRhs(arr: Val, ev: EvalScope, pos: Position): Val = { + Val.bool(pos, arr.asArr.forall(v => v.asBoolean)) + } + } + + private object Any extends Val.Builtin1("arr") { + def evalRhs(arr: Val, ev: EvalScope, pos: Position): Val = { + Val.bool(pos, arr.asArr.iterator.exists(v => v.asBoolean)) + } + } + private object Type extends Val.Builtin1("x") { def evalRhs(x: Val, ev: EvalScope, pos: Position): Val = Val.Str(pos, x match { case _: Val.Bool => "boolean" @@ -1239,7 +1251,9 @@ class Std { } else { args(2) } - } + }, + "all" -> All, + "any" -> Any ) val Std = Val.Obj.mk( null, diff --git a/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala b/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala index 26234a8..a039009 100644 --- a/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala +++ b/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala @@ -166,5 +166,19 @@ object Std0150FunctionsTests extends TestSuite { eval("""std.get({a: 1}, "b", default=2)""") ==> ujson.Num(2) eval("""std.get({a:: 1}, "a", inc_hidden=false)""") ==> ujson.Null } + + test("any") { + eval("""std.any([])""") ==> ujson.Bool(false) + eval("""std.any([true, true, true])""") ==> ujson.Bool(true) + eval("""std.any([false, true, false])""") ==> ujson.Bool(true) + eval("""std.any([false, false, false])""") ==> ujson.Bool(false) + } + + test("all") { + eval("""std.all([])""") ==> ujson.Bool(false) + eval("""std.all([true, true, true])""") ==> ujson.Bool(true) + eval("""std.all([false, true, false])""") ==> ujson.Bool(false) + eval("""std.all([false, false, false])""") ==> ujson.Bool(false) + } } } From 972f3e4a759a8f7ec5487ae3ed46915d655c4c30 Mon Sep 17 00:00:00 2001 From: Carl Verge Date: Tue, 19 Mar 2024 09:14:18 -0700 Subject: [PATCH 2/2] fix test --- sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala b/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala index a039009..f401a37 100644 --- a/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala +++ b/sjsonnet/test/src/sjsonnet/Std0150FunctionsTests.scala @@ -175,7 +175,7 @@ object Std0150FunctionsTests extends TestSuite { } test("all") { - eval("""std.all([])""") ==> ujson.Bool(false) + eval("""std.all([])""") ==> ujson.Bool(true) eval("""std.all([true, true, true])""") ==> ujson.Bool(true) eval("""std.all([false, true, false])""") ==> ujson.Bool(false) eval("""std.all([false, false, false])""") ==> ujson.Bool(false)