diff --git a/java/vector/pom.xml b/java/vector/pom.xml
index ddde5197700c7..aa022b0c2e3a4 100644
--- a/java/vector/pom.xml
+++ b/java/vector/pom.xml
@@ -86,6 +86,11 @@ under the License.
org.slf4j
slf4j-api
+
+ org.hamcrest
+ hamcrest
+ test
+
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVectorIterable.java b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVectorIterable.java
new file mode 100644
index 0000000000000..e6b79e89b9942
--- /dev/null
+++ b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVectorIterable.java
@@ -0,0 +1,909 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.arrow.vector;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.Period;
+import java.time.ZoneOffset;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.arrow.memory.BufferAllocator;
+import org.apache.arrow.vector.complex.FixedSizeListVector;
+import org.apache.arrow.vector.complex.LargeListVector;
+import org.apache.arrow.vector.complex.ListVector;
+import org.apache.arrow.vector.complex.ListViewVector;
+import org.apache.arrow.vector.complex.NonNullableStructVector;
+import org.apache.arrow.vector.complex.StructVector;
+import org.apache.arrow.vector.complex.impl.NullableStructWriter;
+import org.apache.arrow.vector.complex.impl.UnionLargeListWriter;
+import org.apache.arrow.vector.complex.impl.UnionListViewWriter;
+import org.apache.arrow.vector.complex.impl.UnionListWriter;
+import org.apache.arrow.vector.types.TimeUnit;
+import org.apache.arrow.vector.types.Types;
+import org.apache.arrow.vector.types.pojo.ArrowType;
+import org.apache.arrow.vector.types.pojo.Field;
+import org.apache.arrow.vector.types.pojo.FieldType;
+import org.apache.arrow.vector.util.Text;
+import org.hamcrest.collection.IsIterableContainingInOrder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class TestValueVectorIterable {
+ private BufferAllocator allocator;
+
+ @BeforeEach
+ public void init() {
+ allocator = new DirtyRootAllocator(Long.MAX_VALUE, (byte) 100);
+ }
+
+ @AfterEach
+ public void terminate() throws Exception {
+ allocator.close();
+ }
+
+ @Test
+ public void testBigIntVectorIterable() {
+ try (final BigIntVector bigIntVector = new BigIntVector("bigInt", allocator)) {
+ bigIntVector.allocateNew(3);
+ bigIntVector.setSafe(0, 6);
+ bigIntVector.setSafe(1, 2);
+ bigIntVector.setSafe(2, 19);
+ bigIntVector.setValueCount(3);
+
+ assertThat(
+ bigIntVector.getValueIterable(), IsIterableContainingInOrder.contains(6L, 2L, 19L));
+ }
+ }
+
+ @Test
+ public void testBitVectorIterable() {
+ try (final BitVector bitVector = new BitVector("bit", allocator)) {
+ bitVector.allocateNew(3);
+ bitVector.setSafe(0, 0);
+ bitVector.setNull(1);
+ bitVector.setSafe(2, 1);
+ bitVector.setValueCount(3);
+
+ assertThat(
+ bitVector.getValueIterable(), IsIterableContainingInOrder.contains(false, null, true));
+ }
+ }
+
+ @Test
+ public void testDateDayVectorIterable() {
+ try (final DateDayVector dateDayVector = new DateDayVector("dateDay", allocator)) {
+ dateDayVector.allocateNew(3);
+ dateDayVector.setSafe(0, 30000);
+ dateDayVector.setNull(1);
+ dateDayVector.setSafe(2, 555);
+ dateDayVector.setValueCount(3);
+
+ assertThat(
+ dateDayVector.getValueIterable(), IsIterableContainingInOrder.contains(30000, null, 555));
+ }
+ }
+
+ @Test
+ public void testDateMilliVectorIterable() {
+ try (final DateMilliVector dateMilliVector = new DateMilliVector("dateMilli", allocator)) {
+ dateMilliVector.allocateNew(3);
+ dateMilliVector.setSafe(0, 30000L);
+ dateMilliVector.setNull(1);
+ dateMilliVector.setSafe(2, 555L);
+ dateMilliVector.setValueCount(3);
+
+ final LocalDateTime value1 = LocalDateTime.ofEpochSecond(30L, 0, ZoneOffset.ofHours(0));
+ final LocalDateTime value3 =
+ LocalDateTime.ofEpochSecond(0L, 555000000, ZoneOffset.ofHours(0));
+ assertThat(
+ dateMilliVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testDecimal256VectorIterable() {
+ try (final Decimal256Vector decimal256Vector =
+ new Decimal256Vector("decimal256", allocator, 8, 2)) {
+ decimal256Vector.allocateNew(3);
+ decimal256Vector.setSafe(0, 30000L);
+ decimal256Vector.setNull(1);
+ decimal256Vector.setSafe(2, 555L);
+ decimal256Vector.setValueCount(3);
+
+ final BigDecimal value1 = new BigDecimal(300L).setScale(2, RoundingMode.HALF_UP);
+ final BigDecimal value3 =
+ new BigDecimal(555L).scaleByPowerOfTen(-2).setScale(2, RoundingMode.HALF_UP);
+ assertThat(
+ decimal256Vector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testDecimalVectorIterable() {
+ try (final DecimalVector decimalVector = new DecimalVector("decimalDay", allocator, 8, 2)) {
+ decimalVector.allocateNew(3);
+ decimalVector.setSafe(0, 30000);
+ decimalVector.setNull(1);
+ decimalVector.setSafe(2, 555);
+ decimalVector.setValueCount(3);
+
+ final BigDecimal value1 = new BigDecimal(300L).setScale(2, RoundingMode.HALF_UP);
+ final BigDecimal value3 =
+ new BigDecimal(555L).scaleByPowerOfTen(-2).setScale(2, RoundingMode.HALF_UP);
+ assertThat(
+ decimalVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testDurationVectorIterable() {
+ try (final DurationVector durationVector =
+ new DurationVector(
+ Field.nullablePrimitive("duration", new ArrowType.Duration(TimeUnit.MILLISECOND)),
+ allocator)) {
+ durationVector.allocateNew(3);
+ durationVector.setSafe(0, 30000);
+ durationVector.setNull(1);
+ durationVector.setSafe(2, 555);
+ durationVector.setValueCount(3);
+
+ final Duration value1 = Duration.ofMillis(30000);
+ final Duration value3 = Duration.ofMillis(555);
+ assertThat(
+ durationVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testFixedSizeBinaryVectorIterable() {
+ try (final FixedSizeBinaryVector fixedSizeBinaryVector =
+ new FixedSizeBinaryVector("binary", allocator, 4)) {
+ final byte[] value1 = new byte[] {0, 0, 0, 1};
+ final byte[] value3 = new byte[] {1, 0, 0, 0};
+
+ fixedSizeBinaryVector.allocateNew(3);
+ fixedSizeBinaryVector.setSafe(0, value1);
+ fixedSizeBinaryVector.setNull(1);
+ fixedSizeBinaryVector.setSafe(2, value3);
+ fixedSizeBinaryVector.setValueCount(3);
+
+ assertThat(
+ fixedSizeBinaryVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testFloat2VectorIterable() {
+ try (final Float2Vector float2Vector = new Float2Vector("float2", allocator)) {
+ float2Vector.allocateNew(3);
+ float2Vector.setSafe(0, (short) 7777);
+ float2Vector.setNull(1);
+ float2Vector.setSafe(2, (short) 5);
+ float2Vector.setValueCount(3);
+
+ assertThat(
+ float2Vector.getValueIterable(),
+ IsIterableContainingInOrder.contains((short) 7777, null, (short) 5));
+ }
+ }
+
+ @Test
+ public void testFloat4VectorIterable() {
+ try (final Float4Vector float4Vector = new Float4Vector("float4", allocator)) {
+ float4Vector.allocateNew(3);
+ float4Vector.setSafe(0, 16.32f);
+ float4Vector.setNull(1);
+ float4Vector.setSafe(2, -10.75f);
+ float4Vector.setValueCount(3);
+
+ assertThat(
+ float4Vector.getValueIterable(),
+ IsIterableContainingInOrder.contains(16.32f, null, -10.75f));
+ }
+ }
+
+ @Test
+ public void testFloat8VectorIterable() {
+ try (final Float8Vector float8Vector = new Float8Vector("float8", allocator)) {
+ float8Vector.allocateNew(3);
+ float8Vector.setSafe(0, 16.32);
+ float8Vector.setNull(1);
+ float8Vector.setSafe(2, -10.75);
+ float8Vector.setValueCount(3);
+
+ assertThat(
+ float8Vector.getValueIterable(),
+ IsIterableContainingInOrder.contains(16.32, null, -10.75));
+ }
+ }
+
+ @Test
+ public void testIntVectorIterable() {
+ try (final IntVector intVector = new IntVector("int", allocator)) {
+ intVector.allocateNew(3);
+ intVector.setSafe(0, 78);
+ intVector.setNull(1);
+ intVector.setSafe(2, -93);
+ intVector.setValueCount(3);
+
+ assertThat(intVector.getValueIterable(), IsIterableContainingInOrder.contains(78, null, -93));
+ }
+ }
+
+ @Test
+ public void testIntervalDayVectorIterable() {
+ try (final IntervalDayVector intervalDayVector =
+ new IntervalDayVector("intervalDay", allocator)) {
+ intervalDayVector.allocateNew(3);
+ intervalDayVector.setSafe(0, 63, 0);
+ intervalDayVector.setNull(1);
+ intervalDayVector.setSafe(2, 555, 0);
+ intervalDayVector.setValueCount(3);
+
+ final Duration value1 = Duration.ofDays(63);
+ final Duration value3 = Duration.ofDays(555);
+ assertThat(
+ intervalDayVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testIntervalMonthDayNanoVectorIterable() {
+ try (final IntervalMonthDayNanoVector intervalMonthDayNanoVector =
+ new IntervalMonthDayNanoVector("intervalMonthDayNano", allocator)) {
+ intervalMonthDayNanoVector.allocateNew(3);
+ intervalMonthDayNanoVector.setSafe(0, 3, 4, 0);
+ intervalMonthDayNanoVector.setNull(1);
+ intervalMonthDayNanoVector.setSafe(2, 7, 18, 0);
+ intervalMonthDayNanoVector.setValueCount(3);
+
+ final PeriodDuration value1 = new PeriodDuration(Period.of(0, 3, 4), Duration.ofSeconds(0));
+ final PeriodDuration value3 = new PeriodDuration(Period.of(0, 7, 18), Duration.ofSeconds(0));
+ assertThat(
+ intervalMonthDayNanoVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testIntervalYearVectorIterable() {
+ try (final IntervalYearVector intervalYearVector =
+ new IntervalYearVector("intervalYear", allocator)) {
+ intervalYearVector.allocateNew(3);
+ intervalYearVector.setSafe(0, 3);
+ intervalYearVector.setNull(1);
+ intervalYearVector.setSafe(2, 17);
+ intervalYearVector.setValueCount(3);
+
+ final Period value1 = Period.ofMonths(3);
+ final Period value3 = Period.ofMonths(17);
+ assertThat(
+ intervalYearVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testLargeVarBinaryVectorIterable() {
+ try (final LargeVarBinaryVector largeVarBinaryVector =
+ new LargeVarBinaryVector("largeVarBinary", allocator)) {
+ final byte[] value1 = new byte[] {0, 0, 0, 1};
+ final byte[] value3 = new byte[] {1, 0, 0};
+
+ largeVarBinaryVector.allocateNew(3);
+ largeVarBinaryVector.setSafe(0, value1);
+ largeVarBinaryVector.setNull(1);
+ largeVarBinaryVector.setSafe(2, value3);
+ largeVarBinaryVector.setValueCount(3);
+
+ assertThat(
+ largeVarBinaryVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testLargeVarCharVectorIterable() {
+ try (final LargeVarCharVector largeVarCharVector =
+ new LargeVarCharVector("largeVarChar", allocator)) {
+ final Text value1 = new Text("hello");
+ final Text value3 = new Text("worlds");
+
+ largeVarCharVector.allocateNew(3);
+ largeVarCharVector.setSafe(0, value1);
+ largeVarCharVector.setNull(1);
+ largeVarCharVector.setSafe(2, value3);
+ largeVarCharVector.setValueCount(3);
+
+ assertThat(
+ largeVarCharVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testNullVectorIterable() {
+ try (final NullVector nullVector = new NullVector("null", 3)) {
+ assertThat(
+ nullVector.getValueIterable(), IsIterableContainingInOrder.contains(null, null, null));
+ }
+ }
+
+ @Test
+ public void testSmallIntVectorIterable() {
+ try (final SmallIntVector smallIntVector = new SmallIntVector("smallInt", allocator)) {
+ smallIntVector.allocateNew(3);
+ smallIntVector.setSafe(0, 78);
+ smallIntVector.setNull(1);
+ smallIntVector.setSafe(2, -93);
+ smallIntVector.setValueCount(3);
+
+ assertThat(
+ smallIntVector.getValueIterable(),
+ IsIterableContainingInOrder.contains((short) 78, null, (short) -93));
+ }
+ }
+
+ @Test
+ public void testTimeMicroVectorIterable() {
+ try (final TimeMicroVector timeMicroVector = new TimeMicroVector("timeMicro", allocator)) {
+ timeMicroVector.allocateNew(3);
+ timeMicroVector.setSafe(0, 70000);
+ timeMicroVector.setNull(1);
+ timeMicroVector.setSafe(2, 555);
+ timeMicroVector.setValueCount(3);
+
+ assertThat(
+ timeMicroVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(70000L, null, 555L));
+ }
+ }
+
+ @Test
+ public void testTimeMilliVectorIterable() {
+ try (final TimeMilliVector timeMilliVector = new TimeMilliVector("timeMilli", allocator)) {
+ timeMilliVector.allocateNew(3);
+ timeMilliVector.setSafe(0, 70000);
+ timeMilliVector.setNull(1);
+ timeMilliVector.setSafe(2, 555);
+ timeMilliVector.setValueCount(3);
+
+ final LocalDateTime value1 = LocalDateTime.ofEpochSecond(70L, 0, ZoneOffset.ofHours(0));
+ final LocalDateTime value3 =
+ LocalDateTime.ofEpochSecond(0L, 555000000, ZoneOffset.ofHours(0));
+ assertThat(
+ timeMilliVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testTimeNanoVectorIterable() {
+ try (final TimeNanoVector timeNanoVector = new TimeNanoVector("timeNano", allocator)) {
+ timeNanoVector.allocateNew(3);
+ timeNanoVector.setSafe(0, 70000);
+ timeNanoVector.setNull(1);
+ timeNanoVector.setSafe(2, 555);
+ timeNanoVector.setValueCount(3);
+
+ assertThat(
+ timeNanoVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(70000L, null, 555L));
+ }
+ }
+
+ @Test
+ public void testTimeSecVectorIterable() {
+ try (final TimeSecVector timeSecVector = new TimeSecVector("timeSec", allocator)) {
+ timeSecVector.allocateNew(3);
+ timeSecVector.setSafe(0, 70000);
+ timeSecVector.setNull(1);
+ timeSecVector.setSafe(2, 555);
+ timeSecVector.setValueCount(3);
+
+ assertThat(
+ timeSecVector.getValueIterable(), IsIterableContainingInOrder.contains(70000, null, 555));
+ }
+ }
+
+ @Test
+ public void testTimeStampMicroTZVectorIterable() {
+ try (final TimeStampMicroTZVector timeStampMicroTzVector =
+ new TimeStampMicroTZVector("timeStampMicroTZ", allocator, "UTC")) {
+ timeStampMicroTzVector.allocateNew(3);
+ timeStampMicroTzVector.setSafe(0, 70000);
+ timeStampMicroTzVector.setNull(1);
+ timeStampMicroTzVector.setSafe(2, 555);
+ timeStampMicroTzVector.setValueCount(3);
+
+ assertThat(
+ timeStampMicroTzVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(70000L, null, 555L));
+ }
+ }
+
+ @Test
+ public void testTimeStampMicroVectorIterable() {
+ try (final TimeStampMicroVector timeStampMicroVector =
+ new TimeStampMicroVector("timeStampMicro", allocator)) {
+ timeStampMicroVector.allocateNew(3);
+ timeStampMicroVector.setSafe(0, 70000);
+ timeStampMicroVector.setNull(1);
+ timeStampMicroVector.setSafe(2, 555);
+ timeStampMicroVector.setValueCount(3);
+
+ final LocalDateTime value1 = LocalDateTime.ofEpochSecond(0L, 70000000, ZoneOffset.ofHours(0));
+ final LocalDateTime value3 = LocalDateTime.ofEpochSecond(0L, 555000, ZoneOffset.ofHours(0));
+ assertThat(
+ timeStampMicroVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testTimeStampMilliTZVectorIterable() {
+ try (final TimeStampMilliTZVector timeStampMilliTzVector =
+ new TimeStampMilliTZVector("timeStampMilliTZ", allocator, "UTC")) {
+ timeStampMilliTzVector.allocateNew(3);
+ timeStampMilliTzVector.setSafe(0, 70000);
+ timeStampMilliTzVector.setNull(1);
+ timeStampMilliTzVector.setSafe(2, 555);
+ timeStampMilliTzVector.setValueCount(3);
+
+ assertThat(
+ timeStampMilliTzVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(70000L, null, 555L));
+ }
+ }
+
+ @Test
+ public void testTimeStampMilliVectorIterable() {
+ try (final TimeStampMilliVector timeStampMilliVector =
+ new TimeStampMilliVector("timeStampMilli", allocator)) {
+ timeStampMilliVector.allocateNew(3);
+ timeStampMilliVector.setSafe(0, 70000);
+ timeStampMilliVector.setNull(1);
+ timeStampMilliVector.setSafe(2, 555);
+ timeStampMilliVector.setValueCount(3);
+
+ final LocalDateTime value1 = LocalDateTime.ofEpochSecond(70L, 0, ZoneOffset.ofHours(0));
+ final LocalDateTime value3 =
+ LocalDateTime.ofEpochSecond(0L, 555000000, ZoneOffset.ofHours(0));
+ assertThat(
+ timeStampMilliVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testTimeStampNanoTZVectorIterable() {
+ try (final TimeStampNanoTZVector timeStampNanoTzVector =
+ new TimeStampNanoTZVector("timeStampNanoTZ", allocator, "UTC")) {
+ timeStampNanoTzVector.allocateNew(3);
+ timeStampNanoTzVector.setSafe(0, 70000);
+ timeStampNanoTzVector.setNull(1);
+ timeStampNanoTzVector.setSafe(2, 555);
+ timeStampNanoTzVector.setValueCount(3);
+
+ assertThat(
+ timeStampNanoTzVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(70000L, null, 555L));
+ }
+ }
+
+ @Test
+ public void testTimeStampNanoVectorIterable() {
+ try (final TimeStampNanoVector timeStampNanoVector =
+ new TimeStampNanoVector("timeStampNano", allocator)) {
+ timeStampNanoVector.allocateNew(3);
+ timeStampNanoVector.setSafe(0, 70000);
+ timeStampNanoVector.setNull(1);
+ timeStampNanoVector.setSafe(2, 555);
+ timeStampNanoVector.setValueCount(3);
+
+ final LocalDateTime value1 = LocalDateTime.ofEpochSecond(0L, 70000, ZoneOffset.ofHours(0));
+ final LocalDateTime value3 = LocalDateTime.ofEpochSecond(0L, 555, ZoneOffset.ofHours(0));
+ assertThat(
+ timeStampNanoVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testTimeStampSecTZVectorIterable() {
+ try (final TimeStampSecTZVector timeStampSecTzVector =
+ new TimeStampSecTZVector("timeStampSecTZ", allocator, "UTC")) {
+ timeStampSecTzVector.allocateNew(3);
+ timeStampSecTzVector.setSafe(0, 70000);
+ timeStampSecTzVector.setNull(1);
+ timeStampSecTzVector.setSafe(2, 555);
+ timeStampSecTzVector.setValueCount(3);
+
+ assertThat(
+ timeStampSecTzVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(70000L, null, 555L));
+ }
+ }
+
+ @Test
+ public void testTimeStampSecVectorIterable() {
+ try (final TimeStampSecVector timeStampSecVector =
+ new TimeStampSecVector("timeStampSec", allocator)) {
+ timeStampSecVector.allocateNew(3);
+ timeStampSecVector.setSafe(0, 70000);
+ timeStampSecVector.setNull(1);
+ timeStampSecVector.setSafe(2, 555);
+ timeStampSecVector.setValueCount(3);
+
+ final LocalDateTime value1 = LocalDateTime.ofEpochSecond(70000L, 0, ZoneOffset.ofHours(0));
+ final LocalDateTime value3 = LocalDateTime.ofEpochSecond(555L, 0, ZoneOffset.ofHours(0));
+ assertThat(
+ timeStampSecVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testTinyIntVectorIterable() {
+ try (final TinyIntVector tinyIntVector = new TinyIntVector("tinyInt", allocator)) {
+ tinyIntVector.allocateNew(3);
+ tinyIntVector.setSafe(0, 8);
+ tinyIntVector.setNull(1);
+ tinyIntVector.setSafe(2, -17);
+ tinyIntVector.setValueCount(3);
+
+ assertThat(
+ tinyIntVector.getValueIterable(),
+ IsIterableContainingInOrder.contains((byte) 8, null, (byte) -17));
+ }
+ }
+
+ @Test
+ public void testUInt1VectorIterable() {
+ try (final UInt1Vector uint1Vector = new UInt1Vector("uint1", allocator)) {
+ uint1Vector.allocateNew(3);
+ uint1Vector.setSafe(0, 8);
+ uint1Vector.setNull(1);
+ uint1Vector.setSafe(2, 101);
+ uint1Vector.setValueCount(3);
+
+ assertThat(
+ uint1Vector.getValueIterable(),
+ IsIterableContainingInOrder.contains((byte) 8, null, (byte) 101));
+ }
+ }
+
+ @Test
+ public void testUInt2VectorIterable() {
+ try (final UInt2Vector uint2Vector = new UInt2Vector("uint2", allocator)) {
+ uint2Vector.allocateNew(3);
+ uint2Vector.setSafe(0, 78);
+ uint2Vector.setNull(1);
+ uint2Vector.setSafe(2, 3456);
+ uint2Vector.setValueCount(3);
+
+ assertThat(
+ uint2Vector.getValueIterable(),
+ IsIterableContainingInOrder.contains((char) 78, null, (char) 3456));
+ }
+ }
+
+ @Test
+ public void testUInt4VectorIterable() {
+ try (final UInt4Vector uint4Vector = new UInt4Vector("uint4", allocator)) {
+ uint4Vector.allocateNew(3);
+ uint4Vector.setSafe(0, 78);
+ uint4Vector.setNull(1);
+ uint4Vector.setSafe(2, 3456);
+ uint4Vector.setValueCount(3);
+
+ assertThat(
+ uint4Vector.getValueIterable(), IsIterableContainingInOrder.contains(78, null, 3456));
+ }
+ }
+
+ @Test
+ public void testUInt8VectorIterable() {
+ try (final UInt8Vector uint8Vector = new UInt8Vector("uint8", allocator)) {
+ uint8Vector.allocateNew(3);
+ uint8Vector.setSafe(0, 6);
+ uint8Vector.setSafe(1, 2);
+ uint8Vector.setSafe(2, 19);
+ uint8Vector.setValueCount(3);
+
+ assertThat(uint8Vector.getValueIterable(), IsIterableContainingInOrder.contains(6L, 2L, 19L));
+ }
+ }
+
+ @Test
+ public void testVarBinaryVectorIterable() {
+ try (final VarBinaryVector varBinaryVector = new VarBinaryVector("varBinary", allocator)) {
+ final byte[] value1 = new byte[] {0, 0, 0, 1};
+ final byte[] value3 = new byte[] {1, 0, 0};
+
+ varBinaryVector.allocateNew(3);
+ varBinaryVector.setSafe(0, value1);
+ varBinaryVector.setNull(1);
+ varBinaryVector.setSafe(2, value3);
+ varBinaryVector.setValueCount(3);
+
+ assertThat(
+ varBinaryVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testVarCharVectorIterable() {
+ try (final VarCharVector varCharVector = new VarCharVector("varChar", allocator)) {
+ final Text value1 = new Text("hello");
+ final Text value3 = new Text("worlds");
+
+ varCharVector.allocateNew(3);
+ varCharVector.setSafe(0, value1);
+ varCharVector.setNull(1);
+ varCharVector.setSafe(2, value3);
+ varCharVector.setValueCount(3);
+
+ assertThat(
+ varCharVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testViewVarBinaryVectorIterable() {
+ try (final ViewVarBinaryVector viewVarBinaryVector =
+ new ViewVarBinaryVector("viewVarBinary", allocator)) {
+ final byte[] value1 = new byte[] {0, 0, 0, 1};
+ final byte[] value3 = new byte[] {1, 0, 0};
+
+ viewVarBinaryVector.allocateNew(3);
+ viewVarBinaryVector.setSafe(0, value1);
+ viewVarBinaryVector.setNull(1);
+ viewVarBinaryVector.setSafe(2, value3);
+ viewVarBinaryVector.setValueCount(3);
+
+ assertThat(
+ viewVarBinaryVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testViewVarCharVectorIterable() {
+ try (final ViewVarCharVector viewVarCharVector =
+ new ViewVarCharVector("viewVarChar", allocator)) {
+ final Text value1 = new Text("hello");
+ final Text value3 = new Text("worlds");
+
+ viewVarCharVector.allocateNew(3);
+ viewVarCharVector.setSafe(0, value1);
+ viewVarCharVector.setNull(1);
+ viewVarCharVector.setSafe(2, value3);
+ viewVarCharVector.setValueCount(3);
+
+ assertThat(
+ viewVarCharVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+
+ @Test
+ public void testFIxedSizeListVectorIterable() {
+ try (final FixedSizeListVector fixedSizeListVector =
+ new FixedSizeListVector(
+ "fixedSizeList", allocator, FieldType.nullable(new ArrowType.FixedSizeList(3)), null)) {
+ final IntVector listVector =
+ (IntVector)
+ fixedSizeListVector
+ .addOrGetVector(FieldType.nullable(Types.MinorType.INT.getType()))
+ .getVector();
+ listVector.setSafe(0, 1);
+ listVector.setSafe(1, 2);
+ listVector.setSafe(2, 3);
+ listVector.setSafe(3, 4);
+ listVector.setSafe(4, 5);
+ listVector.setSafe(5, 6);
+ listVector.setValueCount(6);
+ fixedSizeListVector.setValueCount(2);
+ fixedSizeListVector.setNotNull(0);
+ fixedSizeListVector.setNotNull(1);
+
+ final List list1 = new ArrayList<>();
+ list1.add(1);
+ list1.add(2);
+ list1.add(3);
+ final List list2 = new ArrayList<>();
+ list2.add(4);
+ list2.add(5);
+ list2.add(6);
+
+ assertThat(
+ fixedSizeListVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(list1, list2));
+ }
+ }
+
+ @Test
+ public void testLargeListVectorIterable() {
+ try (final LargeListVector largeListVector = LargeListVector.empty("largeList", allocator)) {
+ UnionLargeListWriter writer = largeListVector.getWriter();
+ writer.allocate();
+
+ writer.startList();
+ writer.integer().writeInt(1);
+ writer.integer().writeInt(2);
+ writer.integer().writeInt(3);
+ writer.endList();
+ writer.startList();
+ writer.integer().writeInt(4);
+ writer.integer().writeInt(5);
+ writer.endList();
+
+ largeListVector.setValueCount(2);
+
+ final List list1 = new ArrayList<>();
+ list1.add(1);
+ list1.add(2);
+ list1.add(3);
+ final List list2 = new ArrayList<>();
+ list2.add(4);
+ list2.add(5);
+
+ assertThat(
+ largeListVector.getValueIterable(), IsIterableContainingInOrder.contains(list1, list2));
+ }
+ }
+
+ @Test
+ public void testListVectorIterable() {
+ try (final ListVector listVector = ListVector.empty("largeList", allocator)) {
+ UnionListWriter writer = listVector.getWriter();
+ writer.allocate();
+
+ writer.startList();
+ writer.integer().writeInt(1);
+ writer.integer().writeInt(2);
+ writer.integer().writeInt(3);
+ writer.endList();
+ writer.startList();
+ writer.integer().writeInt(4);
+ writer.integer().writeInt(5);
+ writer.endList();
+
+ listVector.setValueCount(2);
+
+ final List list1 = new ArrayList<>();
+ list1.add(1);
+ list1.add(2);
+ list1.add(3);
+ final List list2 = new ArrayList<>();
+ list2.add(4);
+ list2.add(5);
+
+ assertThat(listVector.getValueIterable(), IsIterableContainingInOrder.contains(list1, list2));
+ }
+ }
+
+ @Test
+ public void testListViewVectorIterable() {
+ try (final ListViewVector listViewVector = ListViewVector.empty("largeList", allocator)) {
+ UnionListViewWriter writer = listViewVector.getWriter();
+ writer.allocate();
+
+ writer.startList();
+ writer.integer().writeInt(1);
+ writer.integer().writeInt(2);
+ writer.integer().writeInt(3);
+ writer.endList();
+ writer.startList();
+ writer.integer().writeInt(4);
+ writer.integer().writeInt(5);
+ writer.endList();
+
+ listViewVector.setValueCount(2);
+
+ final List list1 = new ArrayList<>();
+ list1.add(1);
+ list1.add(2);
+ list1.add(3);
+ final List list2 = new ArrayList<>();
+ list2.add(4);
+ list2.add(5);
+
+ assertThat(
+ listViewVector.getValueIterable(), IsIterableContainingInOrder.contains(list1, list2));
+ }
+ }
+
+ @Test
+ public void testNonNullableStructVectorIterable() {
+ try (final NonNullableStructVector nonNullableStructVector =
+ NonNullableStructVector.empty("nonNullableStruct", allocator)) {
+ nonNullableStructVector.setValueCount(2);
+
+ IntVector key1Vector =
+ nonNullableStructVector.addOrGet(
+ "key1", FieldType.notNullable(new ArrowType.Int(32, true)), IntVector.class);
+ IntVector key2Vector =
+ nonNullableStructVector.addOrGet(
+ "key2", FieldType.notNullable(new ArrowType.Int(32, true)), IntVector.class);
+ key1Vector.setSafe(0, 1);
+ key1Vector.setSafe(1, 3);
+ key2Vector.setSafe(0, 2);
+ key2Vector.setSafe(1, 4);
+ key1Vector.setValueCount(2);
+ key2Vector.setValueCount(2);
+
+ final Map value1 = new HashMap<>();
+ value1.put("key1", 1);
+ value1.put("key2", 2);
+ final Map value2 = new HashMap<>();
+ value2.put("key1", 3);
+ value2.put("key2", 4);
+
+ assertThat(
+ nonNullableStructVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, value2));
+ }
+ }
+
+ @Test
+ public void testStructVectorIterable() {
+ try (final StructVector structVector = StructVector.empty("struct", allocator)) {
+ structVector.addOrGetList("struct");
+ NullableStructWriter structWriter = structVector.getWriter();
+ structWriter.setPosition(0);
+ structWriter.start();
+ structWriter.integer("key1").writeInt(1);
+ structWriter.integer("key2").writeInt(2);
+ structWriter.end();
+ structWriter.setPosition(2);
+ structWriter.start();
+ structWriter.integer("key1").writeInt(3);
+ structWriter.integer("key2").writeInt(4);
+ structWriter.end();
+ structWriter.setValueCount(3);
+
+ final Map value1 = new HashMap<>();
+ value1.put("key1", 1);
+ value1.put("key2", 2);
+ final Map value3 = new HashMap<>();
+ value3.put("key1", 3);
+ value3.put("key2", 4);
+
+ assertThat(
+ structVector.getValueIterable(),
+ IsIterableContainingInOrder.contains(value1, null, value3));
+ }
+ }
+}