public void RemoveStochasticSoilProfileFromInput_NoCalculationsWithProfile_ReturnNoAffectedObjects() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); IEnumerable <IPipingCalculationScenario <PipingInput> > calculations = failureMechanism.Calculations .Cast <IPipingCalculationScenario <PipingInput> >(); PipingStochasticSoilProfile profileToDelete = null; foreach (IPipingCalculationScenario <PipingInput> calculation in calculations) { PipingInput input = calculation.InputParameters; PipingStochasticSoilProfile currentProfile = input.StochasticSoilProfile; if (profileToDelete == null) { profileToDelete = currentProfile; } if (profileToDelete != null && ReferenceEquals(profileToDelete, currentProfile)) { input.StochasticSoilProfile = null; } } // Call IEnumerable <IObservable> affected = PipingDataSynchronizationService.RemoveStochasticSoilProfileFromInput(failureMechanism, profileToDelete); // Assert CollectionAssert.IsEmpty(affected); }
public void ClearStochasticSoilProfileDependentData_NoCalculationsWithOutputWithProfile_ReturnInput() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); IEnumerable <IPipingCalculationScenario <PipingInput> > calculations = failureMechanism.Calculations .Cast <IPipingCalculationScenario <PipingInput> >(); PipingStochasticSoilProfile profileToDelete = null; var expectedInputs = new List <PipingInput>(); foreach (IPipingCalculationScenario <PipingInput> calculation in calculations) { PipingInput input = calculation.InputParameters; PipingStochasticSoilProfile currentProfile = input.StochasticSoilProfile; if (profileToDelete == null) { profileToDelete = currentProfile; } if (profileToDelete != null && ReferenceEquals(profileToDelete, currentProfile)) { calculation.ClearOutput(); expectedInputs.Add(input); } } // Call IEnumerable <IObservable> affected = PipingDataSynchronizationService.ClearStochasticSoilProfileDependentData(failureMechanism, profileToDelete); // Assert CollectionAssert.AreEquivalent(expectedInputs, affected); CollectionAssert.IsEmpty(affected.Cast <PipingInput>().Where(a => a.StochasticSoilProfile == null)); }
public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_WithVariousCalculations_ClearsHydraulicBoundaryLocationAndCalculationsAndReturnsAffectedObjects() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); IPipingCalculationScenario <PipingInput>[] calculations = failureMechanism.Calculations.Cast <IPipingCalculationScenario <PipingInput> >() .ToArray(); var expectedAffectedItems = new List <IObservable>(); expectedAffectedItems.AddRange(calculations.OfType <SemiProbabilisticPipingCalculationScenario>() .Where(c => !c.InputParameters.UseAssessmentLevelManualInput && c.HasOutput)); expectedAffectedItems.AddRange(calculations.OfType <ProbabilisticPipingCalculationScenario>() .Where(c => c.HasOutput)); expectedAffectedItems.AddRange(calculations.Select(c => c.InputParameters) .Where(i => i.HydraulicBoundaryLocation != null)); // Call IEnumerable <IObservable> affectedItems = PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(failureMechanism); // Assert // Note: To make sure the clear is performed regardless of what is done with // the return result, no ToArray() should be called before these assertions: Assert.IsTrue(calculations.OfType <SemiProbabilisticPipingCalculationScenario>() .Where(c => !c.InputParameters.UseAssessmentLevelManualInput) .All(c => !c.HasOutput)); Assert.IsTrue(calculations.OfType <ProbabilisticPipingCalculationScenario>() .All(c => !c.HasOutput)); Assert.IsTrue(calculations.All(c => c.InputParameters.HydraulicBoundaryLocation == null)); CollectionAssert.AreEquivalent(expectedAffectedItems, affectedItems); }
public void ClearAllProbabilisticCalculationOutput_WithVariousCalculations_ClearsProbabilisticCalculationsOutputAndReturnsAffectedCalculations() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); failureMechanism.CalculationsGroup.Children.AddRange(new[] { new ProbabilisticPipingCalculationScenario { Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints() }, new ProbabilisticPipingCalculationScenario { Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints() }, new ProbabilisticPipingCalculationScenario() }); ProbabilisticPipingCalculationScenario[] expectedAffectedCalculations = failureMechanism.Calculations .OfType <ProbabilisticPipingCalculationScenario>() .Where(c => c.HasOutput) .ToArray(); // Call IEnumerable <IObservable> affectedItems = PipingDataSynchronizationService.ClearAllProbabilisticCalculationOutput(failureMechanism); // Assert // Note: To make sure the clear is performed regardless of what is done with // the return result, no ToArray() should be called before these assertions: Assert.IsTrue(failureMechanism.Calculations .OfType <ProbabilisticPipingCalculationScenario>() .All(c => !c.HasOutput)); CollectionAssert.AreEquivalent(expectedAffectedCalculations, affectedItems); }
public void RemoveStochasticSoilModel_FullyConfiguredPipingFailureMechanism_RemoveProfileAndClearDependentData() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); PipingStochasticSoilModel soilModel = failureMechanism.StochasticSoilModels[1]; IPipingCalculationScenario <PipingInput>[] calculationsWithSoilModel = failureMechanism.Calculations .Cast <IPipingCalculationScenario <PipingInput> >() .Where(c => ReferenceEquals(c.InputParameters.StochasticSoilModel, soilModel)) .ToArray(); IPipingCalculationScenario <PipingInput>[] calculationsWithOutput = calculationsWithSoilModel.Where(c => c.HasOutput) .ToArray(); // Precondition CollectionAssert.IsNotEmpty(calculationsWithSoilModel); // Call IEnumerable <IObservable> observables = PipingDataSynchronizationService.RemoveStochasticSoilModel(failureMechanism, soilModel); // Assert // Note: To make sure the clear is performed regardless of what is done with // the return result, no ToArray() should be called before these assertions: CollectionAssert.DoesNotContain(failureMechanism.StochasticSoilModels, soilModel); foreach (IPipingCalculationScenario <PipingInput> calculation in calculationsWithSoilModel) { Assert.IsNull(calculation.InputParameters.StochasticSoilModel); } IObservable[] affectedObjectsArray = observables.ToArray(); int expectedAffectedObjectCount = 1 + calculationsWithOutput.Length + calculationsWithSoilModel.Length; Assert.AreEqual(expectedAffectedObjectCount, affectedObjectsArray.Length); foreach (IPipingCalculationScenario <PipingInput> calculation in calculationsWithOutput) { Assert.IsFalse(calculation.HasOutput); } IEnumerable <IObservable> expectedAffectedObjects = calculationsWithSoilModel.Select(calc => calc.InputParameters) .Cast <IObservable>() .Concat(calculationsWithOutput) .Concat(new IObservable[] { failureMechanism.StochasticSoilModels }); CollectionAssert.AreEquivalent(expectedAffectedObjects, affectedObjectsArray); }
public void RemoveStochasticSoilProfileFromInput_CalculationWithOutputWithProfile_ReturnInputWithoutProfileAndCalculation() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); IEnumerable <IPipingCalculationScenario <PipingInput> > calculations = failureMechanism.Calculations .Cast <IPipingCalculationScenario <PipingInput> >(); var expectedAffectedObjects = new List <IObservable>(); PipingStochasticSoilProfile profileToDelete = null; foreach (IPipingCalculationScenario <PipingInput> calculation in calculations) { PipingInput input = calculation.InputParameters; PipingStochasticSoilProfile currentProfile = input.StochasticSoilProfile; if (profileToDelete == null) { profileToDelete = currentProfile; } if (profileToDelete != null && ReferenceEquals(profileToDelete, currentProfile)) { if (calculation.HasOutput) { expectedAffectedObjects.Add(calculation); } expectedAffectedObjects.Add(input); } } // Call IEnumerable <IObservable> affected = PipingDataSynchronizationService.RemoveStochasticSoilProfileFromInput(failureMechanism, profileToDelete); // Assert CollectionAssert.AreEquivalent(expectedAffectedObjects, affected); CollectionAssert.IsEmpty(affected.OfType <PipingInput>().Where(a => a.StochasticSoilProfile != null)); CollectionAssert.IsEmpty(affected.OfType <IPipingCalculationScenario <PipingInput> >().Where(a => a.HasOutput)); }
public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveReferenceLineDependentDataAndReturnAffectedObjects() { // Setup PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); object[] expectedRemovedObjects = failureMechanism.Sections.OfType <object>() .Concat(failureMechanism.SectionResults) .Concat(failureMechanism.ScenarioConfigurationsPerFailureMechanismSection) .Concat(failureMechanism.CalculationsGroup.GetAllChildrenRecursive()) .Concat(failureMechanism.StochasticSoilModels) .Concat(failureMechanism.SurfaceLines) .ToArray(); // Call ClearResults results = PipingDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism); // Assert // Note: To make sure the clear is performed regardless of what is done with // the return result, no ToArray() should be called before these assertions: CollectionAssert.IsEmpty(failureMechanism.Sections); CollectionAssert.IsEmpty(failureMechanism.SectionResults); CollectionAssert.IsEmpty(failureMechanism.ScenarioConfigurationsPerFailureMechanismSection); CollectionAssert.IsEmpty(failureMechanism.CalculationsGroup.Children); CollectionAssert.IsEmpty(failureMechanism.StochasticSoilModels); CollectionAssert.IsEmpty(failureMechanism.SurfaceLines); IObservable[] array = results.ChangedObjects.ToArray(); Assert.AreEqual(6, array.Length); CollectionAssert.Contains(array, failureMechanism); CollectionAssert.Contains(array, failureMechanism.SectionResults); CollectionAssert.Contains(array, failureMechanism.ScenarioConfigurationsPerFailureMechanismSection); CollectionAssert.Contains(array, failureMechanism.CalculationsGroup); CollectionAssert.Contains(array, failureMechanism.StochasticSoilModels); CollectionAssert.Contains(array, failureMechanism.SurfaceLines); CollectionAssert.AreEquivalent(expectedRemovedObjects, results.RemovedObjects); }