|
@@ -34,7 +34,14 @@ import org.elasticsearch.test.ESTestCase;
|
|
|
|
|
|
import java.io.EOFException;
|
|
|
import java.io.IOException;
|
|
|
+import java.nio.ByteBuffer;
|
|
|
+import java.nio.ByteOrder;
|
|
|
+import java.nio.IntBuffer;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
public abstract class AbstractBytesReferenceTestCase extends ESTestCase {
|
|
|
|
|
@@ -648,4 +655,34 @@ public abstract class AbstractBytesReferenceTestCase extends ESTestCase {
|
|
|
assertNotEquals(b1, b2);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public void testGetInt() throws IOException {
|
|
|
+ final int count = randomIntBetween(1, 10);
|
|
|
+ final BytesReference bytesReference = newBytesReference(count * Integer.BYTES);
|
|
|
+ final BytesRef bytesRef = bytesReference.toBytesRef();
|
|
|
+ final IntBuffer intBuffer =
|
|
|
+ ByteBuffer.wrap(bytesRef.bytes, bytesRef.offset, bytesRef.length).order(ByteOrder.BIG_ENDIAN).asIntBuffer();
|
|
|
+ for (int i = 0; i < count; ++i) {
|
|
|
+ assertEquals(intBuffer.get(i), bytesReference.getInt(i * Integer.BYTES));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testIndexOf() throws IOException {
|
|
|
+ final int size = randomIntBetween(0, 100);
|
|
|
+ final BytesReference bytesReference = newBytesReference(size);
|
|
|
+ final Map<Byte, List<Integer>> map = new HashMap<>();
|
|
|
+ for (int i = 0; i < size; ++i) {
|
|
|
+ final byte value = bytesReference.get(i);
|
|
|
+ map.computeIfAbsent(value, v -> new ArrayList<>()).add(i);
|
|
|
+ }
|
|
|
+ map.forEach((value, positions) -> {
|
|
|
+ for (int i = 0; i < positions.size(); i++) {
|
|
|
+ final int pos = positions.get(i);
|
|
|
+ final int from = i == 0 ? randomIntBetween(0, pos) : positions.get(i - 1) + 1;
|
|
|
+ assertEquals(bytesReference.indexOf(value, from), pos);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ final byte missing = randomValueOtherThanMany(map::containsKey, ESTestCase::randomByte);
|
|
|
+ assertEquals(-1, bytesReference.indexOf(missing, randomIntBetween(0, Math.max(0, size - 1))));
|
|
|
+ }
|
|
|
}
|