assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", int.class ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", int.class ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", int.class ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b" ), getEntry( arguments, 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b" ), getEntry( arguments, 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b" ), getEntry( arguments, "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "$0 < $1", int.class ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "$0 < $1", int.class ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "$0 < $1", int.class ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "(a != null) && (b > 0)", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "($0 != null) && ($1 > 0)", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "b.equals(\"1\") && (a == 2.0) && c.equals(\"2\")", names, types ), getEntry( 2.0, "1", "2" ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "b.equals(\"1\") && (a == 2.0) && $2.equals(\"2\")", names, types ), getEntry( 2.0, "1", "2" ) ) );
assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", int.class ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", int.class ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", int.class ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b" ), getEntry( arguments, 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b" ), getEntry( arguments, 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "a < b" ), getEntry( arguments, "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "$0 < $1", int.class ), getEntry( 1, 2 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "$0 < $1", int.class ), getEntry( 1.0, 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "$0 < $1", int.class ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "(a != null) && (b > 0)", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "($0 != null) && ($1 > 0)", names, types ), getEntry( "1", 2.0 ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "b.equals(\"1\") && (a == 2.0) && c.equals(\"2\")", names, types ), getEntry( 2.0, "1", "2" ) ) ); assertEquals( true, invokeFilter( new ExpressionFilter( "b.equals(\"1\") && (a == 2.0) && $2.equals(\"2\")", names, types ), getEntry( 2.0, "1", "2" ) ) );
@Test public void testOrExpression() { Fields inputFields = new Fields( "a", "b" ); ExpressionFilter f1 = new ExpressionFilter( "( 100f < a )", new String[]{"a"}, new Class<?>[]{Float.TYPE} ); ExpressionFilter f2 = new ExpressionFilter( "( 100f < b )", new String[]{"b"}, new Class<?>[]{Float.TYPE} ); Or logic = new Or( new Fields( "a" ), f1, new Fields( "b" ), f2 ); boolean[] results = invokeFilter( logic, new TupleEntry[]{ new TupleEntry( inputFields, new Tuple( "1", "10" ) ), new TupleEntry( inputFields, new Tuple( "2", "20" ) ) } ); assertFalse( results[ 0 ] ); assertFalse( results[ 1 ] ); }
@Test public void testXorExpression() { Fields inputFields = new Fields( "a", "b" ); ExpressionFilter f1 = new ExpressionFilter( "( 100f < a )", new String[]{"a"}, new Class<?>[]{Float.TYPE} ); ExpressionFilter f2 = new ExpressionFilter( "( 100f < b )", new String[]{"b"}, new Class<?>[]{Float.TYPE} ); Xor logic = new Xor( new Fields( "a" ), f1, new Fields( "b" ), f2 ); boolean[] results = invokeFilter( logic, new TupleEntry[]{ new TupleEntry( inputFields, new Tuple( "1", "10" ) ), new TupleEntry( inputFields, new Tuple( "2", "20" ) ) } ); assertFalse( results[ 0 ] ); assertFalse( results[ 1 ] ); }
@Test public void testOrExpression() { Fields inputFields = new Fields( "a", "b" ); ExpressionFilter f1 = new ExpressionFilter( "( 100f < a )", new String[]{"a"}, new Class<?>[]{Float.TYPE} ); ExpressionFilter f2 = new ExpressionFilter( "( 100f < b )", new String[]{"b"}, new Class<?>[]{Float.TYPE} ); Or logic = new Or( new Fields( "a" ), f1, new Fields( "b" ), f2 ); boolean[] results = invokeFilter( logic, new TupleEntry[]{ new TupleEntry( inputFields, new Tuple( "1", "10" ) ), new TupleEntry( inputFields, new Tuple( "2", "20" ) ) } ); assertFalse( results[ 0 ] ); assertFalse( results[ 1 ] ); }
@Test public void testXorExpression() { Fields inputFields = new Fields( "a", "b" ); ExpressionFilter f1 = new ExpressionFilter( "( 100f < a )", new String[]{"a"}, new Class<?>[]{Float.TYPE} ); ExpressionFilter f2 = new ExpressionFilter( "( 100f < b )", new String[]{"b"}, new Class<?>[]{Float.TYPE} ); Xor logic = new Xor( new Fields( "a" ), f1, new Fields( "b" ), f2 ); boolean[] results = invokeFilter( logic, new TupleEntry[]{ new TupleEntry( inputFields, new Tuple( "1", "10" ) ), new TupleEntry( inputFields, new Tuple( "2", "20" ) ) } ); assertFalse( results[ 0 ] ); assertFalse( results[ 1 ] ); }
@Test public void testAndExpression() { Fields inputFields = new Fields( "a", "b" ); ExpressionFilter f1 = new ExpressionFilter( "( 100f < a )", new String[]{"a"}, new Class<?>[]{Float.TYPE} ); ExpressionFilter f2 = new ExpressionFilter( "( 100f < b )", new String[]{"b"}, new Class<?>[]{Float.TYPE} ); And logic = new And( new Fields( "a" ), f1, new Fields( "b" ), f2 ); boolean[] results = invokeFilter( logic, new TupleEntry[]{ new TupleEntry( inputFields, new Tuple( "1", "10" ) ), new TupleEntry( inputFields, new Tuple( "2", "20" ) ) } ); assertFalse( results[ 0 ] ); assertFalse( results[ 1 ] ); } }
@Test public void testAndExpression() { Fields inputFields = new Fields( "a", "b" ); ExpressionFilter f1 = new ExpressionFilter( "( 100f < a )", new String[]{"a"}, new Class<?>[]{Float.TYPE} ); ExpressionFilter f2 = new ExpressionFilter( "( 100f < b )", new String[]{"b"}, new Class<?>[]{Float.TYPE} ); And logic = new And( new Fields( "a" ), f1, new Fields( "b" ), f2 ); boolean[] results = invokeFilter( logic, new TupleEntry[]{ new TupleEntry( inputFields, new Tuple( "1", "10" ) ), new TupleEntry( inputFields, new Tuple( "2", "20" ) ) } ); assertFalse( results[ 0 ] ); assertFalse( results[ 1 ] ); } }
Filter kCountFilter = new ExpressionFilter("$1 <= 1", Integer.class); pipe = new Each(pipe, kCountFilter); Filter uCountFilter = new ExpressionFilter("$1 <= 1", Integer.class); pipe = new Each(pipe, uCountFilter);
/** * Tests the case where the same source is split, then re-merged */ @Test public void testMergeSameSourceSplit() { Tap source = new Hfs( new TextLine( new Fields( "offset", "line" ) ), "foo/merge1" ); Tap sink = new Hfs( new TextLine(), "foo" ); Pipe head = new Pipe( "source" ); head = new Each( head, new Fields( "line" ), new ExpressionFilter( "line.length() != 0", String.class ) ); Pipe left = new Each( new Pipe( "left", head ), new Fields( "line" ), new RegexFilter( ".*46.*" ) ); Pipe right = new Each( new Pipe( "right", head ), new Fields( "line" ), new RegexFilter( ".*192.*" ) ); Pipe merge = new GroupBy( "merge", Pipe.pipes( left, right ), new Fields( "offset" ) ); Flow flow = getPlatform().getFlowConnector().connect( source, sink, merge ); // flow.writeDOT( "splitmerge.dot" ); List<FlowStep> steps = flow.getFlowSteps(); assertEquals( "not equal: steps.size()", 1, steps.size() ); }
/** * Tests the case where the same source is split, then re-merged */ @Test public void testMergeSameSourceSplit() { Tap source = new Hfs( new TextLine( new Fields( "offset", "line" ) ), "foo/merge1" ); Tap sink = new Hfs( new TextLine(), "foo" ); Pipe head = new Pipe( "source" ); head = new Each( head, new Fields( "line" ), new ExpressionFilter( "line.length() != 0", String.class ) ); Pipe left = new Each( new Pipe( "left", head ), new Fields( "line" ), new RegexFilter( ".*46.*" ) ); Pipe right = new Each( new Pipe( "right", head ), new Fields( "line" ), new RegexFilter( ".*192.*" ) ); Pipe merge = new GroupBy( "merge", Pipe.pipes( left, right ), new Fields( "offset" ) ); Flow flow = getPlatform().getFlowConnector().connect( source, sink, merge ); // flow.writeDOT( "splitmerge.dot" ); List<FlowStep> steps = flow.getFlowSteps(); assertEquals( "not equal: steps.size()", 1, steps.size() ); }
/** * tests that the Fields.ARGS declarator properly resolves into a declarator * * @throws Exception */ @Test public void testSimpleResult() throws Exception { copyFromLocal( inputFileLower ); Tap source = getPlatform().getTextFile( Fields.size( 2 ), inputFileLower ); Tap sink = getPlatform().getTextFile( Fields.size( 1 ), getOutputPath( "simpleresult" ), SinkMode.REPLACE ); Pipe pipe = new Pipe( "test" ); // skip the first line pipe = new Each( pipe, new Fields( 0 ), new ExpressionFilter( "$0 == 0", Long.class ) ); pipe = new Each( pipe, new Fields( 1 ), new Identity() ); pipe = new Each( pipe, Fields.ALL, new RegexFilter( "a|b|c" ) ); pipe = new GroupBy( pipe, new Fields( 0 ) ); Aggregator counter = new Count(); pipe = new Every( pipe, new Fields( 0 ), counter, new Fields( 0, 1 ) ); Flow flow = getPlatform().getFlowConnector().connect( source, sink, pipe ); flow.complete(); validateLength( flow, 2, 1 ); }
/** * tests that the Fields.ARGS declarator properly resolves into a declarator * * @throws Exception */ @Test public void testSimpleResult() throws Exception { copyFromLocal( inputFileLower ); Tap source = getPlatform().getTextFile( Fields.size( 2 ), inputFileLower ); Tap sink = getPlatform().getTextFile( Fields.size( 1 ), getOutputPath( "simpleresult" ), SinkMode.REPLACE ); Pipe pipe = new Pipe( "test" ); // skip the first line pipe = new Each( pipe, new Fields( 0 ), new ExpressionFilter( "$0 == 0", Long.class ) ); pipe = new Each( pipe, new Fields( 1 ), new Identity() ); pipe = new Each( pipe, Fields.ALL, new RegexFilter( "a|b|c" ) ); pipe = new GroupBy( pipe, new Fields( 0 ) ); Aggregator counter = new Count(); pipe = new Every( pipe, new Fields( 0 ), counter, new Fields( 0, 1 ) ); Flow flow = getPlatform().getFlowConnector().connect( source, sink, pipe ); flow.complete(); validateLength( flow, 2, 1 ); }