From 1eda1c24733f4e306368a303fefc38aebca23ec6 Mon Sep 17 00:00:00 2001 From: Kasper Aaquist Johansen Date: Tue, 4 Oct 2022 22:54:00 +0200 Subject: [PATCH 1/6] feat: added random number function Signed-off-by: Kasper Aaquist Johansen --- .../feel/impl/builtin/NumericBuiltinFunctions.scala | 10 +++++++++- .../feel/impl/builtin/BuiltinNumberFunctionTest.scala | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala b/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala index bbefb38c3..dcdff894b 100644 --- a/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala +++ b/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala @@ -14,6 +14,7 @@ import org.camunda.feel.syntaxtree.{ } import scala.math.BigDecimal.RoundingMode +import scala.util.Random object NumericBuiltinFunctions { @@ -32,7 +33,8 @@ object NumericBuiltinFunctions { "round up" -> List(roundUpFunction), "round down" -> List(roundDownFunction), "round half up" -> List(roundHalfUpFunction), - "round half down" -> List(roundHalfDownFunction) + "round half down" -> List(roundHalfDownFunction), + "random number" -> List(randomNumberFunction) ) private def decimalFunction = builtinFunction( @@ -164,4 +166,10 @@ object NumericBuiltinFunctions { case List(ValNumber(n), ValNumber(scale)) => round(n, scale, RoundingMode.HALF_DOWN) }) + + private def randomNumberFunction = + builtinFunction(params = List(), invoke = { + case List() => + Random.nextFloat() + }) } diff --git a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala index 07696835d..f098cf3f6 100644 --- a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala +++ b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala @@ -17,6 +17,7 @@ package org.camunda.feel.impl.builtin import org.camunda.feel.impl.FeelIntegrationTest +import org.camunda.feel.syntaxtree import org.camunda.feel.syntaxtree._ import org.scalatest.matchers.should.Matchers import org.scalatest.flatspec.AnyFlatSpec @@ -259,4 +260,12 @@ class BuiltinNumberFunctionsTest eval(" round half down(-1.126, 2) ") should be(ValNumber(-1.13)) } + it should "return a number between 0.0 and 1.0 " in { + eval(" random number() ") should be + } + + "A random number() function" should "return a number" in { + eval(" random number() ") shouldBe a [ValNumber] + } + } From 52eeef41894c9dc532ec9158ab20cf0f5820f2cd Mon Sep 17 00:00:00 2001 From: Kasper Aaquist Johansen Date: Tue, 4 Oct 2022 23:01:00 +0200 Subject: [PATCH 2/6] fix: changed function to return ValNumber type Signed-off-by: Kasper Aaquist Johansen --- .../org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala | 2 +- .../camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala b/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala index dcdff894b..e59b6d19a 100644 --- a/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala +++ b/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala @@ -170,6 +170,6 @@ object NumericBuiltinFunctions { private def randomNumberFunction = builtinFunction(params = List(), invoke = { case List() => - Random.nextFloat() + ValNumber(Random.nextFloat()) }) } diff --git a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala index f098cf3f6..efd42534f 100644 --- a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala +++ b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala @@ -261,7 +261,7 @@ class BuiltinNumberFunctionsTest } it should "return a number between 0.0 and 1.0 " in { - eval(" random number() ") should be + eval(" random number() ") should be //(be >= ValNumber(0.0) and be <= ValNumber(1.0)) } "A random number() function" should "return a number" in { From f25200dd5b97f192a455f8331635e46eceed0e36 Mon Sep 17 00:00:00 2001 From: Kasper Aaquist Johansen Date: Wed, 5 Oct 2022 16:55:35 +0200 Subject: [PATCH 3/6] fix: fixed test review comment Signed-off-by: Kasper Aaquist Johansen --- .../feel/impl/builtin/BuiltinNumberFunctionTest.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala index efd42534f..f58bb105b 100644 --- a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala +++ b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala @@ -261,11 +261,15 @@ class BuiltinNumberFunctionsTest } it should "return a number between 0.0 and 1.0 " in { - eval(" random number() ") should be //(be >= ValNumber(0.0) and be <= ValNumber(1.0)) + + eval(" random number() ") match { + case ValNumber(x) => x should (be >= BigDecimal(0) and be <= BigDecimal(1)) + case other => fail() + } } "A random number() function" should "return a number" in { + eval(" random number() ") shouldBe a [ValNumber] } - } From 9199bd8ee992cd963f7ec05fe8d3ee84ad0e1206 Mon Sep 17 00:00:00 2001 From: Kasper Aaquist Johansen Date: Wed, 5 Oct 2022 17:05:58 +0200 Subject: [PATCH 4/6] fix: added docs for random number Signed-off-by: Kasper Aaquist Johansen --- .../feel-built-in-functions-numeric.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/docs/reference/builtin-functions/feel-built-in-functions-numeric.md b/docs/docs/reference/builtin-functions/feel-built-in-functions-numeric.md index e962ef2ef..5406b06f0 100644 --- a/docs/docs/reference/builtin-functions/feel-built-in-functions-numeric.md +++ b/docs/docs/reference/builtin-functions/feel-built-in-functions-numeric.md @@ -254,3 +254,16 @@ even(5) even(2) // true ``` + +## random number() + +Returns number between 0 and 1 + +- parameters: + - NaN +- result: number + +```js +random number() +// 0.9701618132579795 +``` \ No newline at end of file From 758d2703346e28b407a1ff2ef9e61482d235c5f3 Mon Sep 17 00:00:00 2001 From: Kasper Aaquist Johansen Date: Thu, 6 Oct 2022 10:11:35 +0200 Subject: [PATCH 5/6] fix: review comment --- .../org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala b/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala index e59b6d19a..2ebca4369 100644 --- a/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala +++ b/src/main/scala/org/camunda/feel/impl/builtin/NumericBuiltinFunctions.scala @@ -170,6 +170,6 @@ object NumericBuiltinFunctions { private def randomNumberFunction = builtinFunction(params = List(), invoke = { case List() => - ValNumber(Random.nextFloat()) + ValNumber(Random.nextDouble()) }) } From e96dcd1f6949331c38f6730b69a1598058f63ab2 Mon Sep 17 00:00:00 2001 From: Kasper Aaquist Johansen Date: Thu, 6 Oct 2022 10:13:09 +0200 Subject: [PATCH 6/6] fix: review comment --- .../feel/impl/builtin/BuiltinNumberFunctionTest.scala | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala index f58bb105b..58e30883a 100644 --- a/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala +++ b/src/test/scala/org/camunda/feel/impl/builtin/BuiltinNumberFunctionTest.scala @@ -260,6 +260,12 @@ class BuiltinNumberFunctionsTest eval(" round half down(-1.126, 2) ") should be(ValNumber(-1.13)) } + + "A random number() function" should "return a number" in { + + eval(" random number() ") shouldBe a [ValNumber] + } + it should "return a number between 0.0 and 1.0 " in { eval(" random number() ") match { @@ -267,9 +273,4 @@ class BuiltinNumberFunctionsTest case other => fail() } } - - "A random number() function" should "return a number" in { - - eval(" random number() ") shouldBe a [ValNumber] - } }