/*
* 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.functions;
import org.apache.flink.api.common.operators.DualInputSemanticProperties;
import org.apache.flink.api.common.operators.SemanticProperties;
import org.apache.flink.api.common.operators.SemanticProperties.InvalidSemanticAnnotationException;
import org.apache.flink.api.common.operators.SingleInputSemanticProperties;
import org.apache.flink.api.common.operators.util.FieldSet;
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.common.typeutils.CompositeType;
import org.apache.flink.api.java.tuple.Tuple3;
import org.apache.flink.api.java.tuple.Tuple4;
import org.apache.flink.api.java.tuple.Tuple5;
import org.apache.flink.api.java.typeutils.TupleTypeInfo;
import org.apache.flink.api.java.typeutils.TypeExtractor;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class SemanticPropUtilTest {
private final TypeInformation<?> threeIntTupleType = new TupleTypeInfo<Tuple3<Integer, Integer, Integer>>(BasicTypeInfo.INT_TYPE_INFO,
BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO);
private final TypeInformation<?> fourIntTupleType = 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 TypeInformation<?> fiveIntTupleType = new TupleTypeInfo<Tuple5<Integer, Integer, Integer, Integer, Integer>>(BasicTypeInfo.INT_TYPE_INFO,
BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO);
private final TypeInformation<?> threeMixedTupleType = new TupleTypeInfo<Tuple3<Integer, Long, String>>(BasicTypeInfo.INT_TYPE_INFO,
BasicTypeInfo.LONG_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO);
private final TypeInformation<?> nestedTupleType = new TupleTypeInfo<Tuple3<Tuple3<Integer, Integer, Integer>, Integer, Integer>>(threeIntTupleType,
BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO);
private final TypeInformation<?> deepNestedTupleType = new TupleTypeInfo<Tuple3<Integer, Tuple3<Tuple3<Integer, Integer, Integer>, Integer, Integer>, Integer>>(
BasicTypeInfo.INT_TYPE_INFO, nestedTupleType, BasicTypeInfo.INT_TYPE_INFO);
private final TypeInformation<?> pojoType = TypeExtractor.getForClass(TestPojo.class);
private final TypeInformation<?> pojo2Type = TypeExtractor.getForClass(TestPojo2.class);
private final TypeInformation<?> nestedPojoType = TypeExtractor.getForClass(NestedTestPojo.class);
private final TypeInformation<?> pojoInTupleType = new TupleTypeInfo<Tuple3<Integer, Integer, TestPojo>>(BasicTypeInfo.INT_TYPE_INFO,
BasicTypeInfo.INT_TYPE_INFO, pojoType);
private final TypeInformation<?> intType = BasicTypeInfo.INT_TYPE_INFO;
// --------------------------------------------------------------------------------------------
// Projection Operator Properties
// --------------------------------------------------------------------------------------------
@Test
public void testSingleProjectionProperties() {
int[] pMap = new int[] {3,0,4};
SingleInputSemanticProperties sp = SemanticPropUtil.createProjectionPropertiesSingle(pMap, (CompositeType<?>) fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(2));
pMap = new int[] {2,2,1,1};
sp = SemanticPropUtil.createProjectionPropertiesSingle(pMap, (CompositeType<?>) fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 2);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 2);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
pMap = new int[] {2,0};
sp = SemanticPropUtil.createProjectionPropertiesSingle(pMap, (CompositeType<?>) nestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 4).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(3));
pMap = new int[] {2,0,1};
sp = SemanticPropUtil.createProjectionPropertiesSingle(pMap, (CompositeType<?>) deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 6).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 5).contains(6));
pMap = new int[] {2, 1};
sp = SemanticPropUtil.createProjectionPropertiesSingle(pMap, (CompositeType<?>) pojoInTupleType);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 5).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(4));
}
@Test
public void testDualProjectionProperties() {
int[] pMap = new int[]{4,2,0,1,3,4};
boolean[] iMap = new boolean[]{true, true, false, true, false, false};
DualInputSemanticProperties sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap,
fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 4).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(3));
assertTrue(sp.getForwardingTargetFields(1, 3).contains(4));
assertTrue(sp.getForwardingTargetFields(1, 4).contains(5));
pMap = new int[]{4,2,0,4,0,1};
iMap = new boolean[]{true, true, false, true, false, false};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 4).size() == 2);
assertTrue(sp.getForwardingTargetFields(1, 0).size() == 2);
assertTrue(sp.getForwardingTargetFields(0, 4).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(3));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(4));
assertTrue(sp.getForwardingTargetFields(1, 1).contains(5));
pMap = new int[]{2,1,0,1};
iMap = new boolean[]{false, false, true, true};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, nestedTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(1, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(5));
pMap = new int[]{1,0,0};
iMap = new boolean[]{false, false, true};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, nestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(1, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(1, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 3).contains(2));
assertTrue(sp.getForwardingTargetFields(1, 4).contains(3));
assertTrue(sp.getForwardingTargetFields(1, 5).contains(4));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(6));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(7));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(8));
pMap = new int[]{4,2,1,0};
iMap = new boolean[]{true, false, true, false};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, fiveIntTupleType, pojoInTupleType);
assertTrue(sp.getForwardingTargetFields(0, 4).contains(0));
assertTrue(sp.getForwardingTargetFields(1, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 3).contains(2));
assertTrue(sp.getForwardingTargetFields(1, 4).contains(3));
assertTrue(sp.getForwardingTargetFields(1, 5).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(5));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(6));
pMap = new int[]{2,3,-1,0};
iMap = new boolean[]{true, true, false, true};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, fiveIntTupleType, intType);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(3));
pMap = new int[]{-1,-1};
iMap = new boolean[]{false, true};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, intType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(1, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(1, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(1, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(1, 5).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(6));
pMap = new int[]{-1,-1};
iMap = new boolean[]{true, false};
sp = SemanticPropUtil.createProjectionPropertiesDual(pMap, iMap, intType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(1, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(1, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(1, 2).contains(3));
assertTrue(sp.getForwardingTargetFields(1, 3).contains(4));
assertTrue(sp.getForwardingTargetFields(1, 4).contains(5));
assertTrue(sp.getForwardingTargetFields(1, 5).contains(6));
}
// --------------------------------------------------------------------------------------------
// Offset
// --------------------------------------------------------------------------------------------
@Test
public void testAddSourceFieldOffset() {
SingleInputSemanticProperties semProps = new SingleInputSemanticProperties();
semProps.addForwardedField(0, 1);
semProps.addForwardedField(0, 4);
semProps.addForwardedField(2, 0);
semProps.addForwardedField(4, 3);
semProps.addReadFields(new FieldSet(0,3));
SemanticProperties offsetProps = SemanticPropUtil.addSourceFieldOffset(semProps, 5, 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 0).size() == 2);
assertTrue(offsetProps.getForwardingTargetFields(0, 0).contains(1));
assertTrue(offsetProps.getForwardingTargetFields(0, 0).contains(4));
assertTrue(offsetProps.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 2).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 2).contains(0));
assertTrue(offsetProps.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 4).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 4).contains(3));
assertTrue(offsetProps.getReadFields(0).size() == 2);
assertTrue(offsetProps.getReadFields(0).contains(0));
assertTrue(offsetProps.getReadFields(0).contains(3));
offsetProps = SemanticPropUtil.addSourceFieldOffset(semProps, 5, 3);
assertTrue(offsetProps.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 3).size() == 2);
assertTrue(offsetProps.getForwardingTargetFields(0, 3).contains(1));
assertTrue(offsetProps.getForwardingTargetFields(0, 3).contains(4));
assertTrue(offsetProps.getForwardingTargetFields(0, 4).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 5).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 5).contains(0));
assertTrue(offsetProps.getForwardingTargetFields(0, 6).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 7).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 7).contains(3));
assertTrue(offsetProps.getReadFields(0).size() == 2);
assertTrue(offsetProps.getReadFields(0).contains(3));
assertTrue(offsetProps.getReadFields(0).contains(6));
semProps = new SingleInputSemanticProperties();
SemanticPropUtil.addSourceFieldOffset(semProps, 1, 0);
semProps = new SingleInputSemanticProperties();
semProps.addForwardedField(0, 0);
semProps.addForwardedField(1, 2);
semProps.addForwardedField(2, 4);
offsetProps = SemanticPropUtil.addSourceFieldOffset(semProps, 3, 2);
assertTrue(offsetProps.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 2).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 2).contains(0));
assertTrue(offsetProps.getForwardingTargetFields(0, 3).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 3).contains(2));
assertTrue(offsetProps.getForwardingTargetFields(0, 4).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 4).contains(4));
}
@Test
public void testAddSourceFieldOffsets() {
DualInputSemanticProperties semProps = new DualInputSemanticProperties();
semProps.addForwardedField(0, 0, 1);
semProps.addForwardedField(0, 3, 3);
semProps.addForwardedField(1, 1, 2);
semProps.addForwardedField(1, 1, 4);
semProps.addReadFields(0, new FieldSet(1, 2));
semProps.addReadFields(1, new FieldSet(0, 3, 4));
DualInputSemanticProperties offsetProps = SemanticPropUtil.addSourceFieldOffsets(semProps, 4, 3, 1, 2);
assertTrue(offsetProps.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 1).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 1).contains(1));
assertTrue(offsetProps.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(0, 4).size() == 1);
assertTrue(offsetProps.getForwardingTargetFields(0, 4).contains(3));
assertTrue(offsetProps.getForwardingTargetFields(1, 0).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(1, 1).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(1, 2).size() == 0);
assertTrue(offsetProps.getForwardingTargetFields(1, 3).size() == 2);
assertTrue(offsetProps.getForwardingTargetFields(1, 3).contains(2));
assertTrue(offsetProps.getForwardingTargetFields(1, 3).contains(4));
assertTrue(offsetProps.getReadFields(0).size() == 2);
assertTrue(offsetProps.getReadFields(0).contains(2));
assertTrue(offsetProps.getReadFields(0).contains(3));
assertTrue(offsetProps.getReadFields(1).size() == 3);
assertTrue(offsetProps.getReadFields(1).contains(2));
assertTrue(offsetProps.getReadFields(1).contains(5));
assertTrue(offsetProps.getReadFields(1).contains(6));
semProps = new DualInputSemanticProperties();
SemanticPropUtil.addSourceFieldOffsets(semProps, 4, 3, 2, 2);
}
// --------------------------------------------------------------------------------------------
// Forwarded Fields Annotation
// --------------------------------------------------------------------------------------------
@Test
public void testForwardedNoArrowIndividualStrings() {
String[] forwardedFields = {"f2","f3","f0"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
}
@Test
public void testForwardedNoArrowOneString() {
String[] forwardedFields = {"f2;f3;f0"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
forwardedFields[0] = "2;3;0";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
forwardedFields[0] = "2;3;0;";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
}
@Test
public void testForwardedNoArrowSpaces() {
String[] forwardedFields = {" f2 ; f3 ; f0 "};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
}
@Test
public void testForwardedWithArrowIndividualStrings() {
String[] forwardedFields = { "f0->f1", "f1->f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
}
@Test
public void testForwardedWithArrowOneString() {
String[] forwardedFields = { "f0->f0;f1->f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
forwardedFields[0] = "0->0;1->2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
}
@Test
public void testForwardedWithArrowSpaces() {
String[] forwardedFields = { " f0 -> f0 ; f1 -> f2 " };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
}
@Test
public void testForwardedMixedOneString() {
String[] forwardedFields = {"f2;f3;f0->f4;f4->f0"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(0));
}
@Test
public void testForwardedBasicType() {
String[] forwardedFields = {"f1->*"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, intType);
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
forwardedFields[0] = "*->f2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, intType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(2));
forwardedFields[0] = "*->*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, intType, intType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
}
@Test
public void testForwardedWildCard() {
String[] forwardedFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
forwardedFields[0] = "*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
}
@Test
public void testForwardedNestedTuples() {
String[] forwardedFields = { "f0->f0.f0; f1->f0.f1; f2->f0.f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, nestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
forwardedFields[0] = "f0.f0->f1.f0.f2; f0.f1->f2; f2->f1.f2; f1->f0";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(6));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(0));
forwardedFields[0] = "0.0->1.0.2; 0.1->2; 2->1.2; 1->0";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(6));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(0));
forwardedFields[0] = "f1.f0.*->f0.*; f0->f2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, nestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(4));
forwardedFields[0] = "1.0.*->0.*; 0->2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, nestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(4));
forwardedFields[0] = "f1.f0->f0; f0->f2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, nestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(4));
forwardedFields[0] = "1.0->0; 0->2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, nestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 0).contains(4));
forwardedFields[0] = "f1.f0.f1; f1.f1; f2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 6).contains(6));
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 5).size() == 0);
forwardedFields[0] = "f1.f0.*; f1.f2";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, deepNestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 5).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 4).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 6).size() == 0);
}
@Test
public void testForwardedPojo() {
String[] forwardedFields = { "int1->int2; int3->int1; string1 " };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, pojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
forwardedFields[0] = "f1->int1; f0->int3 ";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, pojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
forwardedFields[0] = "int1->f2; int2->f0; int3->f1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(1));
forwardedFields[0] = "*->pojo1.*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(4));
forwardedFields[0] = "*->pojo1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(4));
forwardedFields[0] = "int1; string1; int2->pojo1.int3";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).contains(5));
forwardedFields[0] = "pojo1.*->f2.*; int1->f1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedPojoType, pojoInTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(5));
forwardedFields[0] = "f2.*->*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoInTupleType, pojoType);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 5).contains(3));
forwardedFields[0] = "pojo1->f2; int1->f1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedPojoType, pojoInTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(5));
forwardedFields[0] = "f2->*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoInTupleType, pojoType);
assertTrue(sp.getForwardingTargetFields(0, 2).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 5).contains(3));
forwardedFields[0] = "int2; string1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, pojoType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
forwardedFields[0] = "pojo1.int1; string1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedPojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 5).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 4).size() == 0);
forwardedFields[0] = "pojo1.*; int1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedPojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 5).size() == 0);
forwardedFields[0] = "pojo1; int1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedPojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 5).size() == 0);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testInvalidPojoField() {
String[] forwardedFields = { "invalidField" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedNoArrowOneStringInvalidDelimiter() {
String[] forwardedFields = {"f2,f3,f0"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedSameTargetTwice() {
String[] forwardedFields = {"f0->f2; f1->f2"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, fiveIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidTargetFieldType1() {
String[] forwardedFields = {"f0->f0","f1->f2"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, threeMixedTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidTargetFieldType2() {
String[] forwardedFields = { "f2.*->*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoInTupleType, pojo2Type);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidTargetFieldType3() {
String[] forwardedFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoInTupleType, pojo2Type);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidTargetFieldType4() {
String[] forwardedFields = { "int1; string1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoInTupleType, pojo2Type);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidTargetFieldType5() {
String[] forwardedFields = {"f0.*->*"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, nestedTupleType, fiveIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedWildCardInvalidTypes1() {
String[] forwardedFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, fiveIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedWildCardInvalidTypes2() {
String[] forwardedFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, fiveIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedWildCardInvalidTypes3() {
String[] forwardedFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, pojoType, pojo2Type);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedForwardWildCard() {
String[] forwardedFields = { "f1->*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidExpression() {
String[] forwardedFields = { "f0" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, intType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedForwardMultiFields() {
String[] forwardedFields = { "f1->f0,f1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedInvalidString() {
String[] forwardedFields = { "notValid" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, null, threeIntTupleType, threeIntTupleType);
}
// --------------------------------------------------------------------------------------------
// Non-Forwarded Fields Annotation
// --------------------------------------------------------------------------------------------
@Test
public void testNonForwardedIndividualStrings() {
String[] nonForwardedFields = { "f1", "f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
}
@Test
public void testNonForwardedSingleString() {
String[] nonForwardedFields = { "f1;f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
nonForwardedFields[0] = "f1;f2;";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
}
@Test
public void testNonForwardedSpaces() {
String[] nonForwardedFields = { " f1 ; f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
}
@Test
public void testNonForwardedNone() {
String[] nonForwardedFields = { "" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
}
@Test
public void testNonForwardedNestedTuple() {
String[] nonForwardedFields = {"f1.f0.*; f1.f2; f0"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, deepNestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 5).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 6).contains(6));
nonForwardedFields[0] = "f1.f0; f1.f2; f0";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, deepNestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 5).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 6).contains(6));
nonForwardedFields[0] = "f2; f1.f1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, deepNestedTupleType, deepNestedTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 4).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 5).contains(5));
assertTrue(sp.getForwardingTargetFields(0, 6).size() == 0);
}
@Test
public void testNonForwardedPojo() {
String[] nonForwardedFields = { "int1; string1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, pojoType, pojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
}
@Test
public void testNonForwardedNestedPojo() {
String[] nonForwardedFields = { "int1; pojo1.*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, nestedPojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 4).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 5).contains(5));
nonForwardedFields[0] = "pojo1.int2; string1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, nestedPojoType, nestedPojoType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(1));
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 3).contains(3));
assertTrue(sp.getForwardingTargetFields(0, 4).contains(4));
assertTrue(sp.getForwardingTargetFields(0, 5).size() == 0);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidTypes1() {
String[] nonForwardedFields = { "f1; f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, nestedPojoType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidTypes2() {
String[] nonForwardedFields = { "f1; f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, nestedPojoType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidTypes3() {
String[] nonForwardedFields = { "f1; f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, fiveIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidTypes4() {
String[] nonForwardedFields = { "f1; f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, fiveIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidTypes5() {
String[] nonForwardedFields = { "int1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, pojoType, pojo2Type);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidNesting() {
String[] nonForwardedFields = { "f0.f4" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, nestedTupleType, nestedTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedInvalidString() {
String[] nonForwardedFields = { "notValid" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, null, threeIntTupleType, threeIntTupleType);
}
// --------------------------------------------------------------------------------------------
// Read Fields Annotation
// --------------------------------------------------------------------------------------------
@Test
public void testReadFieldsIndividualStrings() {
String[] readFields = { "f1", "f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, threeIntTupleType, threeIntTupleType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 2);
assertTrue(fs.contains(2));
assertTrue(fs.contains(1));
}
@Test
public void testReadFieldsOneString() {
String[] readFields = { "f1;f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, threeIntTupleType, threeIntTupleType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 2);
assertTrue(fs.contains(2));
assertTrue(fs.contains(1));
readFields[0] = "f1;f2;";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, threeIntTupleType, threeIntTupleType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 2);
assertTrue(fs.contains(2));
assertTrue(fs.contains(1));
}
@Test
public void testReadFieldsSpaces() {
String[] readFields = { " f1 ; f2 " };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, threeIntTupleType, threeIntTupleType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 2);
assertTrue(fs.contains(2));
assertTrue(fs.contains(1));
}
@Test
public void testReadFieldsBasic() {
String[] readFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, intType, intType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 1);
assertTrue(fs.contains(0));
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, intType, fiveIntTupleType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 1);
assertTrue(fs.contains(0));
}
@Test
public void testReadFieldsNestedTuples() {
String[] readFields = { "f0.f1; f0.f2; f2" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedTupleType, intType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 3);
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(4));
readFields[0] = "f0;f1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedTupleType, intType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 4);
assertTrue(fs.contains(0));
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(3));
}
@Test
public void testReadFieldsNestedTupleWildCard() {
String[] readFields = { "*" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedTupleType, intType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 5);
assertTrue(fs.contains(0));
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(3));
assertTrue(fs.contains(4));
readFields[0] = "f0.*;f1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedTupleType, intType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 4);
assertTrue(fs.contains(0));
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(3));
}
@Test
public void testReadFieldsPojo() {
String[] readFields = { "int2; string1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, pojoType, threeIntTupleType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 2);
assertTrue(fs.contains(1));
assertTrue(fs.contains(3));
readFields[0] = "*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, pojoType, intType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 4);
assertTrue(fs.contains(0));
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(3));
}
@Test
public void testReadFieldsNestedPojo() {
String[] readFields = { "pojo1.int2; string1; pojo1.string1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedPojoType, intType);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 3);
assertTrue(fs.contains(2));
assertTrue(fs.contains(4));
assertTrue(fs.contains(5));
readFields[0] = "pojo1.*";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedPojoType, intType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 4);
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(3));
assertTrue(fs.contains(4));
readFields[0] = "pojo1";
sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, nestedPojoType, intType);
fs = sp.getReadFields(0);
assertTrue(fs.size() == 4);
assertTrue(fs.contains(1));
assertTrue(fs.contains(2));
assertTrue(fs.contains(3));
assertTrue(fs.contains(4));
}
@Test
public void testReadFieldsPojoInTuple() {
String[] readFields = { "f0; f2.int1; f2.string1" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, pojoInTupleType, pojo2Type);
FieldSet fs = sp.getReadFields(0);
assertTrue(fs.size() == 3);
assertTrue(fs.contains(0));
assertTrue(fs.contains(2));
assertTrue(fs.contains(5));
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testReadFieldsInvalidString() {
String[] readFields = { "notValid" };
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, null, readFields, threeIntTupleType, threeIntTupleType);
}
// --------------------------------------------------------------------------------------------
// Two Inputs
// --------------------------------------------------------------------------------------------
@Test
public void testForwardedDual() {
String[] forwardedFieldsFirst = { "f1->f2; f2->f3" };
String[] forwardedFieldsSecond = { "f1->f1; f2->f0" };
DualInputSemanticProperties dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, forwardedFieldsFirst, forwardedFieldsSecond, null,
null, null, null, fourIntTupleType, fourIntTupleType, fourIntTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(dsp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 2).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 3).size() == 0);
forwardedFieldsFirst[0] = "f1->f0;f3->f1";
forwardedFieldsSecond[0] = "*->f2.*";
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, forwardedFieldsFirst, forwardedFieldsSecond, null,
null, null, null, fourIntTupleType, pojoType, pojoInTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 1).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 3).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 0).contains(2));
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(3));
assertTrue(dsp.getForwardingTargetFields(1, 2).contains(4));
assertTrue(dsp.getForwardingTargetFields(1, 3).contains(5));
forwardedFieldsFirst[0] = "f1.f0.f2->int1; f2->pojo1.int3";
forwardedFieldsSecond[0] = "string1; int2->pojo1.int1; int1->pojo1.int2";
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, forwardedFieldsFirst, forwardedFieldsSecond, null,
null, null, null, deepNestedTupleType, pojoType, nestedPojoType);
assertTrue(dsp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 3).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 4).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 5).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 6).contains(3));
assertTrue(dsp.getForwardingTargetFields(1, 0).contains(2));
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 3).contains(5));
String[] forwardedFieldsFirst2 = { "f1.f0.f2->int1", "f2->pojo1.int3" };
String[] forwardedFieldsSecond2 = { "string1", "int2->pojo1.int1", "int1->pojo1.int2" };
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, forwardedFieldsFirst2, forwardedFieldsSecond2, null,
null, null, null, deepNestedTupleType, pojoType, nestedPojoType);
assertTrue(dsp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 3).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 4).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 5).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 6).contains(3));
assertTrue(dsp.getForwardingTargetFields(1, 0).contains(2));
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 3).contains(5));
}
@Test
public void testNonForwardedDual() {
String[] nonForwardedFieldsFirst = { "f1;f2" };
String[] nonForwardedFieldsSecond = { "f0" };
DualInputSemanticProperties dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
nonForwardedFieldsFirst, nonForwardedFieldsSecond, null, null, threeIntTupleType, threeIntTupleType, threeIntTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 2).contains(2));
nonForwardedFieldsFirst[0] = "f1";
nonForwardedFieldsSecond[0] = "";
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
nonForwardedFieldsFirst, null, null, null, threeIntTupleType, fiveIntTupleType, threeIntTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(dsp.getForwardingTargetFields(1, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 2).size() == 0);
nonForwardedFieldsFirst[0] = "";
nonForwardedFieldsSecond[0] = "f2;f0";
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, nonForwardedFieldsSecond, null, null, fiveIntTupleType, threeIntTupleType, threeIntTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 2).size() == 0);
String[] nonForwardedFields = {"f1", "f3"};
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
nonForwardedFields, null, null, null, fiveIntTupleType, threeIntTupleType, fiveIntTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 2).contains(2));
assertTrue(dsp.getForwardingTargetFields(0, 3).size() == 0);
assertTrue(dsp.getForwardingTargetFields(0, 4).contains(4));
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, nonForwardedFields, null, null, threeIntTupleType, fiveIntTupleType, fiveIntTupleType);
assertTrue(dsp.getForwardingTargetFields(1, 0).contains(0));
assertTrue(dsp.getForwardingTargetFields(1, 1).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 2).contains(2));
assertTrue(dsp.getForwardingTargetFields(1, 3).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 4).contains(4));
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedDualInvalidTypes1() {
String[] nonForwardedFieldsFirst = { "f1" };
DualInputSemanticProperties dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
nonForwardedFieldsFirst, null, null, null, fiveIntTupleType, threeIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testNonForwardedDualInvalidTypes2() {
String[] nonForwardedFieldsSecond = { "f1" };
DualInputSemanticProperties dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, nonForwardedFieldsSecond, null, null, threeIntTupleType, pojoInTupleType, threeIntTupleType);
}
@Test
public void testReadFieldsDual() {
String[] readFieldsFirst = {"f1;f2"};
String[] readFieldsSecond = {"f0"};
DualInputSemanticProperties dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, null, readFieldsFirst, readFieldsSecond, threeIntTupleType, threeIntTupleType, threeIntTupleType);
assertTrue(dsp.getReadFields(0).size() == 2);
assertTrue(dsp.getReadFields(0).contains(1));
assertTrue(dsp.getReadFields(0).contains(2));
assertTrue(dsp.getReadFields(1).size() == 1);
assertTrue(dsp.getReadFields(1).contains(0));
readFieldsFirst[0] = "f0.*; f2";
readFieldsSecond[0] = "int1; string1";
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, null, readFieldsFirst, readFieldsSecond, nestedTupleType, pojoType, threeIntTupleType);
assertTrue(dsp.getReadFields(0).size() == 4);
assertTrue(dsp.getReadFields(0).contains(0));
assertTrue(dsp.getReadFields(0).contains(1));
assertTrue(dsp.getReadFields(0).contains(2));
assertTrue(dsp.getReadFields(0).contains(4));
assertTrue(dsp.getReadFields(1).size() == 2);
assertTrue(dsp.getReadFields(1).contains(0));
assertTrue(dsp.getReadFields(1).contains(3));
readFieldsFirst[0] = "pojo1.int2; string1";
readFieldsSecond[0] = "f2.int2";
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, null, readFieldsFirst, readFieldsSecond, nestedPojoType, pojoInTupleType, threeIntTupleType);
assertTrue(dsp.getReadFields(0).size() == 2);
assertTrue(dsp.getReadFields(0).contains(2));
assertTrue(dsp.getReadFields(0).contains(5));
assertTrue(dsp.getReadFields(1).size() == 1);
assertTrue(dsp.getReadFields(1).contains(3));
String[] readFields = {"f0", "f2", "f4"};
dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, null, null,
null, null, readFields, readFields, fiveIntTupleType, fiveIntTupleType, threeIntTupleType);
assertTrue(dsp.getReadFields(0).size() == 3);
assertTrue(dsp.getReadFields(0).contains(0));
assertTrue(dsp.getReadFields(0).contains(2));
assertTrue(dsp.getReadFields(0).contains(4));
assertTrue(dsp.getReadFields(1).size() == 3);
assertTrue(dsp.getReadFields(1).contains(0));
assertTrue(dsp.getReadFields(1).contains(2));
assertTrue(dsp.getReadFields(1).contains(4));
}
// --------------------------------------------------------------------------------------------
// Mixed Annotations
// --------------------------------------------------------------------------------------------
@Test
public void testForwardedRead() {
String[] forwardedFields = { "f0->f0;f1->f2" };
String[] readFields = {"f0; f2"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, forwardedFields, null, readFields, threeIntTupleType, fiveIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(sp.getReadFields(0).size() == 2);
assertTrue(sp.getReadFields(0).contains(0));
assertTrue(sp.getReadFields(0).contains(2));
}
@Test
public void testNonForwardedRead() {
String[] nonForwardedFields = { "f1;f2" };
String[] readFields = {"f0; f2"};
SingleInputSemanticProperties sp = new SingleInputSemanticProperties();
SemanticPropUtil.getSemanticPropsSingleFromString(sp, null, nonForwardedFields, readFields, threeIntTupleType, threeIntTupleType);
assertTrue(sp.getForwardingTargetFields(0, 0).contains(0));
assertTrue(sp.getForwardingTargetFields(0, 1).size() == 0);
assertTrue(sp.getForwardingTargetFields(0, 2).size() == 0);
assertTrue(sp.getReadFields(0).size() == 2);
assertTrue(sp.getReadFields(0).contains(0));
assertTrue(sp.getReadFields(0).contains(2));
}
@Test
public void testForwardedReadDual() {
String[] forwardedFieldsFirst = { "f1->f2; f2->f3" };
String[] forwardedFieldsSecond = { "f1->f1; f2->f0" };
String[] readFieldsFirst = {"0;2"};
String[] readFieldsSecond = {"1"};
DualInputSemanticProperties dsp = new DualInputSemanticProperties();
SemanticPropUtil.getSemanticPropsDualFromString(dsp, forwardedFieldsFirst, forwardedFieldsSecond, null,
null, readFieldsFirst, readFieldsSecond, fourIntTupleType, fourIntTupleType, fourIntTupleType);
assertTrue(dsp.getForwardingTargetFields(0, 1).contains(2));
assertTrue(dsp.getForwardingTargetFields(0, 2).contains(3));
assertTrue(dsp.getForwardingTargetFields(1, 1).contains(1));
assertTrue(dsp.getForwardingTargetFields(1, 2).contains(0));
assertTrue(dsp.getForwardingTargetFields(0, 0).size() == 0);
assertTrue(dsp.getForwardingTargetFields(1, 3).size() == 0);
assertTrue(dsp.getReadFields(0).size() == 2);
assertTrue(dsp.getReadFields(0).contains(0));
assertTrue(dsp.getReadFields(0).contains(2));
assertTrue(dsp.getReadFields(1).size() == 1);
assertTrue(dsp.getReadFields(1).contains(1));
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedNonForwardedCheck() {
String[] forwarded = { "1" };
String[] nonForwarded = { "1" };
SemanticPropUtil.getSemanticPropsSingleFromString(new SingleInputSemanticProperties(), forwarded, nonForwarded, null, threeIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedNonForwardedFirstCheck() {
String[] forwarded = { "1" };
String[] nonForwarded = { "1" };
SemanticPropUtil.getSemanticPropsDualFromString(new DualInputSemanticProperties(), forwarded, null, nonForwarded, null, null, null,
threeIntTupleType, threeIntTupleType, threeIntTupleType);
}
@Test(expected = InvalidSemanticAnnotationException.class)
public void testForwardedNonForwardedSecondCheck() {
String[] forwarded = { "1" };
String[] nonForwarded = { "1" };
SemanticPropUtil.getSemanticPropsDualFromString(new DualInputSemanticProperties(), null, forwarded, null, nonForwarded, null, null,
threeIntTupleType, threeIntTupleType, threeIntTupleType);
}
// --------------------------------------------------------------------------------------------
// Pojo Type Classes
// --------------------------------------------------------------------------------------------
public static class TestPojo {
public int int1;
public int int2;
public int int3;
public String string1;
}
public static class TestPojo2 {
public int myInt1;
public int myInt2;
public int myInt3;
public String myString1;
}
public static class NestedTestPojo{
public int int1;
public TestPojo pojo1;
public String string1;
}
}