public void TestAdd() { var longHistogram = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); var other = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); longHistogram.RecordValue(TestValueLevel); longHistogram.RecordValue(TestValueLevel * 1000); other.RecordValue(TestValueLevel); other.RecordValue(TestValueLevel * 1000); longHistogram.Add(other); Assert.AreEqual(2L, longHistogram.GetCountAtValue(TestValueLevel)); Assert.AreEqual(2L, longHistogram.GetCountAtValue(TestValueLevel * 1000)); Assert.AreEqual(4L, longHistogram.TotalCount); var biggerOther = new LongHistogram(HighestTrackableValue * 2, NumberOfSignificantValueDigits); biggerOther.RecordValue(TestValueLevel); biggerOther.RecordValue(TestValueLevel * 1000); // Adding the smaller histogram to the bigger one should work: biggerOther.Add(longHistogram); Assert.AreEqual(3L, biggerOther.GetCountAtValue(TestValueLevel)); Assert.AreEqual(3L, biggerOther.GetCountAtValue(TestValueLevel * 1000)); Assert.AreEqual(6L, biggerOther.TotalCount); // But trying to add a larger histogram into a smaller one should throw an AIOOB: Assert.Throws <ArgumentOutOfRangeException>(() => { longHistogram.Add(biggerOther); }); }
public void TestGetCountAtValue() { Assert.AreEqual(0, RawHistogram.GetCountBetweenValues(10000L, 10010L), "Count of raw values at 10 msec is 0"); Assert.AreEqual(1, LongHistogram.GetCountBetweenValues(10000L, 10010L), "Count of values at 10 msec is 0"); Assert.AreEqual(10000, RawHistogram.GetCountAtValue(1000L), "Count of raw values at 1 msec is 10,000"); Assert.AreEqual(10000, LongHistogram.GetCountAtValue(1000L), "Count of values at 1 msec is 10,000"); }
public void TestRecordValue() { var longHistogram = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); longHistogram.RecordValue(TestValueLevel); Assert.AreEqual(1L, longHistogram.GetCountAtValue(TestValueLevel)); Assert.AreEqual(1L, longHistogram.TotalCount); }
public void TestRecordValueWithExpectedInterval() { var longHistogram = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); longHistogram.RecordValueWithExpectedInterval(TestValueLevel, TestValueLevel / 4); var rawHistogram = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); rawHistogram.RecordValue(TestValueLevel); // The data will include corrected samples: Assert.AreEqual(1L, longHistogram.GetCountAtValue((TestValueLevel * 1) / 4)); Assert.AreEqual(1L, longHistogram.GetCountAtValue((TestValueLevel * 2) / 4)); Assert.AreEqual(1L, longHistogram.GetCountAtValue((TestValueLevel * 3) / 4)); Assert.AreEqual(1L, longHistogram.GetCountAtValue((TestValueLevel * 4) / 4)); Assert.AreEqual(4L, longHistogram.TotalCount); // But the raw data will not: Assert.AreEqual(0L, rawHistogram.GetCountAtValue((TestValueLevel * 1) / 4)); Assert.AreEqual(0L, rawHistogram.GetCountAtValue((TestValueLevel * 2) / 4)); Assert.AreEqual(0L, rawHistogram.GetCountAtValue((TestValueLevel * 3) / 4)); Assert.AreEqual(1L, rawHistogram.GetCountAtValue((TestValueLevel * 4) / 4)); Assert.AreEqual(1L, rawHistogram.TotalCount); }
public void RecordValueWithExpectedInterval() { var TestValueLevel = 4L; var recorder = Create(DefautltLowestDiscernibleValue, DefaultHighestTrackableValue, DefaultSignificantFigures); var valueHistogram = new LongHistogram(DefaultHighestTrackableValue, DefaultSignificantFigures); recorder.RecordValueWithExpectedInterval(TestValueLevel, TestValueLevel / 4); valueHistogram.RecordValue(TestValueLevel); var intervalHistogram = recorder.GetIntervalHistogram(); // The data will include corrected samples: Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 1) / 4)); Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 2) / 4)); Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 3) / 4)); Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 4) / 4)); Assert.AreEqual(4L, intervalHistogram.TotalCount); // But the raw data will not: Assert.AreEqual(0L, valueHistogram.GetCountAtValue((TestValueLevel * 1) / 4)); Assert.AreEqual(0L, valueHistogram.GetCountAtValue((TestValueLevel * 2) / 4)); Assert.AreEqual(0L, valueHistogram.GetCountAtValue((TestValueLevel * 3) / 4)); Assert.AreEqual(1L, valueHistogram.GetCountAtValue((TestValueLevel * 4) / 4)); Assert.AreEqual(1L, valueHistogram.TotalCount); }
public void GetIntervalHistogramInto_copies_data_over_provided_Histogram() { var originalStart = DateTime.Today.AddDays(-1).MillisecondsSinceUnixEpoch(); var originalEnd = DateTime.Today.MillisecondsSinceUnixEpoch(); var targetHistogram = new LongHistogram(DefautltLowestDiscernibleValue, DefaultHighestTrackableValue, DefaultSignificantFigures); targetHistogram.StartTimeStamp = originalStart; targetHistogram.RecordValue(1); targetHistogram.RecordValue(10); targetHistogram.RecordValue(100); targetHistogram.EndTimeStamp = originalEnd; Assert.AreEqual(3, targetHistogram.TotalCount); Assert.AreEqual(1, targetHistogram.GetCountAtValue(1)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(10)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(100)); var recorder = Create(DefautltLowestDiscernibleValue, DefaultHighestTrackableValue, DefaultSignificantFigures); recorder.RecordValue(1000); recorder.RecordValue(10000); recorder.RecordValue(100000); recorder.GetIntervalHistogramInto(targetHistogram); Assert.AreEqual(3, targetHistogram.TotalCount); Assert.AreEqual(0, targetHistogram.GetCountAtValue(1)); Assert.AreEqual(0, targetHistogram.GetCountAtValue(10)); Assert.AreEqual(0, targetHistogram.GetCountAtValue(100)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(1000)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(10000)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(100000)); Assert.AreNotEqual(originalStart, targetHistogram.StartTimeStamp); Assert.AreNotEqual(originalEnd, targetHistogram.EndTimeStamp); }
public void TestAdd() { var longHistogram = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); var other = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); longHistogram.RecordValue(TestValueLevel); longHistogram.RecordValue(TestValueLevel * 1000); other.RecordValue(TestValueLevel); other.RecordValue(TestValueLevel * 1000); longHistogram.Add(other); Assert.AreEqual(2L, longHistogram.GetCountAtValue(TestValueLevel)); Assert.AreEqual(2L, longHistogram.GetCountAtValue(TestValueLevel * 1000)); Assert.AreEqual(4L, longHistogram.TotalCount); var biggerOther = new LongHistogram(HighestTrackableValue * 2, NumberOfSignificantValueDigits); biggerOther.RecordValue(TestValueLevel); biggerOther.RecordValue(TestValueLevel * 1000); // Adding the smaller histogram to the bigger one should work: biggerOther.Add(longHistogram); Assert.AreEqual(3L, biggerOther.GetCountAtValue(TestValueLevel)); Assert.AreEqual(3L, biggerOther.GetCountAtValue(TestValueLevel * 1000)); Assert.AreEqual(6L, biggerOther.TotalCount); // But trying to add a larger histogram into a smaller one should throw an AIOOB: Assert.Throws<ArgumentOutOfRangeException>(() => { longHistogram.Add(biggerOther); }); }
public void GetIntervalHistogramInto_copies_data_over_provided_Histogram() { var originalStart = DateTime.Today.AddDays(-1).MillisecondsSinceUnixEpoch(); var originalEnd = DateTime.Today.MillisecondsSinceUnixEpoch(); var targetHistogram = new LongHistogram(1, HighestTrackableValue, 3); targetHistogram.StartTimeStamp = originalStart; targetHistogram.RecordValue(1); targetHistogram.RecordValue(10); targetHistogram.RecordValue(100); targetHistogram.EndTimeStamp = originalEnd; Assert.AreEqual(3, targetHistogram.TotalCount); Assert.AreEqual(1, targetHistogram.GetCountAtValue(1)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(10)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(100)); var recorder = new Recorder(1, HighestTrackableValue, NumberOfSignificantValueDigits, (id, lowest, highest, sf) => new LongHistogram(id, lowest, highest, sf)); recorder.RecordValue(1000); recorder.RecordValue(10000); recorder.RecordValue(100000); recorder.GetIntervalHistogramInto(targetHistogram); Assert.AreEqual(3, targetHistogram.TotalCount); Assert.AreEqual(0, targetHistogram.GetCountAtValue(1)); Assert.AreEqual(0, targetHistogram.GetCountAtValue(10)); Assert.AreEqual(0, targetHistogram.GetCountAtValue(100)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(1000)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(10000)); Assert.AreEqual(1, targetHistogram.GetCountAtValue(100000)); Assert.AreNotEqual(originalStart, targetHistogram.StartTimeStamp); Assert.AreNotEqual(originalEnd, targetHistogram.EndTimeStamp); }
public void RecordValueWithExpectedInterval() { var TestValueLevel = 4L; var recorder = new Recorder(1, HighestTrackableValue, NumberOfSignificantValueDigits, (id, lowest, highest, sf) => new LongHistogram(id, lowest, highest, sf)); var valueHistogram = new LongHistogram(HighestTrackableValue, NumberOfSignificantValueDigits); recorder.RecordValueWithExpectedInterval(TestValueLevel, TestValueLevel / 4); valueHistogram.RecordValue(TestValueLevel); var intervalHistogram = recorder.GetIntervalHistogram(); // The data will include corrected samples: Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 1) / 4)); Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 2) / 4)); Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 3) / 4)); Assert.AreEqual(1L, intervalHistogram.GetCountAtValue((TestValueLevel * 4) / 4)); Assert.AreEqual(4L, intervalHistogram.TotalCount); // But the raw data will not: Assert.AreEqual(0L, valueHistogram.GetCountAtValue((TestValueLevel * 1) / 4)); Assert.AreEqual(0L, valueHistogram.GetCountAtValue((TestValueLevel * 2) / 4)); Assert.AreEqual(0L, valueHistogram.GetCountAtValue((TestValueLevel * 3) / 4)); Assert.AreEqual(1L, valueHistogram.GetCountAtValue((TestValueLevel * 4) / 4)); Assert.AreEqual(1L, valueHistogram.TotalCount); }