diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-12-11 14:25:40 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-12-11 14:25:40 +0000 |
commit | 1e1569ae0ff7158478f8730e740f4fccdf6871fe (patch) | |
tree | d52a8601d32d58d46cf77c68fcea80d9353be75f /eval/src | |
parent | 36858ea1a05231ac43bfd23a759bd5dcdcdd1960 (diff) |
handle JSON null as NaN
Diffstat (limited to 'eval/src')
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(); } |