/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* 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.support.event.SupportEventBeanFactory;
import com.espertech.esper.support.bean.SupportBean_S0;
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;
}
}