Skip to content

Commit

Permalink
Fixes #2030 Weird "differences" when applying an expression profile (#…
Browse files Browse the repository at this point in the history
…2031)

* Fixes #2030 Weird "differences" when applying an expression profile

* PR feedback
  • Loading branch information
rwmcintosh authored Jun 9, 2023
1 parent d60f0cd commit 5b61b0d
Show file tree
Hide file tree
Showing 13 changed files with 43 additions and 15 deletions.
6 changes: 6 additions & 0 deletions src/OSPSuite.Core/Comparison/ComparisonExtensions.cs
Original file line number Diff line number Diff line change
@@ -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<IDimension> DimensionComparison<TObject>(this IComparison<TObject> comparison) where TObject : class, IWithDimension
{
return ChildComparison(comparison, x => x.Dimension);
}

public static IComparison<IFormula> FormulaComparison<TObject>(this IComparison<TObject> comparison) where TObject : class, IUsingFormula
{
return ChildComparison(comparison, x => x.Formula);
Expand Down
6 changes: 4 additions & 2 deletions src/OSPSuite.Core/Comparison/ConstantFormulaDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,20 @@ namespace OSPSuite.Core.Comparison
{
public class ConstantFormulaDiffBuilder : DiffBuilder<ConstantFormula>
{
private readonly IObjectComparer _objectComparer;
private readonly IDisplayUnitRetriever _displayUnitRetriever;

public ConstantFormulaDiffBuilder(IDisplayUnitRetriever displayUnitRetriever)
public ConstantFormulaDiffBuilder(IObjectComparer objectComparer, IDisplayUnitRetriever displayUnitRetriever)
{
_objectComparer = objectComparer;
_displayUnitRetriever = displayUnitRetriever;
}

public override void Compare(IComparison<ConstantFormula> 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());
}
}
}
13 changes: 13 additions & 0 deletions src/OSPSuite.Core/Comparison/DimensionDiffBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using OSPSuite.Assets;
using OSPSuite.Core.Domain.UnitSystem;

namespace OSPSuite.Core.Comparison
{
internal class DimensionDiffBuilder : DiffBuilder<Dimension>
{
public override void Compare(IComparison<Dimension> comparison)
{
CompareValues(x => x.Name, x => Captions.Dimension, comparison);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override void Compare(IComparison<EventAssignmentBuilder> 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());
}
}
Expand Down
6 changes: 4 additions & 2 deletions src/OSPSuite.Core/Comparison/FormulaUsablePathDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,20 @@ namespace OSPSuite.Core.Comparison
{
public class FormulaUsablePathDiffBuilder : DiffBuilder<FormulaUsablePath>
{
private readonly IObjectComparer _objectComparer;
private readonly ObjectPathDiffBuilder _objectPathDiffBuilder;

public FormulaUsablePathDiffBuilder(ObjectPathDiffBuilder objectPathDiffBuilder)
public FormulaUsablePathDiffBuilder(IObjectComparer objectComparer, ObjectPathDiffBuilder objectPathDiffBuilder)
{
_objectComparer = objectComparer;
_objectPathDiffBuilder = objectPathDiffBuilder;
}

public override void Compare(IComparison<FormulaUsablePath> comparison)
{
_objectPathDiffBuilder.Compare(comparison);
CompareStringValues(x => x.Alias, x => x.Alias, comparison);
CompareValues(x => x.Dimension, x => x.Dimension, comparison);
_objectComparer.Compare(comparison.DimensionComparison());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@ namespace OSPSuite.Core.Comparison
{
public class FormulaWithFormulaStringDiffBuilder : DiffBuilder<FormulaWithFormulaString>
{
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<FormulaWithFormulaString> 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);
}
Expand Down
2 changes: 1 addition & 1 deletion src/OSPSuite.Core/Comparison/ObserverBuilderDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public override void Compare(IComparison<ObserverBuilder> 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());
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/OSPSuite.Core/Comparison/QuantityDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public override void Compare(IComparison<IQuantity> comparison)
private void compareQuantities(IComparison<IQuantity> 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);

Expand Down
2 changes: 1 addition & 1 deletion src/OSPSuite.Core/Comparison/ReactionBuilderDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public override void Compare(IComparison<ReactionBuilder> 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());
}
}
}
3 changes: 2 additions & 1 deletion src/OSPSuite.Core/Comparison/StartValueDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public override void Compare(IComparison<T> comparison)
protected virtual void ComparePathAndEntityValues(IComparison<T> 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
Expand Down
6 changes: 4 additions & 2 deletions src/OSPSuite.Core/Comparison/TableFormulaDiffBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ namespace OSPSuite.Core.Comparison
{
public class TableFormulaDiffBuilder : DiffBuilder<TableFormula>
{
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;
Expand All @@ -22,7 +24,7 @@ public TableFormulaDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, Enum
public override void Compare(IComparison<TableFormula> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public override void Compare(IComparison<TransportBuilder> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ protected override void Context()
var dim = A.Fake<IDimension>();
var msv1 = new ParameterValue().WithName("Tada").WithFormula(new ConstantFormula(2)).WithDimension(dim);
msv1.Path = new ObjectPath("Root", "Liver", "Plasma");
var dim2 = A.Fake<IDimension>();
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;
Expand Down

0 comments on commit 5b61b0d

Please sign in to comment.