/*
***************************************************************************************
* 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.view.ext;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.epl.expression.core.ExprNode;
import com.espertech.esper.epl.expression.core.ExprNodeUtility;
import com.espertech.esper.supportunit.bean.SupportMarketDataBean;
import com.espertech.esper.supportunit.epl.SupportExprNodeFactory;
import com.espertech.esper.supportunit.event.SupportEventBeanFactory;
import com.espertech.esper.supportunit.view.SupportBeanClassView;
import com.espertech.esper.supportunit.view.SupportStreamImpl;
import com.espertech.esper.supportunit.view.SupportViewDataChecker;
import junit.framework.TestCase;
public class TestSortWindowView extends TestCase {
private SortWindowView myView;
private SupportBeanClassView childView;
public void setUp() throws Exception {
// Set up length window view and a test child view
ExprNode[] expressions = SupportExprNodeFactory.makeIdentNodesMD("volume");
myView = new SortWindowView(new SortWindowViewFactory(), expressions, ExprNodeUtility.getEvaluators(expressions), new boolean[]{false}, 5, null, false, null);
childView = new SupportBeanClassView(SupportMarketDataBean.class);
myView.addView(childView);
}
public void testViewOneProperty() {
// Set up a feed for the view under test - the depth is 10 events so bean[10] will cause bean[0] to go old
SupportStreamImpl stream = new SupportStreamImpl(SupportMarketDataBean.class, 10);
stream.addView(myView);
EventBean bean[] = new EventBean[12];
bean[0] = makeBean(1000);
stream.insert(bean[0]);
SupportViewDataChecker.checkOldData(childView, null);
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[0]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[0]}, myView.iterator());
bean[1] = makeBean(800);
bean[2] = makeBean(1200);
stream.insert(new EventBean[]{bean[1], bean[2]});
SupportViewDataChecker.checkOldData(childView, null);
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[1], bean[2]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[1], bean[0], bean[2]}, myView.iterator());
bean[3] = makeBean(1200);
bean[4] = makeBean(1000);
bean[5] = makeBean(1400);
bean[6] = makeBean(1100);
stream.insert(new EventBean[]{bean[3], bean[4], bean[5], bean[6]});
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[5], bean[2]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[3], bean[4], bean[5], bean[6]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[1], bean[4], bean[0], bean[6], bean[3]}, myView.iterator());
bean[7] = makeBean(800);
bean[8] = makeBean(700);
bean[9] = makeBean(1200);
stream.insert(new EventBean[]{bean[7], bean[8], bean[9]});
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[3], bean[9], bean[6]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[7], bean[8], bean[9]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[8], bean[7], bean[1], bean[4], bean[0]}, myView.iterator());
bean[10] = makeBean(1050);
stream.insert(new EventBean[]{bean[10]}); // Thus bean[0] will be old data !
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[0]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[10]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[8], bean[7], bean[1], bean[4], bean[10]}, myView.iterator());
bean[11] = makeBean(2000);
stream.insert(new EventBean[]{bean[11]}); // Thus bean[1] will be old data !
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[1]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[11]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[8], bean[7], bean[4], bean[10], bean[11]}, myView.iterator());
}
public void testViewTwoProperties() throws Exception {
// Set up a sort windows that sorts on two properties
ExprNode[] expressions = SupportExprNodeFactory.makeIdentNodesMD("volume", "price");
myView = new SortWindowView(new SortWindowViewFactory(), expressions, ExprNodeUtility.getEvaluators(expressions), new boolean[]{false, true}, 5, null, false, null);
childView = new SupportBeanClassView(SupportMarketDataBean.class);
myView.addView(childView);
// Set up a feed for the view under test - the depth is 10 events so bean[10] will cause bean[0] to go old
SupportStreamImpl stream = new SupportStreamImpl(SupportMarketDataBean.class, 10);
stream.addView(myView);
EventBean bean[] = new EventBean[12];
bean[0] = makeBean(20d, 1000);
stream.insert(bean[0]);
SupportViewDataChecker.checkOldData(childView, null);
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[0]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[0]}, myView.iterator());
bean[1] = makeBean(19d, 800);
bean[2] = makeBean(18d, 1200);
stream.insert(new EventBean[]{bean[1], bean[2]});
SupportViewDataChecker.checkOldData(childView, null);
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[1], bean[2]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[1], bean[0], bean[2]}, myView.iterator());
bean[3] = makeBean(17d, 1200);
bean[4] = makeBean(16d, 1000);
bean[5] = makeBean(15d, 1400);
bean[6] = makeBean(14d, 1100);
stream.insert(new EventBean[]{bean[3], bean[4], bean[5], bean[6]});
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[5], bean[3]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[3], bean[4], bean[5], bean[6]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[1], bean[0], bean[4], bean[6], bean[2]}, myView.iterator());
bean[7] = makeBean(13d, 800);
bean[8] = makeBean(12d, 700);
bean[9] = makeBean(11d, 1200);
stream.insert(new EventBean[]{bean[7], bean[8], bean[9]});
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[9], bean[2], bean[6]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[7], bean[8], bean[9]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[8], bean[1], bean[7], bean[0], bean[4]}, myView.iterator());
bean[10] = makeBean(10d, 1050);
stream.insert(new EventBean[]{bean[10]}); // Thus bean[0] will be old data !
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[0]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[10]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[8], bean[1], bean[7], bean[4], bean[10]}, myView.iterator());
bean[11] = makeBean(2000);
stream.insert(new EventBean[]{bean[11]}); // Thus bean[1] will be old data !
SupportViewDataChecker.checkOldData(childView, new EventBean[]{bean[1]});
SupportViewDataChecker.checkNewData(childView, new EventBean[]{bean[11]});
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{bean[8], bean[7], bean[4], bean[10], bean[11]}, myView.iterator());
}
private EventBean makeBean(long volume) {
SupportMarketDataBean bean = new SupportMarketDataBean("CSCO.O", 0, volume, "");
return SupportEventBeanFactory.createObject(bean);
}
private EventBean makeBean(double price, long volume) {
SupportMarketDataBean bean = new SupportMarketDataBean("CSCO.O", price, volume, "");
return SupportEventBeanFactory.createObject(bean);
}
}