From 1674e4c1eb09d6b85652002473e725a4c4794e4f Mon Sep 17 00:00:00 2001 From: stefan meyer <stefan.meyer@student.tugraz.at> Date: Mon, 28 Aug 2017 21:52:59 +0200 Subject: [PATCH] correction the si refactoring --- VectoCommon/VectoCommon/Utils/SI.cs | 15 ++++--- VectoCommon/VectoCommon/Utils/SIUtils.cs | 41 +++++++++++-------- VectoCore/VectoCoreTest/Utils/AssertHelper.cs | 2 +- VectoCore/VectoCoreTest/Utils/SITest.cs | 15 ++++++- 4 files changed, 47 insertions(+), 26 deletions(-) diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index b88a8fee14..ac61c73209 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -1176,13 +1176,16 @@ namespace TUGraz.VectoCommon.Utils if (_reciproc) { - siUnitsParm = SIUtils.SIUnitsMultFactor(siUnitsParm, -1); //ChangeNumeratorAndDenominator(siUnitsParm); + siUnitsParm = SIUtils.SIUnitsMultFactor(siUnitsParm, -1); } if (_reverse) { - - factor = 1 / factor; + if (_reciproc) + { + //factor = 1 / factor; + factor = 1 / factor; + } if (!SIUtils.CompareSIUnits(siUnitsParm, si.SIUnits)) { @@ -1210,7 +1213,8 @@ namespace TUGraz.VectoCommon.Utils { if (factor.HasValue) { - Val /= (factor.Value * _exponent); + //Val /= (factor.Value * _exponent); + Val /= Math.Pow(factor.Value, (double)_exponent); } } @@ -1218,7 +1222,8 @@ namespace TUGraz.VectoCommon.Utils { if (factor.HasValue) { - Val *= (factor.Value * _exponent); + //Val *= (factor.Value * _exponent); + Val *= Math.Pow(factor.Value,(double)_exponent); } } diff --git a/VectoCommon/VectoCommon/Utils/SIUtils.cs b/VectoCommon/VectoCommon/Utils/SIUtils.cs index 60bdd9f572..72226eeb62 100644 --- a/VectoCommon/VectoCommon/Utils/SIUtils.cs +++ b/VectoCommon/VectoCommon/Utils/SIUtils.cs @@ -73,7 +73,7 @@ namespace TUGraz.VectoCommon.Utils private int[] units; private double factorValue; - private double exponent; + private short exponent; private short reciproc; public enum GrammMode @@ -86,7 +86,7 @@ namespace TUGraz.VectoCommon.Utils private GrammMode grammMode; public UnitInstance(int[] param_units, - double param_factor, double param_exponent, short param_reciproc, + double param_factor, short param_exponent, short param_reciproc, GrammMode param_grammMode) { units = param_units; @@ -159,7 +159,7 @@ namespace TUGraz.VectoCommon.Utils { grammMode = GrammMode.KiloGramm; } - units[0] += 1 * reciproc; + units[0] += 1 * reciproc * exponent; CalcFactorValue(Op.Div, 1000); //factorValue /= 1000; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); @@ -178,7 +178,7 @@ namespace TUGraz.VectoCommon.Utils { get { - units[2] += 1 * reciproc; + units[2] += 1 * reciproc * exponent; CalcFactorValue(Op.Mult, 3600); //factorValue *= 3600; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); @@ -213,7 +213,8 @@ namespace TUGraz.VectoCommon.Utils { get { - units[1] += 1 * reciproc; + //units[1] += 1 * reciproc; + units[1] += 1 * reciproc * exponent; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } @@ -221,8 +222,9 @@ namespace TUGraz.VectoCommon.Utils { get { - CalcFactorValue(Op.Div, 1000); + //CalcFactorValue(Op.Div, 1000); //factorValue /= 1000; + CalcFactorValue(Op.Mult, Math.Pow(factorValue / 1000, exponent)); return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } @@ -230,7 +232,9 @@ namespace TUGraz.VectoCommon.Utils { get { - CalcFactorValue(Op.Div, 100); + //CalcFactorValue(Op.Div, 100); + //Val *= Math.Pow(factor.Value, (double)_exponent); + CalcFactorValue(Op.Mult, Math.Pow(factorValue/100, exponent)); //factorValue /= 100; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } @@ -239,8 +243,9 @@ namespace TUGraz.VectoCommon.Utils { get { - CalcFactorValue(Op.Div, 10); + //CalcFactorValue(Op.Div, 10); //factorValue /= 10; + CalcFactorValue(Op.Mult, Math.Pow(factorValue / 10, exponent)); return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } @@ -248,7 +253,7 @@ namespace TUGraz.VectoCommon.Utils { get { - units[2] += 1 * reciproc; + units[2] += 1 * reciproc * exponent; CalcFactorValue(Op.Mult, 60); //factorValue *= 60; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); @@ -258,9 +263,9 @@ namespace TUGraz.VectoCommon.Utils { get { - units[0] += 1 * reciproc; - units[1] += 1 * reciproc; - units[2] -= 2 * reciproc; + units[0] += 1 * reciproc * exponent; + units[1] += 1 * reciproc * exponent; + units[2] -= 2 * reciproc * exponent; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } @@ -302,7 +307,7 @@ namespace TUGraz.VectoCommon.Utils { get { - units[2] += 1 * reciproc; + units[2] += 1 * reciproc * exponent; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } @@ -310,7 +315,7 @@ namespace TUGraz.VectoCommon.Utils { get { - exponent = 2 * reciproc; + exponent = (short)(2 * reciproc); return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } @@ -318,7 +323,7 @@ namespace TUGraz.VectoCommon.Utils { get { - units[0] += 1 * reciproc; + units[0] += 1 * reciproc * exponent; CalcFactorValue(Op.Mult, 1000); return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } @@ -327,9 +332,9 @@ namespace TUGraz.VectoCommon.Utils { get { - units[0] += 1 * reciproc; - units[1] += 2 * reciproc; - units[2] -= 3 * reciproc; + units[0] += 1 * reciproc * exponent; + units[1] += 2 * reciproc * exponent; + units[2] -= 3 * reciproc * exponent; return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); } } diff --git a/VectoCore/VectoCoreTest/Utils/AssertHelper.cs b/VectoCore/VectoCoreTest/Utils/AssertHelper.cs index a73763d543..976666ebac 100644 --- a/VectoCore/VectoCoreTest/Utils/AssertHelper.cs +++ b/VectoCore/VectoCoreTest/Utils/AssertHelper.cs @@ -83,7 +83,7 @@ namespace TUGraz.VectoCore.Tests.Utils } } - [DebuggerHidden] + //[DebuggerHidden] public static void AreRelativeEqual(double? expected, double? actual, string message = null, double toleranceFactor = DoubleExtensionMethods.ToleranceFactor) { diff --git a/VectoCore/VectoCoreTest/Utils/SITest.cs b/VectoCore/VectoCoreTest/Utils/SITest.cs index c7576b1078..bd802fbabf 100644 --- a/VectoCore/VectoCoreTest/Utils/SITest.cs +++ b/VectoCore/VectoCoreTest/Utils/SITest.cs @@ -575,9 +575,20 @@ namespace TUGraz.VectoCore.Tests.Utils [TestMethod] public void SI_NewTests() { - var val1 = 5.SI().Cubic.Centi.Meter; - Assert.AreEqual("0.000005 [m^3]", val1); + var val1 = 5.SI().Cubic.Dezi.Meter; + Assert.AreEqual("m^3", val1.GetUnitString()); + AssertHelper.AreRelativeEqual(0.005, val1); + + var uni = Unit.SI.Cubic.Dezi.Meter; + Assert.AreEqual(3, uni.GetSIUnits()[1]); //cubic meter + AssertHelper.AreRelativeEqual(0.001, uni.Getfactor()); + + + + var val2 = 7.SI().Cubic.Dezi.Meter.ConvertTo(Unit.SI.Cubic.Dezi.Meter); + Assert.AreEqual("m^3", val2.GetUnitString()); + Assert.AreEqual(0.0007, val2.Value()); } } -- GitLab