From 1430979b48b304e5bd40dd94b2e15b4ee4cdab2d Mon Sep 17 00:00:00 2001 From: tianchen Date: Tue, 13 Aug 2019 11:28:01 +0800 Subject: [PATCH 1/2] ARROW-6218: [Java] Add UINT type test in integration to avoid potential overflow --- .../apache/arrow/vector/ipc/TestJSONFile.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java b/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java index b4827257cd7..73f32f0ecd0 100644 --- a/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java +++ b/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java @@ -17,11 +17,16 @@ package org.apache.arrow.vector.ipc; +import static org.junit.Assert.assertEquals; + import java.io.File; import java.io.IOException; import org.apache.arrow.memory.BufferAllocator; import org.apache.arrow.vector.FieldVector; +import org.apache.arrow.vector.UInt1Vector; +import org.apache.arrow.vector.UInt4Vector; +import org.apache.arrow.vector.UInt8Vector; import org.apache.arrow.vector.VectorSchemaRoot; import org.apache.arrow.vector.complex.StructVector; import org.apache.arrow.vector.complex.impl.ComplexWriterImpl; @@ -401,4 +406,39 @@ public void testWriteReadMapJSON() throws IOException { reader.close(); } } + + @Test + public void testNoOverFlowWithUINT() { + try (final UInt8Vector uInt8Vector = new UInt8Vector("uint8", allocator); + final UInt4Vector uInt4Vector = new UInt4Vector("uint4", allocator); + final UInt1Vector uInt1Vector = new UInt1Vector("uint1", allocator)) { + + long[] longValues = new long[]{0x8000000000000000L, 0x7fffffffffffffffL, 0xffffffffffffffffL}; + uInt8Vector.allocateNew(3); + uInt8Vector.setValueCount(3); + for (int i = 0; i < longValues.length; i++) { + uInt8Vector.set(i, longValues[i]); + long readValue = uInt8Vector.getObjectNoOverflow(i).longValue(); + assertEquals(readValue, longValues[i]); + } + + int[] intValues = new int[]{0x80000000, 0x7fffffff, 0xffffffff}; + uInt4Vector.allocateNew(3); + uInt4Vector.setValueCount(3); + for (int i = 0; i < intValues.length; i++) { + uInt4Vector.set(i, intValues[i]); + int actualValue = (int) UInt4Vector.getNoOverflow(uInt4Vector.getDataBuffer(), i); + assertEquals(intValues[i], actualValue); + } + + byte[] byteValues = new byte[]{-128, 127, -1}; + uInt1Vector.allocateNew(3); + uInt1Vector.setValueCount(3); + for (int i = 0; i < byteValues.length; i++) { + uInt1Vector.set(i, byteValues[i]); + byte actualValue = (byte) UInt1Vector.getNoOverflow(uInt1Vector.getDataBuffer(),i); + assertEquals(byteValues[i], actualValue); + } + } + } } From 2bdbe7e0994ddac9780d7494090ae0b042aba165 Mon Sep 17 00:00:00 2001 From: tianchen Date: Tue, 13 Aug 2019 12:08:04 +0800 Subject: [PATCH 2/2] use MIN_VALUE and MAX_VALUE --- .../test/java/org/apache/arrow/vector/ipc/TestJSONFile.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java b/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java index 73f32f0ecd0..467d40cc410 100644 --- a/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java +++ b/java/vector/src/test/java/org/apache/arrow/vector/ipc/TestJSONFile.java @@ -413,7 +413,7 @@ public void testNoOverFlowWithUINT() { final UInt4Vector uInt4Vector = new UInt4Vector("uint4", allocator); final UInt1Vector uInt1Vector = new UInt1Vector("uint1", allocator)) { - long[] longValues = new long[]{0x8000000000000000L, 0x7fffffffffffffffL, 0xffffffffffffffffL}; + long[] longValues = new long[]{Long.MIN_VALUE, Long.MAX_VALUE, -1L}; uInt8Vector.allocateNew(3); uInt8Vector.setValueCount(3); for (int i = 0; i < longValues.length; i++) { @@ -422,7 +422,7 @@ public void testNoOverFlowWithUINT() { assertEquals(readValue, longValues[i]); } - int[] intValues = new int[]{0x80000000, 0x7fffffff, 0xffffffff}; + int[] intValues = new int[]{Integer.MIN_VALUE, Integer.MAX_VALUE, -1}; uInt4Vector.allocateNew(3); uInt4Vector.setValueCount(3); for (int i = 0; i < intValues.length; i++) { @@ -431,7 +431,7 @@ public void testNoOverFlowWithUINT() { assertEquals(intValues[i], actualValue); } - byte[] byteValues = new byte[]{-128, 127, -1}; + byte[] byteValues = new byte[]{Byte.MIN_VALUE, Byte.MAX_VALUE, -1}; uInt1Vector.allocateNew(3); uInt1Vector.setValueCount(3); for (int i = 0; i < byteValues.length; i++) {