blob: d8f9b707829bb933f37ee2615a52f95e02521000 [file] [log] [blame]
/*
* 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.iotdb.tsfile.read.common;
import org.apache.iotdb.tsfile.read.common.block.column.BinaryColumn;
import org.apache.iotdb.tsfile.read.common.block.column.BinaryColumnBuilder;
import org.apache.iotdb.tsfile.read.common.block.column.BooleanColumn;
import org.apache.iotdb.tsfile.read.common.block.column.BooleanColumnBuilder;
import org.apache.iotdb.tsfile.read.common.block.column.Column;
import org.apache.iotdb.tsfile.read.common.block.column.DoubleColumn;
import org.apache.iotdb.tsfile.read.common.block.column.DoubleColumnBuilder;
import org.apache.iotdb.tsfile.read.common.block.column.FloatColumn;
import org.apache.iotdb.tsfile.read.common.block.column.FloatColumnBuilder;
import org.apache.iotdb.tsfile.read.common.block.column.IntColumn;
import org.apache.iotdb.tsfile.read.common.block.column.IntColumnBuilder;
import org.apache.iotdb.tsfile.read.common.block.column.LongColumn;
import org.apache.iotdb.tsfile.read.common.block.column.LongColumnBuilder;
import org.apache.iotdb.tsfile.read.common.block.column.NullColumn;
import org.apache.iotdb.tsfile.read.common.block.column.RunLengthEncodedColumn;
import org.apache.iotdb.tsfile.read.common.block.column.TimeColumn;
import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.BytesUtils;
import org.junit.Assert;
import org.junit.Test;
public class ColumnTest {
@Test
public void timeColumnSubColumnTest() {
TimeColumnBuilder columnBuilder = new TimeColumnBuilder(null, 10);
for (int i = 0; i < 10; i++) {
columnBuilder.writeLong(i);
}
TimeColumn timeColumn = (TimeColumn) columnBuilder.build();
timeColumn = (TimeColumn) timeColumn.subColumn(5);
Assert.assertEquals(5, timeColumn.getPositionCount());
Assert.assertEquals(5, timeColumn.getLong(0));
Assert.assertEquals(9, timeColumn.getLong(4));
timeColumn = (TimeColumn) timeColumn.subColumn(3);
Assert.assertEquals(2, timeColumn.getPositionCount());
Assert.assertEquals(8, timeColumn.getLong(0));
Assert.assertEquals(9, timeColumn.getLong(1));
}
@Test
public void binaryColumnSubColumnTest() {
BinaryColumnBuilder columnBuilder = new BinaryColumnBuilder(null, 10);
for (int i = 0; i < 10; i++) {
columnBuilder.writeBinary(BytesUtils.valueOf(String.valueOf(i)));
}
BinaryColumn binaryColumn = (BinaryColumn) columnBuilder.build();
binaryColumn = (BinaryColumn) binaryColumn.subColumn(5);
Assert.assertEquals(5, binaryColumn.getPositionCount());
Assert.assertEquals("5", binaryColumn.getBinary(0).toString());
Assert.assertEquals("9", binaryColumn.getBinary(4).toString());
binaryColumn = (BinaryColumn) binaryColumn.subColumn(3);
Assert.assertEquals(2, binaryColumn.getPositionCount());
Assert.assertEquals("8", binaryColumn.getBinary(0).toString());
Assert.assertEquals("9", binaryColumn.getBinary(1).toString());
}
@Test
public void booleanColumnSubColumnTest() {
BooleanColumnBuilder columnBuilder = new BooleanColumnBuilder(null, 10);
// 0: true, 1: false
for (int i = 0; i < 10; i++) {
columnBuilder.writeBoolean(i % 2 == 0);
}
BooleanColumn booleanColumn = (BooleanColumn) columnBuilder.build();
booleanColumn = (BooleanColumn) booleanColumn.subColumn(5);
Assert.assertEquals(5, booleanColumn.getPositionCount());
Assert.assertFalse(booleanColumn.getBoolean(0));
Assert.assertFalse(booleanColumn.getBoolean(4));
booleanColumn = (BooleanColumn) booleanColumn.subColumn(3);
Assert.assertEquals(2, booleanColumn.getPositionCount());
Assert.assertTrue(booleanColumn.getBoolean(0));
Assert.assertFalse(booleanColumn.getBoolean(1));
}
@Test
public void doubleColumnSubColumnTest() {
DoubleColumnBuilder columnBuilder = new DoubleColumnBuilder(null, 10);
for (int i = 0; i < 10; i++) {
columnBuilder.writeDouble(i);
}
DoubleColumn doubleColumn = (DoubleColumn) columnBuilder.build();
doubleColumn = (DoubleColumn) doubleColumn.subColumn(5);
Assert.assertEquals(5, doubleColumn.getPositionCount());
Assert.assertEquals(5.0, doubleColumn.getDouble(0), 0.001);
Assert.assertEquals(9.0, doubleColumn.getDouble(4), 0.001);
doubleColumn = (DoubleColumn) doubleColumn.subColumn(3);
Assert.assertEquals(2, doubleColumn.getPositionCount());
Assert.assertEquals(8.0, doubleColumn.getDouble(0), 0.001);
Assert.assertEquals(9.0, doubleColumn.getDouble(1), 0.001);
}
@Test
public void floatColumnSubColumnTest() {
FloatColumnBuilder columnBuilder = new FloatColumnBuilder(null, 10);
for (int i = 0; i < 10; i++) {
columnBuilder.writeFloat(i);
}
FloatColumn floatColumn = (FloatColumn) columnBuilder.build();
floatColumn = (FloatColumn) floatColumn.subColumn(5);
Assert.assertEquals(5, floatColumn.getPositionCount());
Assert.assertEquals(5.0, floatColumn.getFloat(0), 0.001);
Assert.assertEquals(9.0, floatColumn.getFloat(4), 0.001);
floatColumn = (FloatColumn) floatColumn.subColumn(3);
Assert.assertEquals(2, floatColumn.getPositionCount());
Assert.assertEquals(8.0, floatColumn.getFloat(0), 0.001);
Assert.assertEquals(9.0, floatColumn.getFloat(1), 0.001);
}
@Test
public void intColumnSubColumnTest() {
IntColumnBuilder columnBuilder = new IntColumnBuilder(null, 10);
for (int i = 0; i < 10; i++) {
columnBuilder.writeInt(i);
}
IntColumn intColumn = (IntColumn) columnBuilder.build();
intColumn = (IntColumn) intColumn.subColumn(5);
Assert.assertEquals(5, intColumn.getPositionCount());
Assert.assertEquals(5, intColumn.getInt(0));
Assert.assertEquals(9, intColumn.getInt(4));
intColumn = (IntColumn) intColumn.subColumn(3);
Assert.assertEquals(2, intColumn.getPositionCount());
Assert.assertEquals(8, intColumn.getInt(0));
Assert.assertEquals(9, intColumn.getInt(1));
}
@Test
public void longColumnSubColumnTest() {
LongColumnBuilder columnBuilder = new LongColumnBuilder(null, 10);
for (int i = 0; i < 10; i++) {
columnBuilder.writeLong(i);
}
LongColumn longColumn = (LongColumn) columnBuilder.build();
longColumn = (LongColumn) longColumn.subColumn(5);
Assert.assertEquals(5, longColumn.getPositionCount());
Assert.assertEquals(5, longColumn.getLong(0));
Assert.assertEquals(9, longColumn.getLong(4));
longColumn = (LongColumn) longColumn.subColumn(3);
Assert.assertEquals(2, longColumn.getPositionCount());
Assert.assertEquals(8, longColumn.getLong(0));
Assert.assertEquals(9, longColumn.getLong(1));
}
@Test
public void nullColumnTest() {
NullColumn nullColumn = new NullColumn(10);
Column subRegion = nullColumn.getRegion(7, 2);
Column subColumn = subRegion.subColumn(1);
Assert.assertEquals(2, subRegion.getPositionCount());
Assert.assertEquals(1, subColumn.getPositionCount());
}
@Test
public void runLengthEncodedColumnSubColumnTest() {
LongColumnBuilder longColumnBuilder = new LongColumnBuilder(null, 1);
longColumnBuilder.writeLong(1);
RunLengthEncodedColumn column = new RunLengthEncodedColumn(longColumnBuilder.build(), 10);
column = (RunLengthEncodedColumn) column.subColumn(5);
Assert.assertEquals(5, column.getPositionCount());
Assert.assertEquals(1, column.getLong(0));
Assert.assertEquals(1, column.getLong(4));
column = (RunLengthEncodedColumn) column.subColumn(3);
Assert.assertEquals(2, column.getPositionCount());
Assert.assertEquals(1, column.getLong(0));
Assert.assertEquals(1, column.getLong(1));
}
}