/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.epl.join.assemble; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.support.epl.join.SupportJoinProcNode; import com.espertech.esper.support.epl.join.SupportJoinResultNodeFactory; import com.espertech.esper.client.EventBean; import junit.framework.TestCase; import java.util.ArrayList; import java.util.List; public class TestRootCartProdAssemblyNode extends TestCase { private SupportJoinProcNode parentNode; private RootCartProdAssemblyNode rootCartNodeOneReq; public void setUp() { rootCartNodeOneReq = new RootCartProdAssemblyNode(1, 5, false); parentNode = new SupportJoinProcNode(-1, 5); parentNode.addChild(rootCartNodeOneReq); // add child nodes to indicate what sub-streams to build the cartesian product from rootCartNodeOneReq.addChild(new SupportJoinProcNode(2, 5)); rootCartNodeOneReq.addChild(new SupportJoinProcNode(3, 5)); rootCartNodeOneReq.addChild(new SupportJoinProcNode(4, 5)); } public void testFlowOptional() { RootCartProdAssemblyNode rootCartNodeAllOpt = new RootCartProdAssemblyNode(1, 5, true); rootCartNodeAllOpt.addChild(new SupportJoinProcNode(2, 5)); rootCartNodeAllOpt.addChild(new SupportJoinProcNode(3, 5)); rootCartNodeAllOpt.addChild(new SupportJoinProcNode(4, 5)); parentNode.addChild(rootCartNodeAllOpt); rootCartNodeAllOpt.init(null); List<EventBean[]> resultFinalRows = new ArrayList<EventBean[]>(); rootCartNodeAllOpt.process(null, resultFinalRows, null); // 5 generated rows: 2 (stream 2) + 2 (stream 3) + 1 (self, Node 2) assertEquals(1, parentNode.getRowsList().size()); EventBean[][] rowArr = SupportJoinResultNodeFactory.convertTo2DimArr(parentNode.getRowsList()); EPAssertionUtil.assertEqualsAnyOrder(new EventBean[][]{ new EventBean[]{null, null, null, null, null}}, rowArr); } public void testFlowRequired() { rootCartNodeOneReq.init(null); EventBean[] stream2Events = SupportJoinResultNodeFactory.makeEvents(2); // for identifying rows in cartesian product EventBean[] stream3Events = SupportJoinResultNodeFactory.makeEvents(2); // for identifying rows in cartesian product EventBean[] stream4Events = SupportJoinResultNodeFactory.makeEvents(2); // for identifying rows in cartesian product // Post result from 3, send 2 rows List<EventBean[]> resultFinalRows = new ArrayList<EventBean[]>(); EventBean[] childRow = new EventBean[5]; childRow[3] = stream3Events[0]; rootCartNodeOneReq.result(childRow, 3, null, null, resultFinalRows, null); childRow = new EventBean[5]; childRow[3] = stream3Events[1]; rootCartNodeOneReq.result(childRow, 3, null, null, resultFinalRows, null); // Post result from 2, send 2 rows childRow = new EventBean[5]; childRow[2] = stream2Events[0]; rootCartNodeOneReq.result(childRow, 2, null, null, resultFinalRows, null); childRow = new EventBean[5]; childRow[2] = stream2Events[1]; rootCartNodeOneReq.result(childRow, 2, null, null, resultFinalRows, null); // Post result from 4 childRow = new EventBean[5]; childRow[4] = stream4Events[0]; rootCartNodeOneReq.result(childRow, 4, null, null, resultFinalRows, null); childRow = new EventBean[5]; childRow[4] = stream4Events[1]; rootCartNodeOneReq.result(childRow, 4, null, null, resultFinalRows, null); // process posted rows (child rows were stored and are compared to find other rows to generate) rootCartNodeOneReq.process(null, resultFinalRows, null); // 5 generated rows: 2 (stream 2) + 2 (stream 3) + 1 (self, Node 2) assertEquals(8, parentNode.getRowsList().size()); EventBean[][] rowArr = SupportJoinResultNodeFactory.convertTo2DimArr(parentNode.getRowsList()); EPAssertionUtil.assertEqualsAnyOrder(new EventBean[][]{ new EventBean[]{null, null, stream2Events[0], stream3Events[0], stream4Events[0]}, new EventBean[]{null, null, stream2Events[0], stream3Events[1], stream4Events[0]}, new EventBean[]{null, null, stream2Events[1], stream3Events[0], stream4Events[0]}, new EventBean[]{null, null, stream2Events[1], stream3Events[1], stream4Events[0]}, new EventBean[]{null, null, stream2Events[0], stream3Events[0], stream4Events[1]}, new EventBean[]{null, null, stream2Events[0], stream3Events[1], stream4Events[1]}, new EventBean[]{null, null, stream2Events[1], stream3Events[0], stream4Events[1]}, new EventBean[]{null, null, stream2Events[1], stream3Events[1], stream4Events[1]}, } , rowArr); } public void testComputeCombined() { assertNull(RootCartProdAssemblyNode.computeCombined(new int[][] {{2}} )); assertNull(RootCartProdAssemblyNode.computeCombined(new int[][] {{1}, {2}} )); int[][] result = RootCartProdAssemblyNode.computeCombined( new int[][] { {3,4}, {2,5}, {6} }); assertEquals(1, result.length); EPAssertionUtil.assertEqualsAnyOrder(new int[]{3, 4, 2, 5}, result[0]); result = RootCartProdAssemblyNode.computeCombined( new int[][] { {3,4}, {2,5}, {6}, {0, 8, 9} }); assertEquals(2, result.length); EPAssertionUtil.assertEqualsAnyOrder(new int[]{3, 4, 2, 5}, result[0]); EPAssertionUtil.assertEqualsAnyOrder(new int[]{3, 4, 2, 5, 6}, result[1]); result = RootCartProdAssemblyNode.computeCombined( new int[][] { {3,4}, {2,5}, {6}, {0, 8, 9}, {1} }); assertEquals(3, result.length); EPAssertionUtil.assertEqualsAnyOrder(new int[]{3, 4, 2, 5}, result[0]); EPAssertionUtil.assertEqualsAnyOrder(new int[]{3, 4, 2, 5, 6}, result[1]); EPAssertionUtil.assertEqualsAnyOrder(new int[]{3, 4, 2, 5, 6, 0, 8, 9}, result[2]); } }