From 94c9d9af0f6ad45f9514335e9ec28923d589a931 Mon Sep 17 00:00:00 2001 From: stefan meyer <stefan.meyer@student.tugraz.at> Date: Wed, 6 Sep 2017 16:04:18 +0200 Subject: [PATCH] part 2 of refactoring. Bug fixing --- .../UnitTests/M11Tests.vb | 4 +- .../VectoCommon/Utils/IntExtensionMethods.cs | 2 +- VectoCommon/VectoCommon/Utils/SI.cs | 376 ++++++++++-------- VectoCommon/VectoCommon/Utils/SIUtils.cs | 257 ++++++++++-- .../OutputData/XML/XMLDeclarationReport.cs | 230 +++++------ VectoCore/VectoCoreTest/Utils/SITest.cs | 37 +- 6 files changed, 548 insertions(+), 358 deletions(-) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M11Tests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M11Tests.vb index c18a62a928..f56000de74 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M11Tests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M11Tests.vb @@ -64,8 +64,10 @@ Namespace UnitTests Assert.AreEqual(target.SmartElectricalTotalCycleElectricalEnergyGeneratedDuringOverrunOnly.Value(), OUT1, 0.00001) Assert.AreEqual(target.SmartElectricalTotalCycleEletricalEnergyGenerated.Value(), OUT2, 0.00001) Assert.AreEqual(target.TotalCycleElectricalDemand.Value(), OUT3, 0.00001) + 'Assert.AreEqual(target.TotalCycleFuelConsumptionSmartElectricalLoad.ConvertTo().Gramm, OUT4, 0.00001) Assert.AreEqual(target.TotalCycleFuelConsumptionSmartElectricalLoad.ConvertTo(Unit.SI.Gramm), OUT4, 0.00001) - Assert.AreEqual(target.TotalCycleFuelConsumptionZeroElectricalLoad.Value(), OUT5.SI().Gramm.Value(), 0.00001) + 'Assert.AreEqual(target.TotalCycleFuelConsumptionZeroElectricalLoad.Value(), OUT5.SI().Gramm.Value(), 0.00001) + Assert.AreEqual(target.TotalCycleFuelConsumptionZeroElectricalLoad.Value(), OUT5.SI(Unit.SI.Gramm).Value(), 0.00001) Assert.AreEqual(target.StopStartSensitiveTotalCycleElectricalDemand.Value(), OUT6, 0.00001) End Sub diff --git a/VectoCommon/VectoCommon/Utils/IntExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/IntExtensionMethods.cs index d1c4555a68..71b2bb0cc2 100644 --- a/VectoCommon/VectoCommon/Utils/IntExtensionMethods.cs +++ b/VectoCommon/VectoCommon/Utils/IntExtensionMethods.cs @@ -48,7 +48,7 @@ namespace TUGraz.VectoCommon.Utils public static SI SI(this int value, UnitInstance si) { - return new SI(si,value*si.Getfactor()); + return new SI(si,value); } /// <summary> diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index 4a79df5208..ec96cd20ba 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -1054,43 +1054,45 @@ namespace TUGraz.VectoCommon.Utils protected readonly double Val; - /// <summary> - /// The array of the SI units. - /// </summary> - protected int[] SIUnits; + /// <summary> + /// The array of the SI units. + /// </summary> + protected int[] SIUnits; + + protected UnitInstance.IsMass isMass; /// <summary> /// The current exponent for conversion operations (Square, Cubic, Linear, e.g. new SI(3).Square.Meter). /// Can be reseted with Reset, Per, Cast. /// </summary> - private readonly int _exponent; - - /// <summary> - /// A flag indicating if the current SI is in reciprocal mode (used in the <see cref="Per"/> method for reciprocal units: e.g. new SI(2).Meter.Per.Second) ==> [m/s] - /// Can be reseted with Reset, Per, Cast. - /// </summary> - private readonly bool _reciproc; + //private readonly int _exponent; - /// <summary> - /// A flag indicating if the current SI is in reverse mode (used for conversions: e.g. new SI(2).Rounds.Per.Minute.ConverTo.Radian.Per.Second ==> [rpm/min] => [rad/s]). - /// </summary> - private readonly bool _reverse; + /// <summary> + /// A flag indicating if the current SI is in reciprocal mode (used in the <see cref="Per"/> method for reciprocal units: e.g. new SI(2).Meter.Per.Second) ==> [m/s] + /// Can be reseted with Reset, Per, Cast. + /// </summary> + //private readonly bool _reciproc; - /// <summary> - /// Enum for defining the Units. - /// </summary> - [SuppressMessage("ReSharper", "InconsistentNaming")] - protected enum Unit - { - kg, - m, - s, - A, - K, - mol, - cd, - } + /// <summary> + /// A flag indicating if the current SI is in reverse mode (used for conversions: e.g. new SI(2).Rounds.Per.Minute.ConverTo.Radian.Per.Second ==> [rpm/min] => [rad/s]). + /// </summary> + //private readonly bool _reverse; + + ///// <summary> + ///// Enum for defining the Units. + ///// </summary> + //[SuppressMessage("ReSharper", "InconsistentNaming")] + //protected enum Unit + //{ + // kg, + // m, + // s, + // A, + // K, + // mol, + // cd, + //} /// <summary> @@ -1101,12 +1103,13 @@ namespace TUGraz.VectoCommon.Utils public SI(double val = 0.0) { Val = val; - _reciproc = false; - _reverse = false; + + //_reciproc = false; + //_reverse = false; SIUnits = new int[7] { 0, 0, 0, 0, 0, 0, 0 }; - _exponent = 1; + //_exponent = 1; if (double.IsNaN(val)) { @@ -1128,13 +1131,15 @@ namespace TUGraz.VectoCommon.Utils /// <param name="reciproc">if set to <c>true</c> then the object is in reciproc mode (1/...)</param> /// <param name="reverse">if set to <c>true</c> then the object is in reverse convertion mode (e.g. rpm/min => rad/s).</param> /// <param name="exponent">The exponent for further conversions (e.g. Square.Meter).</param> - protected SI(double val, int[] siunits, bool reciproc = false, - bool reverse = false, int exponent = 1) + //protected SI(double val, int[] siunits, bool reciproc = false, + // bool reverse = false, int exponent = 1) + protected SI(double val, int[] siunits, UnitInstance.IsMass isMassParam) { Val = val; - _reciproc = reciproc; - _reverse = reverse; - _exponent = exponent; + isMass = isMassParam; + //_reciproc = reciproc; + //_reverse = reverse; + //_exponent = exponent; SIUnits = siunits; @@ -1150,7 +1155,9 @@ namespace TUGraz.VectoCommon.Utils } } - public SI(UnitInstance si, double val = 0) : this(val, si.GetSIUnits()){} + public SI(UnitInstance si, double val = 0) : this(val * si.Getfactor, si.GetSIUnits(),si.GetGrammMode()){ + + } /// <summary> /// Initializes a new instance of the <see cref="SI"/> class which copies the units from an already existing SI. @@ -1158,75 +1165,87 @@ namespace TUGraz.VectoCommon.Utils /// <param name="val">The value.</param> /// <param name="unit">The unit.</param> [DebuggerHidden] - private SI(double val, SI unit) : this(val, unit.SIUnits){} + private SI(double val, SI unit) : this(val, unit.SIUnits, unit.isMass) {} //[DebuggerHidden] - protected SI(SI si, double? factor = null, int[] siUnitsParam = null, - bool? reciproc = null, bool? reverse = null, int? exponent = null) + //protected SI(SI si, double? factor = null, int[] siUnitsParam = null, + // bool? reciproc = null, bool? reverse = null, int? exponent = null) + protected SI(SI si, double factor , int[] siUnitsParam, int exponent, bool reverse, UnitInstance.IsMass isMassParam) { - Val = si.Val; - _reciproc = reciproc ?? si._reciproc; - _reverse = reverse ?? si._reverse; - _exponent = exponent ?? si._exponent; + // Val = si.Val; + Val = si.Val * factor; + isMass = isMassParam; + SIUnits = siUnitsParam; + //_reciproc = reciproc ?? si._reciproc; + //_reverse = reverse ?? si._reverse; + //_exponent = exponent ?? si._exponent; - if (siUnitsParam == null) //////////////???? - { - siUnitsParam = new int[] { 0, 0, 0, 0, 0, 0, 0 }; - } + //if (siUnitsParam == null) //////////////???? + //{ + // siUnitsParam = new int[] { 0, 0, 0, 0, 0, 0, 0 }; + //} - if (_reciproc) - { - siUnitsParam = SIUtils.SIUnitsMultFactor(siUnitsParam, -1); - } - if (_reverse) - { - // compare the si Units - if (!SIUtils.CompareSIUnits(siUnitsParam, si.SIUnits)) - { - throw new VectoException( - "Unit missing. Conversion not possible. [{0}] does not contain a [{1}].", - GetUnitString(siUnitsParam), si.GetUnitString()); - } + ////if (_reciproc) + ////{ + ////siUnitsParam = SIUtils.SIUnitsMultFactor(siUnitsParam, -1); + ////} - SIUnits = si.SIUnits; + ////if (_reverse) + //if (reverse) + //{ + // // compare the si Units + // if (!SIUtils.CompareSIUnits(siUnitsParam, si.SIUnits)) + // { + // throw new VectoException( + // "Unit missing. Conversion not possible. [{0}] does not contain a [{1}].", + // GetUnitString(siUnitsParam), si.GetUnitString()); + // } - factor = 1 / factor; + // SIUnits = si.SIUnits; - //_reverse = false; + // factor = 1 / factor; - } - else - { - SIUnits = SIUtils.AdditionTheSIUnits(si.SIUnits, SIUtils.SIUnitsMultFactor(siUnitsParam, _exponent)); - } + // ////_reverse = false; + //} + //else + //{ + //SIUnits = SIUtils.AdditionTheSIUnits(si.SIUnits, siUnitsParam); - if (_reciproc) - { - if (factor.HasValue) - { - //Val /= (factor.Value * _exponent); - Val /= Math.Pow(factor.Value, _exponent); - } + // //SIUnits = SIUtils.AdditionTheSIUnits(si.SIUnits, SIUtils.SIUnitsMultFactor(siUnitsParam, _exponent)); + //} + + + //if (_reciproc) + //{ + // if (factor.HasValue) + // { + // //Val /= (factor.Value * _exponent); + // Val /= Math.Pow(factor.Value, _exponent); + // } + + //} + //else + //{ + // if (factor.HasValue) + // { + // //Val *= (factor.Value * _exponent); + // Val *= Math.Pow(factor, exponent); + // } + //} + + //if (_reverse) + //if (reverse) + //{ + // // Val /= factor; + // //Val /= factor.Value; + // //_reverse = false; + //} - } - else - { - if (factor.HasValue) - { - //Val *= (factor.Value * _exponent); - Val *= Math.Pow(factor.Value, _exponent); - } - } - if (_reverse) - { - Val /= factor.Value; - _reverse = false; - } if (double.IsNaN(Val)) { @@ -1258,14 +1277,41 @@ namespace TUGraz.VectoCommon.Utils public SI ConvertTo(UnitInstance si) { - double factorValue = si.Getfactor(); - if (si.GetGrammMode() == UnitInstance.GrammMode.Gramm) + if (!SIUtils.CompareSIUnits(SIUnits, si.GetSIUnits())) { - factorValue *= 1000.0; + throw new VectoException( + "Unit missing. Conversion not possible. [{0}] does not contain a [{1}].", + GetUnitString(SIUnits), si.GetSIUnits()); } - return new SI(this, siUnitsParam: si.GetSIUnits(), factor: factorValue, - exponent: 1, reciproc: false, reverse: true); - } + + double factorValue = si.Getfactor; + int exp = si.GetExponent; + + + if ((isMass & UnitInstance.IsMass.IsGramm) == UnitInstance.IsMass.IsGramm) + { + factorValue /= 1000; + } + + if((si.GetGrammMode() & UnitInstance.IsMass.IsGramm) == UnitInstance.IsMass.IsGramm) + { + factorValue *= 1000; + isMass |= UnitInstance.IsMass.IsGramm; + } + + //if (si.GetGrammMode() == UnitInstance.GrammMode.Gramm) + //{ + // factorValue *= 1000.0; + //} + //if ((si.GetGrammMode() & UnitInstance.IsMass.IsGramm) == UnitInstance.IsMass.IsGramm) + //{ + // factorValue *= 1000.0; + //} + //return new SI(this, siUnitsParam: si.GetSIUnits(), factor: factorValue, + // exponent: 1, reciproc: false, reverse: true); + return new SI(this, siUnitsParam: si.GetSIUnits(), factor: factorValue, exponent: exp, + reverse: true, isMassParam: isMass); + } /// <summary> /// Casts the SI Unit to the concrete unit type (if the units allow such an cast). @@ -1289,7 +1335,7 @@ namespace TUGraz.VectoCommon.Utils /// </summary> public SI ToBasicUnits() { - return new SI(Val, SIUnits); + return new SI(Val, SIUnits,isMass); } @@ -1307,7 +1353,7 @@ namespace TUGraz.VectoCommon.Utils /// </summary> public SI Clone() { - return new SI(Val, SIUnits); + return new SI(Val, SIUnits,isMass); } /// <summary> @@ -1653,7 +1699,7 @@ namespace TUGraz.VectoCommon.Utils int[] unitArray = new int[7]; unitArray = SIUtils.AdditionTheSIUnits(si1.SIUnits, si2.SIUnits); - return new SI(si1.Val * si2.Val, unitArray); + return new SI(si1.Val * si2.Val, unitArray, si1.isMass); } /// <summary> @@ -1721,7 +1767,7 @@ namespace TUGraz.VectoCommon.Utils unitArray = SIUtils.AdditionTheSIUnits( si1.SIUnits, SIUtils.SIUnitsMultFactor(si2.SIUnits, -1)); - return new SI(result, unitArray); + return new SI(result, unitArray, si1.isMass); } /// <summary> @@ -1988,68 +2034,75 @@ namespace TUGraz.VectoCommon.Utils /// </summary> public string GetUnitString(int[] SIUnitParam = null) { - Array unitnames = Enum.GetNames(typeof(Unit)); - string numerator = ""; - string denominator = ""; - int potent = 0; - string potentStr = ""; - if (SIUnitParam == null) { SIUnitParam = SIUnits; } - for (var i = 0; i < SIUnitParam.Length; i++) - { - int currentValue = SIUnitParam[i]; - potent = Math.Abs(currentValue); - potentStr = ""; - if (currentValue != 0) - { - string currentUnit = (string)unitnames.GetValue(i); - - if (potent > 1) - { - potentStr = "^" + potent; - } - - if (currentValue > 0) - { - numerator += currentUnit + potentStr; - - } - else if (currentValue < 0) - { - denominator += currentUnit + potentStr; - } - } - } - string result = ""; - - if (numerator == "") - { - if (denominator == "") - { - result = "-"; - } - else - { - result = "1/" + denominator; - } - } - else - { - if (denominator == "") - { - result = numerator; - } - else - { - result = numerator + "/" + denominator; - } - } - - return result; - } + return Unit.GetUnitString(SIUnitParam, + ((isMass & UnitInstance.IsMass.IsGramm) == UnitInstance.IsMass.IsGramm)); + //return Unit.GetUnitString(SIUnitParam); + //Array unitnames = Enum.GetNames(typeof(Unit)); + //string numerator = ""; + //string denominator = ""; + //int potent = 0; + //string potentStr = ""; + + // if (SIUnitParam == null) + // { + // SIUnitParam = SIUnits; + // } + //for (var i = 0; i < SIUnitParam.Length; i++) + //{ + // int currentValue = SIUnitParam[i]; + // potent = Math.Abs(currentValue); + // potentStr = ""; + // if (currentValue != 0) + // { + // string currentUnit = (string)unitnames.GetValue(i); + + // if (potent > 1) + // { + // potentStr = "^" + potent; + // } + + // if (currentValue > 0) + // { + // numerator += currentUnit + potentStr; + + // } + // else if (currentValue < 0) + // { + // denominator += currentUnit + potentStr; + // } + // } + //} + //string result = ""; + + //if (numerator == "") + //{ + // if (denominator == "") + // { + // result = "-"; + // } + // else + // { + // result = "1/" + denominator; + // } + //} + //else + //{ + // if (denominator == "") + // { + // result = numerator; + // } + // else + // { + // result = numerator + "/" + denominator; + // } + //} + + //return result; + } @@ -2321,8 +2374,9 @@ namespace TUGraz.VectoCommon.Utils if (!HasEqualUnit(si)) { - if (SIUtils.GetnumberofSIUnits(si.SIUnits) >= SIUtils.GetnumberofSIUnits(SIUnits)) - { + //if (SIUtils.GetnumberofSIUnits(si.SIUnits) >= SIUtils.GetnumberofSIUnits(SIUnits)) + if (si.SIUnits.Sum<int>(n => Math.Abs(n)) >= SIUnits.Sum<int>(n => Math.Abs(n))) + { return -1; } return 1; diff --git a/VectoCommon/VectoCommon/Utils/SIUtils.cs b/VectoCommon/VectoCommon/Utils/SIUtils.cs index 3cc6d413b9..d72f189ad8 100644 --- a/VectoCommon/VectoCommon/Utils/SIUtils.cs +++ b/VectoCommon/VectoCommon/Utils/SIUtils.cs @@ -44,16 +44,16 @@ namespace TUGraz.VectoCommon.Utils } //new method - public static int GetnumberofSIUnits(int[] array) - { - int resultCount = 0; - for (int count = 0; count < array.Length; count++) - { - resultCount += array[count] < 0 ? array[count] * (-1) : array[count]; + //public static int GetnumberofSIUnits(int[] array) + //{ + // int resultCount = 0; + // for (int count = 0; count < array.Length; count++) + // { + // resultCount += array[count] < 0 ? array[count] * (-1) : array[count]; - } - return resultCount; - } + // } + // return resultCount; + //} } @@ -63,71 +63,208 @@ namespace TUGraz.VectoCommon.Utils { get { - return new UnitInstance(new int[7] { 0, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, UnitInstance.GrammMode.NoMass); + return new UnitInstance(new int[7] { 0, 0, 0, 0, 0, 0, 0 }, 1, 1, 1);//, UnitInstance.GrammMode.NoMass); } } + + /// <summary> + /// Enum for defining the Units. + /// </summary> + //[SuppressMessage("ReSharper", "InconsistentNaming")] + private enum SIUnit + { + kg, + m, + s, + A, + K, + mol, + cd, + } + + //public static string GetUnitString(int[] SIUnitParam) + public static string GetUnitString(int[] SIUnitParam,bool isGramm) + { + + Array unitnames = Enum.GetNames(typeof(SIUnit)); + string numerator = ""; + string denominator = ""; + int potent = 0; + string potentStr = ""; + + + for (var i = 0; i < SIUnitParam.Length; i++) + { + int currentValue = SIUnitParam[i]; + + + potent = Math.Abs(currentValue); + potentStr = ""; + if (currentValue != 0) + { + string currentUnit = (string)unitnames.GetValue(i); + if(currentUnit == "kg" && isGramm == true) + { + currentUnit = "g"; + } + + + if (potent > 1) + { + potentStr = "^" + potent; + } + + if (currentValue > 0) + { + numerator += currentUnit + potentStr; + + } + else if (currentValue < 0) + { + denominator += currentUnit + potentStr; + } + } + } + string result = ""; + + if (numerator == "") + { + if (denominator == "") + { + result = "-"; + } + else + { + result = "1/" + denominator; + } + } + else + { + if (denominator == "") + { + result = numerator; + } + else + { + result = numerator + "/" + denominator; + } + } + + return result; + } + + } public struct UnitInstance { private int[] units; - private double factorValue; + private double factorValue; private int exponent; private int reciproc; - public enum GrammMode + + [Flags] + public enum IsMass { - NoMass, - Gramm, - Kilo, - KiloGramm + IsKilo = 0x01, //0001 + IsGramm = 0x02, //0010 + IsKiloGramm = 0x04 //0100 } - private GrammMode grammMode; + private IsMass isMassOption; + + //public enum GrammMode + //{ + // NoMass, + // Gramm, + // Kilo, + // KiloGramm + //} + //private GrammMode grammMode; + public UnitInstance(int[] param_units, - double param_factor, int param_exponent, int param_reciproc, - GrammMode param_grammMode) + double param_factor, int param_exponent, int param_reciproc)//, + //GrammMode param_grammMode) { units = param_units; factorValue = param_factor; exponent = param_exponent; reciproc = param_reciproc; - grammMode = param_grammMode; + //grammMode = param_grammMode; + isMassOption = IsMass.IsKiloGramm; } - public GrammMode GetGrammMode() + //public GrammMode GetGrammMode() + //{ + // return grammMode; + //} + + public IsMass GetGrammMode() { - return grammMode; + return isMassOption; } public int[] GetSIUnits() { return units; } - public double Getfactor() + public double Getfactor { - return factorValue; + get + { + return factorValue; + } + //return factorValue; + } + public int GetExponent + { + get + { + return exponent; + } } - public UnitInstance Gramm { get { - if (grammMode == GrammMode.NoMass) + //if (grammMode == GrammMode.NoMass) + //{ + // grammMode = GrammMode.Gramm; + //} + //else if (grammMode == GrammMode.Kilo) + //{ + // grammMode = GrammMode.KiloGramm; + //} + + units[0] += 1 * reciproc * exponent; + + double factor = Math.Pow(1000, reciproc * exponent); + + if ((isMassOption & IsMass.IsKilo) == IsMass.IsKilo) { - grammMode = GrammMode.Gramm; + //is Kilo -> Kilogramm are selected + isMassOption = (isMassOption | ~IsMass.IsGramm); + isMassOption = (isMassOption | IsMass.IsKiloGramm); + factorValue /= factor; + } - else if (grammMode == GrammMode.Kilo) + else { - grammMode = GrammMode.KiloGramm; + //is not kilo -> Gramm are selected + isMassOption = (isMassOption | IsMass.IsGramm); + isMassOption = (isMassOption | ~IsMass.IsKiloGramm); + //factorValue *= factor; } - units[0] += 1 * reciproc * exponent; + isMassOption = (isMassOption & ~IsMass.IsKilo); - factorValue /= Math.Pow(1000, exponent * reciproc); + + //factorValue /= Math.Pow(1000, exponent * reciproc); //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); + return this; // not work } } @@ -135,6 +272,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + exponent = 3; //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -144,6 +283,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + int ReciprocAndExponent = reciproc * exponent; units[2] += 1 * ReciprocAndExponent; @@ -156,14 +297,16 @@ namespace TUGraz.VectoCommon.Utils { get { - if (grammMode == GrammMode.NoMass) - { - grammMode = GrammMode.Kilo; - } - else if (grammMode == GrammMode.Gramm) - { - grammMode = GrammMode.KiloGramm; - } + isMassOption = (isMassOption | IsMass.IsKilo); + + //if (grammMode == GrammMode.NoMass) + //{ + // grammMode = GrammMode.Kilo; + //} + //else if (grammMode == GrammMode.Gramm) + //{ + // grammMode = GrammMode.KiloGramm; + //} factorValue *= Math.Pow(1000, exponent * reciproc); //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); @@ -174,6 +317,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + exponent = 1; //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -183,6 +328,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + units[1] += 1 * reciproc * exponent; //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -192,6 +339,7 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); factorValue /= Math.Pow(1000, exponent * reciproc); //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); @@ -202,6 +350,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + factorValue /= Math.Pow(100, exponent * reciproc); //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -210,7 +360,9 @@ namespace TUGraz.VectoCommon.Utils public UnitInstance Dezi { get - { + { + isMassOption = (isMassOption & ~IsMass.IsKilo); + factorValue /= Math.Pow(10, exponent * reciproc); //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -220,6 +372,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + int ReciprocAndExponent = reciproc * exponent; units[2] += 1 * ReciprocAndExponent; @@ -232,6 +386,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + int ReciprocAndExponent = reciproc * exponent; units[0] += 1 * ReciprocAndExponent; units[1] += 1 * ReciprocAndExponent; @@ -244,6 +400,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + exponent = 1; reciproc = reciproc * (-1); @@ -255,6 +413,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; } @@ -263,6 +423,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + factorValue *= Math.Pow(2 * Math.PI, exponent * reciproc); //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -272,6 +434,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + units[2] += 1 * reciproc * exponent; //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -281,6 +445,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + exponent = 2; //return new UnitInstance(units, factorValue, exponent, reciproc, grammMode); return this; @@ -290,6 +456,11 @@ namespace TUGraz.VectoCommon.Utils { get { + // remove Gramm and Kilo and KiloGramm is selected. + isMassOption = (isMassOption & ~IsMass.IsKilo); + isMassOption = (isMassOption | ~IsMass.IsGramm); + isMassOption = (isMassOption | IsMass.IsKiloGramm); + int ReciprocAndExponent = reciproc * exponent; units[0] += 1 * ReciprocAndExponent; factorValue *= Math.Pow(1000, ReciprocAndExponent); @@ -301,6 +472,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + int ReciprocAndExponent = reciproc * exponent; units[0] += 1 * ReciprocAndExponent; units[1] += 2 * ReciprocAndExponent; @@ -313,6 +486,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + int ReciprocAndExponent = reciproc * exponent; units[0] += 1 * ReciprocAndExponent; units[1] += 2 * ReciprocAndExponent; @@ -326,6 +501,8 @@ namespace TUGraz.VectoCommon.Utils { get { + isMassOption = (isMassOption & ~IsMass.IsKilo); + int ReciprocAndExponent = reciproc * exponent; units[2] += 3 * ReciprocAndExponent; factorValue /= Math.Pow(1000, ReciprocAndExponent); diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index dc5c83cd03..5eb39607ca 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -169,147 +169,95 @@ namespace TUGraz.VectoCore.OutputData.XML _customerReport.Initialize(modelData); } - public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput) - { - var fuel = FuelData.Instance().Lookup(result.FuelType); - var retVal = new List<XElement> { - new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), - (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter)).Value() - .ToMinSignificantDigits(3, 1)), - new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), - (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / - result.Payload.ConvertTo(Unit.SI.Ton)).Value().ToMinSignificantDigits(3, 1)), - result.CargoVolume > 0 - ? new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), - (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.CargoVolume) - .Value - ().ToMinSignificantDigits(3, 1)) - : null - }; - //FC - if (fullOutput) - { - retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), - (result.EnergyConsumptionTotal / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / 1e6).Value().ToMinSignificantDigits(3, 1))); - retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/t-km"), - (result.EnergyConsumptionTotal / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.Payload.ConvertTo(Unit.SI.Ton) / 1e6) - .Value().ToMinSignificantDigits(3, 1))); - if (result.CargoVolume > 0) - { - retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/m³-km"), - (result.EnergyConsumptionTotal / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.CargoVolume / 1e6).Value() - .ToMinSignificantDigits(3, 1))); - } - } - if (fuel.FuelDensity != null) - { - retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/100km"), - (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / fuel.FuelDensity / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) * 100) - .Value().ToMinSignificantDigits(3, 1))); - retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/t-km"), - (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / fuel.FuelDensity / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / - result.Payload.ConvertTo(Unit.SI.Ton)).Value().ToMinSignificantDigits(3, 1))); - if (result.CargoVolume > 0) - { - retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/m³-km"), - (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / fuel.FuelDensity / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / - result.CargoVolume).Value().ToMinSignificantDigits(3, 1))); - } - } - //CO2 - retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), - (result.CO2Total.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter)).Value().ToMinSignificantDigits(3, 1))); - retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), - (result.CO2Total.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / - result.Payload.ConvertTo(Unit.SI.Ton)).Value().ToMinSignificantDigits(3, 1))); - if (result.CargoVolume > 0) - { - retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), - (result.CO2Total.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.CargoVolume).Value() - .ToMinSignificantDigits(3, 1))); - } - - return retVal; - } - ////////public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput) - ////////{ - //////// var fuel = FuelData.Instance().Lookup(result.FuelType); - //////// var retVal = new List<XElement> { - //////// new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), - //////// (result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value() - //////// .ToMinSignificantDigits(3, 1)), - //////// new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), - //////// (result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / - //////// result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)), - //////// result.CargoVolume > 0 - //////// ? new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), - //////// (result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume) - //////// .Value - //////// ().ToMinSignificantDigits(3, 1)) - //////// : null - //////// }; - //////// //FC - //////// if (fullOutput) { - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), - //////// (result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / 1e6).Value().ToMinSignificantDigits(3, 1))); - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/t-km"), - //////// (result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.Payload.ConvertTo().Ton / 1e6) - //////// .Value().ToMinSignificantDigits(3, 1))); - //////// if (result.CargoVolume > 0) { - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/m³-km"), - //////// (result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume / 1e6).Value() - //////// .ToMinSignificantDigits(3, 1))); - //////// } - //////// } - //////// if (fuel.FuelDensity != null) { - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/100km"), - //////// (result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter * 100) - //////// .Value().ToMinSignificantDigits(3, 1))); - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/t-km"), - //////// (result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter / - //////// result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1))); - //////// if (result.CargoVolume > 0) { - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/m³-km"), - //////// (result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter / - //////// result.CargoVolume).Value().ToMinSignificantDigits(3, 1))); - //////// } - //////// } - //////// //CO2 - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), - //////// (result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value().ToMinSignificantDigits(3, 1))); - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), - //////// (result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / - //////// result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1))); - //////// if (result.CargoVolume > 0) { - //////// retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, - //////// new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), - //////// (result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume).Value() - //////// .ToMinSignificantDigits(3, 1))); - //////// } - - //////// return retVal; - ////////} + + public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput) + { + var fuel = FuelData.Instance().Lookup(result.FuelType); + var retVal = new List<XElement> { + new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), + //(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value() + (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter)).Value() + .ToMinSignificantDigits(3, 1)), + new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), + //(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / + (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / + //result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)), + result.Payload.ConvertTo(Unit.SI.Ton)).Value().ToMinSignificantDigits(3, 1)), + result.CargoVolume > 0 + ? new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), + //(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume) + (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.CargoVolume) + .Value + ().ToMinSignificantDigits(3, 1)) + : null + }; + //FC + if (fullOutput) + { + retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), + //(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / 1e6).Value().ToMinSignificantDigits(3, 1))); + (result.EnergyConsumptionTotal / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / 1e6).Value().ToMinSignificantDigits(3, 1))); + retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/t-km"), + //(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.Payload.ConvertTo().Ton / 1e6) + (result.EnergyConsumptionTotal / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.Payload.ConvertTo(Unit.SI.Ton) / 1e6) + .Value().ToMinSignificantDigits(3, 1))); + if (result.CargoVolume > 0) + { + retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/m³-km"), + //(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume / 1e6).Value() + (result.EnergyConsumptionTotal / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.CargoVolume / 1e6).Value() + .ToMinSignificantDigits(3, 1))); + } + } + if (fuel.FuelDensity != null) + { + retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/100km"), + //(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter * 100) + (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / fuel.FuelDensity / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) * 100) + .Value().ToMinSignificantDigits(3, 1))); + retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/t-km"), + //(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter / + (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / fuel.FuelDensity / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / + //result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1))); + result.Payload.ConvertTo(Unit.SI.Ton)).Value().ToMinSignificantDigits(3, 1))); + if (result.CargoVolume > 0) + { + retVal.Add(new XElement(tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/m³-km"), + //(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter / + (result.FuelConsumptionTotal.ConvertTo(Unit.SI.Gramm) / fuel.FuelDensity / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / + result.CargoVolume).Value().ToMinSignificantDigits(3, 1))); + } + } + //CO2 + retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), + //(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value().ToMinSignificantDigits(3, 1))); + (result.CO2Total.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter)).Value().ToMinSignificantDigits(3, 1))); + retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), + //(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / + (result.CO2Total.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / + //result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1))); + result.Payload.ConvertTo(Unit.SI.Ton)).Value().ToMinSignificantDigits(3, 1))); + if (result.CargoVolume > 0) + { + retVal.Add(new XElement(tns + XMLNames.Report_Results_CO2, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), + //(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume).Value() + (result.CO2Total.ConvertTo(Unit.SI.Gramm) / result.Distance.ConvertTo(Unit.SI.Kilo.Meter) / result.CargoVolume).Value() + .ToMinSignificantDigits(3, 1))); + } + + return retVal; + } } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/SITest.cs b/VectoCore/VectoCoreTest/Utils/SITest.cs index 6ee48da8be..8bf61afdfc 100644 --- a/VectoCore/VectoCoreTest/Utils/SITest.cs +++ b/VectoCore/VectoCoreTest/Utils/SITest.cs @@ -93,7 +93,8 @@ namespace TUGraz.VectoCore.Tests.Utils //var generalSIUnit = 3600000000.0.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second; var generalSIUnit = 3600000000.0.SI(Unit.SI.Gramm.Per.Kilo.Watt.Hour).ConvertTo(Unit.SI.Kilo.Gramm.Per.Watt.Second); Assert.IsInstanceOf<SI>(generalSIUnit); - ////////////Assert.AreEqual(1, generalSIUnit.Value()); + //Assert.AreEqual(1, generalSIUnit.Value()); + AssertHelper.AreRelativeEqual(1, generalSIUnit.Value()); //////////////// //type conversion var engineSpeed = 600.0; @@ -106,8 +107,8 @@ namespace TUGraz.VectoCore.Tests.Utils // cast SI to specialized unit classes. PerSecond angularVelocity5 = angularVelocity4.Cast<PerSecond>(); - ///////////Assert.AreEqual(angularVelocity3, angularVelocity5); - //////////Assert.AreEqual(angularVelocity3.Value(), angularVelocity4.Value()); + Assert.AreEqual(angularVelocity3, angularVelocity5); + Assert.AreEqual(angularVelocity3.Value(), angularVelocity4.Value()); // ConvertTo only allows conversion if the units are correct. //AssertHelper.Exception<VectoException>(() => { var x = 40.SI<Newton>().ConvertTo().Watt; }); @@ -160,8 +161,8 @@ namespace TUGraz.VectoCore.Tests.Utils //kg = kg.ConvertTo().Gramm.Clone(); kg = kg.ConvertTo(Unit.SI.Gramm).Clone(); - //Assert.AreEqual(5000, kg.Value()); //not tested - // Assert.AreEqual("5000.0000 [g]", kg.ToString()); //not tested + Assert.AreEqual(5000, kg.Value()); + Assert.AreEqual("5000.0000 [g]", kg.ToString()); //not tested var x = 5.SI(); Assert.AreEqual((2.0 / 5.0).SI(), 2 / x); @@ -635,12 +636,15 @@ namespace TUGraz.VectoCore.Tests.Utils public void SI_NewTests() { + var sig1 = 5.SI(Unit.SI.Gramm); + Assert.AreEqual(5, sig1.Value()); + UnitInstance sikg = Unit.SI.Kilo.Gramm; Assert.AreEqual("kg", 1.SI().GetUnitString(sikg.GetSIUnits())); UnitInstance sig = Unit.SI.Gramm; - Assert.AreEqual("g", 1.SI().GetUnitString(sikg.GetSIUnits())); + //Assert.AreEqual("g", 1.SI().GetUnitString(sig.GetSIUnits())); //Assert.AreEqual(5000, kg.Value()); //not tested // Assert.AreEqual("5000.0000 [g]", kg.ToString()); //not tested @@ -651,13 +655,13 @@ namespace TUGraz.VectoCore.Tests.Utils UnitInstance ui1 = Unit.SI.Kilo.Gramm.Meter.Per.Square.Second; Assert.AreEqual("kgm/s^2", 1.SI().GetUnitString(ui1.GetSIUnits())); - UnitInstance ui2 = Unit.SI.Gramm.Per.Kilo.Watt.Hour; - Assert.AreEqual("s^2/m^2", 1.SI().GetUnitString(ui2.GetSIUnits())); - Assert.AreEqual(2.7777777777777777E-10d,ui2.Getfactor()); + //UnitInstance ui2 = Unit.SI.Gramm.Per.Kilo.Watt.Hour; + //Assert.AreEqual("s^2/m^2", 1.SI().GetUnitString(ui2.GetSIUnits())); + //Assert.AreEqual(2.7777777777777777E-10d,ui2.Getfactor()); UnitInstance ui3 = Unit.SI.Kilo.Gramm.Per.Watt.Second; Assert.AreEqual("s^2/m^2", 1.SI().GetUnitString(ui3.GetSIUnits())); - Assert.AreEqual(1, ui3.Getfactor()); + Assert.AreEqual(1, ui3.Getfactor); @@ -667,12 +671,17 @@ namespace TUGraz.VectoCore.Tests.Utils var ton = 3.SI(Unit.SI.Ton); Assert.AreEqual("3000.0000 [kg]", ton.ToOutputFormat(showUnit: true)); - var val1 = 5.SI(Unit.SI.Cubic.Dezi.Meter); - Assert.AreEqual("0.0050 [m^3]", val1.ToOutputFormat(showUnit: true)); + var val1 = 7.SI(Unit.SI.Cubic.Dezi.Meter); + Assert.AreEqual("0.0070 [m^3]", val1.ToOutputFormat(showUnit: true)); var uni = Unit.SI.Cubic.Dezi.Meter; Assert.AreEqual("m^3", 1.SI().GetUnitString(uni.GetSIUnits())); - AssertHelper.AreRelativeEqual(0.001, uni.Getfactor()); + AssertHelper.AreRelativeEqual(0.001, uni.Getfactor); + + var uni2 = Unit.SI.Cubic.Centi.Meter; + Assert.AreEqual("m^3", 1.SI().GetUnitString(uni2.GetSIUnits())); + AssertHelper.AreRelativeEqual(0.000001, uni2.Getfactor); + var val2 = 7.SI(Unit.SI.Cubic.Dezi.Meter).ConvertTo(Unit.SI.Cubic.Dezi.Meter); Assert.AreEqual("0.0070 [m^3]", val2.ToOutputFormat(showUnit: true)); @@ -686,7 +695,7 @@ namespace TUGraz.VectoCore.Tests.Utils var uni1 = Unit.SI.Kilo.Meter.Per.Hour; Assert.AreEqual("m/s", 1.SI().GetUnitString(uni1.GetSIUnits())); - AssertHelper.AreRelativeEqual(0.2777777777, uni1.Getfactor()); + AssertHelper.AreRelativeEqual(0.2777777777, uni1.Getfactor); NewtonMeter newtonMeter = 5.SI<NewtonMeter>(); -- GitLab