/* *************************************************************************************** * 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.collection; import com.espertech.esper.client.EventBean; import com.espertech.esper.supportunit.bean.SupportBean_S0; import com.espertech.esper.supportunit.event.SupportEventBeanFactory; import junit.framework.TestCase; public class TestRollingEventBuffer extends TestCase { private RollingEventBuffer bufferOne; private RollingEventBuffer bufferTwo; private RollingEventBuffer bufferFive; private static int eventId; public void setUp() { bufferOne = new RollingEventBuffer(1); bufferTwo = new RollingEventBuffer(2); bufferFive = new RollingEventBuffer(5); } public void testFlowSizeOne() { bufferOne.add((EventBean[]) null); assertNull(bufferOne.get(0)); EventBean[] set1 = make(2); bufferOne.add(set1); assertSame(set1[1], bufferOne.get(0)); tryInvalid(bufferOne, 1); EventBean[] set2 = make(1); bufferOne.add(set2); assertSame(set2[0], bufferOne.get(0)); tryInvalid(bufferOne, 1); } public void testFlowSizeTwo() { EventBean[] set1 = make(2); bufferTwo.add(set1); assertEvents(new EventBean[]{set1[1], set1[0]}, bufferTwo); EventBean[] set2 = make(1); bufferTwo.add(set2); assertEvents(new EventBean[]{set2[0], set1[1]}, bufferTwo); EventBean[] set3 = make(1); bufferTwo.add(set3); assertEvents(new EventBean[]{set3[0], set2[0]}, bufferTwo); EventBean[] set4 = make(3); bufferTwo.add(set4); assertEvents(new EventBean[]{set4[2], set4[1]}, bufferTwo); EventBean[] set5 = make(5); bufferTwo.add(set5); assertEvents(new EventBean[]{set5[4], set5[3]}, bufferTwo); EventBean[] set6 = make(1); bufferTwo.add(set6); assertEvents(new EventBean[]{set6[0], set5[4]}, bufferTwo); bufferTwo.add(make(0)); assertEvents(new EventBean[]{set6[0], set5[4]}, bufferTwo); EventBean[] set7 = make(2); bufferTwo.add(set7); assertEvents(new EventBean[]{set7[1], set7[0]}, bufferTwo); } public void testFlowSizeTen() { EventBean[] set1 = make(3); bufferFive.add(set1); assertEvents(new EventBean[]{set1[2], set1[1], set1[0], null, null}, bufferFive); EventBean[] set2 = make(1); bufferFive.add(set2); assertEvents(new EventBean[]{set2[0], set1[2], set1[1], set1[0], null}, bufferFive); EventBean[] set3 = make(3); bufferFive.add(set3); assertEvents(new EventBean[]{set3[2], set3[1], set3[0], set2[0], set1[2]}, bufferFive); EventBean[] set4 = make(5); bufferFive.add(set4); assertEvents(new EventBean[]{set4[4], set4[3], set4[2], set4[1], set4[0]}, bufferFive); EventBean[] set5 = make(8); bufferFive.add(set5); assertEvents(new EventBean[]{set5[7], set5[6], set5[5], set5[4], set5[3]}, bufferFive); EventBean[] set6 = make(2); bufferFive.add(set6); assertEvents(new EventBean[]{set6[1], set6[0], set5[7], set5[6], set5[5]}, bufferFive); } private void assertEvents(EventBean[] expected, RollingEventBuffer buffer) { for (int i = 0; i < expected.length; i++) { assertSame(expected[i], buffer.get(i)); } tryInvalid(buffer, expected.length); } private void tryInvalid(RollingEventBuffer buffer, int index) { try { buffer.get(index); fail(); } catch (IllegalArgumentException ex) { // expected } } private EventBean[] make(int size) { EventBean[] events = new EventBean[size]; for (int i = 0; i < events.length; i++) { events[i] = SupportEventBeanFactory.createObject(new SupportBean_S0(eventId++)); } return events; } }