예제 #1
0
        public void TestBridgeUnits2()
        {
            UnitOfMeasure bridge1 = sys.CreateScalarUOM(UnitType.UNCLASSIFIED, "Bridge1", "B1", "description");
            UnitOfMeasure bridge2 = sys.CreateScalarUOM(UnitType.UNCLASSIFIED, "Bridge2", "B2", "description");

            bridge1.SetBridgeConversion(1, bridge2, 0);
            Assert.IsTrue(bridge1.BridgeScalingFactor.Equals(1));
            Assert.IsTrue(bridge1.BridgeAbscissaUnit.Equals(bridge2));
            Assert.IsTrue(bridge1.BridgeOffset.Equals(0));

            try
            {
                bridge1.SetConversion(10, bridge1, 0);
                Assert.Fail();
            }
            catch (Exception)
            {
            }

            try
            {
                bridge1.SetConversion(1, bridge1, 10);
                Assert.Fail();
            }
            catch (Exception)
            {
            }
        }
예제 #2
0
        public void TestCurrencyConversion()
        {
            UnitOfMeasure usd_uom  = sys.CreateScalarUOM(UnitType.CURRENCY, "US-Dollar", "USD", "US 'paper' dollar");
            UnitOfMeasure usdt_uom = sys.CreateScalarUOM(UnitType.CURRENCY, "Tether", "USDT", "USD 'stable' coin");

            // Initial conversion rate
            usdt_uom.SetConversion(0.9, usd_uom);

            Quantity portfolio     = new Quantity(200, usdt_uom);
            Quantity portfolio_usd = portfolio.Convert(usd_uom);

            Assert.IsTrue(IsCloseTo(portfolio_usd.Amount, 180.0, DELTA6));

            // change conversion rate
            usdt_uom.SetConversion(1.0, usd_uom);
            portfolio_usd = portfolio.Convert(usd_uom);
            Assert.IsTrue(IsCloseTo(portfolio_usd.Amount, 200.0, DELTA6));
        }
예제 #3
0
        public void TestBridgeUnits3()
        {
            UnitOfMeasure uomGrams       = sys.GetUOM(Unit.GRAM);
            UnitOfMeasure uomTonnes      = sys.GetUOM(Unit.TONNE);
            UnitOfMeasure uomShortTons   = sys.GetUOM(Unit.US_TON);
            UnitOfMeasure uomTroyOz      = sys.GetUOM(Unit.TROY_OUNCE);
            UnitOfMeasure uomPennyweight = sys.CreateScalarUOM(UnitType.MASS, "pennyweight", "dwt", "Pennyweight");

            uomPennyweight.SetConversion(0.05, uomTroyOz);
            UnitOfMeasure uomGramsPerTonne          = sys.CreateQuotientUOM(uomGrams, uomTonnes);
            UnitOfMeasure uomPennyweightPerShortTon = sys.CreateQuotientUOM(uomPennyweight, uomShortTons);
            Quantity      grade     = new Quantity(0.95, uomGramsPerTonne);
            Quantity      converted = grade.Convert(uomPennyweightPerShortTon);

            Assert.IsTrue(IsCloseTo(converted.Amount, 0.554167, DELTA6));
        }
예제 #4
0
        public void TestStocks()
        {
            // John has 100 shares of Alphabet Class A stock. How much is his
            // portfolio worth in euros when the last trade was $838.96 and a US
            // dollar is worth 0.94 euros?
            UnitOfMeasure euro = sys.GetUOM(Unit.EURO);
            UnitOfMeasure usd  = sys.GetUOM(Unit.US_DOLLAR);

            usd.SetConversion("0.94", euro);

            UnitOfMeasure googl = sys.CreateScalarUOM(UnitType.CURRENCY, "Alphabet A", "GOOGL",
                                                      "Alphabet (formerly Google) Class A shares");

            googl.SetConversion("838.96", usd);
            Quantity portfolio = new Quantity(100, googl);
            Quantity value     = portfolio.Convert(euro);

            Assert.IsTrue(IsCloseTo(value.Amount, 78862.24, DELTA6));
        }
예제 #5
0
        public void TestGenericQuantity()
        {
            UnitOfMeasure a = sys.CreateScalarUOM(UnitType.UNCLASSIFIED, "a", "aUOM", "A");

            UnitOfMeasure b = sys.CreateScalarUOM(UnitType.UNCLASSIFIED, "b", "b", "B");

            b.SetConversion(10, a);

            double four = 4;

            double bd = Quantity.CreateAmount("4");

            Assert.IsTrue(bd.Equals(four));

            bd = Quantity.CreateAmount(4);
            Assert.IsTrue(bd.Equals(four));

            bd = Quantity.CreateAmount((decimal)4.0);
            Assert.IsTrue(bd.Equals(four));

            bd = Quantity.CreateAmount((decimal)4.0f);
            Assert.IsTrue(bd.Equals(four));

            bd = Quantity.CreateAmount(4L);
            Assert.IsTrue(bd.Equals(four));

            bd = Quantity.CreateAmount((short)4);
            Assert.IsTrue(bd.Equals(four));

            // Add
            Quantity q1 = new Quantity(four, a);

            Assert.IsFalse(q1.Equals(null));

            Quantity q2 = new Quantity(four, b);
            Quantity q3 = q1.Add(q2);

            Assert.IsTrue(IsCloseTo(q3.UOM.ScalingFactor, 1, DELTA6));
            Assert.IsTrue(q3.UOM.AbscissaUnit.Equals(a));
            Assert.IsTrue(IsCloseTo(q3.UOM.Offset, 0, DELTA6));
            Assert.IsTrue(IsCloseTo(q3.Amount, 44, DELTA6));

            // Subtract
            q3 = q1.Subtract(q2);
            Assert.IsTrue(IsCloseTo(q3.UOM.ScalingFactor, 1, DELTA6));
            Assert.IsTrue(q3.UOM.AbscissaUnit.Equals(a));
            Assert.IsTrue(IsCloseTo(q3.UOM.Offset, 0, DELTA6));
            Assert.IsTrue(IsCloseTo(q3.Amount, -36, DELTA6));

            // Multiply
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 16, DELTA6));
            Assert.IsTrue(IsCloseTo(q3.UOM.ScalingFactor, 1, DELTA6));
            Assert.IsTrue(IsCloseTo(q3.UOM.Offset, 0, DELTA6));

            UnitOfMeasure a2 = sys.CreatePowerUOM(UnitType.UNCLASSIFIED, "a*2", "a*2", "A squared", a, 2);
            Quantity      q4 = q3.Convert(a2);

            Assert.IsTrue(IsCloseTo(q4.Amount, 160, DELTA6));
            Assert.IsTrue(q4.UOM.Equals(a2));

            q4 = q3.Divide(q2);
            Assert.IsTrue(q4.Equals(q1));
            Assert.IsTrue(IsCloseTo(q4.Amount, 4, DELTA6));

            // Divide
            q3 = q1.Divide(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 1, DELTA6));
            Assert.IsTrue(IsCloseTo(q3.UOM.ScalingFactor, 0.1, DELTA6));

            q4 = q3.Multiply(q2);
            Assert.IsTrue(q4.Equals(q1));
        }
예제 #6
0
        public void TestPackaging()
        {
            double one   = 1;
            double four  = 4;
            double six   = 6;
            double ten   = 10;
            double forty = 40;

            UnitOfMeasure one16ozCan = sys.CreateScalarUOM(UnitType.VOLUME, "16 oz can", "16ozCan", "16 oz can");

            one16ozCan.SetConversion(16, sys.GetUOM(Unit.US_FLUID_OUNCE));

            Quantity q400 = new Quantity(400, one16ozCan);
            Quantity q50  = q400.Convert(sys.GetUOM(Unit.US_GALLON));

            Assert.IsTrue(IsCloseTo(q50.Amount, 50, DELTA6));

            // 1 12 oz can = 12 fl.oz.
            UnitOfMeasure one12ozCan = sys.CreateScalarUOM(UnitType.VOLUME, "12 oz can", "12ozCan", "12 oz can");

            one12ozCan.SetConversion(12, sys.GetUOM(Unit.US_FLUID_OUNCE));

            Quantity q48 = new Quantity(48, one12ozCan);
            Quantity q36 = q48.Convert(one16ozCan);

            Assert.IsTrue(IsCloseTo(q36.Amount, 36, DELTA6));

            // 6 12 oz cans = 1 6-pack of 12 oz cans
            UnitOfMeasure sixPackCan = sys.CreateScalarUOM(UnitType.VOLUME, "6-pack", "6PCan", "6-pack of 12 oz cans");

            sixPackCan.SetConversion(six, one12ozCan);

            UnitOfMeasure fourPackCase = sys.CreateScalarUOM(UnitType.VOLUME, "4 pack case", "4PCase", "case of 4 6-packs");

            fourPackCase.SetConversion(four, sixPackCan);

            double bd = fourPackCase.GetConversionFactor(one12ozCan);

            Assert.IsTrue(IsCloseTo(bd, 24, DELTA6));

            bd = one12ozCan.GetConversionFactor(fourPackCase);

            bd = fourPackCase.GetConversionFactor(sixPackCan);
            bd = sixPackCan.GetConversionFactor(fourPackCase);

            bd = sixPackCan.GetConversionFactor(one12ozCan);
            bd = one12ozCan.GetConversionFactor(sixPackCan);

            Quantity tenCases = new Quantity(ten, fourPackCase);

            Quantity q1 = tenCases.Convert(one12ozCan);

            Assert.IsTrue(IsCloseTo(q1.Amount, 240, DELTA6));

            Quantity q2 = q1.Convert(fourPackCase);

            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            Quantity fortyPacks = new Quantity(forty, sixPackCan);

            q2 = fortyPacks.Convert(one12ozCan);
            Assert.IsTrue(IsCloseTo(q2.Amount, 240, DELTA6));

            Quantity oneCan = new Quantity(one, one12ozCan);

            q2 = oneCan.Convert(sixPackCan);
            Assert.IsTrue(IsCloseTo(q2.Amount, 0.1666666666666667, DELTA6));

            // A beer bottling line is rated at 2000 12 ounce cans/hour (US) at the
            // filler. The case packer packs four 6-packs of cans into a case.
            // Assuming no losses, what should be the rating of the case packer in
            // cases per hour? And, what is the draw-down rate on the holding tank
            // in gallons/minute?
            UnitOfMeasure canph  = sys.CreateQuotientUOM(one12ozCan, sys.GetHour());
            UnitOfMeasure caseph = sys.CreateQuotientUOM(fourPackCase, sys.GetHour());
            UnitOfMeasure gpm    = sys.CreateQuotientUOM(sys.GetUOM(Unit.US_GALLON), sys.GetMinute());
            Quantity      filler = new Quantity(2000, canph);

            // draw-down
            Quantity draw = filler.Convert(gpm);

            Assert.IsTrue(IsCloseTo(draw.Amount, 3.125, DELTA6));

            // case production
            Quantity packer = filler.Convert(caseph);

            Assert.IsTrue(IsCloseTo(packer.Amount, 83.333333, DELTA6));
        }
예제 #7
0
        public void TestSIQuantity()
        {
            double ten = 10;

            UnitOfMeasure litre    = sys.GetUOM(Unit.LITRE);
            UnitOfMeasure m3       = sys.GetUOM(Unit.CUBIC_METRE);
            UnitOfMeasure m2       = sys.GetUOM(Unit.SQUARE_METRE);
            UnitOfMeasure m        = sys.GetUOM(Unit.METRE);
            UnitOfMeasure cm       = sys.GetUOM(Prefix.CENTI, m);
            UnitOfMeasure mps      = sys.GetUOM(Unit.METRE_PER_SEC);
            UnitOfMeasure secPerM  = sys.CreateQuotientUOM(UnitType.UNCLASSIFIED, null, "s/m", null, sys.GetSecond(), m);
            UnitOfMeasure oneOverM = sys.GetUOM(Unit.DIOPTER);
            UnitOfMeasure fperm    = sys.GetUOM(Unit.FARAD_PER_METRE);

            UnitOfMeasure oneOverCm = sys.CreateScalarUOM(UnitType.UNCLASSIFIED, null, "1/cm", null);

            oneOverCm.SetConversion(100, oneOverM);

            Quantity q1 = new Quantity(ten, litre);
            Quantity q2 = q1.Convert(m3);

            Assert.IsTrue(IsCloseTo(q2.Amount, 0.01, DELTA6));
            Assert.IsTrue(q2.UOM.Equals(m3));

            q2 = q1.Convert(litre);
            Assert.IsTrue(IsCloseTo(q2.Amount, ten, DELTA6));
            Assert.IsTrue(q2.UOM.Equals(litre));

            // Add
            q1 = new Quantity(2, m);
            q2 = new Quantity(2, cm);
            Quantity q3 = q1.Add(q2);

            Assert.IsTrue(IsCloseTo(q3.UOM.ScalingFactor, 1, DELTA6));
            Assert.IsTrue(q3.UOM.AbscissaUnit.Equals(m));
            Assert.IsTrue(IsCloseTo(q3.UOM.Offset, 0, DELTA6));
            Assert.IsTrue(IsCloseTo(q3.Amount, 2.02, DELTA6));

            Quantity q4 = q3.Convert(cm);

            Assert.IsTrue(IsCloseTo(q4.Amount, 202, DELTA6));
            Assert.IsTrue(q4.UOM.Equals(cm));

            // Subtract
            q3 = q3.Subtract(q1);
            Assert.IsTrue(IsCloseTo(q3.UOM.ScalingFactor, 1, DELTA6));
            Assert.IsTrue(q3.UOM.AbscissaUnit.Equals(m));
            Assert.IsTrue(IsCloseTo(q3.Amount, 0.02, DELTA6));

            q4 = q3.Convert(cm);
            Assert.IsTrue(IsCloseTo(q4.Amount, 2, DELTA6));
            Assert.IsTrue(q4.UOM.Equals(cm));

            // Multiply
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 4, DELTA6));
            UnitOfMeasure u = q3.UOM;

            Assert.IsTrue(IsCloseTo(u.ScalingFactor, 0.01, DELTA6));
            Assert.IsTrue(u.GetBaseSymbol().Equals(m2.GetBaseSymbol()));

            q4 = q3.Divide(q3);
            Assert.IsTrue(IsCloseTo(q4.Amount, 1, DELTA6));
            Assert.IsTrue(q4.UOM.Equals(sys.GetOne()));

            q4 = q3.Divide(q1);
            Assert.IsTrue(q4.Equals(q2));

            q4 = q3.Convert(m2);
            Assert.IsTrue(IsCloseTo(q4.Amount, 0.04, DELTA6));
            Assert.IsTrue(q4.UOM.Equals(m2));

            // Divide
            q3 = q3.Divide(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 2.0, DELTA6));
            Assert.IsTrue(q3.UOM.Equals(m));
            Assert.IsTrue(q3.Equals(q1));

            q3 = q3.Convert(m);
            Assert.IsTrue(IsCloseTo(q3.Amount, 2.0, DELTA6));

            q1 = new Quantity(0, litre);

            try
            {
                q2 = q1.Divide(q1);
                Assert.Fail("Divide by zero)");
            }
            catch (Exception)
            {
            }

            q1 = q3.Convert(cm).Divide(ten);
            Assert.IsTrue(IsCloseTo(q1.Amount, 20, DELTA6));

            // Invert
            q1 = new Quantity(10, mps);
            q2 = q1.Invert();
            Assert.IsTrue(IsCloseTo(q2.Amount, 0.1, DELTA6));
            Assert.IsTrue(q2.UOM.Equals(secPerM));

            q2 = q2.Invert();
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));
            Assert.IsTrue(q2.UOM.Equals(mps));

            q1 = new Quantity(10, cm);
            q2 = q1.Invert();
            Assert.IsTrue(IsCloseTo(q2.Amount, 0.1, DELTA6));
            u = q2.UOM;
            Assert.IsTrue(u.Equals(oneOverCm));

            q2 = q2.Convert(m.Invert());
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));
            Assert.IsTrue(q2.UOM.Equals(oneOverM));

            Assert.IsTrue(q2.ToString() != null);

            // Newton-metres Divided by metres
            q1 = new Quantity(10, sys.GetUOM(Unit.NEWTON_METRE));
            q2 = new Quantity(1, sys.GetUOM(Unit.METRE));
            q3 = q1.Divide(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 10, DELTA6));
            Assert.IsTrue(q3.UOM.Equals(sys.GetUOM(Unit.NEWTON)));

            // length multiplied by force
            q1 = new Quantity(10, sys.GetUOM(Unit.NEWTON));
            q2 = new Quantity(1, sys.GetUOM(Unit.METRE));
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 10, DELTA6));
            UnitOfMeasure nm1 = q3.UOM;
            UnitOfMeasure nm2 = sys.GetUOM(Unit.NEWTON_METRE);

            Assert.IsTrue(nm1.GetBaseSymbol().Equals(nm2.GetBaseSymbol()));
            q4 = q3.Convert(sys.GetUOM(Unit.JOULE));
            Assert.IsTrue(q4.UOM.Equals(sys.GetUOM(Unit.JOULE)));

            // farads
            q1 = new Quantity(10, fperm);
            q2 = new Quantity(1, m);
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 10, DELTA6));
            Assert.IsTrue(q3.UOM.Equals(sys.GetUOM(Unit.FARAD)));

            // amps
            q1 = new Quantity(10, sys.GetUOM(Unit.AMPERE_PER_METRE));
            q2 = new Quantity(1, m);
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 10, DELTA6));
            Assert.IsTrue(q3.UOM.Equals(sys.GetUOM(Unit.AMPERE)));

            // Boltzmann and Avogadro
            Quantity boltzmann = sys.GetQuantity(Constant.BOLTZMANN_CONSTANT);
            Quantity avogadro  = sys.GetQuantity(Constant.AVAGADRO_CONSTANT);
            Quantity gas       = sys.GetQuantity(Constant.GAS_CONSTANT);
            Quantity qR        = boltzmann.Multiply(avogadro);

            Assert.IsTrue(IsCloseTo(qR.UOM.ScalingFactor, gas.UOM.ScalingFactor, DELTA6));

            // Sieverts
            q1 = new Quantity(20, sys.GetUOM(Prefix.MILLI, Unit.SIEVERTS_PER_HOUR));
            q2 = new Quantity(24, sys.GetHour());
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 480, DELTA6));
        }
예제 #8
0
        public void TestBridgeUnits1()
        {
            sys.ClearCache();

            // SI
            UnitOfMeasure kg      = sys.GetUOM(Unit.KILOGRAM);
            UnitOfMeasure m       = sys.GetUOM(Unit.METRE);
            UnitOfMeasure km      = sys.GetUOM(Prefix.KILO, m);
            UnitOfMeasure litre   = sys.GetUOM(Unit.LITRE);
            UnitOfMeasure N       = sys.GetUOM(Unit.NEWTON);
            UnitOfMeasure m3      = sys.GetUOM(Unit.CUBIC_METRE);
            UnitOfMeasure m2      = sys.GetUOM(Unit.SQUARE_METRE);
            UnitOfMeasure Nm      = sys.GetUOM(Unit.NEWTON_METRE);
            UnitOfMeasure kPa     = sys.GetUOM(Prefix.KILO, sys.GetUOM(Unit.PASCAL));
            UnitOfMeasure celsius = sys.GetUOM(Unit.CELSIUS);

            // US
            UnitOfMeasure lbm        = sys.GetUOM(Unit.POUND_MASS);
            UnitOfMeasure lbf        = sys.GetUOM(Unit.POUND_FORCE);
            UnitOfMeasure mi         = sys.GetUOM(Unit.MILE);
            UnitOfMeasure ft         = sys.GetUOM(Unit.FOOT);
            UnitOfMeasure gal        = sys.GetUOM(Unit.US_GALLON);
            UnitOfMeasure ft2        = sys.GetUOM(Unit.SQUARE_FOOT);
            UnitOfMeasure ft3        = sys.GetUOM(Unit.CUBIC_FOOT);
            UnitOfMeasure acre       = sys.GetUOM(Unit.ACRE);
            UnitOfMeasure ftlbf      = sys.GetUOM(Unit.FOOT_POUND_FORCE);
            UnitOfMeasure psi        = sys.GetUOM(Unit.PSI);
            UnitOfMeasure fahrenheit = sys.GetUOM(Unit.FAHRENHEIT);

            Assert.IsTrue(ft.BridgeOffset == double.MinValue);

            Quantity q1 = new Quantity(10, ft);
            Quantity q2 = q1.Convert(m);

            Assert.IsTrue(IsCloseTo(q2.Amount, 3.048, DELTA6));
            Quantity q3 = q2.Convert(q1.UOM);

            Assert.IsTrue(IsCloseTo(q3.Amount, 10, DELTA6));

            q1 = new Quantity(10, kg);
            q2 = q1.Convert(lbm);
            Assert.IsTrue(IsCloseTo(q2.Amount, 22.0462, DELTA4));
            q3 = q2.Convert(q1.UOM);
            Assert.IsTrue(IsCloseTo(q3.Amount, 10, DELTA6));

            q1 = new Quantity(212, fahrenheit);
            q2 = q1.Convert(celsius);
            Assert.IsTrue(IsCloseTo(q2.Amount, 100, DELTA6));
            q3 = q2.Convert(q1.UOM);
            Assert.IsTrue(IsCloseTo(q3.Amount, 212, DELTA6));

            UnitOfMeasure mm = sys.CreateProductUOM(UnitType.AREA, "name", "mxm", "", m, m);

            q1 = new Quantity(10, mm);
            q2 = q1.Convert(ft2);
            Assert.IsTrue(IsCloseTo(q2.Amount, 107.639104167, DELTA6));
            q2 = q2.Convert(m2);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            UnitOfMeasure mhr = sys.GetUOM("m/hr");

            if (mhr == null)
            {
                mhr = sys.CreateScalarUOM(UnitType.VELOCITY, "m/hr", "m/hr", "");
                mhr.SetConversion((double)1 / (double)3600, sys.GetUOM(Unit.METRE_PER_SEC));
            }

            q1 = new Quantity(10, psi);
            q2 = q1.Convert(kPa);
            Assert.IsTrue(IsCloseTo(q2.Amount, 68.94757280343134, DELTA6));
            q2 = q2.Convert(psi);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, mhr);
            q2 = q1.Convert(sys.GetUOM(Unit.FEET_PER_SEC));
            Assert.IsTrue(IsCloseTo(q2.Amount, 0.009113444152814231, DELTA6));
            q2 = q2.Convert(mhr);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, gal);
            q2 = q1.Convert(litre);
            Assert.IsTrue(IsCloseTo(q2.Amount, 37.8541178, DELTA6));
            q2 = q2.Convert(gal);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, m3);
            q2 = q1.Convert(ft3);
            Assert.IsTrue(IsCloseTo(q2.Amount, 353.1466672398284, DELTA6));
            q2 = q2.Convert(m3);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, N);
            q2 = q1.Convert(lbf);
            Assert.IsTrue(IsCloseTo(q2.Amount, 2.24809, DELTA6));
            q2 = q2.Convert(N);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, ftlbf);
            q2 = q1.Convert(Nm);
            Assert.IsTrue(IsCloseTo(q2.Amount, 13.558179483314004, DELTA6));
            q2 = q2.Convert(ftlbf);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, lbm);
            q2 = q1.Convert(kg);
            Assert.IsTrue(IsCloseTo(q2.Amount, 4.5359237, DELTA6));
            q2 = q2.Convert(lbm);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(10, km);
            q2 = q1.Convert(mi);
            Assert.IsTrue(IsCloseTo(q2.Amount, 6.21371192237, DELTA6));
            q2 = q2.Convert(km);
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            // length
            q1 = new Quantity(10, sys.GetUOM(Unit.METRE));
            q2 = q1.Convert(sys.GetUOM(Unit.INCH));
            Assert.IsTrue(IsCloseTo(q2.Amount, 393.7007874015748, DELTA6));
            q2 = q2.Convert(sys.GetUOM(Unit.METRE));
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q2 = q1.Convert(sys.GetUOM(Unit.FOOT));
            Assert.IsTrue(IsCloseTo(q2.Amount, 32.80839895013123, DELTA6));
            q2 = q2.Convert(sys.GetUOM(Unit.METRE));
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            // area
            q1 = new Quantity(10, sys.GetUOM(Unit.SQUARE_METRE));
            q2 = q1.Convert(sys.GetUOM(Unit.SQUARE_INCH));
            Assert.IsTrue(IsCloseTo(q2.Amount, 15500.031000062, DELTA6));
            q2 = q2.Convert(sys.GetUOM(Unit.SQUARE_METRE));
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q2 = q1.Convert(sys.GetUOM(Unit.SQUARE_FOOT));
            Assert.IsTrue(IsCloseTo(q2.Amount, 107.6391041670972, DELTA6));
            q2 = q2.Convert(sys.GetUOM(Unit.SQUARE_METRE));
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            // volume
            q1 = new Quantity(10, sys.GetUOM(Unit.LITRE));
            q2 = q1.Convert(sys.GetUOM(Unit.US_GALLON));
            Assert.IsTrue(IsCloseTo(q2.Amount, 2.641720523581484, DELTA6));
            q2 = q2.Convert(sys.GetUOM(Unit.LITRE));
            Assert.IsTrue(IsCloseTo(q2.Amount, 10, DELTA6));

            q1 = new Quantity(4.0468564224, m);
            q2 = new Quantity(1000, m);
            q3 = q1.Multiply(q2);
            Assert.IsTrue(IsCloseTo(q3.Amount, 4046.8564224, DELTA6));

            UnitOfMeasure uom       = q3.UOM;
            UnitOfMeasure powerBase = uom.GetPowerBase();
            double        sf        = uom.ScalingFactor;

            Assert.IsTrue(uom.AbscissaUnit.Equals(m2));
            Assert.IsTrue(powerBase.Equals(m));
            Assert.IsTrue(IsCloseTo(sf, 1, DELTA6));

            Quantity q4 = q3.Convert(acre);

            Assert.IsTrue(IsCloseTo(q4.Amount, 1, DELTA6));
            Assert.IsTrue(q4.UOM.Equals(acre));

            UnitOfMeasure usSec = sys.GetSecond();

            UnitOfMeasure v1 = sys.GetUOM("m/hr");

            UnitOfMeasure v2 = sys.GetUOM(Unit.METRE_PER_SEC);
            UnitOfMeasure v3 = sys.CreateQuotientUOM(UnitType.VELOCITY, "", "ft/usec", "", ft, usSec);

            UnitOfMeasure d1 = sys.GetUOM(Unit.KILOGRAM_PER_CU_METRE);
            UnitOfMeasure d2 = sys.CreateQuotientUOM(UnitType.DENSITY, "density", "lbm/gal", "", lbm, gal);

            q1 = new Quantity(10, v1);
            q2 = q1.Convert(v3);

            q1 = new Quantity(10, v1);
            q2 = q1.Convert(v2);

            q1 = new Quantity(10, d1);
            q2 = q1.Convert(d2);
        }