コード例 #1
0
        public void Example1()
        {
            StandardMeasure <Mass> initialWgt = new StandardMeasure <Mass>(75.0);
            StandardMeasure <Mass> gainedWgt  = new StandardMeasure <Mass>(2.5, Mass.HectoGram);
            StandardMeasure <Mass> newWgt     = initialWgt + gainedWgt;

            Measure <Mass> newWgtInGram     = newWgt[Mass.Gram];
            Measure <Mass> initialWgtInGram = newWgtInGram - gainedWgt;

            Console.WriteLine("Initial weight: {0}", initialWgtInGram);

            Measure <Length>       height = new Measure <Length>(30.0, Length.CentiMeter);
            StandardMeasure <Area> area   = (StandardMeasure <Area>) 0.02;

            StandardMeasure <Volume> vol; ArithmeticOperations.Times(height, area, out vol);
            var maxVol = new StandardMeasure <Volume>(10.0, Volume.Liter);

            if (vol < maxVol)
            {
                Console.WriteLine("Calculated volume is within limits, actual volume: {0}", vol[Volume.Liter]);
            }

#if NUNIT24
            Assert.Ignore();
#else
            Assert.Pass();
#endif
        }
コード例 #2
0
        public void TimesOperator_MultiplyNumberRhs_AllMeasuresEquallyScaled()
        {
            var expected = new StandardMeasureTriplet <Time, Power, ElectricPotential>(15.0, 0.36, 1.8);;
            var actual   = new StandardMeasure <Number>(3.0) * _instance;

            IMeasureTripletAssert.AreEqual(expected, actual);
        }
コード例 #3
0
        public void Constructor_WithNonReferenceUnit_InitializesMeasureInReferenceUnit()
        {
            var expected = new Measure <Time>(180.0, Time.Second);
            var actual   = new StandardMeasure <Time>(3.0, Time.Minute);

            MeasureAssert.MeasuresAreEqual(expected, actual);
        }
コード例 #4
0
        public void GetAmount_UsingIUnit_ValidConversion()
        {
            var expected = AmountConverter.ToAmountType(500.0);
            var instance = new StandardMeasure <Length>(5.0);
            var actual   = instance.GetAmount(Length.CentiMeter);

            Assert.AreEqual(expected, actual);
        }
コード例 #5
0
 /// <summary>
 /// Multiply two measures to return a resulting measure of a specified quantity
 /// </summary>
 /// <typeparam name="Q">Quantity type of resulting measure</typeparam>
 /// <typeparam name="Q1">Quantity type of first factor</typeparam>
 /// <typeparam name="Q2">Quantity type of second factor</typeparam>
 /// <param name="iFirst">First measure to multiply</param>
 /// <param name="iSecond">Second measure to multiply</param>
 /// <param name="oResult">Measure resulting from multiplication, given in standard unit of quantity</param>
 public static void Times <Q, Q1, Q2>(IMeasure <Q1> iFirst, IMeasure <Q2> iSecond, out StandardMeasure <Q> oResult)
     where Q : struct, IQuantity <Q>
     where Q1 : struct, IQuantity <Q1>
     where Q2 : struct, IQuantity <Q2>
 {
     AssertMatchingQuantities <Q, Q1, Q2>(1, 1);
     oResult = new StandardMeasure <Q>(iFirst.StandardAmount * iSecond.StandardAmount);
 }
コード例 #6
0
 /// <summary>
 /// Divide two measures to return a resulting measure of a specified quantity
 /// </summary>
 /// <typeparam name="Q">Quantity type of resulting measure</typeparam>
 /// <typeparam name="Q1">Quantity type of numerator</typeparam>
 /// <typeparam name="Q2">Quantity type of denominator</typeparam>
 /// <param name="iNumerator">Numerator measure</param>
 /// <param name="iDenominator">Denominator measure</param>
 /// <param name="oResult">Resulting measure quotient, given in standard unit of quantity</param>
 public static void Divide <Q, Q1, Q2>(IMeasure <Q1> iNumerator, IMeasure <Q2> iDenominator, out StandardMeasure <Q> oResult)
     where Q : struct, IQuantity <Q>
     where Q1 : struct, IQuantity <Q1>
     where Q2 : struct, IQuantity <Q2>
 {
     AssertMatchingQuantities <Q, Q1, Q2>(1, -1);
     oResult = new StandardMeasure <Q>(iNumerator.StandardAmount / iDenominator.StandardAmount);
 }
コード例 #7
0
        public void Indexer_SameQuantityNonGenericInterface_YieldsValidMeasureOBject()
        {
            var      expected = new Measure <Volume>(5000.0, Volume.Liter);
            IMeasure meas     = new StandardMeasure <Volume>(5.0);
            var      actual   = meas[Volume.Liter];

            MeasureAssert.MeasuresAreEqual(expected, actual);
        }
コード例 #8
0
        public void DivisionOperator_DivideGenericSameQuantity_ReturnsScalar()
        {
            var expected    = 1.0;
            var numerator   = new StandardMeasure <Area>(500.0, Area.SquareCentiMeter);
            var denominator = new StandardMeasure <Area>(5.0, Area.SquareDeciMeter);
            var actual      = (double)(numerator / denominator);

            Assert.AreEqual(expected, actual, 1.0e-6);
        }
コード例 #9
0
        public void Divide_DivideVolumeAndLength_ReturnsArea()
        {
            var expected    = new StandardMeasure <Area>(4.0);
            var numerator   = new StandardMeasure <Volume>(8.0);
            var denominator = new StandardMeasure <Length>(200.0, Length.CentiMeter);
            StandardMeasure <Area> actual; ArithmeticOperations.Divide(numerator, denominator, out actual);

            MeasureAssert.MeasuresAreEqual(expected, actual);
        }
コード例 #10
0
        public void Times_MultiplyAreaAndLength_ReturnsVolume()
        {
            var expected = new StandardMeasure <Volume>(6.0);
            var lhs      = new StandardMeasure <Area>(2.0);
            var rhs      = new StandardMeasure <Length>(3.0);
            StandardMeasure <Volume> actual; ArithmeticOperations.Times(lhs, rhs, out actual);

            MeasureAssert.MeasuresAreEqual(expected, actual);
        }
コード例 #11
0
        public void AreEqual_NoArgumentHasValue_ReturnsFalse()
        {
            StandardMeasure <AmountConcentration>?lhs = null;
            StandardMeasure <AmountConcentration>?rhs = null;
            StandardMeasure <AmountConcentration> tol = StandardMeasure <AmountConcentration> .Zero;

            var expected = false;
            var actual   = StandardMeasure.AreEqual(lhs, rhs, tol);

            Assert.AreEqual(expected, actual);
        }
コード例 #12
0
        public void AreEqual_BothArgumentsHaveValuesValuesNotWithinTolerance_ReturnsFalse()
        {
            StandardMeasure <AmountConcentration>?lhs = new StandardMeasure <AmountConcentration>(5.0);
            StandardMeasure <AmountConcentration>?rhs = new StandardMeasure <AmountConcentration>(5.001);
            StandardMeasure <AmountConcentration> tol = new StandardMeasure <AmountConcentration>(0.0001);

            var expected = false;
            var actual   = StandardMeasure.AreEqual(lhs, rhs, tol);

            Assert.AreEqual(expected, actual);
        }
コード例 #13
0
        /// <summary>
        /// Raise the specified measure to the specified integer power
        /// </summary>
        /// <typeparam name="Q">Quantity type of the resulting measure</typeparam>
        /// <typeparam name="Q1">Quantity type of the base measure</typeparam>
        /// <param name="iBase">Base measure</param>
        /// <param name="iExponent">Exponent</param>
        /// <param name="oResult">Resulting measure, given in standard unit of the specified quantity</param>
        public static void Power <Q, Q1>(IMeasure <Q1> iBase, int iExponent, out StandardMeasure <Q> oResult)
            where Q : struct, IQuantity <Q>
            where Q1 : struct, IQuantity <Q1>
        {
            AssertMatchingQuantities <Q, Q1>(iExponent);
#if DOUBLE
            oResult = new StandardMeasure <Q>(Math.Pow(iBase.StandardAmount, iExponent));
#else
            oResult = new StandardMeasure <Q>(Math.Pow((double)iBase.StandardAmount, iExponent));
#endif
        }
コード例 #14
0
 public void TimeMeasureAdditionsStandardUnitWithStandardMeasure()
 {
     PerformTiming(() =>
     {
         var val = new Measure <Mass>(0.0);
         for (double i = 0.0; i < no; ++i)
         {
             val += new StandardMeasure <Mass>(i);
         }
         return(val);
     });
 }
コード例 #15
0
 public void TimeStandardMeasureAdditions()
 {
     PerformTiming(() =>
     {
         var val = new StandardMeasure <Length>(0.0);
         for (double i = 0.0; i < no; ++i)
         {
             val += new StandardMeasure <Length>(i);
         }
         return(val);
     });
 }
コード例 #16
0
 public void TimeMeasureAdditionsNonStandardUnitWithStandardMeasure()
 {
     PerformTiming(() =>
     {
         var val = new Measure <Length>(0.0, Length.CentiMeter);
         for (double i = 0.0; i < no; ++i)
         {
             val += new StandardMeasure <Length>(i);
         }
         return(val);
     });
 }
コード例 #17
0
        /// <summary>
        /// Multiply two measures, each raised to a specific power, to return a resulting measure of a specified quantity
        /// </summary>
        /// <typeparam name="Q">Quantity type of resulting measure</typeparam>
        /// <typeparam name="Q1">Quantity type of first factor</typeparam>
        /// <typeparam name="Q2">Quantity type of second factor</typeparam>
        /// <param name="iFirst">First measure to raise and multiply</param>
        /// <param name="iFirstExponent">Exponent to which the first measure should be raised</param>
        /// <param name="iSecond">Second measure to raise and multiply</param>
        /// <param name="iSecondExponent">Exponent to which the second measure should be raised</param>
        /// <param name="oResult">Measure resulting from multiplication, given in standard unit of quantity</param>
        public static void Product <Q, Q1, Q2>(IMeasure <Q1> iFirst, int iFirstExponent, IMeasure <Q2> iSecond,
                                               int iSecondExponent, out StandardMeasure <Q> oResult)
            where Q : struct, IQuantity <Q>
            where Q1 : struct, IQuantity <Q1>
            where Q2 : struct, IQuantity <Q2>
        {
            AssertMatchingQuantities <Q, Q1, Q2>(iFirstExponent, iSecondExponent);
#if DOUBLE
            oResult =
                new StandardMeasure <Q>(Math.Pow(iFirst.StandardAmount, iFirstExponent) *
                                        Math.Pow(iSecond.StandardAmount, iSecondExponent));
#else
            oResult =
                new StandardMeasure <Q>(Math.Pow((double)iFirst.StandardAmount, iFirstExponent) *
                                        Math.Pow((double)iSecond.StandardAmount, iSecondExponent));
#endif
        }
コード例 #18
0
 /// <summary>
 /// Initializes a triplet of standard measures from three standard measure objects
 /// </summary>
 /// <param name="iX">First measure object</param>
 /// <param name="iY">Second measure object</param>
 /// <param name="iZ">Third measure object</param>
 public StandardMeasureTriplet(StandardMeasure <Q1> iX, StandardMeasure <Q2> iY, StandardMeasure <Q3> iZ)
 {
     mX = iX;
     mY = iY;
     mZ = iZ;
 }
コード例 #19
0
 /// <summary>
 /// Initializes a pair of standard measures from two standard measure objects
 /// </summary>
 /// <param name="iX">First measure object</param>
 /// <param name="iY">Second measure object</param>
 public StandardMeasureDoublet(StandardMeasure <Q1> iX, StandardMeasure <Q2> iY)
 {
     mX = iX;
     mY = iY;
 }
コード例 #20
0
 /// <summary>
 /// Initializes a triplet of standard measures from a triplet of standard unit amounts
 /// </summary>
 /// <param name="iAmount1">Amount in standard units of the first measure object</param>
 /// <param name="iAmount2">Amount in standard units of the second measure object</param>
 /// <param name="iAmount3">Amount in standard units of the third measure object</param>
 public StandardMeasureTriplet(double iAmount1, double iAmount2, double iAmount3)
 {
     mX = new StandardMeasure <Q1>(iAmount1);
     mY = new StandardMeasure <Q2>(iAmount2);
     mZ = new StandardMeasure <Q3>(iAmount3);
 }
コード例 #21
0
 /// <summary>
 /// Initializes a triplet of standard measures
 /// </summary>
 /// <param name="iMeasure1">First measure object</param>
 /// <param name="iMeasure2">Second measure object</param>
 /// <param name="iMeasure3">Third measure object</param>
 public StandardMeasureTriplet(IMeasure <Q1> iMeasure1, IMeasure <Q2> iMeasure2, IMeasure <Q3> iMeasure3)
 {
     mX = new StandardMeasure <Q1>(iMeasure1);
     mY = new StandardMeasure <Q2>(iMeasure2);
     mZ = new StandardMeasure <Q3>(iMeasure3);
 }
コード例 #22
0
 /// <summary>
 /// Initializes a triplet of standard measures from a triplet of standard unit amounts
 /// </summary>
 /// <param name="iAmount1">Amount in standard units of the first measure object</param>
 /// <param name="iAmount2">Amount in standard units of the second measure object</param>
 /// <param name="iAmount3">Amount in standard units of the third measure object</param>
 public StandardMeasureTriplet(float iAmount1, float iAmount2, float iAmount3)
 {
     mX = new StandardMeasure <Q1>(iAmount1);
     mY = new StandardMeasure <Q2>(iAmount2);
     mZ = new StandardMeasure <Q3>(iAmount3);
 }
コード例 #23
0
ファイル: StandardMeasure.cs プロジェクト: softwx/csunits
 /// <summary>
 /// Indicates whether the current object is equal to another object of the same type.
 /// </summary>
 /// <param name="other">An object to compare with this object.</param>
 /// <returns>true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.</returns>
 public bool Equals(StandardMeasure <Q> other)
 {
     return(mAmount.Equals(other.mAmount));
 }
コード例 #24
0
ファイル: StandardMeasure.cs プロジェクト: softwx/csunits
 /// <summary>
 /// Compares the current object with another object of the same type.
 /// </summary>
 /// <param name="other">An object to compare with this object.</param>
 /// <returns>
 /// A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings:
 /// Value               Meaning
 /// Less than zero      This object is less than the <paramref name="other"/> parameter.
 /// Zero                This object is equal to <paramref name="other"/>.
 /// Greater than zero   This object is greater than <paramref name="other"/>.
 /// </returns>
 public int CompareTo(StandardMeasure <Q> other)
 {
     return(mAmount.CompareTo(other.mAmount));
 }
コード例 #25
0
 public void Indexer_DifferentQuantitiesNonGenericInterface_Throws()
 {
     IMeasure meas   = new StandardMeasure <SpecificVolume>(1.0);
     var      throws = meas[Volume.CubicMeter];
 }
コード例 #26
0
 /// <summary>
 /// Initializes a pair of standard measures from a pair of standard unit amounts
 /// </summary>
 /// <param name="iAmount1">Amount in standard units of the first measure object</param>
 /// <param name="iAmount2">Amount in standard units of the second measure object</param>
 public StandardMeasureDoublet(decimal iAmount1, decimal iAmount2)
 {
     mX = new StandardMeasure <Q1>(iAmount1);
     mY = new StandardMeasure <Q2>(iAmount2);
 }
コード例 #27
0
ファイル: StandardMeasure.cs プロジェクト: softwx/csunits
 /// <summary>
 /// Indicates whether the current measure is equal to another measure of the same quantity within a given tolerance
 /// </summary>
 /// <param name="other">A measure to compare with this measure</param>
 /// <param name="tol">The tolerance with which the compared measures may differ</param>
 /// <returns>true if this and other are equal within the given tolerance, false otherwise</returns>
 public bool Equals(StandardMeasure <Q> other, StandardMeasure <Q> tol)
 {
     return(Math.Abs(mAmount - other.mAmount) <= tol.mAmount);
 }
コード例 #28
0
 /// <summary>
 /// Initializes a pair of standard measures
 /// </summary>
 /// <param name="iMeasure1">First measure object</param>
 /// <param name="iMeasure2">Second measure object</param>
 public StandardMeasureDoublet(IMeasure <Q1> iMeasure1, IMeasure <Q2> iMeasure2)
 {
     mX = new StandardMeasure <Q1>(iMeasure1);
     mY = new StandardMeasure <Q2>(iMeasure2);
 }
コード例 #29
0
ファイル: StandardMeasure.cs プロジェクト: softwx/csunits
 /// <summary>
 /// Static constructor for defining static class properties
 /// </summary>
 static StandardMeasure()
 {
     Zero    = new StandardMeasure <Q>(Constants.Zero);
     Epsilon = new StandardMeasure <Q>(Constants.MachineEpsilon);
 }
コード例 #30
0
 /// <summary>
 /// Initializes a pair of standard measures from a pair of standard unit amounts
 /// </summary>
 /// <param name="iAmount1">Amount in standard units of the first measure object</param>
 /// <param name="iAmount2">Amount in standard units of the second measure object</param>
 public StandardMeasureDoublet(float iAmount1, float iAmount2)
 {
     mX = new StandardMeasure <Q1>(iAmount1);
     mY = new StandardMeasure <Q2>(iAmount2);
 }