Skip to content

Commit 31badb8

Browse files
authored
🐛 Fix StackOverflowException converting unit for default(TQuantity)
Fixes #1118 and #1116 - replacing the use of the nullable `_unit` field in the `TryToUnit` funtion - added `ToUnit_FromDefaultQuantity_ReturnsQuantityWithGivenUnit` - a test for converting from `default(TQuantity)`, skipped for FuelEfficieny due to the resulting division by zero - removed extra commas from the PressureChangeRate.json (reported as errors by the designer..)
1 parent cc80331 commit 31badb8

File tree

236 files changed

+1298
-236
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

236 files changed

+1298
-236
lines changed

CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -985,13 +985,13 @@ double IQuantity.As(Enum unit)
985985
/// <returns>True if successful, otherwise false.</returns>
986986
private bool TryToUnit({_quantity.Name}Unit unit, out {_quantity.Name}? converted)
987987
{{
988-
if (_unit == unit)
988+
if (Unit == unit)
989989
{{
990990
converted = this;
991991
return true;
992992
}}
993993
994-
converted = (_unit, unit) switch
994+
converted = (Unit, unit) switch
995995
{{
996996
// {_quantity.Name}Unit -> BaseUnit");
997997

CodeGen/Generators/UnitsNetGen/UnitTestBaseClassGenerator.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,15 @@ public void ToUnit_FromNonBaseUnit_ReturnsQuantityWithGivenUnit({_unitEnumName}
396396
Assert.Equal(converted.Unit, unit);
397397
}}
398398
399+
[Theory]
400+
[MemberData(nameof(UnitTypes))]
401+
public virtual void ToUnit_FromDefaultQuantity_ReturnsQuantityWithGivenUnit({_unitEnumName} unit)
402+
{{
403+
var quantity = default({_quantity.Name});
404+
var converted = quantity.ToUnit(unit);
405+
Assert.Equal(converted.Unit, unit);
406+
}}
407+
399408
[Fact]
400409
public void ConversionRoundTrip()
401410
{{

Common/UnitDefinitions/PressureChangeRate.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@
5050
"Localization": [
5151
{
5252
"Culture": "en-US",
53-
"Abbreviations": [ "mmHg/s" ],
53+
"Abbreviations": [ "mmHg/s" ]
5454
},
5555
{
5656
"Culture": "ru-RU",
57-
"Abbreviations": [ "mmHg/с" ],
57+
"Abbreviations": [ "mmHg/с" ]
5858
}
5959
]
6060
},

UnitsNet.Tests/CustomCode/FuelEfficiencyTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.
1919

2020
using System;
21+
using UnitsNet.Units;
22+
using Xunit;
2123

2224
namespace UnitsNet.Tests.CustomCode
2325
{
@@ -28,5 +30,12 @@ public class FuelEfficiencyTests : FuelEfficiencyTestsBase
2830
protected override double LitersPer100KilometersInOneLiterPer100Kilometers => 1;
2931
protected override double MilesPerUkGallonInOneLiterPer100Kilometers => 282.4809363;
3032
protected override double MilesPerUsGallonInOneLiterPer100Kilometers => 235.2145833;
33+
34+
[Theory(Skip = "Conversion from 0 km/L results in infinity")]
35+
[MemberData(nameof(UnitTypes))]
36+
public override void ToUnit_FromDefaultQuantity_ReturnsQuantityWithGivenUnit(FuelEfficiencyUnit unit)
37+
{
38+
base.ToUnit_FromDefaultQuantity_ReturnsQuantityWithGivenUnit(unit);
39+
}
3140
}
3241
}

UnitsNet.Tests/GeneratedCode/TestsBase/AccelerationTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/AmountOfSubstanceTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/AmplitudeRatioTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/AngleTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/ApparentEnergyTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/ApparentPowerTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/AreaDensityTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/AreaMomentOfInertiaTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/AreaTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/BitRateTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/BrakeSpecificFuelConsumptionTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/CapacitanceTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/CoefficientOfThermalExpansionTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/CompressibilityTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/DensityTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/DurationTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/DynamicViscosityTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/ElectricAdmittanceTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/ElectricChargeDensityTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.Tests/GeneratedCode/TestsBase/ElectricChargeTestsBase.g.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)