public void GivenCompositeUnitsOfDifferentTypesWhenConvertThenException()
        {
            var sourceUom = new CompositeUnitOfMeasure("[cm3]1[m2]-1");
            var targetUom = new CompositeUnitOfMeasure("bale1[in2]-1");

            Assert.Throws<InvalidOperationException>(() => _unitOfMeasureConverter.Convert(sourceUom, targetUom, 3));
        }
 private double Convert(CompositeUnitOfMeasure sourceUom, CompositeUnitOfMeasure targetUom, double sourceValue)
 {
     if (sourceUom.DomainID == targetUom.DomainID)
         return sourceValue;
     var conversionScalar = RecurseComponents(sourceUom.Components, targetUom.Components, 1.0);
     return sourceValue * conversionScalar;
 }
Example #3
0
        private CompositeUnitOfMeasure CreateCompositeUnitOfMeasure(string domainId)
        {
            var unitOfMeasure = new CompositeUnitOfMeasure(domainId);

            AddCompositeUnitOfMeasure(domainId, unitOfMeasure);
            return(unitOfMeasure);
        }
Example #4
0
 private void AddCompositeUnitOfMeasure(string domainId, CompositeUnitOfMeasure unitOfMeasure)
 {
     Add(domainId, unitOfMeasure);
     foreach (var component in unitOfMeasure.Components)
     {
         Add(component.DomainID, component.Unit);
     }
 }
        public void GivenSquareUnitsWhenParsedShouldReturnSingleComponentWithPowerOfTwo()
        {
            var result = new CompositeUnitOfMeasure("m2");

            Assert.AreEqual(1, result.Components.Count);
            Assert.AreEqual(2, result.Components.First().Power);
            Assert.AreEqual("m", result.Components.First().DomainID);
        }
        public void GivenUnitWithNegativePowerWhenParsedShouldReturnSingleComponentWithPowerOfNegOne()
        {
            var result = new CompositeUnitOfMeasure("sec-1");

            Assert.AreEqual(1, result.Components.Count);
            Assert.AreEqual(-1, result.Components.First().Power);
            Assert.AreEqual("sec", result.Components.First().DomainID);
        }
Example #7
0
        private static UnitOfMeasureComponent BuildCompositeComponent(string domainId)
        {
            var power            = GetPower(domainId);
            var strippedDomainId = StripDomainId(domainId);
            var composite        = new CompositeUnitOfMeasure(strippedDomainId);

            return(new UnitOfMeasureComponent(composite, power));
        }
        public void GivenNestedCompoundUnitsInDifferentSystemsWhenConvertThenValueIsConverted()
        {
            var sourceUom = new CompositeUnitOfMeasure("[cm3]1[m2]-1");
            var targetUom = new CompositeUnitOfMeasure("[ft3]1[yd2]-1");

            var result = _unitOfMeasureConverter.Convert(sourceUom, targetUom, 100);

            Assert.AreEqual(0.00295275601, result, 0.000000001);
        }
 private double Convert(CompositeUnitOfMeasure sourceUom, ScalarUnitOfMeasure targetUom, double sourceValue)
 {
     foreach (var conversionFactor in targetUom.UnitDimension.CompositeEquivalents)
     {
         var compositeSourceValue = (sourceValue * conversionFactor.Scale + conversionFactor.BaseOffset - targetUom.BaseOffset) / targetUom.Scale;
         var compositeTargetUom = new CompositeUnitOfMeasure(conversionFactor.DomainID);
         return Convert(sourceUom, compositeTargetUom, compositeSourceValue);
     }
     throw new InvalidOperationException("Cannot convert between units of different types.");
 }
Example #10
0
        private double Convert(CompositeUnitOfMeasure sourceUom, CompositeUnitOfMeasure targetUom, double sourceValue)
        {
            if (sourceUom.DomainID == targetUom.DomainID)
            {
                return(sourceValue);
            }
            var conversionScalar = RecurseComponents(sourceUom.Components, targetUom.Components, 1.0);

            return(sourceValue * conversionScalar);
        }
Example #11
0
 private double Convert(CompositeUnitOfMeasure sourceUom, ScalarUnitOfMeasure targetUom, double sourceValue)
 {
     foreach (var conversionFactor in targetUom.UnitDimension.CompositeEquivalents)
     {
         var compositeSourceValue = (sourceValue * conversionFactor.Scale + conversionFactor.BaseOffset - targetUom.BaseOffset) / targetUom.Scale;
         var compositeTargetUom   = new CompositeUnitOfMeasure(conversionFactor.DomainID);
         return(Convert(sourceUom, compositeTargetUom, compositeSourceValue));
     }
     throw new InvalidOperationException("Cannot convert between units of different types.");
 }
        public void GivenCubedUnitWithNegativePowerWhenParsedShouldReturnSingleCompositeComponent()
        {
            var result = new CompositeUnitOfMeasure("[dm3]-1");

            Assert.AreEqual(1, result.Components.Count);

            var compositeComponent = (CompositeUnitOfMeasure) result.Components.First().Unit;
            Assert.AreEqual(3, compositeComponent.Components.First().Power);
            Assert.AreEqual("dm", compositeComponent.Components.First().DomainID);
        }
        public void GivenTwoUnitsWithOneSquaredWhenParsedShouldReturnOneSimpleAndOneCompositeComponent()
        {
            var result = new CompositeUnitOfMeasure("bu1[m2]-1");

            Assert.AreEqual(2, result.Components.Count);
            Assert.AreEqual(1, result.Components.First().Power);
            Assert.AreEqual("bu", result.Components.First().DomainID);

            Assert.AreEqual("m2", result.Components.Last().DomainID);
            Assert.AreEqual(-1, result.Components.Last().Power);
        }
        public void GivenTwoUnitsWhenParsedShouldReturnTwoComponents()
        {
            var result = new CompositeUnitOfMeasure("bu1ac-1");

            Assert.AreEqual(2, result.Components.Count);

            Assert.AreEqual(1, result.Components.First().Power);
            Assert.AreEqual(-1, result.Components.Last().Power);

            Assert.AreEqual("bu", result.Components.First().DomainID);
            Assert.AreEqual("ac", result.Components.Last().DomainID);
        }
        public void GivenCompoundUnitsInDifferentSystemWhenConvertThenValueIsConverted()
        {
            var sourceUom = new CompositeUnitOfMeasure("bale1[in2]-1");
            var targetUom = new CompositeUnitOfMeasure("bale1[ft2]-1");

            var result = _unitOfMeasureConverter.Convert(sourceUom, targetUom, 1);
            Assert.AreEqual(144, result, 0.000000001);

            sourceUom = new CompositeUnitOfMeasure("bale1[mm2]-1");
            result = _unitOfMeasureConverter.Convert(sourceUom, targetUom, 1);
            Assert.AreEqual(92903.04, result, 0.000000001);
        }
        public void GivenComplexCompositeUnitWhenParsedShouldProperlyBreakDownDomainId()
        {
            var result = new CompositeUnitOfMeasure("[[am2]1am1]1[am2]-1");

            Assert.AreEqual("[[am2]1am1]1[am2]-1", result.DomainID);
            Assert.AreEqual("[am2]1am1", result.Components.First().DomainID);
            Assert.AreEqual("am2", result.Components.Last().DomainID);

            var numerator = (CompositeUnitOfMeasure) result.Components.First().Unit;
            Assert.AreEqual("am2", numerator.Components.First().DomainID);
            Assert.AreEqual("am", numerator.Components.Last().DomainID);

            var denominator = (CompositeUnitOfMeasure) result.Components.Last().Unit;
            Assert.AreEqual("am", denominator.Components.First().DomainID);
        }
        public void GivenCompositeUnitsOfMeasureWithSameNegativePowersWhenConvertThenConverted()
        {
            var kilometerPerHour = new CompositeUnitOfMeasure("km1hr-1");
            var milesPerHour = new CompositeUnitOfMeasure("mi1hr-1");

            var result = _unitOfMeasureConverter.Convert(kilometerPerHour, milesPerHour, 0.055);
            Assert.AreEqual(0.034175415573053369, result);
        }
        public void GivenDomainIdAndComponentsWhenInjectedThenPropertiesMatch()
        {
            var result = new CompositeUnitOfMeasure("m2", new[] {new UnitOfMeasureComponent(InternalUnitSystemManager.Instance.UnitOfMeasures["m"], 2),});

            Assert.AreEqual(1, result.Components.Count);
            Assert.AreEqual("m", result.Components.First().DomainID);
        }
        public void GivenUnitWithMultipleCompoundComponentsThenLabelShouldPrettyPrint()
        {
            var result = new CompositeUnitOfMeasure("[[cm2]1am1]1[Em2]-1").Label;

            Assert.AreEqual("cm^2 am/Em^2", result);
        }
        public void GivenUnitWithMultipleComponentsOfFirstPowerShouldPrettyPrint()
        {
            var result = new CompositeUnitOfMeasure("ac1ft1").Label;

            Assert.AreEqual("ac ft", result);
        }
        public void GivenUnitWithInversePowerThenLabelShouldPrettyPrint()
        {
            var result = new CompositeUnitOfMeasure("ag1[m2]-1").Label;

            Assert.AreEqual("ag/m^2", result);
        }
        public void GivenCompositeUnitsOfMeasureWithZeroValuesWhenConvertThenZero()
        {
            var kilometersPerHour = new CompositeUnitOfMeasure("km1hr-1");
            var milesPerHour = new CompositeUnitOfMeasure("mi1hr-1");

            var result = _unitOfMeasureConverter.Convert(kilometersPerHour, milesPerHour, 0);
            Assert.AreEqual(0, result);
        }
        public void GivenScalarAndCompositeWhenConvertShouldUseCompositeConversionFactor()
        {
            var sourceUom = InternalUnitSystemManager.Instance.UnitOfMeasures["ac"];
            var targetUom = new CompositeUnitOfMeasure("m2");

            var result = _unitOfMeasureConverter.Convert(sourceUom, targetUom, 1);

            Assert.AreEqual(4046.8564223999997, result, Epsilon);
        }
        public void GivenComplexCompositeUnitWithComplexDenominatorShouldProperlyBreakDownDomainId()
        {
            var result = new CompositeUnitOfMeasure("bale1[[ft2]1yd1]-1");

            Assert.AreEqual("bale", result.Components.First().DomainID);

            Assert.AreEqual("[ft2]1yd1", result.Components.Last().DomainID);

            var denominator = (CompositeUnitOfMeasure) result.Components.Last().Unit;
            Assert.AreEqual("ft2", denominator.Components.First().DomainID);
            Assert.AreEqual("yd", denominator.Components.Last().DomainID);
        }
 private static UnitOfMeasureComponent BuildCompositeComponent(string domainId)
 {
     var power = GetPower(domainId);
     var strippedDomainId = StripDomainId(domainId);
     var composite = new CompositeUnitOfMeasure(strippedDomainId);
     return new UnitOfMeasureComponent(composite, power);
 }
        public void GivenSquaredCompositeUnitThenLabelShouldPrettyPrint()
        {
            var result = new CompositeUnitOfMeasure("m2").Label;

            Assert.AreEqual("m^2", result);
        }
        public void GivenCompositeUnitWhenConvertToScalarShouldUseCompositeConversionFactor()
        {
            var sourceUom = new CompositeUnitOfMeasure("m2");
            var targetUom = InternalUnitSystemManager.Instance.UnitOfMeasures["ac"];

            var result = _unitOfMeasureConverter.Convert(sourceUom, targetUom, 500000);

            Assert.AreEqual(123.553, result, Epsilon);
        }