aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/test/java')
-rw-r--r--vespajlib/src/test/java/ai/vespa/json/JsonTest.java39
-rw-r--r--vespajlib/src/test/java/ai/vespa/net/CidrBlockTest.java7
-rw-r--r--vespajlib/src/test/java/ai/vespa/net/InetAddressUtilTest.java55
-rw-r--r--vespajlib/src/test/java/ai/vespa/utils/BytesQuantityTest.java47
-rw-r--r--vespajlib/src/test/java/com/yahoo/slime/JsonBenchmark.java2
-rw-r--r--vespajlib/src/test/java/com/yahoo/tensor/MixedTensorTestCase.java26
-rw-r--r--vespajlib/src/test/java/com/yahoo/tensor/TensorParserTestCase.java2
-rw-r--r--vespajlib/src/test/java/com/yahoo/text/XMLTestCase.java27
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 &amp; test", XML.xmlEscape(s2, true));
// quotes are only escaped in attributes
- //
assertEquals("this is a &quot; 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 &lt;&quot; test", XML.xmlEscape(s4, true));
assertEquals("this is a &lt;\" 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()));
+ }
+
}