/** * Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com) * * Licensed 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 com.linkedin.pinot.index.readerwriter; import java.io.IOException; import java.util.Arrays; import java.util.Random; import org.testng.Assert; import org.testng.annotations.Test; import com.linkedin.pinot.core.io.readerwriter.impl.FixedByteSingleColumnSingleValueReaderWriter; public class FixedByteSingleColumnSingleValueReaderWriterTest { @Test public void testInt() throws IOException { Random r = new Random(); final long seed = r.nextLong(); r = new Random(seed); int rows = 10; for (int div = 1; div <= rows/2; div++) { try { testInt(r, rows, div); } catch (Throwable t) { t.printStackTrace(); Assert.fail("Failed with seed " + seed); } } } private void testInt(final Random r, final int rows, final int div) throws IOException { FixedByteSingleColumnSingleValueReaderWriter readerWriter; final int columnSizesInBytes = Integer.SIZE / 8; readerWriter = new FixedByteSingleColumnSingleValueReaderWriter(rows/div, columnSizesInBytes); int[] data = new int[rows]; for (int i = 0; i < rows; i++) { data[i] = r.nextInt(); readerWriter.setInt(i, data[i]); } for (int i = 0; i < rows; i++) { Assert.assertEquals(readerWriter.getInt(i), data[i]); } int[] rowIds = new int[rows]; for (int i = 0; i < rows; i++) { rowIds[i] = i; } int[] values = new int[rows]; Arrays.fill(values, 0); int vStart = 2; int dStart = 3; int numValues = 4; readerWriter.readValues(rowIds, dStart, numValues, values, vStart); for (int i = 0; i < numValues; i++) { Assert.assertEquals(values[i+vStart], data[i+dStart]); } readerWriter.readValues(rowIds, 0, 0, values, 0); Assert.assertEquals(values[0], 0); readerWriter.close(); } @Test public void testLong() throws IOException { int rows = 10; Random r = new Random(); final long seed = r.nextLong(); r = new Random(seed); for (int div = 1; div <= rows/2; div++) { testLong(r, rows, div); } } private void testLong(final Random r, final int rows, final int div) throws IOException { FixedByteSingleColumnSingleValueReaderWriter readerWriter; final int columnSizesInBytes = Long.SIZE / 8; readerWriter = new FixedByteSingleColumnSingleValueReaderWriter(rows/div, columnSizesInBytes); long[] data = new long[rows]; for (int i = 0; i < rows; i++) { data[i] = r.nextLong(); readerWriter.setLong(i, data[i]); } for (int i = 0; i < rows; i++) { Assert.assertEquals(readerWriter.getLong(i), data[i]); } readerWriter.close(); } }