/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import com.opengamma.util.test.TestGroup; /** * Test PerformanceCounter. */ @Test(groups = TestGroup.UNIT) public class PerformanceCounterTest { public void oneSecCounter() { PerformanceCounter counter = new PerformanceCounter(1, 5000); assertEquals(0.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); counter.hit(5200); counter.hit(5500); assertEquals(2.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); counter.hit(6100); counter.hit(6200); assertEquals(2.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); counter.hit(7100); counter.hit(7100); counter.hit(7100); assertEquals(3.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); } public void sixtySecondCounter() { PerformanceCounter counter = new PerformanceCounter(60, 3000); assertEquals(0.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); assertEquals(0.0, counter.getHitsPerSecondAsOfLastHit(30), 0.001); assertEquals(0.0, counter.getHitsPerSecondAsOfLastHit(60), 0.001); counter.hit(3000); counter.hit(3100); counter.hit(3200); assertEquals(3 / 1.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); assertEquals(3 / 30.0, counter.getHitsPerSecondAsOfLastHit(30), 0.001); assertEquals(3 / 60.0, counter.getHitsPerSecondAsOfLastHit(60), 0.001); counter.hit(7500); counter.hit(7600); assertEquals(2 / 1.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); assertEquals(5 / 30.0, counter.getHitsPerSecondAsOfLastHit(30), 0.001); assertEquals(5 / 60.0, counter.getHitsPerSecondAsOfLastHit(60), 0.001); counter.hit(14999); counter.hit(15000); counter.hit(15000); counter.hit(15000); counter.hit(15100); assertEquals(4 / 1.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); // 14999 ignored because it's on a different second to 15100 assertEquals(5 / 2.0, counter.getHitsPerSecondAsOfLastHit(2), 0.001); assertEquals(10 / 30.0, counter.getHitsPerSecondAsOfLastHit(30), 0.001); assertEquals(10 / 60.0, counter.getHitsPerSecondAsOfLastHit(60), 0.001); // Now roll over counter.hit(62999); counter.hit(63000); counter.hit(63001); counter.hit(63002); counter.hit(63003); assertEquals(4 / 1.0, counter.getHitsPerSecondAsOfLastHit(1), 0.001); // 62999 ignored assertEquals(5 / 2.0, counter.getHitsPerSecondAsOfLastHit(2), 0.001); assertEquals(5 / 30.0, counter.getHitsPerSecondAsOfLastHit(30), 0.001); assertEquals(12 / 60.0, counter.getHitsPerSecondAsOfLastHit(60), 0.001); // the first 3 will have dropped off assertEquals(12 / 60.0, counter.getHitsPerSecond(60, 64000), 0.001); assertEquals(12 / 60.0, counter.getHitsPerSecond(60, 66000), 0.001); assertEquals(10 / 60.0, counter.getHitsPerSecond(60, 67000), 0.001); assertEquals(10 / 60.0, counter.getHitsPerSecond(60, 68000), 0.001); assertEquals(0 / 60.0, counter.getHitsPerSecond(60, 2000000), 0.001); } public void clockGoingBackwards() { PerformanceCounter counter = new PerformanceCounter(60, 0); counter.hit(1000); counter.hit(2000); assertEquals(2 / 60.0, counter.getHitsPerSecond(60, 3000), 0.001); assertEquals(0, counter.getHitsPerSecond(60, 1500), 0.001); // historical timestamp passed in - will reset counter.hit(4000); counter.hit(5000); assertEquals(2 / 60.0, counter.getHitsPerSecond(60, 6000), 0.001); counter.hit(1000); // historical timestamp passed in - will reset assertEquals(1 / 60.0, counter.getHitsPerSecond(60, 7000), 0.001); } @Test(expectedExceptions = IllegalArgumentException.class) public void zeroCounter() { new PerformanceCounter(0); } @Test(expectedExceptions = IllegalArgumentException.class) public void negativeCounter() { new PerformanceCounter(-8); } }