/* * 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.streaming.api.functions.windowing.delta.extractor; import static org.junit.Assert.*; import org.apache.flink.api.java.tuple.Tuple; import org.apache.flink.api.java.tuple.Tuple1; import org.apache.flink.api.java.tuple.Tuple10; import org.apache.flink.api.java.tuple.Tuple11; import org.apache.flink.api.java.tuple.Tuple12; import org.apache.flink.api.java.tuple.Tuple13; import org.apache.flink.api.java.tuple.Tuple14; import org.apache.flink.api.java.tuple.Tuple15; import org.apache.flink.api.java.tuple.Tuple16; import org.apache.flink.api.java.tuple.Tuple17; import org.apache.flink.api.java.tuple.Tuple18; import org.apache.flink.api.java.tuple.Tuple19; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.api.java.tuple.Tuple20; import org.apache.flink.api.java.tuple.Tuple21; import org.apache.flink.api.java.tuple.Tuple22; import org.apache.flink.api.java.tuple.Tuple23; import org.apache.flink.api.java.tuple.Tuple24; import org.apache.flink.api.java.tuple.Tuple25; 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.tuple.Tuple6; import org.apache.flink.api.java.tuple.Tuple7; import org.apache.flink.api.java.tuple.Tuple8; import org.apache.flink.api.java.tuple.Tuple9; import org.apache.flink.streaming.api.functions.windowing.delta.extractor.FieldsFromTuple; import org.junit.Before; import org.junit.Test; public class FieldsFromTupleTest { private double[] testDouble; @Before public void init() { testDouble = new double[Tuple.MAX_ARITY]; for (int i = 0; i < Tuple.MAX_ARITY; i++) { testDouble[i] = i; } } @Test public void testUserSpecifiedOrder() throws InstantiationException, IllegalAccessException { Tuple currentTuple = (Tuple) CLASSES[Tuple.MAX_ARITY - 1].newInstance(); for (int i = 0; i < Tuple.MAX_ARITY; i++) { currentTuple.setField(testDouble[i], i); } double[] expected = { testDouble[5], testDouble[3], testDouble[6], testDouble[7], testDouble[0] }; arrayEqualityCheck(expected, new FieldsFromTuple(5, 3, 6, 7, 0).extract(currentTuple)); double[] expected2 = { testDouble[0], testDouble[Tuple.MAX_ARITY - 1] }; arrayEqualityCheck(expected2, new FieldsFromTuple(0, Tuple.MAX_ARITY - 1).extract(currentTuple)); double[] expected3 = { testDouble[Tuple.MAX_ARITY - 1], testDouble[0] }; arrayEqualityCheck(expected3, new FieldsFromTuple(Tuple.MAX_ARITY - 1, 0).extract(currentTuple)); double[] expected4 = { testDouble[13], testDouble[4], testDouble[5], testDouble[4], testDouble[2], testDouble[8], testDouble[6], testDouble[2], testDouble[8], testDouble[3], testDouble[5], testDouble[2], testDouble[16], testDouble[4], testDouble[3], testDouble[2], testDouble[6], testDouble[4], testDouble[7], testDouble[4], testDouble[2], testDouble[8], testDouble[7], testDouble[2] }; arrayEqualityCheck(expected4, new FieldsFromTuple(13, 4, 5, 4, 2, 8, 6, 2, 8, 3, 5, 2, 16, 4, 3, 2, 6, 4, 7, 4, 2, 8, 7, 2).extract(currentTuple)); } private void arrayEqualityCheck(double[] array1, double[] array2) { assertEquals("The result arrays must have the same length", array1.length, array2.length); for (int i = 0; i < array1.length; i++) { assertEquals("Unequal fields at position " + i, array1[i], array2[i], 0d); } } private static final Class<?>[] CLASSES = new Class<?>[] { Tuple1.class, Tuple2.class, Tuple3.class, Tuple4.class, Tuple5.class, Tuple6.class, Tuple7.class, Tuple8.class, Tuple9.class, Tuple10.class, Tuple11.class, Tuple12.class, Tuple13.class, Tuple14.class, Tuple15.class, Tuple16.class, Tuple17.class, Tuple18.class, Tuple19.class, Tuple20.class, Tuple21.class, Tuple22.class, Tuple23.class, Tuple24.class, Tuple25.class }; }