public void poetic_units() { var metre = MeasureUnit.Metre; var decimetre = MeasureStandardPrefix.Deci[metre]; var centimetre = MeasureStandardPrefix.Centi[metre]; var kilometre = MeasureStandardPrefix.Kilo[metre]; var hundredKilometre = MeasureStandardPrefix.Hecto[kilometre]; var litre = decimetre ^ 3; var inch = MeasureUnit.DefineAlias("in", "Inch", 2.54, centimetre); var gallon = MeasureUnit.DefineAlias("gal", "US Gallon", 231, inch ^ 3); var mile = MeasureUnit.DefineAlias("mile", "Mile", 1.609344, kilometre); var milesPerGalon = mile / gallon; var litrePerHundredKilometer = litre / hundredKilometre; milesPerGalon.Normalization.Abbreviation.Should().Be("m-2"); litrePerHundredKilometer.Normalization.Abbreviation.Should().Be("m2"); var oneMilesPerGallon = 1.WithUnit(milesPerGalon); oneMilesPerGallon.CanConvertTo(litrePerHundredKilometer).Should().BeTrue(); var result = oneMilesPerGallon.ConvertTo(litrePerHundredKilometer); result.Value.Should().BeApproximately(235.215, 1e-3); }
public void dimensionless_quantity_like_percent_or_permille_works() { var percent = MeasureUnit.DefineAlias("%", "Percent", new ExpFactor(0, -2), MeasureUnit.None); var permille = MeasureUnit.DefineAlias("‰", "Permille", new ExpFactor(0, -3), MeasureUnit.None); var pertenthousand = MeasureUnit.DefineAlias("‱", "Pertenthousand", new ExpFactor(0, -4), MeasureUnit.None); var pc10 = 10.WithUnit(percent); pc10.ToString().Should().Be("10 %"); var pm20 = 20.WithUnit(permille); pm20.ToString().Should().Be("20 ‰"); var pt30 = 30.WithUnit(pertenthousand); pt30.ToString().Should().Be("30 ‱"); (pc10 * pm20 * pt30).ToString().Should().Be("6000 10^-9"); (pc10 + pm20 + pt30).ToString(CultureInfo.InvariantCulture).Should().Be("12.3 %"); (pt30 + pc10 + pm20).ToString(CultureInfo.InvariantCulture).Should().Be("1230 ‱"); var km = MeasureStandardPrefix.Kilo[MeasureUnit.Metre]; var km100 = 100.WithUnit(MeasureStandardPrefix.Kilo[MeasureUnit.Metre]); var pc10OfKm100 = pc10 * km100; pc10OfKm100.ToString().Should().Be("1000 10^-2.km"); pc10OfKm100.ConvertTo(km).ToString().Should().Be("10 km"); }
public void dimensionless_units() { // See https://en.wikipedia.org/wiki/Per_mille var percent = MeasureUnit.DefineAlias("%", "Percent", new ExpFactor(0, -2), MeasureUnit.None); var permille = MeasureUnit.DefineAlias("‰", "Permille", new ExpFactor(0, -3), MeasureUnit.None); var pertenthousand = MeasureUnit.DefineAlias("‱", "Pertenthousand", new ExpFactor(0, -4), MeasureUnit.None); percent.ToString().Should().Be("%"); percent.Normalization.Should().BeSameAs(MeasureUnit.None); percent.NormalizationFactor.Should().Be(new FullFactor(new ExpFactor(0, -2))); var perht = percent * permille; perht.ToString().Should().Be("10^-5"); perht.Normalization.Should().BeSameAs(MeasureUnit.None); perht.NormalizationFactor.Should().Be(new FullFactor(new ExpFactor(0, -5))); }
public void combined_units_with_factor() { var metre = MeasureUnit.Metre; var second = MeasureUnit.Second; var speed = metre / second; speed.IsNormalized.Should().BeTrue(); var kilometre = MeasureStandardPrefix.Kilo[metre]; var hour = MeasureUnit.DefineAlias("h", "Hour", 60 * 60, second); var speed2 = kilometre / hour; speed2.IsNormalized.Should().BeFalse(); speed2.Normalization.Should().BeSameAs(speed); speed2.NormalizationFactor.ToDouble().Should().BeApproximately(0.2777777778, 1e-10, "1 m/s = 0.277778 km/h"); }
public void combining_same_dimension() { var metre = MeasureUnit.Metre; var decimetre = MeasureStandardPrefix.Deci[metre]; var centimetre = MeasureStandardPrefix.Centi[metre]; var r10 = metre.DivideBy(decimetre); r10.Normalization.Should().Be(MeasureUnit.None); r10.NormalizationFactor.Factor.Should().Be(1.0); r10.NormalizationFactor.ExpFactor.Exp10.Should().Be(1); r10.NormalizationFactor.ExpFactor.Exp2.Should().Be(0); var inch = MeasureUnit.DefineAlias("in", "Inch", 2.54, centimetre); var rInch = inch / centimetre; rInch.Normalization.Should().Be(MeasureUnit.None); rInch.NormalizationFactor.Factor.Should().Be(2.54); rInch.NormalizationFactor.ExpFactor.Exp10.Should().Be(0); rInch.NormalizationFactor.ExpFactor.Exp2.Should().Be(0); }
public void percent_or_other_dimensionless_units_are_convertible_into_each_other() { var percent = MeasureUnit.DefineAlias("%", "Percent", new ExpFactor(0, -2), MeasureUnit.None); var pc10 = 10.WithUnit(percent); pc10.ToString().Should().Be("10 %"); pc10.CanConvertTo(MeasureUnit.None).Should().Be(true, $"{percent.Name} should be convertible to {MeasureUnit.None.Name}"); var noDimension = pc10.ConvertTo(MeasureUnit.None); noDimension.Unit.Should().Be(MeasureUnit.None); noDimension.Value.Should().Be(0.01 * pc10.Value, $"is {pc10.ToString()}"); // Now, express the ratio in permille. var permille = MeasureUnit.DefineAlias("‰", "Permille", new ExpFactor(0, -3), MeasureUnit.None); noDimension.CanConvertTo(permille).Should().BeTrue(); var inPerMille = noDimension.ConvertTo(permille); inPerMille.Unit.Should().Be(permille); inPerMille.Value.Should().Be(10 * pc10.Value, $"is {pc10.ToString()}"); }