Skip to content

Commit 5012caa

Browse files
authored
Get unit infos for (#642)
* Adding GetUnitInfosFo(BaseUnits) that returns all UnitInfos that have BaseUnits as a subset * Switch UnitSystem constructor/As/ToUnit to use first match rather than exception * Test fix * Updating doc
1 parent 01af6ab commit 5012caa

File tree

97 files changed

+1946
-658
lines changed

Some content is hidden

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

97 files changed

+1946
-658
lines changed

UnitsNet.Tests/CustomCode/LengthTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,13 @@ public void Constructor_UnitSystemSI_AssignsSIUnit()
170170
Assert.Equal(LengthUnit.Meter, length.Unit);
171171
}
172172

173+
[Fact]
174+
public void Constructor_UnitSystemWithNoMatchingBaseUnits_ThrowsArgumentException()
175+
{
176+
// AmplitudeRatio is unitless. Can't have any matches :)
177+
Assert.Throws<ArgumentException>(() => new AmplitudeRatio(1.0, UnitSystem.SI));
178+
}
179+
173180
[Fact]
174181
public void As_GivenSIUnitSystem_ReturnsSIValue()
175182
{

UnitsNet.Tests/QuantityInfoTest.cs

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,61 @@ public void GetUnitInfoFor_GivenBaseUnitsWithMultipleMatches_ThrowsInvalidOperat
155155
{
156156
var baseUnits = new BaseUnits(LengthUnit.Meter);
157157

158-
var quantityInfo = new QuantityInfo<LengthUnit>(QuantityType.Length, new UnitInfo<LengthUnit>[]{
159-
new UnitInfo<LengthUnit>(LengthUnit.Meter, baseUnits),
160-
new UnitInfo<LengthUnit>(LengthUnit.Foot, baseUnits)
161-
}, LengthUnit.Meter, Length.Zero, Length.BaseDimensions);
158+
var quantityInfo = new QuantityInfo<LengthUnit>(QuantityType.Length,
159+
new UnitInfo<LengthUnit>[]{
160+
new UnitInfo<LengthUnit>(LengthUnit.Meter, baseUnits),
161+
new UnitInfo<LengthUnit>(LengthUnit.Foot, baseUnits) },
162+
LengthUnit.Meter, Length.Zero, Length.BaseDimensions);
162163

163164
Assert.Throws<InvalidOperationException>(() => quantityInfo.GetUnitInfoFor(baseUnits));
164165
}
166+
167+
[Fact]
168+
public void GetUnitInfosFor_GivenNullAsBaseUnits_ThrowsArgumentNullException()
169+
{
170+
Assert.Throws<ArgumentNullException>(() => Length.Info.GetUnitInfosFor(null));
171+
}
172+
173+
[Fact]
174+
public void GetUnitInfosFor_GivenBaseUnitsWithNoMatch_ReturnsEmpty()
175+
{
176+
var baseUnitsWithNoMatch = new BaseUnits(mass: MassUnit.Kilogram);
177+
var result = Length.Info.GetUnitInfosFor(baseUnitsWithNoMatch);
178+
Assert.Empty(result);
179+
}
180+
181+
[Fact]
182+
public void GetUnitInfosFor_GivenBaseUnitsWithOneMatch_ReturnsOneMatch()
183+
{
184+
var baseUnitsWithOneMatch = new BaseUnits(LengthUnit.Foot);
185+
var result = Length.Info.GetUnitInfosFor(baseUnitsWithOneMatch);
186+
Assert.Collection(result, element1 => Assert.Equal(LengthUnit.Foot, element1.Value));
187+
}
188+
189+
[Fact]
190+
public void GetUnitInfosFor_GivenBaseUnitsWithMultipleMatches_ReturnsMultipleMatches()
191+
{
192+
var baseUnits = new BaseUnits(LengthUnit.Meter);
193+
194+
var quantityInfo = new QuantityInfo<LengthUnit>(QuantityType.Length,
195+
new UnitInfo<LengthUnit>[]{
196+
new UnitInfo<LengthUnit>(LengthUnit.Meter, baseUnits),
197+
new UnitInfo<LengthUnit>(LengthUnit.Foot, baseUnits) },
198+
LengthUnit.Meter, Length.Zero, Length.BaseDimensions);
199+
200+
var result = quantityInfo.GetUnitInfosFor(baseUnits);
201+
202+
Assert.Collection(result,
203+
element1 =>
204+
{
205+
Assert.Equal(LengthUnit.Meter, element1.Value);
206+
Assert.Equal(baseUnits, element1.BaseUnits);
207+
},
208+
element2 =>
209+
{
210+
Assert.Equal(LengthUnit.Foot, element2.Value);
211+
Assert.Equal(baseUnits, element2.BaseUnits);
212+
} );
213+
}
165214
}
166215
}

UnitsNet/GeneratedCode/Quantities/Acceleration.NetFramework.g.cs

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

UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.NetFramework.g.cs

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

UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.NetFramework.g.cs

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

UnitsNet/GeneratedCode/Quantities/Angle.NetFramework.g.cs

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

UnitsNet/GeneratedCode/Quantities/ApparentEnergy.NetFramework.g.cs

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

0 commit comments

Comments
 (0)