/** * 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 * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * 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 jp.co.yahoo.dataplatform.mds.blackbox; import java.io.IOException; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.Arguments; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.params.provider.Arguments.arguments; import jp.co.yahoo.dataplatform.config.Configuration; import jp.co.yahoo.dataplatform.schema.objects.*; import jp.co.yahoo.dataplatform.mds.spread.expression.*; import jp.co.yahoo.dataplatform.mds.spread.column.filter.*; import jp.co.yahoo.dataplatform.mds.spread.column.*; import jp.co.yahoo.dataplatform.mds.binary.*; import jp.co.yahoo.dataplatform.mds.binary.maker.*; public class TestStringPrimitiveColumn { public static Stream<Arguments> data1() throws IOException{ return Stream.of( arguments( "jp.co.yahoo.dataplatform.mds.binary.maker.OptimizeStringColumnBinaryMaker" ), arguments( "jp.co.yahoo.dataplatform.mds.binary.maker.OptimizeDumpStringColumnBinaryMaker" ), arguments( "jp.co.yahoo.dataplatform.mds.binary.maker.UnsafeOptimizeStringColumnBinaryMaker" ) ); } public IColumn createNotNullColumn( final String targetClassName ) throws IOException{ IColumn column = new PrimitiveColumn( ColumnType.STRING , "column" ); column.add( ColumnType.STRING , new StringObj( "a" ) , 0 ); column.add( ColumnType.STRING , new StringObj( "ab" ) , 1 ); column.add( ColumnType.STRING , new StringObj( "abc" ) , 2 ); column.add( ColumnType.STRING , new StringObj( "abcd" ) , 3 ); column.add( ColumnType.STRING , new StringObj( "b" ) , 4 ); column.add( ColumnType.STRING , new StringObj( "bc" ) , 5 ); column.add( ColumnType.STRING , new StringObj( "bcd" ) , 6 ); column.add( ColumnType.STRING , new StringObj( "bcde" ) , 7 ); column.add( ColumnType.STRING , new StringObj( "c" ) , 8 ); column.add( ColumnType.STRING , new StringObj( "cd" ) , 9 ); column.add( ColumnType.STRING , new StringObj( "" ) , 10 ); IColumnBinaryMaker maker = FindColumnBinaryMaker.get( targetClassName ); ColumnBinaryMakerConfig defaultConfig = new ColumnBinaryMakerConfig(); ColumnBinaryMakerCustomConfigNode configNode = new ColumnBinaryMakerCustomConfigNode( "root" , defaultConfig ); ColumnBinary columnBinary = maker.toBinary( defaultConfig , null , column ); return FindColumnBinaryMaker.get( columnBinary.makerClassName ).toColumn( columnBinary ); } public IColumn createNullColumn( final String targetClassName ) throws IOException{ IColumn column = new PrimitiveColumn( ColumnType.STRING , "column" ); IColumnBinaryMaker maker = FindColumnBinaryMaker.get( targetClassName ); ColumnBinaryMakerConfig defaultConfig = new ColumnBinaryMakerConfig(); ColumnBinaryMakerCustomConfigNode configNode = new ColumnBinaryMakerCustomConfigNode( "root" , defaultConfig ); ColumnBinary columnBinary = maker.toBinary( defaultConfig , null , column ); return FindColumnBinaryMaker.get( columnBinary.makerClassName ).toColumn( columnBinary ); } public IColumn createHasNullColumn( final String targetClassName ) throws IOException{ IColumn column = new PrimitiveColumn( ColumnType.STRING , "column" ); column.add( ColumnType.STRING , new StringObj( "a" ) , 0 ); column.add( ColumnType.STRING , new StringObj( "b" ) , 4 ); column.add( ColumnType.STRING , new StringObj( "c" ) , 8 ); IColumnBinaryMaker maker = FindColumnBinaryMaker.get( targetClassName ); ColumnBinaryMakerConfig defaultConfig = new ColumnBinaryMakerConfig(); ColumnBinaryMakerCustomConfigNode configNode = new ColumnBinaryMakerCustomConfigNode( "root" , defaultConfig ); ColumnBinary columnBinary = maker.toBinary( defaultConfig , null , column ); return FindColumnBinaryMaker.get( columnBinary.makerClassName ).toColumn( columnBinary ); } public IColumn createLastCellColumn( final String targetClassName ) throws IOException{ IColumn column = new PrimitiveColumn( ColumnType.STRING , "column" ); column.add( ColumnType.STRING , new StringObj( "c" ) , 10000 ); IColumnBinaryMaker maker = FindColumnBinaryMaker.get( targetClassName ); ColumnBinaryMakerConfig defaultConfig = new ColumnBinaryMakerConfig(); ColumnBinaryMakerCustomConfigNode configNode = new ColumnBinaryMakerCustomConfigNode( "root" , defaultConfig ); ColumnBinary columnBinary = maker.toBinary( defaultConfig , null , column ); return FindColumnBinaryMaker.get( columnBinary.makerClassName ).toColumn( columnBinary ); } @ParameterizedTest @MethodSource( "data1" ) public void T_notNull_1( final String targetClassName ) throws IOException{ IColumn column = createNotNullColumn( targetClassName ); assertEquals( ( (PrimitiveObject)( column.get(0).getRow() ) ).getString() , "a" ); assertEquals( ( (PrimitiveObject)( column.get(1).getRow() ) ).getString() , "ab" ); assertEquals( ( (PrimitiveObject)( column.get(2).getRow() ) ).getString() , "abc" ); assertEquals( ( (PrimitiveObject)( column.get(3).getRow() ) ).getString() , "abcd" ); assertEquals( ( (PrimitiveObject)( column.get(4).getRow() ) ).getString() , "b" ); assertEquals( ( (PrimitiveObject)( column.get(5).getRow() ) ).getString() , "bc" ); assertEquals( ( (PrimitiveObject)( column.get(6).getRow() ) ).getString() , "bcd" ); assertEquals( ( (PrimitiveObject)( column.get(7).getRow() ) ).getString() , "bcde" ); assertEquals( ( (PrimitiveObject)( column.get(8).getRow() ) ).getString() , "c" ); assertEquals( ( (PrimitiveObject)( column.get(9).getRow() ) ).getString() , "cd" ); assertEquals( ( (PrimitiveObject)( column.get(10).getRow() ) ).getString() , "" ); } @ParameterizedTest @MethodSource( "data1" ) public void T_null_1( final String targetClassName ) throws IOException{ IColumn column = createNullColumn( targetClassName ); assertNull( column.get(0).getRow() ); assertNull( column.get(1).getRow() ); } @ParameterizedTest @MethodSource( "data1" ) public void T_hasNull_1( final String targetClassName ) throws IOException{ IColumn column = createHasNullColumn( targetClassName ); assertEquals( ( (PrimitiveObject)( column.get(0).getRow() ) ).getString() , "a" ); assertNull( column.get(1).getRow() ); assertNull( column.get(2).getRow() ); assertNull( column.get(3).getRow() ); assertEquals( ( (PrimitiveObject)( column.get(4).getRow() ) ).getString() , "b" ); assertNull( column.get(5).getRow() ); assertNull( column.get(6).getRow() ); assertNull( column.get(7).getRow() ); assertEquals( ( (PrimitiveObject)( column.get(8).getRow() ) ).getString() , "c" ); } @ParameterizedTest @MethodSource( "data1" ) public void T_lastCell_1( final String targetClassName ) throws IOException{ IColumn column = createLastCellColumn( targetClassName ); for( int i = 0 ; i < 10000 ; i++ ){ assertNull( column.get(i).getRow() ); } assertEquals( ( (PrimitiveObject)( column.get(10000).getRow() ) ).getString() , "c" ); } }