|
22 | 22 |
|
23 | 23 | import java.nio.charset.Charset; |
24 | 24 | import java.util.Arrays; |
| 25 | +import java.util.List; |
25 | 26 | import org.apache.arrow.memory.BufferAllocator; |
26 | 27 | import org.apache.arrow.memory.RootAllocator; |
27 | 28 | import org.apache.arrow.vector.BigIntVector; |
|
39 | 40 | import org.apache.arrow.vector.complex.LargeListViewVector; |
40 | 41 | import org.apache.arrow.vector.complex.ListVector; |
41 | 42 | import org.apache.arrow.vector.complex.ListViewVector; |
| 43 | +import org.apache.arrow.vector.complex.RunEndEncodedVector; |
42 | 44 | import org.apache.arrow.vector.complex.StructVector; |
43 | 45 | import org.apache.arrow.vector.complex.UnionVector; |
44 | 46 | import org.apache.arrow.vector.complex.impl.NullableStructWriter; |
|
53 | 55 | import org.apache.arrow.vector.holders.NullableUInt4Holder; |
54 | 56 | import org.apache.arrow.vector.types.FloatingPointPrecision; |
55 | 57 | import org.apache.arrow.vector.types.Types; |
| 58 | +import org.apache.arrow.vector.types.Types.MinorType; |
56 | 59 | import org.apache.arrow.vector.types.pojo.ArrowType; |
| 60 | +import org.apache.arrow.vector.types.pojo.ArrowType.RunEndEncoded; |
57 | 61 | import org.apache.arrow.vector.types.pojo.Field; |
58 | 62 | import org.apache.arrow.vector.types.pojo.FieldType; |
59 | 63 | import org.junit.jupiter.api.AfterEach; |
@@ -1003,6 +1007,54 @@ public void testLargeListViewVectorApproxEquals() { |
1003 | 1007 | } |
1004 | 1008 | } |
1005 | 1009 |
|
| 1010 | + @Test |
| 1011 | + public void testRunEndEncodedFloat8ApproxEquals() { |
| 1012 | + try (final Float8Vector vector1 = new Float8Vector("float", allocator); |
| 1013 | + final Float8Vector vector2 = new Float8Vector("float", allocator); |
| 1014 | + final Float8Vector vector3 = new Float8Vector("float", allocator); |
| 1015 | + final IntVector reeVector = new IntVector("ree", allocator)) { |
| 1016 | + |
| 1017 | + final float epsilon = 1.0E-6f; |
| 1018 | + setVector(vector1, 1.1, 2.2); |
| 1019 | + setVector(vector2, 1.1 + epsilon / 2, 2.2 + epsilon / 2); |
| 1020 | + setVector(vector3, 1.1 + epsilon * 2, 2.2 + epsilon * 2); |
| 1021 | + setVector(reeVector, 1, 3); |
| 1022 | + |
| 1023 | + ArrowType type = MinorType.FLOAT8.getType(); |
| 1024 | + final FieldType valueType = FieldType.notNullable(type); |
| 1025 | + final FieldType runEndType = FieldType.notNullable(MinorType.INT.getType()); |
| 1026 | + |
| 1027 | + final Field valueField = new Field("value", valueType, null); |
| 1028 | + final Field runEndField = new Field("ree", runEndType, null); |
| 1029 | + |
| 1030 | + Field field = |
| 1031 | + new Field( |
| 1032 | + "ree_float", |
| 1033 | + FieldType.notNullable(RunEndEncoded.INSTANCE), |
| 1034 | + List.of(runEndField, valueField)); |
| 1035 | + |
| 1036 | + try (final RunEndEncodedVector encodedVector1 = |
| 1037 | + new RunEndEncodedVector(field, allocator, reeVector, vector1, null); |
| 1038 | + final RunEndEncodedVector encodedVector2 = |
| 1039 | + new RunEndEncodedVector(field, allocator, reeVector, vector2, null); |
| 1040 | + final RunEndEncodedVector encodedVector3 = |
| 1041 | + new RunEndEncodedVector(field, allocator, reeVector, vector3, null)) { |
| 1042 | + |
| 1043 | + encodedVector1.setValueCount(3); |
| 1044 | + encodedVector2.setValueCount(3); |
| 1045 | + encodedVector3.setValueCount(3); |
| 1046 | + |
| 1047 | + Range range = new Range(0, 0, encodedVector1.getValueCount()); |
| 1048 | + assertTrue( |
| 1049 | + new ApproxEqualsVisitor(encodedVector1, encodedVector2, epsilon, epsilon) |
| 1050 | + .rangeEquals(range)); |
| 1051 | + assertFalse( |
| 1052 | + new ApproxEqualsVisitor(encodedVector1, encodedVector3, epsilon, epsilon) |
| 1053 | + .rangeEquals(range)); |
| 1054 | + } |
| 1055 | + } |
| 1056 | + } |
| 1057 | + |
1006 | 1058 | private void writeStructVector(NullableStructWriter writer, int value1, long value2) { |
1007 | 1059 | writer.start(); |
1008 | 1060 | writer.integer("f0").writeInt(value1); |
|
0 commit comments