summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-12-11 14:25:40 +0000
committerArne Juul <arnej@yahooinc.com>2023-12-11 14:25:40 +0000
commit1e1569ae0ff7158478f8730e740f4fccdf6871fe (patch)
treed52a8601d32d58d46cf77c68fcea80d9353be75f /eval
parent36858ea1a05231ac43bfd23a759bd5dcdcdd1960 (diff)
handle JSON null as NaN
Diffstat (limited to 'eval')
-rw-r--r--eval/src/tests/eval/value_cache/dense-special.json1
-rw-r--r--eval/src/tests/eval/value_cache/tensor_loader_test.cpp5
-rw-r--r--eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp3
3 files changed, 7 insertions, 2 deletions
diff --git a/eval/src/tests/eval/value_cache/dense-special.json b/eval/src/tests/eval/value_cache/dense-special.json
index 644f0f436e7..a3bee19a573 100644
--- a/eval/src/tests/eval/value_cache/dense-special.json
+++ b/eval/src/tests/eval/value_cache/dense-special.json
@@ -3,5 +3,6 @@
"INF", "+INF",
"-Infinity", "-INF",
"NAN", "+NAN",
+ null,
"-nan", "-NAN"
]
diff --git a/eval/src/tests/eval/value_cache/tensor_loader_test.cpp b/eval/src/tests/eval/value_cache/tensor_loader_test.cpp
index 24d6aaab007..82d3e2b0a55 100644
--- a/eval/src/tests/eval/value_cache/tensor_loader_test.cpp
+++ b/eval/src/tests/eval/value_cache/tensor_loader_test.cpp
@@ -138,7 +138,7 @@ void checkBitEq(double a, double b) {
}
TEST_F("require that special string-encoded values work", ConstantTensorLoader(factory)) {
- auto c = f1.create(TEST_PATH("dense-special.json"), "tensor<float>(z[10])");
+ auto c = f1.create(TEST_PATH("dense-special.json"), "tensor<float>(z[11])");
const auto &v = c->value();
auto cells = v.cells().template typify<float>();
EXPECT_EQUAL(std::numeric_limits<float>::infinity(), cells[0]);
@@ -149,8 +149,9 @@ TEST_F("require that special string-encoded values work", ConstantTensorLoader(f
EXPECT_EQUAL(-std::numeric_limits<float>::infinity(), cells[5]);
TEST_DO(checkBitEq(std::numeric_limits<float>::quiet_NaN(), cells[6]));
TEST_DO(checkBitEq(std::numeric_limits<float>::quiet_NaN(), cells[7]));
- TEST_DO(checkBitEq(-std::numeric_limits<float>::quiet_NaN(), cells[8]));
+ TEST_DO(checkBitEq(std::numeric_limits<float>::quiet_NaN(), cells[8]));
TEST_DO(checkBitEq(-std::numeric_limits<float>::quiet_NaN(), cells[9]));
+ TEST_DO(checkBitEq(-std::numeric_limits<float>::quiet_NaN(), cells[10]));
}
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp b/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp
index aea3e8a76fa..7cdc55fc37f 100644
--- a/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp
+++ b/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp
@@ -43,6 +43,9 @@ double decodeDouble(const Inspector &inspector) {
}
LOG(warning, "bad string-encoded numeric value '%.*s'", (int)orig.size(), orig.data());
}
+ if (inspector.valid() && inspector.type().getId() == vespalib::slime::NIX::ID) {
+ return std::numeric_limits<double>::quiet_NaN();
+ }
return inspector.asDouble();
}