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) { } }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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); }