summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2022-03-04 09:23:17 +0000
committerHåvard Pettersen <havardpe@oath.com>2022-03-04 09:23:17 +0000
commit4b91fd0b0f31583ddedd953e0e4857c2c5925f95 (patch)
tree36b35edb46edf72356bf30dbd4c6fcc3c8737cb5 /eval
parent18ff89e7c93e4597d9375eb395b694a54c6e342f (diff)
parse true and false as constant values (1.0/0.0)
Diffstat (limited to 'eval')
-rw-r--r--eval/src/tests/eval/function/function_test.cpp5
-rw-r--r--eval/src/vespa/eval/eval/function.cpp4
2 files changed, 9 insertions, 0 deletions
diff --git a/eval/src/tests/eval/function/function_test.cpp b/eval/src/tests/eval/function/function_test.cpp
index 64f9104d0e1..60c4c81f519 100644
--- a/eval/src/tests/eval/function/function_test.cpp
+++ b/eval/src/tests/eval/function/function_test.cpp
@@ -109,6 +109,11 @@ TEST("require that scientific numbers can be parsed") {
EXPECT_EQUAL(3e-7, as_number(*Function::parse(params, "3E-7")));
}
+TEST("require that true/false can be parsed") {
+ EXPECT_EQUAL(1.0, as_number(*Function::parse(params, "true")));
+ EXPECT_EQUAL(0.0, as_number(*Function::parse(params, "false")));
+}
+
TEST("require that number parsing does not eat +/- operators") {
EXPECT_EQUAL("(((1+2)+3)+4)", Function::parse(params, "1+2+3+4")->dump());
EXPECT_EQUAL("(((1-2)-3)-4)", Function::parse(params, "1-2-3-4")->dump());
diff --git a/eval/src/vespa/eval/eval/function.cpp b/eval/src/vespa/eval/eval/function.cpp
index 0f3294543ca..fd07c891ad5 100644
--- a/eval/src/vespa/eval/eval/function.cpp
+++ b/eval/src/vespa/eval/eval/function.cpp
@@ -886,6 +886,10 @@ void parse_symbol_or_call(ParseContext &ctx) {
ctx.extract_symbol(name, before_name);
if (name.empty()) {
ctx.fail("missing value");
+ } else if (name == "true") {
+ ctx.push_expression(Node_UP(new nodes::Number(1.0)));
+ } else if (name == "false") {
+ ctx.push_expression(Node_UP(new nodes::Number(0.0)));
} else {
size_t id = ctx.resolve_parameter(name);
if (id == Params::UNDEF) {