Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 /// <summary>
 /// Store and accumulate a particle reading
 /// </summary>
 /// <param name="reading"></param>
 public void TakeReading(ParticleReading reading)
 {
     lock (_lock)
     {
         _accumulator.TakeReading(reading);
     }
 }
Exemple #4
0
        /// <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());
 }
Exemple #6
0
        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();
        }