/** @param oper Data value for comparison. */ @SuppressWarnings({"rawtypes", "unchecked"}) public <V extends Number> void testNodeProcessingSchema(Change<V> oper) { CollectorTestSink changeSink = new CollectorTestSink(); CollectorTestSink percentSink = new CollectorTestSink(); oper.change.setSink(changeSink); oper.percent.setSink(percentSink); oper.beginWindow(0); oper.base.process(oper.getValue(10)); oper.data.process(oper.getValue(5)); oper.data.process(oper.getValue(15)); oper.data.process(oper.getValue(20)); oper.endWindow(); Assert.assertEquals("number emitted tuples", 3, changeSink.collectedTuples.size()); Assert.assertEquals("number emitted tuples", 3, percentSink.collectedTuples.size()); log.debug("\nLogging tuples"); for (Object o : changeSink.collectedTuples) { log.debug(String.format("change %s", o)); } for (Object o : percentSink.collectedTuples) { log.debug(String.format("percent change %s", o)); } }