diff --git a/Common/UnitDefinitions/FuelEfficiency.json b/Common/UnitDefinitions/FuelEfficiency.json index aa9c693d14..d018d437ba 100644 --- a/Common/UnitDefinitions/FuelEfficiency.json +++ b/Common/UnitDefinitions/FuelEfficiency.json @@ -1,55 +1,67 @@ { - "Name": "FuelEfficiency", - "BaseUnit": "LiterPer100Kilometers", - "XmlDocSummary": "Fuel efficiency is a form of thermal efficiency, meaning the ratio from effort to result of a process that converts chemical potential energy contained in a carrier (fuel) into kinetic energy or work. Fuel economy is stated as \"fuel consumption\" in liters per 100 kilometers (L/100 km). In countries using non-metric system, fuel economy is expressed in miles per gallon (mpg) (imperial galon or US galon).", - "XmlDocRemarks": "https://en.wikipedia.org/wiki/Fuel_efficiency", - "Units": [{ - "SingularName": "LiterPer100Kilometers", - "PluralName": "LitersPer100Kilometers", - "FromUnitToBaseFunc": "{x}", - "FromBaseToUnitFunc": "{x}", - "Localization": [{ + "Name": "FuelEfficiency", + "BaseUnit": "KilometerPerLiter", + "XmlDocSummary": "In the context of transport, fuel economy is the energy efficiency of a particular vehicle, given as a ratio of distance traveled per unit of fuel consumed. In most countries, using the metric system, fuel economy is stated as \"fuel consumption\" in liters per 100 kilometers (L/100 km) or kilometers per liter (km/L or kmpl). In countries using non-metric system, fuel economy is expressed in miles per gallon (mpg) (imperial galon or US galon).", + "XmlDocRemarks": "https://en.wikipedia.org/wiki/Fuel_efficiency", + "BaseDimensions": { + "L": -2 + }, + "Units": [ + { + "SingularName": "LiterPer100Kilometers", + "PluralName": "LitersPer100Kilometers", + "FromUnitToBaseFunc": "100 / {x}", + "FromBaseToUnitFunc": "100 / {x}", + "Localization": [ + { "Culture": "en-US", "Abbreviations": [ "l/100km" ] - }] - }, - { - "SingularName": "MilePerUsGallon", - "PluralName": "MilesPerUsGallon", - "FromUnitToBaseFunc": "(100 * 3.785411784) / (1.609344 * {x})", - "FromBaseToUnitFunc": "(100 * 3.785411784) / (1.609344 * {x})", - "Localization": [{ + } + ] + }, + { + "SingularName": "MilePerUsGallon", + "PluralName": "MilesPerUsGallon", + "FromUnitToBaseFunc": "{x} * 1.609344 / 3.785411784", + "FromBaseToUnitFunc": "{x} * 3.785411784 / 1.609344", + "Localization": [ + { "Culture": "en-US", "Abbreviations": [ "mpg (U.S.)" ] - }] - }, - { - "SingularName": "MilePerUkGallon", - "PluralName": "MilesPerUkGallon", - "FromUnitToBaseFunc": "(100 * 4.54609188) / (1.609344 * {x})", - "FromBaseToUnitFunc": "(100 * 4.54609188) / (1.609344 * {x})", - "Localization": [{ + } + ] + }, + { + "SingularName": "MilePerUkGallon", + "PluralName": "MilesPerUkGallon", + "FromUnitToBaseFunc": "{x} * 1.609344 / 4.54609", + "FromBaseToUnitFunc": "{x} * 4.54609 / 1.609344", + "Localization": [ + { "Culture": "en-US", "Abbreviations": [ "mpg (imp.)" ] - }] - }, - { - "SingularName": "KilometerPerLiter", - "PluralName": "KilometersPerLiter", - "FromUnitToBaseFunc": "100 / {x}", - "FromBaseToUnitFunc": "100 / {x}", - "Localization": [{ + } + ] + }, + { + "SingularName": "KilometerPerLiter", + "PluralName": "KilometersPerLiter", + "FromUnitToBaseFunc": "{x}", + "FromBaseToUnitFunc": "{x}", + "Localization": [ + { "Culture": "en-US", "Abbreviations": [ "km/l" ] - }] - } - ] - } \ No newline at end of file + } + ] + } + ] +} \ No newline at end of file diff --git a/UnitsNet.NanoFramework/GeneratedCode/Quantities/FuelEfficiency.g.cs b/UnitsNet.NanoFramework/GeneratedCode/Quantities/FuelEfficiency.g.cs index d4d29d5e42..de90703f76 100644 --- a/UnitsNet.NanoFramework/GeneratedCode/Quantities/FuelEfficiency.g.cs +++ b/UnitsNet.NanoFramework/GeneratedCode/Quantities/FuelEfficiency.g.cs @@ -24,7 +24,7 @@ namespace UnitsNet { /// /// - /// Fuel efficiency is a form of thermal efficiency, meaning the ratio from effort to result of a process that converts chemical potential energy contained in a carrier (fuel) into kinetic energy or work. Fuel economy is stated as "fuel consumption" in liters per 100 kilometers (L/100 km). In countries using non-metric system, fuel economy is expressed in miles per gallon (mpg) (imperial galon or US galon). + /// In the context of transport, fuel economy is the energy efficiency of a particular vehicle, given as a ratio of distance traveled per unit of fuel consumed. In most countries, using the metric system, fuel economy is stated as "fuel consumption" in liters per 100 kilometers (L/100 km) or kilometers per liter (km/L or kmpl). In countries using non-metric system, fuel economy is expressed in miles per gallon (mpg) (imperial galon or US galon). /// /// /// https://en.wikipedia.org/wiki/Fuel_efficiency @@ -63,7 +63,7 @@ public FuelEfficiency(double value, FuelEfficiencyUnit unit) /// /// The base unit of FuelEfficiency, which is Second. All conversions go via this value. /// - public static FuelEfficiencyUnit BaseUnit { get; } = FuelEfficiencyUnit.LiterPer100Kilometers; + public static FuelEfficiencyUnit BaseUnit { get; } = FuelEfficiencyUnit.KilometerPerLiter; /// /// Represents the largest possible value of FuelEfficiency. @@ -165,10 +165,10 @@ private double GetValueInBaseUnit() { return Unit switch { - FuelEfficiencyUnit.KilometerPerLiter => 100 / _value, - FuelEfficiencyUnit.LiterPer100Kilometers => _value, - FuelEfficiencyUnit.MilePerUkGallon => (100 * 4.54609188) / (1.609344 * _value), - FuelEfficiencyUnit.MilePerUsGallon => (100 * 3.785411784) / (1.609344 * _value), + FuelEfficiencyUnit.KilometerPerLiter => _value, + FuelEfficiencyUnit.LiterPer100Kilometers => 100 / _value, + FuelEfficiencyUnit.MilePerUkGallon => _value * 1.609344 / 4.54609, + FuelEfficiencyUnit.MilePerUsGallon => _value * 1.609344 / 3.785411784, _ => throw new NotImplementedException($"Can not convert {Unit} to base units.") }; } @@ -182,10 +182,10 @@ private double GetValueAs(FuelEfficiencyUnit unit) return unit switch { - FuelEfficiencyUnit.KilometerPerLiter => 100 / baseUnitValue, - FuelEfficiencyUnit.LiterPer100Kilometers => baseUnitValue, - FuelEfficiencyUnit.MilePerUkGallon => (100 * 4.54609188) / (1.609344 * baseUnitValue), - FuelEfficiencyUnit.MilePerUsGallon => (100 * 3.785411784) / (1.609344 * baseUnitValue), + FuelEfficiencyUnit.KilometerPerLiter => baseUnitValue, + FuelEfficiencyUnit.LiterPer100Kilometers => 100 / baseUnitValue, + FuelEfficiencyUnit.MilePerUkGallon => baseUnitValue * 4.54609 / 1.609344, + FuelEfficiencyUnit.MilePerUsGallon => baseUnitValue * 3.785411784 / 1.609344, _ => throw new NotImplementedException($"Can not convert {Unit} to {unit}.") }; } diff --git a/UnitsNet.Tests/CustomCode/FuelEfficiencyTests.cs b/UnitsNet.Tests/CustomCode/FuelEfficiencyTests.cs index 31da379824..05100e7909 100644 --- a/UnitsNet.Tests/CustomCode/FuelEfficiencyTests.cs +++ b/UnitsNet.Tests/CustomCode/FuelEfficiencyTests.cs @@ -17,8 +17,6 @@ // Licensed under MIT No Attribution, see LICENSE file at the root. // Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet. -using System; -using UnitsNet.Units; using Xunit; namespace UnitsNet.Tests.CustomCode @@ -26,16 +24,35 @@ namespace UnitsNet.Tests.CustomCode public class FuelEfficiencyTests : FuelEfficiencyTestsBase { protected override bool SupportsSIUnitSystem => false; - protected override double KilometersPerLiterInOneLiterPer100Kilometers => 100; - protected override double LitersPer100KilometersInOneLiterPer100Kilometers => 1; - protected override double MilesPerUkGallonInOneLiterPer100Kilometers => 282.4809363; - protected override double MilesPerUsGallonInOneLiterPer100Kilometers => 235.2145833; - [Theory(Skip = "Conversion from 0 km/L results in infinity")] - [MemberData(nameof(UnitTypes))] - public override void ToUnit_FromDefaultQuantity_ReturnsQuantityWithGivenUnit(FuelEfficiencyUnit unit) + protected override double KilometersPerLiterInOneKilometerPerLiter => 1; + protected override double LitersPer100KilometersInOneKilometerPerLiter => 100; + protected override double MilesPerUkGallonInOneKilometerPerLiter => 2.824809363318222; + protected override double MilesPerUsGallonInOneKilometerPerLiter => 2.352145833333333; + + + [Fact(Skip = "The SI unit would have to be MeterPerCubicMeter")] + public override void BaseUnit_HasSIBase() + { + base.BaseUnit_HasSIBase(); + } + + [Fact(Skip = "NoThe SI unit would have to be MeterPerCubicMeter")] + public override void Ctor_SIUnitSystem_ReturnsQuantityWithSIUnits() + { + base.Ctor_SIUnitSystem_ReturnsQuantityWithSIUnits(); + } + + [Fact(Skip = "NoThe SI unit would have to be MeterPerCubicMeter")] + public override void As_UnitSystem_SI_ReturnsQuantityInSIUnits() + { + base.As_UnitSystem_SI_ReturnsQuantityInSIUnits(); + } + + [Fact(Skip = "NoThe SI unit would have to be MeterPerCubicMeter")] + public override void ToUnit_UnitSystem_SI_ReturnsQuantityInSIUnits() { - base.ToUnit_FromDefaultQuantity_ReturnsQuantityWithGivenUnit(unit); + base.ToUnit_UnitSystem_SI_ReturnsQuantityInSIUnits(); } } } diff --git a/UnitsNet.Tests/GeneratedCode/TestsBase/FuelEfficiencyTestsBase.g.cs b/UnitsNet.Tests/GeneratedCode/TestsBase/FuelEfficiencyTestsBase.g.cs index e9c06eaa14..f9baaa1571 100644 --- a/UnitsNet.Tests/GeneratedCode/TestsBase/FuelEfficiencyTestsBase.g.cs +++ b/UnitsNet.Tests/GeneratedCode/TestsBase/FuelEfficiencyTestsBase.g.cs @@ -39,10 +39,10 @@ namespace UnitsNet.Tests // ReSharper disable once PartialTypeWithSinglePart public abstract partial class FuelEfficiencyTestsBase : QuantityTestsBase { - protected abstract double KilometersPerLiterInOneLiterPer100Kilometers { get; } - protected abstract double LitersPer100KilometersInOneLiterPer100Kilometers { get; } - protected abstract double MilesPerUkGallonInOneLiterPer100Kilometers { get; } - protected abstract double MilesPerUsGallonInOneLiterPer100Kilometers { get; } + protected abstract double KilometersPerLiterInOneKilometerPerLiter { get; } + protected abstract double LitersPer100KilometersInOneKilometerPerLiter { get; } + protected abstract double MilesPerUkGallonInOneKilometerPerLiter { get; } + protected abstract double MilesPerUsGallonInOneKilometerPerLiter { get; } // ReSharper disable VirtualMemberNeverOverriden.Global protected virtual double KilometersPerLiterTolerance { get { return 1e-5; } } @@ -55,10 +55,10 @@ public abstract partial class FuelEfficiencyTestsBase : QuantityTestsBase { return unit switch { - FuelEfficiencyUnit.KilometerPerLiter => (KilometersPerLiterInOneLiterPer100Kilometers, KilometersPerLiterTolerance), - FuelEfficiencyUnit.LiterPer100Kilometers => (LitersPer100KilometersInOneLiterPer100Kilometers, LitersPer100KilometersTolerance), - FuelEfficiencyUnit.MilePerUkGallon => (MilesPerUkGallonInOneLiterPer100Kilometers, MilesPerUkGallonTolerance), - FuelEfficiencyUnit.MilePerUsGallon => (MilesPerUsGallonInOneLiterPer100Kilometers, MilesPerUsGallonTolerance), + FuelEfficiencyUnit.KilometerPerLiter => (KilometersPerLiterInOneKilometerPerLiter, KilometersPerLiterTolerance), + FuelEfficiencyUnit.LiterPer100Kilometers => (LitersPer100KilometersInOneKilometerPerLiter, LitersPer100KilometersTolerance), + FuelEfficiencyUnit.MilePerUkGallon => (MilesPerUkGallonInOneKilometerPerLiter, MilesPerUkGallonTolerance), + FuelEfficiencyUnit.MilePerUsGallon => (MilesPerUsGallonInOneKilometerPerLiter, MilesPerUsGallonTolerance), _ => throw new NotSupportedException() }; } @@ -76,14 +76,14 @@ public void DefaultCtor_ReturnsQuantityWithZeroValueAndBaseUnit() { var quantity = new FuelEfficiency(); Assert.Equal(0, quantity.Value); - Assert.Equal(FuelEfficiencyUnit.LiterPer100Kilometers, quantity.Unit); + Assert.Equal(FuelEfficiencyUnit.KilometerPerLiter, quantity.Unit); } [Fact] public void Ctor_WithInfinityValue_DoNotThrowsArgumentException() { - var exception1 = Record.Exception(() => new FuelEfficiency(double.PositiveInfinity, FuelEfficiencyUnit.LiterPer100Kilometers)); - var exception2 = Record.Exception(() => new FuelEfficiency(double.NegativeInfinity, FuelEfficiencyUnit.LiterPer100Kilometers)); + var exception1 = Record.Exception(() => new FuelEfficiency(double.PositiveInfinity, FuelEfficiencyUnit.KilometerPerLiter)); + var exception2 = Record.Exception(() => new FuelEfficiency(double.NegativeInfinity, FuelEfficiencyUnit.KilometerPerLiter)); Assert.Null(exception1); Assert.Null(exception2); @@ -92,15 +92,36 @@ public void Ctor_WithInfinityValue_DoNotThrowsArgumentException() [Fact] public void Ctor_WithNaNValue_DoNotThrowsArgumentException() { - var exception = Record.Exception(() => new FuelEfficiency(double.NaN, FuelEfficiencyUnit.LiterPer100Kilometers)); + var exception = Record.Exception(() => new FuelEfficiency(double.NaN, FuelEfficiencyUnit.KilometerPerLiter)); Assert.Null(exception); } + [Fact] + public void Ctor_NullAsUnitSystem_ThrowsArgumentNullException() + { + Assert.Throws(() => new FuelEfficiency(value: 1, unitSystem: null)); + } + + [Fact] + public virtual void Ctor_SIUnitSystem_ReturnsQuantityWithSIUnits() + { + var quantity = new FuelEfficiency(value: 1, unitSystem: UnitSystem.SI); + Assert.Equal(1, quantity.Value); + Assert.True(quantity.QuantityInfo.UnitInfos.First(x => x.Value == quantity.Unit).BaseUnits.IsSubsetOf(UnitSystem.SI.BaseUnits)); + } + + [Fact] + public void Ctor_UnitSystem_ThrowsArgumentExceptionIfNotSupported() + { + var unsupportedUnitSystem = new UnitSystem(UnsupportedBaseUnits); + Assert.Throws(() => new FuelEfficiency(value: 1, unitSystem: unsupportedUnitSystem)); + } + [Fact] public void FuelEfficiency_QuantityInfo_ReturnsQuantityInfoDescribingQuantity() { - var quantity = new FuelEfficiency(1, FuelEfficiencyUnit.LiterPer100Kilometers); + var quantity = new FuelEfficiency(1, FuelEfficiencyUnit.KilometerPerLiter); QuantityInfo quantityInfo = quantity.QuantityInfo; @@ -112,13 +133,13 @@ public void FuelEfficiency_QuantityInfo_ReturnsQuantityInfoDescribingQuantity() } [Fact] - public void LiterPer100KilometersToFuelEfficiencyUnits() + public void KilometerPerLiterToFuelEfficiencyUnits() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - AssertEx.EqualTolerance(KilometersPerLiterInOneLiterPer100Kilometers, literper100kilometers.KilometersPerLiter, KilometersPerLiterTolerance); - AssertEx.EqualTolerance(LitersPer100KilometersInOneLiterPer100Kilometers, literper100kilometers.LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(MilesPerUkGallonInOneLiterPer100Kilometers, literper100kilometers.MilesPerUkGallon, MilesPerUkGallonTolerance); - AssertEx.EqualTolerance(MilesPerUsGallonInOneLiterPer100Kilometers, literper100kilometers.MilesPerUsGallon, MilesPerUsGallonTolerance); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + AssertEx.EqualTolerance(KilometersPerLiterInOneKilometerPerLiter, kilometerperliter.KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(LitersPer100KilometersInOneKilometerPerLiter, kilometerperliter.LitersPer100Kilometers, LitersPer100KilometersTolerance); + AssertEx.EqualTolerance(MilesPerUkGallonInOneKilometerPerLiter, kilometerperliter.MilesPerUkGallon, MilesPerUkGallonTolerance); + AssertEx.EqualTolerance(MilesPerUsGallonInOneKilometerPerLiter, kilometerperliter.MilesPerUsGallon, MilesPerUsGallonTolerance); } [Fact] @@ -143,19 +164,19 @@ public void From_ValueAndUnit_ReturnsQuantityWithSameValueAndUnit() } [Fact] - public void FromLitersPer100Kilometers_WithInfinityValue_DoNotThrowsArgumentException() + public void FromKilometersPerLiter_WithInfinityValue_DoNotThrowsArgumentException() { - var exception1 = Record.Exception(() => FuelEfficiency.FromLitersPer100Kilometers(double.PositiveInfinity)); - var exception2 = Record.Exception(() => FuelEfficiency.FromLitersPer100Kilometers(double.NegativeInfinity)); + var exception1 = Record.Exception(() => FuelEfficiency.FromKilometersPerLiter(double.PositiveInfinity)); + var exception2 = Record.Exception(() => FuelEfficiency.FromKilometersPerLiter(double.NegativeInfinity)); Assert.Null(exception1); Assert.Null(exception2); } [Fact] - public void FromLitersPer100Kilometers_WithNanValue_DoNotThrowsArgumentException() + public void FromKilometersPerLiter_WithNanValue_DoNotThrowsArgumentException() { - var exception = Record.Exception(() => FuelEfficiency.FromLitersPer100Kilometers(double.NaN)); + var exception = Record.Exception(() => FuelEfficiency.FromKilometersPerLiter(double.NaN)); Assert.Null(exception); } @@ -163,21 +184,29 @@ public void FromLitersPer100Kilometers_WithNanValue_DoNotThrowsArgumentException [Fact] public void As() { - var literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - AssertEx.EqualTolerance(KilometersPerLiterInOneLiterPer100Kilometers, literper100kilometers.As(FuelEfficiencyUnit.KilometerPerLiter), KilometersPerLiterTolerance); - AssertEx.EqualTolerance(LitersPer100KilometersInOneLiterPer100Kilometers, literper100kilometers.As(FuelEfficiencyUnit.LiterPer100Kilometers), LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(MilesPerUkGallonInOneLiterPer100Kilometers, literper100kilometers.As(FuelEfficiencyUnit.MilePerUkGallon), MilesPerUkGallonTolerance); - AssertEx.EqualTolerance(MilesPerUsGallonInOneLiterPer100Kilometers, literper100kilometers.As(FuelEfficiencyUnit.MilePerUsGallon), MilesPerUsGallonTolerance); + var kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + AssertEx.EqualTolerance(KilometersPerLiterInOneKilometerPerLiter, kilometerperliter.As(FuelEfficiencyUnit.KilometerPerLiter), KilometersPerLiterTolerance); + AssertEx.EqualTolerance(LitersPer100KilometersInOneKilometerPerLiter, kilometerperliter.As(FuelEfficiencyUnit.LiterPer100Kilometers), LitersPer100KilometersTolerance); + AssertEx.EqualTolerance(MilesPerUkGallonInOneKilometerPerLiter, kilometerperliter.As(FuelEfficiencyUnit.MilePerUkGallon), MilesPerUkGallonTolerance); + AssertEx.EqualTolerance(MilesPerUsGallonInOneKilometerPerLiter, kilometerperliter.As(FuelEfficiencyUnit.MilePerUsGallon), MilesPerUsGallonTolerance); + } + + [Fact] + public virtual void BaseUnit_HasSIBase() + { + var baseUnitInfo = FuelEfficiency.Info.BaseUnitInfo; + Assert.True(baseUnitInfo.BaseUnits.IsSubsetOf(UnitSystem.SI.BaseUnits)); } [Fact] - public void As_UnitSystem_ReturnsValueInDimensionlessUnit() + public virtual void As_UnitSystem_SI_ReturnsQuantityInSIUnits() { - var quantity = new FuelEfficiency(value: 1, unit: FuelEfficiencyUnit.LiterPer100Kilometers); + var quantity = new FuelEfficiency(value: 1, unit: FuelEfficiency.BaseUnit); + var expectedValue = quantity.As(FuelEfficiency.Info.GetDefaultUnit(UnitSystem.SI)); var convertedValue = quantity.As(UnitSystem.SI); - - Assert.Equal(quantity.Value, convertedValue); + + Assert.Equal(expectedValue, convertedValue); } [Fact] @@ -189,32 +218,44 @@ public void As_UnitSystem_ThrowsArgumentNullExceptionIfNull() } [Fact] - public void ToUnitSystem_ReturnsValueInDimensionlessUnit() + public void As_UnitSystem_ThrowsArgumentExceptionIfNotSupported() { + var quantity = new FuelEfficiency(value: 1, unit: FuelEfficiency.BaseUnit); + var unsupportedUnitSystem = new UnitSystem(UnsupportedBaseUnits); + Assert.Throws(() => quantity.As(unsupportedUnitSystem)); + } + + [Fact] + public virtual void ToUnit_UnitSystem_SI_ReturnsQuantityInSIUnits() + { + var quantity = new FuelEfficiency(value: 1, unit: FuelEfficiency.BaseUnit); + var expectedUnit = FuelEfficiency.Info.GetDefaultUnit(UnitSystem.SI); + var expectedValue = quantity.As(expectedUnit); + Assert.Multiple(() => { - var quantity = new FuelEfficiency(value: 1, unit: FuelEfficiencyUnit.LiterPer100Kilometers); + FuelEfficiency quantityToConvert = quantity; - FuelEfficiency convertedQuantity = quantity.ToUnit(UnitSystem.SI); + FuelEfficiency convertedQuantity = quantityToConvert.ToUnit(UnitSystem.SI); - Assert.Equal(FuelEfficiencyUnit.LiterPer100Kilometers, convertedQuantity.Unit); - Assert.Equal(quantity.Value, convertedQuantity.Value); + Assert.Equal(expectedUnit, convertedQuantity.Unit); + Assert.Equal(expectedValue, convertedQuantity.Value); }, () => { - IQuantity quantity = new FuelEfficiency(value: 1, unit: FuelEfficiencyUnit.LiterPer100Kilometers); + IQuantity quantityToConvert = quantity; - IQuantity convertedQuantity = quantity.ToUnit(UnitSystem.SI); + IQuantity convertedQuantity = quantityToConvert.ToUnit(UnitSystem.SI); - Assert.Equal(FuelEfficiencyUnit.LiterPer100Kilometers, convertedQuantity.Unit); - Assert.Equal(quantity.Value, convertedQuantity.Value); + Assert.Equal(expectedUnit, convertedQuantity.Unit); + Assert.Equal(expectedValue, convertedQuantity.Value); }, () => { - IQuantity quantity = new FuelEfficiency(value: 1, unit: FuelEfficiencyUnit.LiterPer100Kilometers); + IQuantity quantityToConvert = quantity; - IQuantity convertedQuantity = quantity.ToUnit(UnitSystem.SI); + IQuantity convertedQuantity = quantityToConvert.ToUnit(UnitSystem.SI); - Assert.Equal(FuelEfficiencyUnit.LiterPer100Kilometers, convertedQuantity.Unit); - Assert.Equal(quantity.Value, convertedQuantity.Value); + Assert.Equal(expectedUnit, convertedQuantity.Unit); + Assert.Equal(expectedValue, convertedQuantity.Value); }); } @@ -237,6 +278,25 @@ public void ToUnit_UnitSystem_ThrowsArgumentNullExceptionIfNull() }); } + [Fact] + public void ToUnit_UnitSystem_ThrowsArgumentExceptionIfNotSupported() + { + var unsupportedUnitSystem = new UnitSystem(UnsupportedBaseUnits); + Assert.Multiple(() => + { + var quantity = new FuelEfficiency(value: 1, unit: FuelEfficiency.BaseUnit); + Assert.Throws(() => quantity.ToUnit(unsupportedUnitSystem)); + }, () => + { + IQuantity quantity = new FuelEfficiency(value: 1, unit: FuelEfficiency.BaseUnit); + Assert.Throws(() => quantity.ToUnit(unsupportedUnitSystem)); + }, () => + { + IQuantity quantity = new FuelEfficiency(value: 1, unit: FuelEfficiency.BaseUnit); + Assert.Throws(() => quantity.ToUnit(unsupportedUnitSystem)); + }); + } + [Fact] public void Parse() { @@ -461,71 +521,71 @@ public void ToUnit_FromIQuantity_ReturnsTheExpectedIQuantity(FuelEfficiencyUnit [Fact] public void ConversionRoundTrip() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - AssertEx.EqualTolerance(1, FuelEfficiency.FromKilometersPerLiter(literper100kilometers.KilometersPerLiter).LitersPer100Kilometers, KilometersPerLiterTolerance); - AssertEx.EqualTolerance(1, FuelEfficiency.FromLitersPer100Kilometers(literper100kilometers.LitersPer100Kilometers).LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(1, FuelEfficiency.FromMilesPerUkGallon(literper100kilometers.MilesPerUkGallon).LitersPer100Kilometers, MilesPerUkGallonTolerance); - AssertEx.EqualTolerance(1, FuelEfficiency.FromMilesPerUsGallon(literper100kilometers.MilesPerUsGallon).LitersPer100Kilometers, MilesPerUsGallonTolerance); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + AssertEx.EqualTolerance(1, FuelEfficiency.FromKilometersPerLiter(kilometerperliter.KilometersPerLiter).KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(1, FuelEfficiency.FromLitersPer100Kilometers(kilometerperliter.LitersPer100Kilometers).KilometersPerLiter, LitersPer100KilometersTolerance); + AssertEx.EqualTolerance(1, FuelEfficiency.FromMilesPerUkGallon(kilometerperliter.MilesPerUkGallon).KilometersPerLiter, MilesPerUkGallonTolerance); + AssertEx.EqualTolerance(1, FuelEfficiency.FromMilesPerUsGallon(kilometerperliter.MilesPerUsGallon).KilometersPerLiter, MilesPerUsGallonTolerance); } [Fact] public void ArithmeticOperators() { - FuelEfficiency v = FuelEfficiency.FromLitersPer100Kilometers(1); - AssertEx.EqualTolerance(-1, -v.LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(2, (FuelEfficiency.FromLitersPer100Kilometers(3)-v).LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(2, (v + v).LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(10, (v*10).LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(10, (10*v).LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(2, (FuelEfficiency.FromLitersPer100Kilometers(10)/5).LitersPer100Kilometers, LitersPer100KilometersTolerance); - AssertEx.EqualTolerance(2, FuelEfficiency.FromLitersPer100Kilometers(10)/FuelEfficiency.FromLitersPer100Kilometers(5), LitersPer100KilometersTolerance); + FuelEfficiency v = FuelEfficiency.FromKilometersPerLiter(1); + AssertEx.EqualTolerance(-1, -v.KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(2, (FuelEfficiency.FromKilometersPerLiter(3)-v).KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(2, (v + v).KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(10, (v*10).KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(10, (10*v).KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(2, (FuelEfficiency.FromKilometersPerLiter(10)/5).KilometersPerLiter, KilometersPerLiterTolerance); + AssertEx.EqualTolerance(2, FuelEfficiency.FromKilometersPerLiter(10)/FuelEfficiency.FromKilometersPerLiter(5), KilometersPerLiterTolerance); } [Fact] public void ComparisonOperators() { - FuelEfficiency oneLiterPer100Kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - FuelEfficiency twoLitersPer100Kilometers = FuelEfficiency.FromLitersPer100Kilometers(2); + FuelEfficiency oneKilometerPerLiter = FuelEfficiency.FromKilometersPerLiter(1); + FuelEfficiency twoKilometersPerLiter = FuelEfficiency.FromKilometersPerLiter(2); - Assert.True(oneLiterPer100Kilometers < twoLitersPer100Kilometers); - Assert.True(oneLiterPer100Kilometers <= twoLitersPer100Kilometers); - Assert.True(twoLitersPer100Kilometers > oneLiterPer100Kilometers); - Assert.True(twoLitersPer100Kilometers >= oneLiterPer100Kilometers); + Assert.True(oneKilometerPerLiter < twoKilometersPerLiter); + Assert.True(oneKilometerPerLiter <= twoKilometersPerLiter); + Assert.True(twoKilometersPerLiter > oneKilometerPerLiter); + Assert.True(twoKilometersPerLiter >= oneKilometerPerLiter); - Assert.False(oneLiterPer100Kilometers > twoLitersPer100Kilometers); - Assert.False(oneLiterPer100Kilometers >= twoLitersPer100Kilometers); - Assert.False(twoLitersPer100Kilometers < oneLiterPer100Kilometers); - Assert.False(twoLitersPer100Kilometers <= oneLiterPer100Kilometers); + Assert.False(oneKilometerPerLiter > twoKilometersPerLiter); + Assert.False(oneKilometerPerLiter >= twoKilometersPerLiter); + Assert.False(twoKilometersPerLiter < oneKilometerPerLiter); + Assert.False(twoKilometersPerLiter <= oneKilometerPerLiter); } [Fact] public void CompareToIsImplemented() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.Equal(0, literper100kilometers.CompareTo(literper100kilometers)); - Assert.True(literper100kilometers.CompareTo(FuelEfficiency.Zero) > 0); - Assert.True(FuelEfficiency.Zero.CompareTo(literper100kilometers) < 0); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + Assert.Equal(0, kilometerperliter.CompareTo(kilometerperliter)); + Assert.True(kilometerperliter.CompareTo(FuelEfficiency.Zero) > 0); + Assert.True(FuelEfficiency.Zero.CompareTo(kilometerperliter) < 0); } [Fact] public void CompareToThrowsOnTypeMismatch() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.Throws(() => literper100kilometers.CompareTo(new object())); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + Assert.Throws(() => kilometerperliter.CompareTo(new object())); } [Fact] public void CompareToThrowsOnNull() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.Throws(() => literper100kilometers.CompareTo(null)); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + Assert.Throws(() => kilometerperliter.CompareTo(null)); } [Theory] - [InlineData(1, FuelEfficiencyUnit.LiterPer100Kilometers, 1, FuelEfficiencyUnit.LiterPer100Kilometers, true)] // Same value and unit. - [InlineData(1, FuelEfficiencyUnit.LiterPer100Kilometers, 2, FuelEfficiencyUnit.LiterPer100Kilometers, false)] // Different value. - [InlineData(2, FuelEfficiencyUnit.LiterPer100Kilometers, 1, FuelEfficiencyUnit.KilometerPerLiter, false)] // Different value and unit. - [InlineData(1, FuelEfficiencyUnit.LiterPer100Kilometers, 1, FuelEfficiencyUnit.KilometerPerLiter, false)] // Different unit. + [InlineData(1, FuelEfficiencyUnit.KilometerPerLiter, 1, FuelEfficiencyUnit.KilometerPerLiter, true)] // Same value and unit. + [InlineData(1, FuelEfficiencyUnit.KilometerPerLiter, 2, FuelEfficiencyUnit.KilometerPerLiter, false)] // Different value. + [InlineData(2, FuelEfficiencyUnit.KilometerPerLiter, 1, FuelEfficiencyUnit.LiterPer100Kilometers, false)] // Different value and unit. + [InlineData(1, FuelEfficiencyUnit.KilometerPerLiter, 1, FuelEfficiencyUnit.LiterPer100Kilometers, false)] // Different unit. public void Equals_ReturnsTrue_IfValueAndUnitAreEqual(double valueA, FuelEfficiencyUnit unitA, double valueB, FuelEfficiencyUnit unitB, bool expectEqual) { var a = new FuelEfficiency(valueA, unitA); @@ -565,32 +625,32 @@ public void Equals_Null_ReturnsFalse() [Fact] public void Equals_RelativeTolerance_IsImplemented() { - var v = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.True(v.Equals(FuelEfficiency.FromLitersPer100Kilometers(1), LitersPer100KilometersTolerance, ComparisonType.Relative)); - Assert.False(v.Equals(FuelEfficiency.Zero, LitersPer100KilometersTolerance, ComparisonType.Relative)); - Assert.True(FuelEfficiency.FromLitersPer100Kilometers(100).Equals(FuelEfficiency.FromLitersPer100Kilometers(120), 0.3, ComparisonType.Relative)); - Assert.False(FuelEfficiency.FromLitersPer100Kilometers(100).Equals(FuelEfficiency.FromLitersPer100Kilometers(120), 0.1, ComparisonType.Relative)); + var v = FuelEfficiency.FromKilometersPerLiter(1); + Assert.True(v.Equals(FuelEfficiency.FromKilometersPerLiter(1), KilometersPerLiterTolerance, ComparisonType.Relative)); + Assert.False(v.Equals(FuelEfficiency.Zero, KilometersPerLiterTolerance, ComparisonType.Relative)); + Assert.True(FuelEfficiency.FromKilometersPerLiter(100).Equals(FuelEfficiency.FromKilometersPerLiter(120), 0.3, ComparisonType.Relative)); + Assert.False(FuelEfficiency.FromKilometersPerLiter(100).Equals(FuelEfficiency.FromKilometersPerLiter(120), 0.1, ComparisonType.Relative)); } [Fact] public void Equals_NegativeRelativeTolerance_ThrowsArgumentOutOfRangeException() { - var v = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.Throws(() => v.Equals(FuelEfficiency.FromLitersPer100Kilometers(1), -1, ComparisonType.Relative)); + var v = FuelEfficiency.FromKilometersPerLiter(1); + Assert.Throws(() => v.Equals(FuelEfficiency.FromKilometersPerLiter(1), -1, ComparisonType.Relative)); } [Fact] public void EqualsReturnsFalseOnTypeMismatch() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.False(literper100kilometers.Equals(new object())); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + Assert.False(kilometerperliter.Equals(new object())); } [Fact] public void EqualsReturnsFalseOnNull() { - FuelEfficiency literper100kilometers = FuelEfficiency.FromLitersPer100Kilometers(1); - Assert.False(literper100kilometers.Equals(null)); + FuelEfficiency kilometerperliter = FuelEfficiency.FromKilometersPerLiter(1); + Assert.False(kilometerperliter.Equals(null)); } [Fact] @@ -635,20 +695,20 @@ public void ToString_WithSwedishCulture_ReturnsUnitAbbreviationForEnglishCulture public void ToString_SFormat_FormatsNumberWithGivenDigitsAfterRadixForCurrentCulture() { var _ = new CultureScope(CultureInfo.InvariantCulture); - Assert.Equal("0.1 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s1")); - Assert.Equal("0.12 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s2")); - Assert.Equal("0.123 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s3")); - Assert.Equal("0.1235 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s4")); + Assert.Equal("0.1 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s1")); + Assert.Equal("0.12 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s2")); + Assert.Equal("0.123 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s3")); + Assert.Equal("0.1235 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s4")); } [Fact] public void ToString_SFormatAndCulture_FormatsNumberWithGivenDigitsAfterRadixForGivenCulture() { var culture = CultureInfo.InvariantCulture; - Assert.Equal("0.1 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s1", culture)); - Assert.Equal("0.12 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s2", culture)); - Assert.Equal("0.123 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s3", culture)); - Assert.Equal("0.1235 l/100km", new FuelEfficiency(0.123456, FuelEfficiencyUnit.LiterPer100Kilometers).ToString("s4", culture)); + Assert.Equal("0.1 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s1", culture)); + Assert.Equal("0.12 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s2", culture)); + Assert.Equal("0.123 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s3", culture)); + Assert.Equal("0.1235 km/l", new FuelEfficiency(0.123456, FuelEfficiencyUnit.KilometerPerLiter).ToString("s4", culture)); } [Theory] @@ -656,7 +716,7 @@ public void ToString_SFormatAndCulture_FormatsNumberWithGivenDigitsAfterRadixFor [InlineData("en-US")] public void ToString_NullFormat_DefaultsToGeneralFormat(string cultureName) { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); CultureInfo formatProvider = cultureName == null ? null : CultureInfo.GetCultureInfo(cultureName); @@ -669,161 +729,161 @@ public void ToString_NullFormat_DefaultsToGeneralFormat(string cultureName) [InlineData("g")] public void ToString_NullProvider_EqualsCurrentCulture(string format) { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(quantity.ToString(format, CultureInfo.CurrentCulture), quantity.ToString(format, null)); } [Fact] public void Convert_ToBool_ThrowsInvalidCastException() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Throws(() => Convert.ToBoolean(quantity)); } [Fact] public void Convert_ToByte_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((byte)quantity.Value, Convert.ToByte(quantity)); } [Fact] public void Convert_ToChar_ThrowsInvalidCastException() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Throws(() => Convert.ToChar(quantity)); } [Fact] public void Convert_ToDateTime_ThrowsInvalidCastException() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Throws(() => Convert.ToDateTime(quantity)); } [Fact] public void Convert_ToDecimal_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((decimal)quantity.Value, Convert.ToDecimal(quantity)); } [Fact] public void Convert_ToDouble_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((double)quantity.Value, Convert.ToDouble(quantity)); } [Fact] public void Convert_ToInt16_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((short)quantity.Value, Convert.ToInt16(quantity)); } [Fact] public void Convert_ToInt32_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((int)quantity.Value, Convert.ToInt32(quantity)); } [Fact] public void Convert_ToInt64_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((long)quantity.Value, Convert.ToInt64(quantity)); } [Fact] public void Convert_ToSByte_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((sbyte)quantity.Value, Convert.ToSByte(quantity)); } [Fact] public void Convert_ToSingle_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((float)quantity.Value, Convert.ToSingle(quantity)); } [Fact] public void Convert_ToString_EqualsToString() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(quantity.ToString(), Convert.ToString(quantity)); } [Fact] public void Convert_ToUInt16_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((ushort)quantity.Value, Convert.ToUInt16(quantity)); } [Fact] public void Convert_ToUInt32_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((uint)quantity.Value, Convert.ToUInt32(quantity)); } [Fact] public void Convert_ToUInt64_EqualsValueAsSameType() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal((ulong)quantity.Value, Convert.ToUInt64(quantity)); } [Fact] public void Convert_ChangeType_SelfType_EqualsSelf() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(quantity, Convert.ChangeType(quantity, typeof(FuelEfficiency))); } [Fact] public void Convert_ChangeType_UnitType_EqualsUnit() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(quantity.Unit, Convert.ChangeType(quantity, typeof(FuelEfficiencyUnit))); } [Fact] public void Convert_ChangeType_QuantityInfo_EqualsQuantityInfo() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(FuelEfficiency.Info, Convert.ChangeType(quantity, typeof(QuantityInfo))); } [Fact] public void Convert_ChangeType_BaseDimensions_EqualsBaseDimensions() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(FuelEfficiency.BaseDimensions, Convert.ChangeType(quantity, typeof(BaseDimensions))); } [Fact] public void Convert_ChangeType_InvalidType_ThrowsInvalidCastException() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Throws(() => Convert.ChangeType(quantity, typeof(QuantityFormatter))); } [Fact] public void Convert_GetTypeCode_Returns_Object() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(TypeCode.Object, Convert.GetTypeCode(quantity)); } [Fact] public void GetHashCode_Equals() { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(1.0); + var quantity = FuelEfficiency.FromKilometersPerLiter(1.0); Assert.Equal(new {FuelEfficiency.Info.Name, quantity.Value, quantity.Unit}.GetHashCode(), quantity.GetHashCode()); } @@ -832,8 +892,8 @@ public void GetHashCode_Equals() [InlineData(-1.0)] public void NegationOperator_ReturnsQuantity_WithNegatedValue(double value) { - var quantity = FuelEfficiency.FromLitersPer100Kilometers(value); - Assert.Equal(FuelEfficiency.FromLitersPer100Kilometers(-value), -quantity); + var quantity = FuelEfficiency.FromKilometersPerLiter(value); + Assert.Equal(FuelEfficiency.FromKilometersPerLiter(-value), -quantity); } } } diff --git a/UnitsNet/GeneratedCode/Quantities/FuelEfficiency.g.cs b/UnitsNet/GeneratedCode/Quantities/FuelEfficiency.g.cs index ac329b68d0..0532819357 100644 --- a/UnitsNet/GeneratedCode/Quantities/FuelEfficiency.g.cs +++ b/UnitsNet/GeneratedCode/Quantities/FuelEfficiency.g.cs @@ -36,7 +36,7 @@ namespace UnitsNet { /// /// - /// Fuel efficiency is a form of thermal efficiency, meaning the ratio from effort to result of a process that converts chemical potential energy contained in a carrier (fuel) into kinetic energy or work. Fuel economy is stated as "fuel consumption" in liters per 100 kilometers (L/100 km). In countries using non-metric system, fuel economy is expressed in miles per gallon (mpg) (imperial galon or US galon). + /// In the context of transport, fuel economy is the energy efficiency of a particular vehicle, given as a ratio of distance traveled per unit of fuel consumed. In most countries, using the metric system, fuel economy is stated as "fuel consumption" in liters per 100 kilometers (L/100 km) or kilometers per liter (km/L or kmpl). In countries using non-metric system, fuel economy is expressed in miles per gallon (mpg) (imperial galon or US galon). /// /// /// https://en.wikipedia.org/wiki/Fuel_efficiency @@ -69,8 +69,8 @@ namespace UnitsNet static FuelEfficiency() { - BaseDimensions = BaseDimensions.Dimensionless; - BaseUnit = FuelEfficiencyUnit.LiterPer100Kilometers; + BaseDimensions = new BaseDimensions(-2, 0, 0, 0, 0, 0, 0); + BaseUnit = FuelEfficiencyUnit.KilometerPerLiter; Units = Enum.GetValues(typeof(FuelEfficiencyUnit)).Cast().ToArray(); Zero = new FuelEfficiency(0, BaseUnit); Info = new QuantityInfo("FuelEfficiency", @@ -98,6 +98,20 @@ public FuelEfficiency(double value, FuelEfficiencyUnit unit) _unit = unit; } + /// + /// Creates an instance of the quantity with the given numeric value in units compatible with the given . + /// If multiple compatible units were found, the first match is used. + /// + /// The numeric value to construct this quantity with. + /// The unit system to create the quantity with. + /// The given is null. + /// No unit was found for the given . + public FuelEfficiency(double value, UnitSystem unitSystem) + { + _value = value; + _unit = Info.GetDefaultUnit(unitSystem); + } + #region Static Properties /// @@ -114,7 +128,7 @@ public FuelEfficiency(double value, FuelEfficiencyUnit unit) public static BaseDimensions BaseDimensions { get; } /// - /// The base unit of FuelEfficiency, which is LiterPer100Kilometers. All conversions go via this value. + /// The base unit of FuelEfficiency, which is KilometerPerLiter. All conversions go via this value. /// public static FuelEfficiencyUnit BaseUnit { get; } @@ -124,7 +138,7 @@ public FuelEfficiency(double value, FuelEfficiencyUnit unit) public static FuelEfficiencyUnit[] Units { get; } /// - /// Gets an instance of this quantity with a value of 0 in the base unit LiterPer100Kilometers. + /// Gets an instance of this quantity with a value of 0 in the base unit KilometerPerLiter. /// public static FuelEfficiency Zero { get; } @@ -194,17 +208,17 @@ public FuelEfficiency(double value, FuelEfficiencyUnit unit) internal static void RegisterDefaultConversions(UnitConverter unitConverter) { // Register in unit converter: FuelEfficiencyUnit -> BaseUnit - unitConverter.SetConversionFunction(FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.LiterPer100Kilometers, quantity => quantity.ToUnit(FuelEfficiencyUnit.LiterPer100Kilometers)); - unitConverter.SetConversionFunction(FuelEfficiencyUnit.MilePerUkGallon, FuelEfficiencyUnit.LiterPer100Kilometers, quantity => quantity.ToUnit(FuelEfficiencyUnit.LiterPer100Kilometers)); - unitConverter.SetConversionFunction(FuelEfficiencyUnit.MilePerUsGallon, FuelEfficiencyUnit.LiterPer100Kilometers, quantity => quantity.ToUnit(FuelEfficiencyUnit.LiterPer100Kilometers)); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.KilometerPerLiter, quantity => quantity.ToUnit(FuelEfficiencyUnit.KilometerPerLiter)); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.MilePerUkGallon, FuelEfficiencyUnit.KilometerPerLiter, quantity => quantity.ToUnit(FuelEfficiencyUnit.KilometerPerLiter)); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.MilePerUsGallon, FuelEfficiencyUnit.KilometerPerLiter, quantity => quantity.ToUnit(FuelEfficiencyUnit.KilometerPerLiter)); // Register in unit converter: BaseUnit <-> BaseUnit - unitConverter.SetConversionFunction(FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.LiterPer100Kilometers, quantity => quantity); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.KilometerPerLiter, quantity => quantity); // Register in unit converter: BaseUnit -> FuelEfficiencyUnit - unitConverter.SetConversionFunction(FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.KilometerPerLiter, quantity => quantity.ToUnit(FuelEfficiencyUnit.KilometerPerLiter)); - unitConverter.SetConversionFunction(FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.MilePerUkGallon, quantity => quantity.ToUnit(FuelEfficiencyUnit.MilePerUkGallon)); - unitConverter.SetConversionFunction(FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.MilePerUsGallon, quantity => quantity.ToUnit(FuelEfficiencyUnit.MilePerUsGallon)); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.LiterPer100Kilometers, quantity => quantity.ToUnit(FuelEfficiencyUnit.LiterPer100Kilometers)); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.MilePerUkGallon, quantity => quantity.ToUnit(FuelEfficiencyUnit.MilePerUkGallon)); + unitConverter.SetConversionFunction(FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.MilePerUsGallon, quantity => quantity.ToUnit(FuelEfficiencyUnit.MilePerUsGallon)); } /// @@ -462,7 +476,7 @@ public static bool TryParseUnit([NotNullWhen(true)]string? str, IFormatProvider? /// Get ratio value from dividing by . public static double operator /(FuelEfficiency left, FuelEfficiency right) { - return left.LitersPer100Kilometers / right.LitersPer100Kilometers; + return left.KilometersPerLiter / right.KilometersPerLiter; } #endregion @@ -730,14 +744,14 @@ private bool TryToUnit(FuelEfficiencyUnit unit, [NotNullWhen(true)] out FuelEffi FuelEfficiency? convertedOrNull = (Unit, unit) switch { // FuelEfficiencyUnit -> BaseUnit - (FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.LiterPer100Kilometers) => new FuelEfficiency(100 / _value, FuelEfficiencyUnit.LiterPer100Kilometers), - (FuelEfficiencyUnit.MilePerUkGallon, FuelEfficiencyUnit.LiterPer100Kilometers) => new FuelEfficiency((100 * 4.54609188) / (1.609344 * _value), FuelEfficiencyUnit.LiterPer100Kilometers), - (FuelEfficiencyUnit.MilePerUsGallon, FuelEfficiencyUnit.LiterPer100Kilometers) => new FuelEfficiency((100 * 3.785411784) / (1.609344 * _value), FuelEfficiencyUnit.LiterPer100Kilometers), + (FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.KilometerPerLiter) => new FuelEfficiency(100 / _value, FuelEfficiencyUnit.KilometerPerLiter), + (FuelEfficiencyUnit.MilePerUkGallon, FuelEfficiencyUnit.KilometerPerLiter) => new FuelEfficiency(_value * 1.609344 / 4.54609, FuelEfficiencyUnit.KilometerPerLiter), + (FuelEfficiencyUnit.MilePerUsGallon, FuelEfficiencyUnit.KilometerPerLiter) => new FuelEfficiency(_value * 1.609344 / 3.785411784, FuelEfficiencyUnit.KilometerPerLiter), // BaseUnit -> FuelEfficiencyUnit - (FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.KilometerPerLiter) => new FuelEfficiency(100 / _value, FuelEfficiencyUnit.KilometerPerLiter), - (FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.MilePerUkGallon) => new FuelEfficiency((100 * 4.54609188) / (1.609344 * _value), FuelEfficiencyUnit.MilePerUkGallon), - (FuelEfficiencyUnit.LiterPer100Kilometers, FuelEfficiencyUnit.MilePerUsGallon) => new FuelEfficiency((100 * 3.785411784) / (1.609344 * _value), FuelEfficiencyUnit.MilePerUsGallon), + (FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.LiterPer100Kilometers) => new FuelEfficiency(100 / _value, FuelEfficiencyUnit.LiterPer100Kilometers), + (FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.MilePerUkGallon) => new FuelEfficiency(_value * 4.54609 / 1.609344, FuelEfficiencyUnit.MilePerUkGallon), + (FuelEfficiencyUnit.KilometerPerLiter, FuelEfficiencyUnit.MilePerUsGallon) => new FuelEfficiency(_value * 3.785411784 / 1.609344, FuelEfficiencyUnit.MilePerUsGallon), _ => null };