/** * 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.hadoop.hive.ql.io; import org.apache.hadoop.hive.ql.io.orc.OrcRawRecordMerger; import org.junit.Test; import java.util.concurrent.ThreadLocalRandom; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; public class TestRecordIdentifier { @Test public void TestOrdering() throws Exception { RecordIdentifier left = new RecordIdentifier(100, 200, 1200); RecordIdentifier right = new RecordIdentifier(); right.setValues(100L, 200, 1000L); assertTrue(right.compareTo(left) < 0); assertTrue(left.compareTo(right) > 0); left.set(right); assertTrue(right.compareTo(left) == 0); right.setRowId(2000); assertTrue(right.compareTo(left) > 0); left.setValues(1, 2, 3); right.setValues(100, 2, 3); assertTrue(left.compareTo(right) < 0); assertTrue(right.compareTo(left) > 0); left.setValues(1, 2, 3); right.setValues(1, 100, 3); assertTrue(left.compareTo(right) < 0); assertTrue(right.compareTo(left) > 0); } @Test public void testHashEquals() throws Exception { long origTxn = ThreadLocalRandom.current().nextLong(1, 10000000000L); int bucketId = ThreadLocalRandom.current().nextInt(1, 512); long rowId = ThreadLocalRandom.current().nextLong(1, 10000000000L); long currTxn = origTxn + ThreadLocalRandom.current().nextLong(0, 10000000000L); int stmtId = ThreadLocalRandom.current().nextInt(1, 512); RecordIdentifier left = new RecordIdentifier(origTxn, bucketId, rowId); RecordIdentifier right = new RecordIdentifier(origTxn, bucketId, rowId); OrcRawRecordMerger.ReaderKey rkLeft = new OrcRawRecordMerger.ReaderKey(origTxn, bucketId, rowId, currTxn, stmtId); OrcRawRecordMerger.ReaderKey rkRight = new OrcRawRecordMerger.ReaderKey(origTxn, bucketId, rowId, currTxn, stmtId); assertEquals("RecordIdentifier.equals", left, right); assertEquals("RecordIdentifier.hashCode", left.hashCode(), right.hashCode()); assertEquals("ReaderKey", rkLeft, rkLeft); assertEquals("ReaderKey.hashCode", rkLeft.hashCode(), rkRight.hashCode()); //debatable if this is correct, but that's how it's implemented assertNotEquals("RecordIdentifier <> ReaderKey", left, rkRight); } }