View Javadoc
1   package org.djutils.stats.summarizers.event;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertTrue;
5   import static org.junit.Assert.fail;
6   
7   import org.djutils.event.Event;
8   import org.djutils.event.EventInterface;
9   import org.djutils.event.EventListenerInterface;
10  import org.djutils.event.EventType;
11  import org.djutils.metadata.MetaData;
12  import org.junit.Test;
13  
14  /**
15   * Test the EventBasedCounter class.
16   * <p>
17   * Copyright (c) 2002-2022 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
18   * for project information <a href="https://simulation.tudelft.nl/" target="_blank"> https://simulation.tudelft.nl</a>. The DSOL
19   * project is distributed under a three-clause BSD-style license, which can be found at
20   * <a href="https://simulation.tudelft.nl/dsol/3.0/license.html" target="_blank">
21   * https://simulation.tudelft.nl/dsol/3.0/license.html</a>. <br>
22   * @author <a href="https://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
23   */
24  public class EventBasedCounterTest
25  {
26      /** the event to fire. */
27      private static final EventType COUNT_EVENT = new EventType("CountEvent", MetaData.NO_META_DATA);
28  
29      /** Test the counter. */
30      @Test
31      public void testEventBasedCounter()
32      {
33          String description = "counter description";
34          EventBasedCounter counter = new EventBasedCounter(description);
35          assertEquals(description, counter.toString());
36          assertEquals(description, counter.getDescription());
37          assertEquals(counter, counter.getSourceId());
38  
39          assertEquals(0L, counter.getN());
40          assertEquals(0L, counter.getCount());
41  
42          counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", 2));
43          assertEquals(1L, counter.getN());
44          assertEquals(2L, counter.getCount());
45  
46          counter.initialize();
47          assertEquals(0L, counter.getN());
48          assertEquals(0L, counter.getCount());
49          
50          CounterEventListener cel = new CounterEventListener();
51          counter.addListener(cel, StatisticsEvents.OBSERVATION_ADDED_EVENT);
52          assertEquals(0, cel.getCountEvents());
53  
54          // test wrong event
55          try
56          {
57              counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", "abc"));
58              fail("Wrong payload to EventBasedCounter should have triggreed an exception");
59          }
60          catch (RuntimeException exception)
61          {
62              // ok, should have given error
63          }
64          
65          LoggingEventListener nListener = new LoggingEventListener();
66          counter.addListener(nListener, StatisticsEvents.N_EVENT);
67          LoggingEventListener countListener = new LoggingEventListener();
68          counter.addListener(countListener, StatisticsEvents.COUNT_EVENT);
69  
70          long value = 0;
71          for (int i = 0; i < 100; i++)
72          {
73              counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", 2 * i));
74              value += 2 * i;
75          }
76          assertEquals(100, counter.getN());
77          assertEquals(value, counter.getCount());
78          assertEquals(100, cel.getCountEvents());
79          assertEquals(100, nListener.getNumberOfEvents());
80          assertEquals(100, countListener.getNumberOfEvents());
81          assertEquals(counter, nListener.getLastEvent().getSourceId());
82          assertEquals(counter, countListener.getLastEvent().getSourceId());
83          assertEquals(100L, nListener.getLastEvent().getContent());
84          assertEquals(value, countListener.getLastEvent().getContent());
85      }
86  
87      /** The listener that counts the OBSERVATION_ADDED_EVENT events and checks correctness. */
88      class CounterEventListener implements EventListenerInterface
89      {
90          /** */
91          private static final long serialVersionUID = 1L;
92  
93          /** counter for the event. */
94          private int countEvents = 0;
95  
96          @Override
97          public void notify(final EventInterface event)
98          {
99              assertTrue(event.getType().equals(StatisticsEvents.OBSERVATION_ADDED_EVENT));
100             assertTrue("Content of the event has a wrong type, not Long: " + event.getContent().getClass(),
101                     event.getContent() instanceof Long);
102             assertTrue("SourceId of the event has a wrong type, not EventBasedCounter: " + event.getSourceId().getClass(),
103                     event.getSourceId() instanceof EventBasedCounter);
104             this.countEvents++;
105         }
106 
107         /**
108          * @return countEvents
109          */
110         public int getCountEvents()
111         {
112             return this.countEvents;
113         }
114     }
115 }