Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs =================================================================== diff -u -rf432893149ee8f4e74d4c21f082974fb89916150 -r3d83417547aa8ed6c00ad15c94280d41b22072b2 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision f432893149ee8f4e74d4c21f082974fb89916150) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision 3d83417547aa8ed6c00ad15c94280d41b22072b2) @@ -44,45 +44,6 @@ } [Test] - public void Constructor_WithNullFailureMechanisms_ThrowsArgumentNullException() - { - // Setup - var random = new Random(21); - int contribution = random.Next(1, 100); - const double norm = 1.0 / 30000; - - // Call - TestDelegate test = () => new FailureMechanismContribution(null, contribution, - norm, - norm); - - // Assert - const string expectedMessage = "Kan geen bijdrageoverzicht maken zonder toetsspoor."; - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); - } - - [Test] - public void Constructor_WithNullFailureMechanism_ThrowsArgumentNullException() - { - // Setup - var random = new Random(21); - int contribution = random.Next(1, 100); - const double norm = 1.0 / 30000; - - // Call - TestDelegate test = () => new FailureMechanismContribution(new IFailureMechanism[] - { - null - }, contribution, - norm, - norm); - - // Assert - const string expectedMessage = "Kan geen bijdrage element maken zonder een toetsspoor."; - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); - } - - [Test] [TestCaseSource(nameof(GetInvalidNormValues), new object[] { @@ -96,9 +57,7 @@ int contribution = random.Next(1, 100); // Call - TestDelegate test = () => new FailureMechanismContribution(Enumerable.Empty(), - contribution, - invalidNorm, + TestDelegate test = () => new FailureMechanismContribution(invalidNorm, 0.000001); // Assert @@ -122,9 +81,7 @@ int contribution = random.Next(1, 100); // Call - TestDelegate test = () => new FailureMechanismContribution(Enumerable.Empty(), - contribution, - 0.1, + TestDelegate test = () => new FailureMechanismContribution(0.1, invalidNorm); // Assert @@ -143,9 +100,7 @@ const double signalingNorm = 0.1; // Call - TestDelegate test = () => new FailureMechanismContribution(Enumerable.Empty(), - contribution, - 0.01, + TestDelegate test = () => new FailureMechanismContribution(0.01, signalingNorm); // Assert @@ -156,269 +111,25 @@ } [Test] - [SetCulture("nl-NL")] - [TestCase(-10)] - [TestCase(-1e-6)] - [TestCase(100 + 1e-6)] - [TestCase(150)] - [TestCase(double.NaN)] - public void Constructor_OtherContributionLessOrEqualTo0OrGreaterThan100_ThrowsArgumentOutOfRangeException(double contribution) + public void Constructor_ValidData_ExpectedValues() { - // Call - TestDelegate test = () => new FailureMechanismContribution(Enumerable.Empty(), - contribution, - 1.0 / 30000, - 1.0 / 30000); - - // Assert - const string expectedMessage = "De waarde voor de toegestane bijdrage aan de faalkans moet in het bereik [0,0, 100,0] liggen."; - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); - } - - [Test] - [TestCase(50)] - [TestCase(0)] - [TestCase(100)] - public void Constructor_EmptyFailureMechanisms_OnlyOtherFailureMechanismAddedWithContributionSet(double contribution) - { // Setup - const double norm = 1.0 / 30000; + var random = new Random(21); + double signalingNorm = random.NextDouble(); + double lowerLimitNorm = random.NextDouble(0.1, signalingNorm); // Call - var result = new FailureMechanismContribution(Enumerable.Empty(), - contribution, - norm, - norm); + var result = new FailureMechanismContribution(lowerLimitNorm, signalingNorm); // Assert - Assert.AreEqual(1, result.Distribution.Count()); - FailureMechanismContributionItem otherFailureMechanismItem = result.Distribution.ElementAt(0); - AssertFailureProbabilitySpace(contribution, norm, otherFailureMechanismItem.ProbabilitySpace); - Assert.AreEqual(Resources.OtherFailureMechanism_DisplayName, otherFailureMechanismItem.Assessment); - Assert.AreEqual(Resources.OtherFailureMechanism_Code, otherFailureMechanismItem.AssessmentCode); - Assert.AreEqual(contribution, otherFailureMechanismItem.Contribution); - Assert.IsTrue(otherFailureMechanismItem.IsAlwaysRelevant); - Assert.IsTrue(otherFailureMechanismItem.IsRelevant); - Assert.AreEqual(norm, result.Norm); - Assert.AreEqual(norm, result.SignalingNorm); - Assert.AreEqual(norm, result.LowerLimitNorm); + Assert.AreEqual(lowerLimitNorm, result.Norm); + Assert.AreEqual(signalingNorm, result.SignalingNorm); + Assert.AreEqual(lowerLimitNorm, result.LowerLimitNorm); Assert.AreEqual(NormType.LowerLimit, result.NormativeNorm); - } - [Test] - [TestCase(1)] - [TestCase(2)] - [TestCase(5)] - public void Constructor_OneOrMoreFailureMechanisms_DistributionForFailureMechanismsWithOtherAtEnd(int failureMechanismCount) - { - // Setup - var random = new Random(21); - int otherContribution = random.Next(1, 100); - const double norm = 1.0 / 30000; - - var failureMechanismNames = new Collection(); - var failureMechanismContributions = new Collection(); - - var failureMechanisms = new Collection(); - const string namePrefixFormat = "mechanism_{0}"; - - for (var i = 0; i < failureMechanismCount; i++) - { - string name = string.Format(namePrefixFormat, i); - int contribution = random.Next(1, 100); - var failureMechanism = mocks.StrictMock(); - failureMechanism.Expect(fm => fm.Name).Return(name); - failureMechanism.Expect(fm => fm.Contribution).Return(contribution).Repeat.Twice(); - - failureMechanisms.Add(failureMechanism); - failureMechanismNames.Add(name); - failureMechanismContributions.Add(contribution); - } - - failureMechanismNames.Add("Overig"); - failureMechanismContributions.Add(otherContribution); - - mocks.ReplayAll(); - - // Call - var result = new FailureMechanismContribution(failureMechanisms, - otherContribution, - norm, - norm); - - // Assert - Assert.AreEqual(failureMechanismCount + 1, result.Distribution.Count()); - - CollectionAssert.AreEqual(failureMechanismNames, result.Distribution.Select(d => d.Assessment)); - CollectionAssert.AreEqual(failureMechanismContributions, result.Distribution.Select(d => d.Contribution)); - CollectionAssert.AreEqual(failureMechanismContributions.Select(c => 100.0 / (1.0 / 30000 * c)), result.Distribution.Select(d => d.ProbabilitySpace)); - IEnumerable expectedIsAlwaysRelevant = Enumerable.Repeat(false, failureMechanismCount) - .Concat(Enumerable.Repeat(true, 1)); - CollectionAssert.AreEqual(expectedIsAlwaysRelevant, result.Distribution.Select(d => d.IsAlwaysRelevant)); - mocks.VerifyAll(); } [Test] - public void UpdateContribution_FailureMechanismsIsNull_ThrowsArgumentNullException() - { - // Setup - IEnumerable failureMechanisms = Enumerable.Empty(); - var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, - 12.34, - 1.0 / 30000, - 1.0 / 30000); - - // Call - TestDelegate call = () => failureMechanismContribution.UpdateContributions(null, 0); - - // Assert - const string message = "Kan geen bijdrageoverzicht maken zonder toetsspoor."; - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, message); - } - - [Test] - [TestCase(0)] - [TestCase(34.6)] - [TestCase(100)] - public void UpdateContributions_NoFailureMechanismsAndValidOtherContribution_UpdateDistribution(double newOtherContribution) - { - // Setup - IEnumerable failureMechanisms = Enumerable.Empty(); - const double norm = 1.0 / 30000; - - var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, - 12.34, - norm, - norm); - - // Call - failureMechanismContribution.UpdateContributions(failureMechanisms, newOtherContribution); - - // Assert - Assert.AreEqual(1, failureMechanismContribution.Distribution.Count()); - FailureMechanismContributionItem otherFailureMechanismContribution = failureMechanismContribution.Distribution.Last(); - Assert.AreEqual(newOtherContribution, otherFailureMechanismContribution.Contribution); - Assert.AreEqual(norm, otherFailureMechanismContribution.Norm); - AssertFailureProbabilitySpace(newOtherContribution, norm, otherFailureMechanismContribution.ProbabilitySpace); - } - - [Test] - public void UpdateContributions_MultipleChanges_AllFailureMechanismContributionItemsHaveLatestContribution() - { - // Given - const double norm = 1.0 / 30000; - IEnumerable failureMechanisms = Enumerable.Empty(); - var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, - 12.34, - norm, - norm); - - const double latestContribution = 2.3; - - // When - failureMechanismContribution.UpdateContributions(failureMechanisms, 1); - FailureMechanismContributionItem item1 = failureMechanismContribution.Distribution.Single(); - failureMechanismContribution.UpdateContributions(failureMechanisms, latestContribution); - FailureMechanismContributionItem item2 = failureMechanismContribution.Distribution.Single(); - - // Then - Assert.AreEqual(latestContribution, item1.Contribution); - Assert.AreEqual(latestContribution, item2.Contribution); - Assert.AreEqual(item1.Assessment, item2.Assessment); - } - - [Test] - [TestCase(0)] - [TestCase(34.6)] - [TestCase(100)] - public void UpdateContributions_FailureMechanismsChangesAfterConstruction_UpdateDistribution(double newOtherContribution) - { - // Setup - const string name1 = "A"; - const string name2 = "B"; - const string name3 = "C"; - const string name4 = "D"; - const double contribution1 = 1.1; - const double contribution2 = 5.5; - const double contribution3 = 23.45; - const double contribution4 = 67.89; - const double norm = 1.0 / 30000; - - var failureMechanism1 = mocks.Stub(); - failureMechanism1.Contribution = contribution1; - failureMechanism1.Stub(fm => fm.Name).Return(name1); - var failureMechanism2 = mocks.Stub(); - failureMechanism2.Contribution = contribution2; - failureMechanism2.Stub(fm => fm.Name).Return(name2); - var failureMechanism3 = mocks.Stub(); - failureMechanism3.Contribution = contribution3; - failureMechanism3.Stub(fm => fm.Name).Return(name3); - var failureMechanism4 = mocks.Stub(); - failureMechanism4.Contribution = contribution4; - failureMechanism4.Stub(fm => fm.Name).Return(name4); - mocks.ReplayAll(); - - var failureMechanisms = new List - { - failureMechanism1, - failureMechanism2 - }; - - const double otherContribution = 12.34; - var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, - otherContribution, - norm, - norm); - - // Change failureMechanisms after construction of FailureMechanismContribution: - failureMechanisms.RemoveAt(1); - failureMechanisms.Add(failureMechanism3); - failureMechanisms.Add(failureMechanism4); - - // Precondition - Assert.AreEqual(3, failureMechanismContribution.Distribution.Count()); - var originalNames = new[] - { - name1, - name2, - "Overig" - }; - CollectionAssert.AreEqual(originalNames, failureMechanismContribution.Distribution.Select(d => d.Assessment)); - var originalContributionValues = new[] - { - contribution1, - contribution2, - otherContribution - }; - CollectionAssert.AreEqual(originalContributionValues, failureMechanismContribution.Distribution.Select(d => d.Contribution)); - - // Call - failureMechanismContribution.UpdateContributions(failureMechanisms, newOtherContribution); - - // Assert - Assert.AreEqual(4, failureMechanismContribution.Distribution.Count()); - - var expectedNames = new[] - { - name1, - name3, - name4, - "Overig" - }; - CollectionAssert.AreEqual(expectedNames, failureMechanismContribution.Distribution.Select(d => d.Assessment)); - var contributionValues = new[] - { - contribution1, - contribution3, - contribution4, - newOtherContribution - }; - CollectionAssert.AreEqual(contributionValues, failureMechanismContribution.Distribution.Select(d => d.Contribution)); - CollectionAssert.AreEqual(Enumerable.Repeat(1.0 / 30000, 4), failureMechanismContribution.Distribution.Select(d => d.Norm)); - mocks.VerifyAll(); - } - - [Test] public void LowerLimitNorm_WhenUpdatedAndNormativeNormLowerLimit_NormUpdatedForEachFailureMechanismContributionItem() { // Setup @@ -431,12 +142,7 @@ var random = new Random(21); int otherContribution = random.Next(1, 100); - var failureMechanismContribution = new FailureMechanismContribution(new[] - { - failureMechanism - }, - otherContribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm); // Call @@ -459,11 +165,8 @@ int otherContribution = random.Next(1, 100); const double norm = 1.0 / 30000; - var failureMechanismContribution = new FailureMechanismContribution(new[] + var failureMechanismContribution = new FailureMechanismContribution(norm, norm) { - failureMechanism - }, otherContribution, norm, norm) - { NormativeNorm = NormType.Signaling }; @@ -488,12 +191,7 @@ var random = new Random(21); int otherContribution = random.Next(1, 100); - var failureMechanismContribution = new FailureMechanismContribution(new[] - { - failureMechanism - }, - otherContribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm) { NormativeNorm = NormType.Signaling @@ -519,12 +217,7 @@ int otherContribution = random.Next(1, 100); const double norm = 1.0 / 30000; - var failureMechanismContribution = new FailureMechanismContribution(new[] - { - failureMechanism - }, - otherContribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm); // Call @@ -546,12 +239,7 @@ var random = new Random(21); int otherContribution = random.Next(1, 100); - var failureMechanismContribution = new FailureMechanismContribution(new[] - { - failureMechanism - }, - otherContribution, - 0.1, 0.001); + var failureMechanismContribution = new FailureMechanismContribution(0.1, 0.001); // Precondition CollectionAssert.AreEqual(Enumerable.Repeat(0.1, 2), @@ -579,9 +267,7 @@ var random = new Random(21); int contribution = random.Next(1, 100); const double norm = 1.0 / 30000; - var failureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), - contribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm); // Call @@ -607,9 +293,7 @@ var random = new Random(21); int contribution = random.Next(1, 100); const double norm = 1.0 / 30000; - var failureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), - contribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm); // Call @@ -637,10 +321,7 @@ var random = new Random(21); // When - var failureMechanismContribution = new FailureMechanismContribution(new[] - { - failureMechanism - }, random.Next(1, 100), newNorm, newNorm); + var failureMechanismContribution = new FailureMechanismContribution(newNorm, newNorm); // Then CollectionAssert.AreEqual(Enumerable.Repeat(newNorm, 2), @@ -656,9 +337,7 @@ int contribution = random.Next(1, 100); const double norm = 1.0 / 30000; const double newNorm = 1.0 / 10; - var failureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), - contribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm); // Call @@ -679,9 +358,7 @@ int contribution = random.Next(1, 100); const double norm = 1.0 / 30000; const double newNorm = 1.0 / 1000000; - var failureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), - contribution, - norm, + var failureMechanismContribution = new FailureMechanismContribution(norm, norm); // Call @@ -702,9 +379,7 @@ // Setup var random = new Random(21); int contribution = random.Next(1, 100); - var failureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), - contribution, - 0.1, + var failureMechanismContribution = new FailureMechanismContribution(0.1, 0.01) { NormativeNorm = normType