From 5b61b0d8e9a97edbf1bb4509fcafce70a5f980f0 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Fri, 9 Jun 2023 09:35:40 -0400 Subject: [PATCH] Fixes #2030 Weird "differences" when applying an expression profile (#2031) * Fixes #2030 Weird "differences" when applying an expression profile * PR feedback --- .../Comparison/ComparisonExtensions.cs | 6 ++++++ .../Comparison/ConstantFormulaDiffBuilder.cs | 6 ++++-- .../Comparison/DimensionDiffBuilder.cs | 13 +++++++++++++ .../Comparison/EventAssignmentBuilderDiffBuilder.cs | 2 +- .../Comparison/FormulaUsablePathDiffBuilder.cs | 6 ++++-- .../FormulaWithFormulaStringDiffBuilder.cs | 6 ++++-- .../Comparison/ObserverBuilderDiffBuilder.cs | 2 +- src/OSPSuite.Core/Comparison/QuantityDiffBuilder.cs | 2 +- .../Comparison/ReactionBuilderDiffBuilder.cs | 2 +- .../Comparison/StartValueDiffBuilder.cs | 3 ++- .../Comparison/TableFormulaDiffBuilder.cs | 6 ++++-- .../Comparison/TransporterBuilderDiffBuilder.cs | 2 +- .../DiffBuilders/StartValueDiffBuilderSpecs.cs | 2 +- 13 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 src/OSPSuite.Core/Comparison/DimensionDiffBuilder.cs diff --git a/src/OSPSuite.Core/Comparison/ComparisonExtensions.cs b/src/OSPSuite.Core/Comparison/ComparisonExtensions.cs index b3a217582..b6317244a 100644 --- a/src/OSPSuite.Core/Comparison/ComparisonExtensions.cs +++ b/src/OSPSuite.Core/Comparison/ComparisonExtensions.cs @@ -1,11 +1,17 @@ using System; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Formulas; +using OSPSuite.Core.Domain.UnitSystem; namespace OSPSuite.Core.Comparison { public static class ComparisonExtensions { + public static IComparison DimensionComparison(this IComparison comparison) where TObject : class, IWithDimension + { + return ChildComparison(comparison, x => x.Dimension); + } + public static IComparison FormulaComparison(this IComparison comparison) where TObject : class, IUsingFormula { return ChildComparison(comparison, x => x.Formula); diff --git a/src/OSPSuite.Core/Comparison/ConstantFormulaDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ConstantFormulaDiffBuilder.cs index ed53794ac..f8ee1cdf0 100644 --- a/src/OSPSuite.Core/Comparison/ConstantFormulaDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/ConstantFormulaDiffBuilder.cs @@ -5,10 +5,12 @@ namespace OSPSuite.Core.Comparison { public class ConstantFormulaDiffBuilder : DiffBuilder { + private readonly IObjectComparer _objectComparer; private readonly IDisplayUnitRetriever _displayUnitRetriever; - public ConstantFormulaDiffBuilder(IDisplayUnitRetriever displayUnitRetriever) + public ConstantFormulaDiffBuilder(IObjectComparer objectComparer, IDisplayUnitRetriever displayUnitRetriever) { + _objectComparer = objectComparer; _displayUnitRetriever = displayUnitRetriever; } @@ -16,7 +18,7 @@ public override void Compare(IComparison comparison) { if (!comparison.Settings.CompareHiddenEntities) return; CompareDoubleValues(x => x.Value, x => x.Value, comparison,x=> _displayUnitRetriever.PreferredUnitFor(x)); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); } } } \ No newline at end of file diff --git a/src/OSPSuite.Core/Comparison/DimensionDiffBuilder.cs b/src/OSPSuite.Core/Comparison/DimensionDiffBuilder.cs new file mode 100644 index 000000000..5953d588f --- /dev/null +++ b/src/OSPSuite.Core/Comparison/DimensionDiffBuilder.cs @@ -0,0 +1,13 @@ +using OSPSuite.Assets; +using OSPSuite.Core.Domain.UnitSystem; + +namespace OSPSuite.Core.Comparison +{ + internal class DimensionDiffBuilder : DiffBuilder + { + public override void Compare(IComparison comparison) + { + CompareValues(x => x.Name, x => Captions.Dimension, comparison); + } + } +} \ No newline at end of file diff --git a/src/OSPSuite.Core/Comparison/EventAssignmentBuilderDiffBuilder.cs b/src/OSPSuite.Core/Comparison/EventAssignmentBuilderDiffBuilder.cs index 3926c13ca..da6d9b75f 100644 --- a/src/OSPSuite.Core/Comparison/EventAssignmentBuilderDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/EventAssignmentBuilderDiffBuilder.cs @@ -17,7 +17,7 @@ public override void Compare(IComparison comparison) { _entityDiffBuilder.Compare(comparison); CompareValues(x => x.UseAsValue, x => x.UseAsValue, comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); _objectComparer.Compare(comparison.FormulaComparison()); } } diff --git a/src/OSPSuite.Core/Comparison/FormulaUsablePathDiffBuilder.cs b/src/OSPSuite.Core/Comparison/FormulaUsablePathDiffBuilder.cs index f9a848e81..2b2491960 100644 --- a/src/OSPSuite.Core/Comparison/FormulaUsablePathDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/FormulaUsablePathDiffBuilder.cs @@ -4,10 +4,12 @@ namespace OSPSuite.Core.Comparison { public class FormulaUsablePathDiffBuilder : DiffBuilder { + private readonly IObjectComparer _objectComparer; private readonly ObjectPathDiffBuilder _objectPathDiffBuilder; - public FormulaUsablePathDiffBuilder(ObjectPathDiffBuilder objectPathDiffBuilder) + public FormulaUsablePathDiffBuilder(IObjectComparer objectComparer, ObjectPathDiffBuilder objectPathDiffBuilder) { + _objectComparer = objectComparer; _objectPathDiffBuilder = objectPathDiffBuilder; } @@ -15,7 +17,7 @@ public override void Compare(IComparison comparison) { _objectPathDiffBuilder.Compare(comparison); CompareStringValues(x => x.Alias, x => x.Alias, comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); } } } \ No newline at end of file diff --git a/src/OSPSuite.Core/Comparison/FormulaWithFormulaStringDiffBuilder.cs b/src/OSPSuite.Core/Comparison/FormulaWithFormulaStringDiffBuilder.cs index 0e14c8856..e6457fc38 100644 --- a/src/OSPSuite.Core/Comparison/FormulaWithFormulaStringDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/FormulaWithFormulaStringDiffBuilder.cs @@ -4,16 +4,18 @@ namespace OSPSuite.Core.Comparison { public class FormulaWithFormulaStringDiffBuilder : DiffBuilder { + private readonly IObjectComparer _objectComparer; private readonly EnumerableComparer _enumerableComparer; - public FormulaWithFormulaStringDiffBuilder(EnumerableComparer enumerableComparer) + public FormulaWithFormulaStringDiffBuilder(IObjectComparer objectComparer, EnumerableComparer enumerableComparer) { + _objectComparer = objectComparer; _enumerableComparer = enumerableComparer; } public override void Compare(IComparison comparison) { - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); CompareStringValues(x => x.FormulaString, x => x.FormulaString, comparison); _enumerableComparer.CompareEnumerables(comparison, x => x.ObjectPaths, x => x.Alias); } diff --git a/src/OSPSuite.Core/Comparison/ObserverBuilderDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ObserverBuilderDiffBuilder.cs index 2a33c5d84..60179ae5a 100644 --- a/src/OSPSuite.Core/Comparison/ObserverBuilderDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/ObserverBuilderDiffBuilder.cs @@ -20,7 +20,7 @@ public override void Compare(IComparison comparison) _entityDiffBuilder.Compare(comparison); _moleculeDependentDiffBuilder.Compare(comparison); CompareValues(x => x.ContainerCriteria, x => x.ContainerCriteria, comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); _objectComparer.Compare(comparison.FormulaComparison()); } } diff --git a/src/OSPSuite.Core/Comparison/QuantityDiffBuilder.cs b/src/OSPSuite.Core/Comparison/QuantityDiffBuilder.cs index 5e34a6b22..88159277a 100644 --- a/src/OSPSuite.Core/Comparison/QuantityDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/QuantityDiffBuilder.cs @@ -25,7 +25,7 @@ public override void Compare(IComparison comparison) private void compareQuantities(IComparison comparison) { _entityDiffBuilder.Compare(comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); CompareValues(x => x.QuantityType, x => x.QuantityType, comparison); CompareValues(x => x.NegativeValuesAllowed, x => x.NegativeValuesAllowed, comparison); diff --git a/src/OSPSuite.Core/Comparison/ReactionBuilderDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ReactionBuilderDiffBuilder.cs index c06abc79c..e980bf8fe 100644 --- a/src/OSPSuite.Core/Comparison/ReactionBuilderDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/ReactionBuilderDiffBuilder.cs @@ -24,7 +24,7 @@ public override void Compare(IComparison comparison) _enumerableComparer.CompareEnumerables(comparison, x => x.Products, item => item.MoleculeName); _enumerableComparer.CompareEnumerables(comparison, x => x.ModifierNames, item => item, missingItemType: ObjectTypes.Modifier); CompareValues(x => x.ContainerCriteria, x => x.ContainerCriteria, comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); } } } \ No newline at end of file diff --git a/src/OSPSuite.Core/Comparison/StartValueDiffBuilder.cs b/src/OSPSuite.Core/Comparison/StartValueDiffBuilder.cs index 9e5e441e9..46a9071ce 100644 --- a/src/OSPSuite.Core/Comparison/StartValueDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/StartValueDiffBuilder.cs @@ -22,7 +22,8 @@ public override void Compare(IComparison comparison) protected virtual void ComparePathAndEntityValues(IComparison comparison) { _entityDiffBuilder.Compare(comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); + CompareValues(x => x.ContainerPath, x => x.ContainerPath, comparison); // Always Compare Value and Formula, independent from settings as these are two different properties of a start value diff --git a/src/OSPSuite.Core/Comparison/TableFormulaDiffBuilder.cs b/src/OSPSuite.Core/Comparison/TableFormulaDiffBuilder.cs index cff8f6e46..317c468fe 100644 --- a/src/OSPSuite.Core/Comparison/TableFormulaDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/TableFormulaDiffBuilder.cs @@ -8,12 +8,14 @@ namespace OSPSuite.Core.Comparison { public class TableFormulaDiffBuilder : DiffBuilder { + private readonly IObjectComparer _objectComparer; private readonly ObjectBaseDiffBuilder _objectBaseDiffBuilder; private readonly EnumerableComparer _enumerableComparer; private readonly IDisplayNameProvider _displayNameProvider; - public TableFormulaDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer, IDisplayNameProvider displayNameProvider) + public TableFormulaDiffBuilder(IObjectComparer objectComparer, ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer, IDisplayNameProvider displayNameProvider) { + _objectComparer = objectComparer; _objectBaseDiffBuilder = objectBaseDiffBuilder; _enumerableComparer = enumerableComparer; _displayNameProvider = displayNameProvider; @@ -22,7 +24,7 @@ public TableFormulaDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, Enum public override void Compare(IComparison comparison) { _objectBaseDiffBuilder.Compare(comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); CompareStringValues(x => x.XName, x => x.XName, comparison); CompareStringValues(x => x.YName, x => x.YName, comparison); CompareValues(x => x.UseDerivedValues, x => x.UseDerivedValues, comparison); diff --git a/src/OSPSuite.Core/Comparison/TransporterBuilderDiffBuilder.cs b/src/OSPSuite.Core/Comparison/TransporterBuilderDiffBuilder.cs index 3e43c64db..019093c38 100644 --- a/src/OSPSuite.Core/Comparison/TransporterBuilderDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/TransporterBuilderDiffBuilder.cs @@ -20,7 +20,7 @@ public override void Compare(IComparison comparison) _containerDiffBuilder.Compare(comparison); CompareValues(x => x.SourceCriteria, x => x.SourceCriteria, comparison); CompareValues(x => x.TargetCriteria, x => x.TargetCriteria, comparison); - CompareValues(x => x.Dimension, x => x.Dimension, comparison); + _objectComparer.Compare(comparison.DimensionComparison()); _moleculeDependentBuilderDiffBuilder.Compare(comparison); _objectComparer.Compare(comparison.FormulaComparison()); } diff --git a/tests/OSPSuite.Core.IntegrationTests/DiffBuilders/StartValueDiffBuilderSpecs.cs b/tests/OSPSuite.Core.IntegrationTests/DiffBuilders/StartValueDiffBuilderSpecs.cs index c8569e13e..f638f0452 100644 --- a/tests/OSPSuite.Core.IntegrationTests/DiffBuilders/StartValueDiffBuilderSpecs.cs +++ b/tests/OSPSuite.Core.IntegrationTests/DiffBuilders/StartValueDiffBuilderSpecs.cs @@ -280,7 +280,7 @@ protected override void Context() var dim = A.Fake(); var msv1 = new ParameterValue().WithName("Tada").WithFormula(new ConstantFormula(2)).WithDimension(dim); msv1.Path = new ObjectPath("Root", "Liver", "Plasma"); - var dim2 = A.Fake(); + var dim2 = new Dimension(new BaseDimensionRepresentation(), "name", "name"); var msv2 = new ParameterValue().WithName("Tada").WithFormula(new ConstantFormula(2)).WithDimension(dim2); msv2.Path = new ObjectPath("Root", "Liver", "Plasma"); _object1 = msv1;