/*
***************************************************************************************
* 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.plan;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import junit.framework.TestCase;
public class TestOuterInnerDirectionalGraph extends TestCase {
private OuterInnerDirectionalGraph graph;
public void setUp() {
graph = new OuterInnerDirectionalGraph(4);
}
public void testAdd() {
graph.add(0, 1);
// testing duplicate add
tryInvalidAdd(0, 1);
// test adding out-of-bounds stream
tryInvalidAdd(0, 4);
tryInvalidAdd(4, 0);
tryInvalidAdd(4, 4);
tryInvalidAdd(2, -1);
tryInvalidAdd(-1, 2);
}
public void testIsInner() {
graph.add(0, 1);
assertTrue(graph.isInner(0, 1));
assertFalse(graph.isInner(1, 0));
assertFalse(graph.isInner(2, 0));
assertFalse(graph.isInner(0, 2));
graph.add(1, 0);
assertTrue(graph.isInner(0, 1));
assertTrue(graph.isInner(1, 0));
graph.add(2, 0);
assertTrue(graph.isInner(2, 0));
assertFalse(graph.isInner(0, 2));
tryInvalidIsInner(4, 0);
tryInvalidIsInner(0, 4);
tryInvalidIsInner(1, 1);
tryInvalidIsInner(1, -1);
tryInvalidIsInner(-1, 1);
}
public void testIsOuter() {
graph.add(0, 1);
assertTrue(graph.isOuter(0, 1));
assertFalse(graph.isOuter(1, 0));
assertFalse(graph.isOuter(0, 2));
assertFalse(graph.isOuter(2, 0));
graph.add(1, 0);
assertTrue(graph.isOuter(1, 0));
assertTrue(graph.isOuter(0, 1));
graph.add(2, 0);
assertTrue(graph.isOuter(2, 0));
assertFalse(graph.isOuter(0, 2));
tryInvalidIsInner(4, 0);
tryInvalidIsInner(0, 4);
tryInvalidIsInner(1, 1);
tryInvalidIsInner(1, -1);
tryInvalidIsInner(-1, 1);
}
public void testGetInner() {
tryInvalidGetInner(4);
tryInvalidGetInner(-1);
assertNull(graph.getInner(0));
graph.add(0, 1);
assertNull(graph.getInner(1));
EPAssertionUtil.assertEqualsAnyOrder(new int[]{1}, graph.getInner(0));
graph.add(0, 3);
EPAssertionUtil.assertEqualsAnyOrder(new int[]{1, 3}, graph.getInner(0));
graph.add(1, 0);
EPAssertionUtil.assertEqualsAnyOrder(new int[]{0}, graph.getInner(1));
graph.add(1, 2);
graph.add(1, 3);
EPAssertionUtil.assertEqualsAnyOrder(new int[]{0, 2, 3}, graph.getInner(1));
}
public void testGetOuter() {
tryInvalidGetOuter(4);
tryInvalidGetOuter(-1);
assertNull(graph.getOuter(0));
graph.add(0, 1);
assertNull(graph.getOuter(0));
EPAssertionUtil.assertEqualsAnyOrder(new int[]{0}, graph.getOuter(1));
graph.add(0, 3);
EPAssertionUtil.assertEqualsAnyOrder(new int[]{0}, graph.getOuter(3));
graph.add(1, 0);
EPAssertionUtil.assertEqualsAnyOrder(new int[]{0}, graph.getOuter(1));
EPAssertionUtil.assertEqualsAnyOrder(new int[]{1}, graph.getOuter(0));
graph.add(1, 3);
graph.add(2, 3);
EPAssertionUtil.assertEqualsAnyOrder(new int[]{0, 1, 2}, graph.getOuter(3));
}
private void tryInvalidGetOuter(int stream) {
try {
graph.getOuter(stream);
fail();
} catch (Exception ex) {
// expected
}
}
private void tryInvalidGetInner(int stream) {
try {
graph.getInner(stream);
fail();
} catch (Exception ex) {
// expected
}
}
private void tryInvalidIsInner(int inner, int outer) {
try {
graph.isInner(inner, outer);
fail();
} catch (Exception ex) {
// expected
}
}
private void tryInvalidIsOuter(int inner, int outer) {
try {
graph.isOuter(outer, inner);
fail();
} catch (Exception ex) {
// expected
}
}
private void tryInvalidAdd(int inner, int outer) {
try {
graph.add(inner, outer);
fail();
} catch (IllegalArgumentException ex) {
// expected
}
}
}