Skip to content

Commit 9598a49

Browse files
committed
Add UnitInfo.PluralName
1 parent 7b60fac commit 9598a49

File tree

118 files changed

+1419
-1352
lines changed

Some content is hidden

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

118 files changed

+1419
-1352
lines changed

CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private void GenerateStaticConstructor()
133133
if (baseUnits == null)
134134
{
135135
Writer.WL($@"
136-
new UnitInfo<{_unitEnumName}>({_unitEnumName}.{unit.SingularName}, BaseUnits.Undefined),");
136+
new UnitInfo<{_unitEnumName}>({_unitEnumName}.{unit.SingularName}, ""{unit.PluralName}"", BaseUnits.Undefined),");
137137
}
138138
else
139139
{
@@ -150,7 +150,7 @@ private void GenerateStaticConstructor()
150150
}.Where(str => str != null));
151151

152152
Writer.WL($@"
153-
new UnitInfo<{_unitEnumName}>({_unitEnumName}.{unit.SingularName}, new BaseUnits({baseUnitsCtorArgs})),");
153+
new UnitInfo<{_unitEnumName}>({_unitEnumName}.{unit.SingularName}, ""{unit.PluralName}"", new BaseUnits({baseUnitsCtorArgs})),");
154154
}
155155
}
156156

UnitsNet.Tests/CustomQuantities/HowMuch.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ public HowMuch(double value, HowMuchUnit unit)
3131
typeof(HowMuchUnit),
3232
new UnitInfo[]
3333
{
34-
new UnitInfo<HowMuchUnit>(HowMuchUnit.Some, BaseUnits.Undefined),
35-
new UnitInfo<HowMuchUnit>(HowMuchUnit.ATon, BaseUnits.Undefined),
36-
new UnitInfo<HowMuchUnit>(HowMuchUnit.AShitTon, BaseUnits.Undefined),
34+
new UnitInfo<HowMuchUnit>(HowMuchUnit.Some, "Some", BaseUnits.Undefined),
35+
new UnitInfo<HowMuchUnit>(HowMuchUnit.ATon, "Tons", BaseUnits.Undefined),
36+
new UnitInfo<HowMuchUnit>(HowMuchUnit.AShitTon, "ShitTons", BaseUnits.Undefined),
3737
},
3838
HowMuchUnit.Some,
3939
Zero,

UnitsNet.Tests/QuantityInfoTest.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ public void Constructor_AssignsProperties()
1717
{
1818
var expectedZero = Length.FromCentimeters(10);
1919
var expectedUnitInfos = new UnitInfo[]{
20-
new UnitInfo(LengthUnit.Centimeter, new BaseUnits(LengthUnit.Centimeter)),
21-
new UnitInfo(LengthUnit.Kilometer, new BaseUnits(LengthUnit.Kilometer))
20+
new UnitInfo(LengthUnit.Centimeter, "Centimeters", new BaseUnits(LengthUnit.Centimeter)),
21+
new UnitInfo(LengthUnit.Kilometer, "Kilometers", new BaseUnits(LengthUnit.Kilometer))
2222
};
2323
var expectedBaseUnit = LengthUnit.Centimeter;
2424
var expectedQuantityType = QuantityType.Length;
@@ -44,9 +44,9 @@ public void Constructor_AssignsPropertiesForCustomQuantity()
4444
var expectedZero = new HowMuch(10, HowMuchUnit.Some);
4545
var expectedUnitInfos = new UnitInfo[]
4646
{
47-
new UnitInfo(HowMuchUnit.Some, BaseUnits.Undefined),
48-
new UnitInfo(HowMuchUnit.ATon, BaseUnits.Undefined),
49-
new UnitInfo(HowMuchUnit.AShitTon, BaseUnits.Undefined)
47+
new UnitInfo(HowMuchUnit.Some, "Some", BaseUnits.Undefined),
48+
new UnitInfo(HowMuchUnit.ATon, "Tons", BaseUnits.Undefined),
49+
new UnitInfo(HowMuchUnit.AShitTon, "ShitTons", BaseUnits.Undefined)
5050
};
5151
var expectedBaseUnit = HowMuchUnit.Some;
5252
var expectedQuantityType = QuantityType.Undefined;
@@ -71,8 +71,8 @@ public void ObsoleteConstructor_AssignsProperties()
7171
{
7272
var expectedZero = Length.FromCentimeters(10);
7373
var expectedUnitInfos = new UnitInfo[]{
74-
new UnitInfo(LengthUnit.Centimeter, new BaseUnits(LengthUnit.Centimeter)),
75-
new UnitInfo(LengthUnit.Kilometer, new BaseUnits(LengthUnit.Kilometer))
74+
new UnitInfo(LengthUnit.Centimeter, "Centimeters", new BaseUnits(LengthUnit.Centimeter)),
75+
new UnitInfo(LengthUnit.Kilometer, "Kilometers", new BaseUnits(LengthUnit.Kilometer))
7676
};
7777
var expectedBaseUnit = LengthUnit.Centimeter;
7878
var expectedQuantityType = QuantityType.Length;
@@ -97,8 +97,8 @@ public void GenericsConstructor_AssignsProperties()
9797
{
9898
var expectedZero = Length.FromCentimeters(10);
9999
var expectedUnitInfos = new UnitInfo<LengthUnit>[]{
100-
new UnitInfo<LengthUnit>(LengthUnit.Centimeter, new BaseUnits(LengthUnit.Centimeter)),
101-
new UnitInfo<LengthUnit>(LengthUnit.Kilometer, new BaseUnits(LengthUnit.Kilometer))
100+
new UnitInfo<LengthUnit>(LengthUnit.Centimeter, "Centimeters", new BaseUnits(LengthUnit.Centimeter)),
101+
new UnitInfo<LengthUnit>(LengthUnit.Kilometer,"Kilometers", new BaseUnits(LengthUnit.Kilometer))
102102
};
103103
var expectedBaseUnit = LengthUnit.Centimeter;
104104
var expectedQuantityType = QuantityType.Length;
@@ -248,8 +248,8 @@ public void GetUnitInfoFor_GivenBaseUnitsWithMultipleMatches_ThrowsInvalidOperat
248248

249249
var quantityInfo = new QuantityInfo<LengthUnit>(Length.Info.Name,
250250
new UnitInfo<LengthUnit>[]{
251-
new UnitInfo<LengthUnit>(LengthUnit.Meter, baseUnits),
252-
new UnitInfo<LengthUnit>(LengthUnit.Foot, baseUnits) },
251+
new UnitInfo<LengthUnit>(LengthUnit.Meter, "Meters", baseUnits),
252+
new UnitInfo<LengthUnit>(LengthUnit.Foot, "Feet", baseUnits) },
253253
LengthUnit.Meter, Length.Zero, Length.BaseDimensions);
254254

255255
Assert.Throws<InvalidOperationException>(() => quantityInfo.GetUnitInfoFor(baseUnits));
@@ -284,8 +284,8 @@ public void GetUnitInfosFor_GivenBaseUnitsWithMultipleMatches_ReturnsMultipleMat
284284

285285
var quantityInfo = new QuantityInfo<LengthUnit>(Length.Info.Name,
286286
new UnitInfo<LengthUnit>[]{
287-
new UnitInfo<LengthUnit>(LengthUnit.Meter, baseUnits),
288-
new UnitInfo<LengthUnit>(LengthUnit.Foot, baseUnits) },
287+
new UnitInfo<LengthUnit>(LengthUnit.Meter, "Meters", baseUnits),
288+
new UnitInfo<LengthUnit>(LengthUnit.Foot, "Feet", baseUnits) },
289289
LengthUnit.Meter, Length.Zero, Length.BaseDimensions);
290290

291291
var result = quantityInfo.GetUnitInfosFor(baseUnits);

UnitsNet.Tests/QuantityTest.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Collections.Generic;
66
using System.Globalization;
77
using System.Linq;
8-
using JetBrains.Annotations;
98
using UnitsNet.Units;
109
using Xunit;
1110

@@ -98,6 +97,38 @@ public void Infos_ReturnsKnownQuantityInfoObjects()
9897
Assert.Equal(QuantityCount, infos.Length);
9998
}
10099

100+
[Fact]
101+
public void GetUnitInfo_ReturnsUnitInfoForUnitEnumValue()
102+
{
103+
var unitInfo = Quantity.GetUnitInfo(LengthUnit.Meter);
104+
Assert.Equal("Meter", unitInfo.Name);
105+
Assert.Equal("Meters", unitInfo.PluralName);
106+
Assert.Equal(LengthUnit.Meter, unitInfo.Value);
107+
}
108+
109+
[Fact]
110+
public void TryGetUnitInfo_ReturnsUnitInfoForUnitEnumValue()
111+
{
112+
bool found = Quantity.TryGetUnitInfo(LengthUnit.Meter, out UnitInfo unitInfo);
113+
Assert.True(found);
114+
Assert.Equal("Meter", unitInfo.Name);
115+
Assert.Equal("Meters", unitInfo.PluralName);
116+
Assert.Equal(LengthUnit.Meter, unitInfo.Value);
117+
}
118+
119+
[Fact]
120+
public void GetUnitInfo_ThrowsKeyNotFoundExceptionIfNotFound()
121+
{
122+
Assert.Throws<KeyNotFoundException>(() => Quantity.GetUnitInfo(ConsoleColor.Red));
123+
}
124+
125+
[Fact]
126+
public void TryGetUnitInfo_ReturnsFalseIfNotFound()
127+
{
128+
bool found = Quantity.TryGetUnitInfo(ConsoleColor.Red, out UnitInfo unitInfo);
129+
Assert.False(found);
130+
}
131+
101132
[Fact]
102133
public void Parse_GivenValueAndUnit_ReturnsQuantity()
103134
{

UnitsNet.Tests/UnitInfoTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ public class UnitInfoTests
1111
[Fact]
1212
public void ConstructorTest()
1313
{
14-
var unitInfo = new UnitInfo(LengthUnit.Meter, new BaseUnits(LengthUnit.Meter));
14+
var unitInfo = new UnitInfo(LengthUnit.Meter, "Meters", new BaseUnits(LengthUnit.Meter));
1515
Assert.Equal(LengthUnit.Meter, unitInfo.Value);
1616
Assert.Equal(LengthUnit.Meter.ToString(), unitInfo.Name);
1717
}
1818

1919
[Fact]
2020
public void GenericConstructorTest()
2121
{
22-
var unitInfo = new UnitInfo<LengthUnit>(LengthUnit.Meter, new BaseUnits(LengthUnit.Meter));
22+
var unitInfo = new UnitInfo<LengthUnit>(LengthUnit.Meter, "Meters", new BaseUnits(LengthUnit.Meter));
2323
Assert.Equal(LengthUnit.Meter, unitInfo.Value);
2424
Assert.Equal(LengthUnit.Meter.ToString(), unitInfo.Name);
2525
}

UnitsNet/CustomCode/Quantity.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace UnitsNet
99
public partial class Quantity
1010
{
1111
private static readonly Lazy<QuantityInfo[]> InfosLazy;
12+
private static readonly Lazy<Dictionary<(Type, string), UnitInfo>> UnitTypeAndNameToUnitInfoLazy;
1213

1314
static Quantity()
1415
{
@@ -19,6 +20,16 @@ static Quantity()
1920
InfosLazy = new Lazy<QuantityInfo[]>(() => quantityInfos
2021
.OrderBy(quantityInfo => quantityInfo.Name)
2122
.ToArray());
23+
24+
UnitTypeAndNameToUnitInfoLazy = new Lazy<Dictionary<(Type, string), UnitInfo>>(() =>
25+
{
26+
return Infos
27+
.SelectMany(quantityInfo => quantityInfo.UnitInfos
28+
.Select(unitInfo => new KeyValuePair<(Type, string), UnitInfo>(
29+
(unitInfo.Value.GetType(), unitInfo.Name),
30+
unitInfo)))
31+
.ToDictionary(x => x.Key, x => x.Value);
32+
});
2233
}
2334

2435
/// <summary>
@@ -37,6 +48,17 @@ static Quantity()
3748
/// </summary>
3849
public static QuantityInfo[] Infos => InfosLazy.Value;
3950

51+
/// <summary>
52+
/// Get <see cref="UnitInfo"/> for a given unit enum value.
53+
/// </summary>
54+
public static UnitInfo GetUnitInfo(Enum unitEnum) => UnitTypeAndNameToUnitInfoLazy.Value[(unitEnum.GetType(), unitEnum.ToString())];
55+
56+
/// <summary>
57+
/// Try to get <see cref="UnitInfo"/> for a given unit enum value.
58+
/// </summary>
59+
public static bool TryGetUnitInfo(Enum unitEnum, out UnitInfo unitInfo) =>
60+
UnitTypeAndNameToUnitInfoLazy.Value.TryGetValue((unitEnum.GetType(), unitEnum.ToString()), out unitInfo);
61+
4062
/// <summary>
4163
/// Dynamically construct a quantity.
4264
/// </summary>

UnitsNet/GeneratedCode/Quantities/Acceleration.g.cs

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

UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.g.cs

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

UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.g.cs

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

0 commit comments

Comments
 (0)