diff --git a/java/vector/src/main/java/org/apache/arrow/vector/util/ByteFunctionHelpers.java b/java/vector/src/main/java/org/apache/arrow/vector/util/ByteFunctionHelpers.java index 4b5f8b67c2921..fba32b6e73227 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/util/ByteFunctionHelpers.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/util/ByteFunctionHelpers.java @@ -39,7 +39,7 @@ private ByteFunctionHelpers() {} * @param right Right ArrowBuf for comparison * @param rStart start offset in the buffer * @param rEnd end offset in the buffer - * @return 1 if left input is greater, -1 if left input is smaller, 0 otherwise + * @return 1 if equals, 0 otherwise */ public static final int equal(final ArrowBuf left, int lStart, int lEnd, final ArrowBuf right, int rStart, int rEnd) { if (BoundsChecking.BOUNDS_CHECKING_ENABLED) { @@ -138,7 +138,7 @@ private static int memcmp( long leftLong = PlatformDependent.getLong(lPos); long rightLong = PlatformDependent.getLong(rPos); if (leftLong != rightLong) { - return unsignedLongCompare(Long.reverseBytes(leftLong), Long.reverseBytes(rightLong)); + return unsignedLongCompare(leftLong, rightLong); } lPos += 8; rPos += 8; @@ -149,7 +149,7 @@ private static int memcmp( int leftInt = PlatformDependent.getInt(lPos); int rightInt = PlatformDependent.getInt(rPos); if (leftInt != rightInt) { - return unsignedIntCompare(Integer.reverseBytes(leftInt), Integer.reverseBytes(rightInt)); + return unsignedIntCompare(leftInt, rightInt); } lPos += 4; rPos += 4; diff --git a/java/vector/src/test/java/org/apache/arrow/vector/util/TestByteFunctionHelpers.java b/java/vector/src/test/java/org/apache/arrow/vector/util/TestByteFunctionHelpers.java new file mode 100644 index 0000000000000..4cd316bb6f188 --- /dev/null +++ b/java/vector/src/test/java/org/apache/arrow/vector/util/TestByteFunctionHelpers.java @@ -0,0 +1,92 @@ +/* + * 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.util; + +import static org.junit.Assert.assertEquals; + +import org.apache.arrow.memory.BufferAllocator; +import org.apache.arrow.memory.RootAllocator; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import io.netty.buffer.ArrowBuf; + +public class TestByteFunctionHelpers { + + private BufferAllocator allocator; + + private static final int SIZE = 100; + + @Before + public void init() { + allocator = new RootAllocator(Long.MAX_VALUE); + + } + + @After + public void terminate() throws Exception { + allocator.close(); + } + + @Test + public void testEquals() { + ArrowBuf buffer1 = allocator.buffer(SIZE); + ArrowBuf buffer2 = allocator.buffer(SIZE); + + for (int i = 0; i < SIZE; i++) { + buffer1.setByte(i, i); + buffer2.setByte(i, i); + } + + assertEquals(1, ByteFunctionHelpers.equal(buffer1, 0, SIZE - 1, + buffer2, 0, SIZE - 1)); + + buffer1.setByte(50, 10); + + assertEquals(0, ByteFunctionHelpers.equal(buffer1, 0, SIZE - 1, + buffer2, 0, SIZE - 1)); + + buffer1.close(); + buffer2.close(); + + } + + @Test + public void testCompare() { + ArrowBuf buffer1 = allocator.buffer(SIZE); + ArrowBuf buffer2 = allocator.buffer(SIZE); + + for (int i = 0; i < SIZE; i++) { + buffer1.setByte(i, i); + buffer2.setByte(i, i); + } + + assertEquals(0, ByteFunctionHelpers.compare(buffer1, 0, SIZE - 1, + buffer2, 0, SIZE - 1)); + + buffer1.setByte(50, 10); + + assertEquals(-1, ByteFunctionHelpers.compare(buffer1, 0, SIZE - 1, + buffer2, 0, SIZE - 1)); + + buffer1.close(); + buffer2.close(); + + } +}