diff options
Diffstat (limited to 'vespajlib/src/test/java')
8 files changed, 193 insertions, 12 deletions
diff --git a/vespajlib/src/test/java/ai/vespa/json/JsonTest.java b/vespajlib/src/test/java/ai/vespa/json/JsonTest.java index 51b64637fd8..f6ca4aa7199 100644 --- a/vespajlib/src/test/java/ai/vespa/json/JsonTest.java +++ b/vespajlib/src/test/java/ai/vespa/json/JsonTest.java @@ -2,6 +2,10 @@ package ai.vespa.json; import org.junit.jupiter.api.Test; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -130,4 +134,39 @@ class JsonTest { .toJson(true); assertEquals(expected, json); } + + @Test + void add_all() { + var expected = + """ + [ + 1, + 2, + 3, + 4, + 5, + 6 + ] + """; + var json = Json.Builder.newArray() + .addAll(Json.Builder.Array.newArray().add(1).add(2).add(3)) + .add(4) + .addAll(Json.Builder.Array.newArray().add(5)) + .add(6) + .build() + .toJson(true); + assertEquals(expected, json); + } + + @Test + void collectors() { + var expected = Json.Builder.Array.newArray() + .add(1).add(2).add(3).add(4).add(5).add(6) + .build() + .toJson(false); + var actual = Stream.of(1, 2, 3, 4, 5, 6) + .collect(Json.Collectors.toArray(Json.Builder.Array::add)) + .toJson(false); + assertEquals(expected, actual); + } } diff --git a/vespajlib/src/test/java/ai/vespa/net/CidrBlockTest.java b/vespajlib/src/test/java/ai/vespa/net/CidrBlockTest.java index f8cf5463cd1..9b48c23a69d 100644 --- a/vespajlib/src/test/java/ai/vespa/net/CidrBlockTest.java +++ b/vespajlib/src/test/java/ai/vespa/net/CidrBlockTest.java @@ -2,7 +2,6 @@ package ai.vespa.net; import com.google.common.net.InetAddresses; -import ai.vespa.net.CidrBlock; import org.junit.Test; import java.net.InetAddress; @@ -99,7 +98,7 @@ public class CidrBlockTest { assertEquals(StreamSupport.stream(superBlock.iterableIps().spliterator(), false) .skip(24) - .map(ip -> InetAddresses.toAddrString(ip) + "/32") + .map(ip -> InetAddressUtil.toString(ip) + "/32") .collect(Collectors.toList()), StreamSupport.stream(CidrBlock.fromString("10.12.14.24/32").iterableCidrs().spliterator(), false) .takeWhile(superBlock::overlapsWith) @@ -111,12 +110,12 @@ public class CidrBlockTest { public void iterableIps() { assertEquals(List.of("10.12.14.24", "10.12.14.25", "10.12.14.26", "10.12.14.27", "10.12.14.28", "10.12.14.29", "10.12.14.30", "10.12.14.31"), StreamSupport.stream(CidrBlock.fromString("10.12.14.24/29").iterableIps().spliterator(), false) - .map(InetAddresses::toAddrString) + .map(InetAddressUtil::toString) .collect(Collectors.toList())); assertEquals(List.of("10.12.14.24"), StreamSupport.stream(CidrBlock.fromString("10.12.14.24/32").iterableIps().spliterator(), false) - .map(InetAddresses::toAddrString) + .map(InetAddressUtil::toString) .collect(Collectors.toList())); } diff --git a/vespajlib/src/test/java/ai/vespa/net/InetAddressUtilTest.java b/vespajlib/src/test/java/ai/vespa/net/InetAddressUtilTest.java new file mode 100644 index 00000000000..523d8a4fabf --- /dev/null +++ b/vespajlib/src/test/java/ai/vespa/net/InetAddressUtilTest.java @@ -0,0 +1,55 @@ +package ai.vespa.net; + +import com.google.common.net.InetAddresses; +import org.junit.jupiter.api.Test; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +/** + * @author hakonhall + */ +class InetAddressUtilTest { + @Test + void testToString() { + assertEquals("1080::8:800:200c:417a", toString("1080:0:0:0:8:800:200C:417A")); + assertEquals("1080::8:0:0:417a", toString("1080:0:0:0:8:0:0:417A")); + assertEquals("::8190:3426", toString("::129.144.52.38")); + assertEquals("::", toString("::")); + + assertEquals("0.0.0.0", toString("0.0.0.0")); + assertEquals("222.173.190.239", toString("222.173.190.239")); + } + + @Test + void testToStringWithInterface() throws SocketException { + NetworkInterface.networkInterfaces() + .flatMap(NetworkInterface::inetAddresses) + .forEach(inetAddress -> { + String address = InetAddressUtil.toString(inetAddress); + assertEquals(-1, address.indexOf('%'), "No interface in " + address); + }); + } + + @Test + void testToStringWithInterface2() throws UnknownHostException { + byte[] bytes = new byte[] { 0x10,(byte)0x80, 0,0, 0,0, 0,0, 0,8, 8,0, 0x20,0x0c, 0x41,0x7a }; + Inet6Address address = Inet6Address.getByAddress(null, bytes, 1); + // Verify Guava's InetAddresses.toAddrString() includes the interface. + // If this assert fails, we can use InetAddresses.toAddrString() instead of InetAddressUtil.toString(). + assertNotEquals(-1, InetAddresses.toAddrString(address).indexOf('%')); + assertEquals("1080::8:800:200c:417a", InetAddressUtil.toString(address)); + } + + private static String toString(String ipAddress) { + InetAddress inetAddress = InetAddresses.forString(ipAddress); + return InetAddressUtil.toString(inetAddress); + } + +} diff --git a/vespajlib/src/test/java/ai/vespa/utils/BytesQuantityTest.java b/vespajlib/src/test/java/ai/vespa/utils/BytesQuantityTest.java new file mode 100644 index 00000000000..e8e5d6275a3 --- /dev/null +++ b/vespajlib/src/test/java/ai/vespa/utils/BytesQuantityTest.java @@ -0,0 +1,47 @@ +package ai.vespa.utils; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author bjorncs + */ +class BytesQuantityTest { + + @Test + void from_string() { + assertEquals(0L, BytesQuantity.fromString("0 bytes").toBytes()); + assertEquals(1L, BytesQuantity.fromString("1 byte").toBytes()); + assertEquals(10L, BytesQuantity.fromString("10 bytes").toBytes()); + assertEquals(1L, BytesQuantity.fromString("1 B").toBytes()); + assertEquals(1L, BytesQuantity.fromString("1B").toBytes()); + assertEquals(1L, BytesQuantity.fromString("1").toBytes()); + assertEquals(1024L, BytesQuantity.fromString("1kB").toBytes()); + assertEquals(1024L, BytesQuantity.fromString("1k").toBytes()); + assertEquals(1024L, BytesQuantity.fromString("1K").toBytes()); + assertEquals(1024L, BytesQuantity.fromString("1KB").toBytes()); + assertEquals(1024L * 1024, BytesQuantity.fromString("1MB").toBytes()); + assertEquals(1024L * 1024, BytesQuantity.fromString("1M").toBytes()); + assertEquals(1024L * 1024 * 1024, BytesQuantity.fromString("1GB").toBytes()); + assertEquals(1024L * 1024 * 1024, BytesQuantity.fromString("1G").toBytes()); + assertEquals(1024L * 1024 * 1024 * 1024, BytesQuantity.fromString("1TB").toBytes()); + assertEquals(1024L * 1024 * 1024 * 1024, BytesQuantity.fromString("1T").toBytes()); + } + + @Test + void as_pretty_string() { + assertEquals("0 bytes", BytesQuantity.ofBytes(0).asPrettyString()); + assertEquals("1 byte", BytesQuantity.ofBytes(1).asPrettyString()); + assertEquals("10 bytes", BytesQuantity.ofBytes(10).asPrettyString()); + assertEquals("1 kB", BytesQuantity.ofBytes(1024).asPrettyString()); + assertEquals("2 kB", BytesQuantity.ofKB(2).asPrettyString()); + assertEquals("3 MB", BytesQuantity.ofMB(3).asPrettyString()); + assertEquals("4 GB", BytesQuantity.ofGB(4).asPrettyString()); + assertEquals("5 TB", BytesQuantity.ofTB(5).asPrettyString()); + + assertEquals("2560 bytes", BytesQuantity.ofBytes(2048 + 512).asPrettyString()); + assertEquals("3073 kB", BytesQuantity.ofBytes(3 * 1024 * 1024 + 1024).asPrettyString()); + assertEquals("5120 TB", BytesQuantity.ofBytes(1024L * 1024 * 1024 * 1024 * 1024 * 5).asPrettyString()); + } +} diff --git a/vespajlib/src/test/java/com/yahoo/slime/JsonBenchmark.java b/vespajlib/src/test/java/com/yahoo/slime/JsonBenchmark.java index ee755a44010..cccc9667e11 100644 --- a/vespajlib/src/test/java/com/yahoo/slime/JsonBenchmark.java +++ b/vespajlib/src/test/java/com/yahoo/slime/JsonBenchmark.java @@ -43,7 +43,7 @@ public class JsonBenchmark { try (JsonParser jsonParser = jsonFactory.createParser(json)) { JsonToken array = jsonParser.nextToken(); for (JsonToken token = jsonParser.nextToken(); !JsonToken.END_ARRAY.equals(token); token = jsonParser.nextToken()) { - if (JsonToken.FIELD_NAME.equals(token) && "weight".equals(jsonParser.getCurrentName())) { + if (JsonToken.FIELD_NAME.equals(token) && "weight".equals(jsonParser.currentName())) { token = jsonParser.nextToken(); count += jsonParser.getLongValue(); } diff --git a/vespajlib/src/test/java/com/yahoo/tensor/MixedTensorTestCase.java b/vespajlib/src/test/java/com/yahoo/tensor/MixedTensorTestCase.java index 3ed8a7237ec..4ab60ecb9b9 100644 --- a/vespajlib/src/test/java/com/yahoo/tensor/MixedTensorTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/tensor/MixedTensorTestCase.java @@ -2,9 +2,14 @@ package com.yahoo.tensor; +import com.yahoo.tensor.functions.Reduce; import org.junit.Test; +import java.util.HashMap; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -159,4 +164,25 @@ public class MixedTensorTestCase { tensor.toString()); } + @Test + public void testSplitIntoDense() { + TensorType type = new TensorType.Builder().mapped("key").indexed("x", 3).build(); + Tensor tensor = MixedTensor.Builder.of(type). + cell().label("key", "key1").label("x", 0).value(1). + cell().label("key", "key1").label("x", 1).value(2). + cell().label("key", "key1").label("x", 2).value(3). + cell().label("key", "key2").label("x", 0).value(4). + cell().label("key", "key2").label("x", 1).value(5). + cell().label("key", "key2").label("x", 2).value(6). + build(); + + Map<String, Tensor> indexedTensors = new HashMap<>(); + tensor.sum("x").cellIterator() + .forEachRemaining(cell -> indexedTensors.put(cell.getKey().label(0), + tensor.multiply(Tensor.Builder.of(type.mappedSubtype()).cell(cell.getKey(), 1.0).build()).sum("key"))); + + assertEquals("tensor(x[3]):[1.0, 2.0, 3.0]", indexedTensors.get("key1").toString()); + assertEquals("tensor(x[3]):[4.0, 5.0, 6.0]", indexedTensors.get("key2").toString()); + } + } diff --git a/vespajlib/src/test/java/com/yahoo/tensor/TensorParserTestCase.java b/vespajlib/src/test/java/com/yahoo/tensor/TensorParserTestCase.java index 5a049eeca04..7bc0556987b 100644 --- a/vespajlib/src/test/java/com/yahoo/tensor/TensorParserTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/tensor/TensorParserTestCase.java @@ -261,6 +261,8 @@ public class TensorParserTestCase { "tensor(x[3]):[1, 2]"); assertIllegal("At value position 8: Expected a ']' but got ','", "tensor(x[3]):[1, 2, 3, 4]"); + assertIllegal("No suitable dimension in tensor(x[3]) for parsing a tensor on the mixed form: Should have one mapped dimension", + "tensor(x[3]):{1:[1,2,3], 2:[2,3,4], 3:[3,4,5]}"); } private void assertIllegal(String message, String tensor) { diff --git a/vespajlib/src/test/java/com/yahoo/text/XMLTestCase.java b/vespajlib/src/test/java/com/yahoo/text/XMLTestCase.java index 1565d067a09..11b873968a7 100644 --- a/vespajlib/src/test/java/com/yahoo/text/XMLTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/text/XMLTestCase.java @@ -2,6 +2,7 @@ package com.yahoo.text; import org.junit.Test; +import org.w3c.dom.Document; import java.io.StringReader; @@ -11,10 +12,9 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; - /** - * @author <a href="mailto:borud@yahoo-inc.com">Bjorn Borud</a> - * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a> + * @author Bjorn Borud + * @author Steinar Knutsen */ public class XMLTestCase { @@ -30,13 +30,10 @@ public class XMLTestCase { assertEquals("this is a & test", XML.xmlEscape(s2, true)); // quotes are only escaped in attributes - // assertEquals("this is a " test", XML.xmlEscape(s3, true)); assertEquals("this is a \" test", XML.xmlEscape(s3, false)); - // quotes are only escaped in attributes. prevent bug - // no. 187006 from happening again! - // + // quotes are only escaped in attributes assertEquals("this is a <" test", XML.xmlEscape(s4, true)); assertEquals("this is a <\" test", XML.xmlEscape(s4, false)); @@ -112,4 +109,20 @@ public class XMLTestCase { assertTrue(e.getMessage().contains("error at line 2, column 5")); } } + + @Test + public void testParseAndWrite() { + String xml = """ + <foo> + <bar baz="quux"/> + <moo baah="boo">mux</moo> + <!-- zoink --> + </foo>"""; + Document document = XML.getDocument(xml); + assertEquals(xml, XML.toString(document)); + assertEquals(xml, XML.toString(document.getDocumentElement())); + assertEquals("<bar baz=\"quux\"/>", XML.toString(XML.getChild(document.getDocumentElement(), "bar"))); + assertEquals("mux", XML.toString(XML.getChild(document.getDocumentElement(), "moo").getFirstChild())); + } + } |