diff options
Diffstat (limited to 'vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java')
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java b/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java index 66d3a0e824d..52f44f0ac42 100644 --- a/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java @@ -687,6 +687,35 @@ public class JsonFormatTestCase { assertEquals(0xFFF8000000000000L, Double.doubleToRawLongBits(JsonFormat.decodeNumberString("-NaN"))); } + @Test + public void testWithNanVariants() { + TensorType x3 = TensorType.fromSpec("tensor(x[3])"); + String json = "{\"cells\":[" + + "{\"address\":{\"x\":\"0\"},\"value\":\"nan\"}," + + "{\"address\":{\"x\":\"1\"},\"value\":null}," + + "{\"address\":{\"x\":\"2\"},\"value\":\"+NaN\"}" + + "]}"; + var t = JsonFormat.decode(x3, json.getBytes(StandardCharsets.UTF_8)); + checkThreeNans(t); + json = "['nan', null, '+NaN']"; + t = JsonFormat.decode(x3, json.getBytes(StandardCharsets.UTF_8)); + checkThreeNans(t); + json = "{'type':'tensor(x[3])','values':['nan', null, '+NaN']}"; + t = JsonFormat.decode(x3, json.getBytes(StandardCharsets.UTF_8)); + checkThreeNans(t); + } + + private void checkThreeNans(Tensor t) { + final Double nan = Double.NaN; + int cnt = 0; + for (var iter = t.cellIterator(); iter.hasNext(); ) { + var cell = iter.next(); + assertEquals(nan, cell.getValue()); + ++cnt; + } + assertEquals(3, cnt); + } + private void assertEncodeShortForm(String tensor, String expected) { assertEncodeShortForm(Tensor.from(tensor), expected); } |