/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * 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 junit.framework.TestCase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; public class TestAssemblyStrategyTreeBuilder extends TestCase { public void testInvalidBuild() { // root stream out of bounds tryInvalidBuild(3, convert(new int[][]{{1, 2}, {}, {}}), new boolean[]{true, true, true}); tryInvalidBuild(-1, convert(new int[][]{{1, 2}, {}, {}}), new boolean[]{true, true, true}); // not matching outer-inner tryInvalidBuild(0, convert(new int[][]{{1, 2}, {}, {}}), new boolean[]{true, true}); // stream relationships not filled tryInvalidBuild(0, convert(new int[][]{{1, 2}}), new boolean[]{true, true, true}); // stream relationships duplicates tryInvalidBuild(0, convert(new int[][]{{1, 2}, {1}, {}}), new boolean[]{true, true}); tryInvalidBuild(0, convert(new int[][]{{1, 2}, {}, {2}}), new boolean[]{true, true, true}); // stream relationships out of range tryInvalidBuild(0, convert(new int[][]{{1, 3}, {}, {}}), new boolean[]{true, true}); // stream relationships missing stream tryInvalidBuild(0, convert(new int[][]{{1}, {}, {}}), new boolean[]{true, true}); } public void testValidBuildSimpleReqOpt() { BaseAssemblyNodeFactory nodeFactory = AssemblyStrategyTreeBuilder.build(2, convert(new int[][]{{}, {0}, {1}}), new boolean[]{false, true, true}); RootRequiredAssemblyNodeFactory child1 = (RootRequiredAssemblyNodeFactory) nodeFactory; assertEquals(2, child1.getStreamNum()); assertEquals(1, child1.getChildNodes().size()); assertEquals(null, child1.getParentNode()); BranchOptionalAssemblyNodeFactory child1_1 = (BranchOptionalAssemblyNodeFactory) child1.getChildNodes().get(0); assertEquals(1, child1_1.getStreamNum()); assertEquals(1, child1_1.getChildNodes().size()); assertEquals(child1, child1_1.getParentNode()); LeafAssemblyNodeFactory leaf1_2 = (LeafAssemblyNodeFactory) child1_1.getChildNodes().get(0); assertEquals(0, leaf1_2.getStreamNum()); assertEquals(0, leaf1_2.getChildNodes().size()); assertEquals(child1_1, leaf1_2.getParentNode()); } public void testValidBuildSimpleOptReq() { BaseAssemblyNodeFactory nodeFactory = AssemblyStrategyTreeBuilder.build(2, convert(new int[][]{{}, {0}, {1}}), new boolean[]{true, false, true}); RootOptionalAssemblyNodeFactory child1 = (RootOptionalAssemblyNodeFactory) nodeFactory; assertEquals(2, child1.getStreamNum()); assertEquals(1, child1.getChildNodes().size()); assertEquals(null, child1.getParentNode()); BranchRequiredAssemblyNodeFactory child1_1 = (BranchRequiredAssemblyNodeFactory) child1.getChildNodes().get(0); assertEquals(1, child1_1.getStreamNum()); assertEquals(1, child1_1.getChildNodes().size()); assertEquals(child1, child1_1.getParentNode()); LeafAssemblyNodeFactory leaf1_2 = (LeafAssemblyNodeFactory) child1_1.getChildNodes().get(0); assertEquals(0, leaf1_2.getStreamNum()); assertEquals(0, leaf1_2.getChildNodes().size()); assertEquals(child1_1, leaf1_2.getParentNode()); } public void testValidBuildCartesian() { BaseAssemblyNodeFactory nodeFactory = AssemblyStrategyTreeBuilder.build(1, convert(new int[][]{{}, {0, 2}, {}}), new boolean[]{false, true, false}); RootCartProdAssemblyNodeFactory top = (RootCartProdAssemblyNodeFactory) nodeFactory; assertEquals(2, top.getChildNodes().size()); LeafAssemblyNodeFactory leaf1 = (LeafAssemblyNodeFactory) top.getChildNodes().get(0); assertEquals(0, leaf1.getStreamNum()); assertEquals(0, leaf1.getChildNodes().size()); assertEquals(top, leaf1.getParentNode()); LeafAssemblyNodeFactory leaf2 = (LeafAssemblyNodeFactory) top.getChildNodes().get(0); assertEquals(0, leaf2.getStreamNum()); assertEquals(0, leaf2.getChildNodes().size()); assertEquals(top, leaf2.getParentNode()); } private void tryInvalidBuild(int rootStream, Map<Integer, int[]> joinedPerStream, boolean[] isInnerPerStream) { try { AssemblyStrategyTreeBuilder.build(rootStream, joinedPerStream, isInnerPerStream); fail(); } catch (IllegalArgumentException ex) { log.debug(".tryInvalidBuild expected exception=" + ex); // expected } } private Map<Integer, int[]> convert(int[][] array) { Map<Integer, int[]> result = new HashMap<Integer, int[]>(); for (int i = 0; i < array.length; i++) { result.put(i, array[i]); } return result; } private static final Logger log = LoggerFactory.getLogger(TestAssemblyStrategyTreeBuilder.class); }