blob: cd405bc9fe79601483f31163fa0cfc46377f8b8c [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.flink.api.java.typeutils;
import static org.junit.Assert.*;
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.tuple.Tuple3;
import org.apache.flink.api.java.tuple.Tuple4;
import org.junit.Test;
public class CompositeTypeTest {
private final TupleTypeInfo<?> tupleTypeInfo = new TupleTypeInfo<Tuple4<Integer, Integer, Integer, Integer>>(
BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO);
private final TupleTypeInfo<Tuple3<Integer, String, Long>> inNestedTuple1 = new TupleTypeInfo<Tuple3<Integer, String, Long>>(
BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.LONG_TYPE_INFO);
private final TupleTypeInfo<Tuple2<Double, Double>> inNestedTuple2 = new TupleTypeInfo<Tuple2<Double, Double>>(
BasicTypeInfo.DOUBLE_TYPE_INFO, BasicTypeInfo.DOUBLE_TYPE_INFO);
private final TupleTypeInfo<?> nestedTypeInfo = new TupleTypeInfo<Tuple4<Integer, Tuple3<Integer, String, Long>, Integer, Tuple2<Double, Double>>>(
BasicTypeInfo.INT_TYPE_INFO,
inNestedTuple1,
BasicTypeInfo.INT_TYPE_INFO,
inNestedTuple2);
private final TupleTypeInfo<Tuple2<Integer, Tuple2<Integer, Integer>>> inNestedTuple3 = new TupleTypeInfo<Tuple2<Integer, Tuple2<Integer, Integer>>>(
BasicTypeInfo.INT_TYPE_INFO,
new TupleTypeInfo<Tuple2<Integer, Integer>>(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO));
private final TupleTypeInfo<?> deepNestedTupleTypeInfo = new TupleTypeInfo<Tuple3<Integer, Tuple2<Integer, Tuple2<Integer, Integer>>, Integer>>(
BasicTypeInfo.INT_TYPE_INFO,
inNestedTuple3,
BasicTypeInfo.INT_TYPE_INFO );
private final PojoTypeInfo<?> pojoTypeInfo = ((PojoTypeInfo<?>) TypeExtractor.getForClass
(MyPojo.class));
private final TupleTypeInfo<?> pojoInTupleTypeInfo = new TupleTypeInfo<Tuple2<Integer, MyPojo>>(BasicTypeInfo.INT_TYPE_INFO, pojoTypeInfo);
@Test
public void testGetFlatFields() {
assertEquals(0, tupleTypeInfo.getFlatFields("0").get(0).getPosition());
assertEquals(1, tupleTypeInfo.getFlatFields("1").get(0).getPosition());
assertEquals(2, tupleTypeInfo.getFlatFields("2").get(0).getPosition());
assertEquals(3, tupleTypeInfo.getFlatFields("3").get(0).getPosition());
assertEquals(0, tupleTypeInfo.getFlatFields("f0").get(0).getPosition());
assertEquals(1, tupleTypeInfo.getFlatFields("f1").get(0).getPosition());
assertEquals(2, tupleTypeInfo.getFlatFields("f2").get(0).getPosition());
assertEquals(3, tupleTypeInfo.getFlatFields("f3").get(0).getPosition());
assertEquals(0, nestedTypeInfo.getFlatFields("0").get(0).getPosition());
assertEquals(1, nestedTypeInfo.getFlatFields("1.0").get(0).getPosition());
assertEquals(2, nestedTypeInfo.getFlatFields("1.1").get(0).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("1.2").get(0).getPosition());
assertEquals(4, nestedTypeInfo.getFlatFields("2").get(0).getPosition());
assertEquals(5, nestedTypeInfo.getFlatFields("3.0").get(0).getPosition());
assertEquals(6, nestedTypeInfo.getFlatFields("3.1").get(0).getPosition());
assertEquals(4, nestedTypeInfo.getFlatFields("f2").get(0).getPosition());
assertEquals(5, nestedTypeInfo.getFlatFields("f3.f0").get(0).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("1").size());
assertEquals(1, nestedTypeInfo.getFlatFields("1").get(0).getPosition());
assertEquals(2, nestedTypeInfo.getFlatFields("1").get(1).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("1").get(2).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("1.*").size());
assertEquals(1, nestedTypeInfo.getFlatFields("1.*").get(0).getPosition());
assertEquals(2, nestedTypeInfo.getFlatFields("1.*").get(1).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("1.*").get(2).getPosition());
assertEquals(2, nestedTypeInfo.getFlatFields("3").size());
assertEquals(5, nestedTypeInfo.getFlatFields("3").get(0).getPosition());
assertEquals(6, nestedTypeInfo.getFlatFields("3").get(1).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("f1").size());
assertEquals(1, nestedTypeInfo.getFlatFields("f1").get(0).getPosition());
assertEquals(2, nestedTypeInfo.getFlatFields("f1").get(1).getPosition());
assertEquals(3, nestedTypeInfo.getFlatFields("f1").get(2).getPosition());
assertEquals(2, nestedTypeInfo.getFlatFields("f3").size());
assertEquals(5, nestedTypeInfo.getFlatFields("f3").get(0).getPosition());
assertEquals(6, nestedTypeInfo.getFlatFields("f3").get(1).getPosition());
assertEquals(BasicTypeInfo.INT_TYPE_INFO,
nestedTypeInfo.getFlatFields("0").get(0).getType());
assertEquals(BasicTypeInfo.STRING_TYPE_INFO,
nestedTypeInfo.getFlatFields("1.1").get(0).getType());
assertEquals(BasicTypeInfo.LONG_TYPE_INFO,
nestedTypeInfo.getFlatFields("1").get(2).getType());
assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO,
nestedTypeInfo.getFlatFields("3").get(1).getType());
assertEquals(3, deepNestedTupleTypeInfo.getFlatFields("1").size());
assertEquals(1, deepNestedTupleTypeInfo.getFlatFields("1").get(0).getPosition());
assertEquals(2, deepNestedTupleTypeInfo.getFlatFields("1").get(1).getPosition());
assertEquals(3, deepNestedTupleTypeInfo.getFlatFields("1").get(2).getPosition());
assertEquals(5, deepNestedTupleTypeInfo.getFlatFields("*").size());
assertEquals(0, deepNestedTupleTypeInfo.getFlatFields("*").get(0).getPosition());
assertEquals(1, deepNestedTupleTypeInfo.getFlatFields("*").get(1).getPosition());
assertEquals(2, deepNestedTupleTypeInfo.getFlatFields("*").get(2).getPosition());
assertEquals(3, deepNestedTupleTypeInfo.getFlatFields("*").get(3).getPosition());
assertEquals(4, deepNestedTupleTypeInfo.getFlatFields("*").get(4).getPosition());
assertEquals(0, pojoTypeInfo.getFlatFields("a").get(0).getPosition());
assertEquals(1, pojoTypeInfo.getFlatFields("b").get(0).getPosition());
assertEquals(2, pojoTypeInfo.getFlatFields("*").size());
assertEquals(0, pojoTypeInfo.getFlatFields("*").get(0).getPosition());
assertEquals(1, pojoTypeInfo.getFlatFields("*").get(1).getPosition());
assertEquals(1, pojoInTupleTypeInfo.getFlatFields("f1.a").get(0).getPosition());
assertEquals(2, pojoInTupleTypeInfo.getFlatFields("1.b").get(0).getPosition());
assertEquals(2, pojoInTupleTypeInfo.getFlatFields("1").size());
assertEquals(1, pojoInTupleTypeInfo.getFlatFields("1.*").get(0).getPosition());
assertEquals(2, pojoInTupleTypeInfo.getFlatFields("1").get(1).getPosition());
assertEquals(2, pojoInTupleTypeInfo.getFlatFields("f1.*").size());
assertEquals(1, pojoInTupleTypeInfo.getFlatFields("f1.*").get(0).getPosition());
assertEquals(2, pojoInTupleTypeInfo.getFlatFields("f1").get(1).getPosition());
assertEquals(3, pojoInTupleTypeInfo.getFlatFields("*").size());
assertEquals(0, pojoInTupleTypeInfo.getFlatFields("*").get(0).getPosition());
assertEquals(1, pojoInTupleTypeInfo.getFlatFields("*").get(1).getPosition());
assertEquals(2, pojoInTupleTypeInfo.getFlatFields("*").get(2).getPosition());
}
@Test
public void testFieldAtStringRef() {
assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("0"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("2"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("f1"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("f3"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("0"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("1.0"));
assertEquals(BasicTypeInfo.STRING_TYPE_INFO, nestedTypeInfo.getTypeAt("1.1"));
assertEquals(BasicTypeInfo.LONG_TYPE_INFO, nestedTypeInfo.getTypeAt("1.2"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("2"));
assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getTypeAt("3.0"));
assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getTypeAt("3.1"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("f2"));
assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getTypeAt("f3.f0"));
assertEquals(inNestedTuple1, nestedTypeInfo.getTypeAt("1"));
assertEquals(inNestedTuple2, nestedTypeInfo.getTypeAt("3"));
assertEquals(inNestedTuple1, nestedTypeInfo.getTypeAt("f1"));
assertEquals(inNestedTuple2, nestedTypeInfo.getTypeAt("f3"));
assertEquals(inNestedTuple3, deepNestedTupleTypeInfo.getTypeAt("1"));
assertEquals(BasicTypeInfo.STRING_TYPE_INFO, pojoTypeInfo.getTypeAt("a"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, pojoTypeInfo.getTypeAt("b"));
assertEquals(BasicTypeInfo.STRING_TYPE_INFO, pojoInTupleTypeInfo.getTypeAt("f1.a"));
assertEquals(BasicTypeInfo.INT_TYPE_INFO, pojoInTupleTypeInfo.getTypeAt("1.b"));
assertEquals(pojoTypeInfo, pojoInTupleTypeInfo.getTypeAt("1"));
assertEquals(pojoTypeInfo, pojoInTupleTypeInfo.getTypeAt("f1"));
}
public static class MyPojo {
public String a;
public int b;
}
}