package org.djutils.stats.summarizers.event; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.djutils.event.Event; import org.djutils.event.EventInterface; import org.djutils.event.EventListenerInterface; import org.djutils.event.EventType; import org.djutils.metadata.MetaData; import org.junit.Test; /** * Test the EventBasedCounter class. *

* Copyright (c) 2002-2020 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See * for project information https://simulation.tudelft.nl. The DSOL * project is distributed under a three-clause BSD-style license, which can be found at * * https://simulation.tudelft.nl/dsol/3.0/license.html.
* @author Alexander Verbraeck */ public class EventBasedCounterTest { /** the event to fire. */ private static final EventType COUNT_EVENT = new EventType("CountEvent", MetaData.NO_META_DATA); /** Test the counter. */ @Test public void testEventBasedCounter() { String description = "counter description"; EventBasedCounter counter = new EventBasedCounter(description); assertEquals(description, counter.toString()); assertEquals(description, counter.getDescription()); assertEquals(counter, counter.getSourceId()); assertEquals(0L, counter.getN()); assertEquals(0L, counter.getCount()); counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", 2)); assertEquals(1L, counter.getN()); assertEquals(2L, counter.getCount()); counter.initialize(); assertEquals(0L, counter.getN()); assertEquals(0L, counter.getCount()); CounterEventListener cel = new CounterEventListener(); counter.addListener(cel, StatisticsEvents.OBSERVATION_ADDED_EVENT); assertEquals(0, cel.getCountEvents()); // test wrong event try { counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", "abc")); fail("Wrong payload to EventBasedCounter should have triggreed an exception"); } catch (RuntimeException exception) { // ok, should have given error } LoggingEventListener nListener = new LoggingEventListener(); counter.addListener(nListener, StatisticsEvents.N_EVENT); LoggingEventListener countListener = new LoggingEventListener(); counter.addListener(countListener, StatisticsEvents.COUNT_EVENT); long value = 0; for (int i = 0; i < 100; i++) { counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", 2 * i)); value += 2 * i; } assertEquals(100, counter.getN()); assertEquals(value, counter.getCount()); assertEquals(100, cel.getCountEvents()); assertEquals(100, nListener.getNumberOfEvents()); assertEquals(100, countListener.getNumberOfEvents()); assertEquals(counter, nListener.getLastEvent().getSourceId()); assertEquals(counter, countListener.getLastEvent().getSourceId()); assertEquals(100L, nListener.getLastEvent().getContent()); assertEquals(value, countListener.getLastEvent().getContent()); } /** The listener that counts the OBSERVATION_ADDED_EVENT events and checks correctness. */ class CounterEventListener implements EventListenerInterface { /** */ private static final long serialVersionUID = 1L; /** counter for the event. */ private int countEvents = 0; @Override public void notify(final EventInterface event) { assertTrue(event.getType().equals(StatisticsEvents.OBSERVATION_ADDED_EVENT)); assertTrue("Content of the event has a wrong type, not Long: " + event.getContent().getClass(), event.getContent() instanceof Long); assertTrue("SourceId of the event has a wrong type, not EventBasedCounter: " + event.getSourceId().getClass(), event.getSourceId() instanceof EventBasedCounter); this.countEvents++; } /** * @return countEvents */ public int getCountEvents() { return this.countEvents; } } }