Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResult.cs =================================================================== diff -u -r209bfd7b71ef53a57e1a52337f1333d38122282f -r41ec92d6f4d837d071057f6a1746b05d1dc4f3b8 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResult.cs (.../PipingFailureMechanismSectionResult.cs) (revision 209bfd7b71ef53a57e1a52337f1333d38122282f) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResult.cs (.../PipingFailureMechanismSectionResult.cs) (revision 41ec92d6f4d837d071057f6a1746b05d1dc4f3b8) @@ -56,8 +56,11 @@ { get { - return CalculationScenarios.Where(cs => cs.IsRelevant && cs.Status == CalculationScenarioStatus.Done) - .Aggregate((RoundedDouble) 0.0, (current, scenario) => (current + scenario.Contribution * scenario.Probability)); + var calculationScenarios = CalculationScenarios.Where(cs => cs.IsRelevant && cs.Status == CalculationScenarioStatus.Done).ToList(); + + return calculationScenarios.Any() + ? (RoundedDouble) (1.0 / calculationScenarios.Sum(scenario => (1.0 / scenario.Probability.Value) * scenario.Contribution.Value)) + : (RoundedDouble) 0.0; } } Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismSectionResultTest.cs =================================================================== diff -u -r209bfd7b71ef53a57e1a52337f1333d38122282f -r41ec92d6f4d837d071057f6a1746b05d1dc4f3b8 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismSectionResultTest.cs (.../PipingFailureMechanismSectionResultTest.cs) (revision 209bfd7b71ef53a57e1a52337f1333d38122282f) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismSectionResultTest.cs (.../PipingFailureMechanismSectionResultTest.cs) (revision 41ec92d6f4d837d071057f6a1746b05d1dc4f3b8) @@ -45,9 +45,9 @@ // Assert Assert.AreSame(section, sectionResult.Section); Assert.IsFalse(sectionResult.AssessmentLayerOne); - Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerTwoA); - Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerTwoB); - Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerThree); + Assert.AreEqual((RoundedDouble) 0, sectionResult.AssessmentLayerTwoA); + Assert.AreEqual((RoundedDouble) 0, sectionResult.AssessmentLayerTwoB); + Assert.AreEqual((RoundedDouble) 0, sectionResult.AssessmentLayerThree); CollectionAssert.IsEmpty(sectionResult.CalculationScenarios); } @@ -79,29 +79,48 @@ } [Test] - public void AssessmentLayerTwoA_ScenariosCalculated_ReturnsValue() + public void AssessmentLayerTwoA_MultipleScenarios_ReturnsValueBasedOnRelevantAndDoneScenarios() { // Setup FailureMechanismSection section = CreateSection(); var failureMechanismSectionResult = new PipingFailureMechanismSectionResult(section); var mocks = new MockRepository(); - var calculationScenarioMock = mocks.StrictMock(); - calculationScenarioMock.Stub(cs => cs.IsRelevant).Return(true); - calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble)1.0); - var expectedProbability = (RoundedDouble)41661830; - calculationScenarioMock.Stub(cs => cs.Probability).Return(expectedProbability); - calculationScenarioMock.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Done); + var calculationScenarioMock1 = mocks.StrictMock(); + var calculationScenarioMock2 = mocks.StrictMock(); + var calculationScenarioMock3 = mocks.StrictMock(); + var calculationScenarioMock4 = mocks.StrictMock(); + var contribution1 = 0.2; + var contribution2 = 0.8; + var probability1 = (RoundedDouble) 1000000; + var probability2 = (RoundedDouble) 2000000; + + calculationScenarioMock1.Stub(cs => cs.IsRelevant).Return(true); + calculationScenarioMock1.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Done); + calculationScenarioMock1.Stub(cs => cs.Contribution).Return((RoundedDouble)contribution1); + calculationScenarioMock1.Stub(cs => cs.Probability).Return(probability1); + + calculationScenarioMock2.Stub(cs => cs.IsRelevant).Return(true); + calculationScenarioMock2.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Done); + calculationScenarioMock2.Stub(cs => cs.Contribution).Return((RoundedDouble)contribution2); + calculationScenarioMock2.Stub(cs => cs.Probability).Return(probability2); + + calculationScenarioMock3.Stub(cs => cs.IsRelevant).Return(false); + + calculationScenarioMock4.Stub(cs => cs.IsRelevant).Return(true); + calculationScenarioMock4.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Failed); + mocks.ReplayAll(); - failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock); + failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock1); + failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock2); // Call RoundedDouble? assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA; // Assert - Assert.AreEqual(expectedProbability, assessmentLayerTwoA); + Assert.AreEqual(1.0 / ((1.0 / probability1) * contribution1 + (1.0 / probability2) * contribution2), assessmentLayerTwoA, 8); mocks.VerifyAll(); } @@ -125,7 +144,7 @@ RoundedDouble assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA; // Assert - Assert.AreEqual((RoundedDouble)0, assessmentLayerTwoA); + Assert.AreEqual((RoundedDouble) 0, assessmentLayerTwoA); mocks.VerifyAll(); } @@ -140,7 +159,7 @@ var calculationScenarioMock = mocks.StrictMock(); calculationScenarioMock.Stub(cs => cs.IsRelevant).Return(true); calculationScenarioMock.Stub(cs => cs.Probability).Return((RoundedDouble) double.NaN); - calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble)1.0); + calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble) 1.0); calculationScenarioMock.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Failed); mocks.ReplayAll(); @@ -151,7 +170,7 @@ RoundedDouble assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA; // Assert - Assert.AreEqual((RoundedDouble)0, assessmentLayerTwoA); + Assert.AreEqual((RoundedDouble) 0, assessmentLayerTwoA); mocks.VerifyAll(); } @@ -166,7 +185,7 @@ RoundedDouble? assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA; // Assert - Assert.AreEqual((RoundedDouble)0.0, assessmentLayerTwoA); + Assert.AreEqual((RoundedDouble) 0.0, assessmentLayerTwoA); } [Test] @@ -191,7 +210,7 @@ RoundedDouble assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA; // Assert - Assert.AreEqual((RoundedDouble)0.0, assessmentLayerTwoA); + Assert.AreEqual((RoundedDouble) 0.0, assessmentLayerTwoA); } [Test] @@ -200,16 +219,16 @@ // Setup FailureMechanismSection section = CreateSection(); var failureMechanismSectionResult = new PipingFailureMechanismSectionResult(section); - + var mocks = new MockRepository(); var calculationScenarioMock = mocks.StrictMock(); calculationScenarioMock.Stub(cs => cs.IsRelevant).Return(true); - calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble)0.3); - + calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble) 0.3); + var calculationScenarioMock2 = mocks.StrictMock(); calculationScenarioMock2.Stub(cs => cs.IsRelevant).Return(true); - calculationScenarioMock2.Stub(cs => cs.Contribution).Return((RoundedDouble)0.5); - + calculationScenarioMock2.Stub(cs => cs.Contribution).Return((RoundedDouble) 0.5); + var calculationScenarioMock3 = mocks.StrictMock(); calculationScenarioMock3.Stub(cs => cs.IsRelevant).Return(false); @@ -223,7 +242,7 @@ RoundedDouble totalContribution = failureMechanismSectionResult.TotalContribution; // Assert - Assert.AreEqual((RoundedDouble)0.8, totalContribution); + Assert.AreEqual((RoundedDouble) 0.8, totalContribution); mocks.VerifyAll(); } @@ -248,7 +267,7 @@ // Setup FailureMechanismSection section = CreateSection(); var failureMechanismSectionResult = new PipingFailureMechanismSectionResult(section); - var assessmentLayerThreeValue = (RoundedDouble)3.0; + var assessmentLayerThreeValue = (RoundedDouble) 3.0; // Call failureMechanismSectionResult.AssessmentLayerThree = assessmentLayerThreeValue; @@ -282,7 +301,12 @@ List scenarios = failureMechanismSectionResult.CalculationScenarios; // Assert - CollectionAssert.AreEqual(new[] {calculationScenarioMock, calculationScenarioMock2, calculationScenarioMock3}, scenarios); + CollectionAssert.AreEqual(new[] + { + calculationScenarioMock, + calculationScenarioMock2, + calculationScenarioMock3 + }, scenarios); mocks.VerifyAll(); } @@ -320,8 +344,8 @@ var mocks = new MockRepository(); var calculationScenarioMock = mocks.StrictMock(); calculationScenarioMock.Stub(cs => cs.IsRelevant).Return(true); - calculationScenarioMock.Stub(cs => cs.Probability).Return((RoundedDouble)double.NaN); - calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble)1.0); + calculationScenarioMock.Stub(cs => cs.Probability).Return((RoundedDouble) double.NaN); + calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble) 1.0); calculationScenarioMock.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Failed); mocks.ReplayAll(); @@ -347,11 +371,11 @@ var calculationScenarioMock = mocks.StrictMock(); calculationScenarioMock.Stub(cs => cs.IsRelevant).Return(true); calculationScenarioMock.Stub(cs => cs.Status).Return(CalculationScenarioStatus.NotCalculated); - + var calculationScenarioMock2 = mocks.StrictMock(); calculationScenarioMock2.Stub(cs => cs.IsRelevant).Return(true); - calculationScenarioMock2.Stub(cs => cs.Probability).Return((RoundedDouble)double.NaN); - calculationScenarioMock2.Stub(cs => cs.Contribution).Return((RoundedDouble)1.0); + calculationScenarioMock2.Stub(cs => cs.Probability).Return((RoundedDouble) double.NaN); + calculationScenarioMock2.Stub(cs => cs.Contribution).Return((RoundedDouble) 1.0); calculationScenarioMock2.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Failed); mocks.ReplayAll(); @@ -377,8 +401,8 @@ var mocks = new MockRepository(); var calculationScenarioMock = mocks.StrictMock(); calculationScenarioMock.Stub(cs => cs.IsRelevant).Return(true); - calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble)1.0); - var expectedProbability = (RoundedDouble)41661830; + calculationScenarioMock.Stub(cs => cs.Contribution).Return((RoundedDouble) 1.0); + var expectedProbability = (RoundedDouble) 41661830; calculationScenarioMock.Stub(cs => cs.Probability).Return(expectedProbability); calculationScenarioMock.Stub(cs => cs.Status).Return(CalculationScenarioStatus.Done); @@ -410,14 +434,11 @@ private static FailureMechanismSection CreateSection() { - var points = new[] + return new FailureMechanismSection("test", new[] { new Point2D(1, 2), new Point2D(3, 4) - }; - - FailureMechanismSection section = new FailureMechanismSection("test", points); - return section; + }); } } } \ No newline at end of file