public void When_EqualStartAndEnd_ZeroRates() { var reading = new ParticleReading { Alpha = 1, Beta = 2, Gamma = 3 }; var t1 = new DateTime(2018, 6, 1, 12, 0, 0); var t2 = t1; var mockClock = new Mock <ITimeProvider>(MockBehavior.Strict); mockClock.SetupSequence(x => x.Now).Returns(t1).Returns(t2).Returns(t2); var p = new RadiationCounter(mockClock.Object); p.TakeReading(reading); p.TakeReading(reading); p.TakeReading(reading); var s1 = p.CalcSample(); mockClock.Verify(); mockClock.VerifyGet(x => x.Now, Times.Exactly(3)); // First reading covered 2 seconds Assert.AreEqual(3, s1.Samples); Assert.AreEqual(0.0, s1.Alpha, DblDelta); Assert.AreEqual(0.0, s1.Beta, DblDelta); Assert.AreEqual(0.0, s1.Gamma, DblDelta); }
public void When_MissingSomeReadings_Expect_DefaultToZero() { var t1 = new DateTime(2018, 6, 1, 12, 0, 0); var t2 = t1.AddSeconds(1.0); var mockClock = new Mock <ITimeProvider>(MockBehavior.Strict); mockClock.SetupSequence(x => x.Now).Returns(t1).Returns(t2); var reading = new ParticleReading { Alpha = 10, Beta = null, Gamma = null }; var p = new ParticleAccumulator(mockClock.Object); p.TakeReading(reading); var s = p.CalcSample(); Assert.Throws <InvalidOperationException>(() => p.CalcSample()); Assert.Throws <InvalidOperationException>(() => p.TakeReading(reading)); mockClock.Verify(); mockClock.VerifyGet(x => x.Now, Times.Exactly(2)); Assert.AreEqual(1, s.Samples); Assert.AreEqual(10.0, s.Alpha, DblDelta); Assert.AreEqual(0, s.Beta, DblDelta); Assert.AreEqual(0, s.Gamma, DblDelta); }
/// <summary> /// Store and accumulate a particle reading /// </summary> /// <param name="reading"></param> public void TakeReading(ParticleReading reading) { lock (_lock) { _accumulator.TakeReading(reading); } }
/// <summary> /// Take a radiation reading and process it. /// </summary> /// <param name="reading">A radiation reading to be accumulated</param> public void TakeReading(ParticleReading reading) { if (_done) { throw new InvalidOperationException("Attempt to take radiation reading after sample has been calculated"); } _samples++; _alpha += reading.Alpha ?? 0; _beta += reading.Beta ?? 0; _gamma += reading.Gamma ?? 0; }
public ActionResult TakeReading([FromBody] ParticleReading reading) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (reading == null) { return(BadRequest()); } _counter.TakeReading(reading); return(Ok()); }
public void When_TakingTwoReadings_Expect_CorrectPerSecondRates() { var reading = new ParticleReading { Alpha = 1, Beta = 2, Gamma = 3 }; var t1 = new DateTime(2018, 6, 1, 12, 0, 0); var t2 = t1.AddSeconds(2.0); var t3 = t2; var t4 = t3.AddSeconds(4.0); var mockClock = new Mock <ITimeProvider>(MockBehavior.Strict); mockClock.SetupSequence(x => x.Now).Returns(t1).Returns(t2).Returns(t3).Returns(t4).Returns(t4); var p = new RadiationCounter(mockClock.Object); p.TakeReading(reading); p.TakeReading(reading); var s1 = p.CalcSample(); p.TakeReading(reading); p.TakeReading(reading); var s2 = p.CalcSample(); mockClock.Verify(); mockClock.VerifyGet(x => x.Now, Times.Exactly(5)); // First reading covered 2 seconds Assert.AreEqual(2, s1.Samples); Assert.AreEqual(2.0 / 2.0, s1.Alpha, DblDelta); Assert.AreEqual(4.0 / 2.0, s1.Beta, DblDelta); Assert.AreEqual(6.0 / 2.0, s1.Gamma, DblDelta); // Second reading covered 4 seconds Assert.AreEqual(2, s2.Samples); Assert.AreEqual(2.0 / 4.0, s2.Alpha, DblDelta); Assert.AreEqual(4.0 / 4.0, s2.Beta, DblDelta); Assert.AreEqual(6.0 / 4.0, s2.Gamma, DblDelta); }
public void When_TakingReadings_Expect_CounterCalled() { // Test Data var reading1 = new ParticleReading { Alpha = 10, Beta = 20, Gamma = 30 }; var reading2 = new ParticleReading { Alpha = 50, Beta = 80, Gamma = 0 }; // Setup _mockCounter.Setup(x => x.TakeReading(reading1)); _mockCounter.Setup(x => x.TakeReading(reading2)); // Create the controller and take some readings var controller = new GeigerCounterController(_mockContext.Object, _mockCounter.Object); controller.TakeReading(reading1); controller.TakeReading(reading2); // Validate _mockCounter.VerifyAll(); _mockContext.VerifyAll(); }