Skip to content

Commit 68d861c

Browse files
BMcFerrinangularsen
authored andcommitted
Add Area: Acre, Hectare (#179)
* Add Area: Acre and Hectare
1 parent 9235d38 commit 68d861c

File tree

7 files changed

+185
-0
lines changed

7 files changed

+185
-0
lines changed

UnitsNet.Tests/CustomCode/AreaTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ public class AreaTests : AreaTestsBase
2929
protected override double SquareKilometersInOneSquareMeter => 1E-6;
3030

3131
protected override double SquareMetersInOneSquareMeter => 1;
32+
33+
protected override double AcresInOneSquareMeter => 2.471053816137*1E-4;
34+
35+
protected override double HectaresInOneSquareMeter => 1E-4;
36+
3237
protected override double SquareCentimetersInOneSquareMeter => 1E4;
3338

3439
protected override double SquareDecimetersInOneSquareMeter => 1E2;

UnitsNet.Tests/GeneratedCode/AreaTestsBase.g.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ namespace UnitsNet.Tests
3636
// ReSharper disable once PartialTypeWithSinglePart
3737
public abstract partial class AreaTestsBase
3838
{
39+
protected abstract double AcresInOneSquareMeter { get; }
40+
protected abstract double HectaresInOneSquareMeter { get; }
3941
protected abstract double SquareCentimetersInOneSquareMeter { get; }
4042
protected abstract double SquareDecimetersInOneSquareMeter { get; }
4143
protected abstract double SquareFeetInOneSquareMeter { get; }
@@ -48,6 +50,8 @@ public abstract partial class AreaTestsBase
4850
protected abstract double SquareYardsInOneSquareMeter { get; }
4951

5052
// ReSharper disable VirtualMemberNeverOverriden.Global
53+
protected virtual double AcresTolerance { get { return 1e-5; } }
54+
protected virtual double HectaresTolerance { get { return 1e-5; } }
5155
protected virtual double SquareCentimetersTolerance { get { return 1e-5; } }
5256
protected virtual double SquareDecimetersTolerance { get { return 1e-5; } }
5357
protected virtual double SquareFeetTolerance { get { return 1e-5; } }
@@ -64,6 +68,8 @@ public abstract partial class AreaTestsBase
6468
public void SquareMeterToAreaUnits()
6569
{
6670
Area squaremeter = Area.FromSquareMeters(1);
71+
Assert.AreEqual(AcresInOneSquareMeter, squaremeter.Acres, AcresTolerance);
72+
Assert.AreEqual(HectaresInOneSquareMeter, squaremeter.Hectares, HectaresTolerance);
6773
Assert.AreEqual(SquareCentimetersInOneSquareMeter, squaremeter.SquareCentimeters, SquareCentimetersTolerance);
6874
Assert.AreEqual(SquareDecimetersInOneSquareMeter, squaremeter.SquareDecimeters, SquareDecimetersTolerance);
6975
Assert.AreEqual(SquareFeetInOneSquareMeter, squaremeter.SquareFeet, SquareFeetTolerance);
@@ -79,6 +85,8 @@ public void SquareMeterToAreaUnits()
7985
[Test]
8086
public void FromValueAndUnit()
8187
{
88+
Assert.AreEqual(1, Area.From(1, AreaUnit.Acre).Acres, AcresTolerance);
89+
Assert.AreEqual(1, Area.From(1, AreaUnit.Hectare).Hectares, HectaresTolerance);
8290
Assert.AreEqual(1, Area.From(1, AreaUnit.SquareCentimeter).SquareCentimeters, SquareCentimetersTolerance);
8391
Assert.AreEqual(1, Area.From(1, AreaUnit.SquareDecimeter).SquareDecimeters, SquareDecimetersTolerance);
8492
Assert.AreEqual(1, Area.From(1, AreaUnit.SquareFoot).SquareFeet, SquareFeetTolerance);
@@ -95,6 +103,8 @@ public void FromValueAndUnit()
95103
public void As()
96104
{
97105
var squaremeter = Area.FromSquareMeters(1);
106+
Assert.AreEqual(AcresInOneSquareMeter, squaremeter.As(AreaUnit.Acre), AcresTolerance);
107+
Assert.AreEqual(HectaresInOneSquareMeter, squaremeter.As(AreaUnit.Hectare), HectaresTolerance);
98108
Assert.AreEqual(SquareCentimetersInOneSquareMeter, squaremeter.As(AreaUnit.SquareCentimeter), SquareCentimetersTolerance);
99109
Assert.AreEqual(SquareDecimetersInOneSquareMeter, squaremeter.As(AreaUnit.SquareDecimeter), SquareDecimetersTolerance);
100110
Assert.AreEqual(SquareFeetInOneSquareMeter, squaremeter.As(AreaUnit.SquareFoot), SquareFeetTolerance);
@@ -111,6 +121,8 @@ public void As()
111121
public void ConversionRoundTrip()
112122
{
113123
Area squaremeter = Area.FromSquareMeters(1);
124+
Assert.AreEqual(1, Area.FromAcres(squaremeter.Acres).SquareMeters, AcresTolerance);
125+
Assert.AreEqual(1, Area.FromHectares(squaremeter.Hectares).SquareMeters, HectaresTolerance);
114126
Assert.AreEqual(1, Area.FromSquareCentimeters(squaremeter.SquareCentimeters).SquareMeters, SquareCentimetersTolerance);
115127
Assert.AreEqual(1, Area.FromSquareDecimeters(squaremeter.SquareDecimeters).SquareMeters, SquareDecimetersTolerance);
116128
Assert.AreEqual(1, Area.FromSquareFeet(squaremeter.SquareFeet).SquareMeters, SquareFeetTolerance);

UnitsNet/GeneratedCode/Enums/AreaUnit.g.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ namespace UnitsNet.Units
2525
public enum AreaUnit
2626
{
2727
Undefined = 0,
28+
Acre,
29+
Hectare,
2830
SquareCentimeter,
2931
SquareDecimeter,
3032
SquareFoot,

UnitsNet/GeneratedCode/UnitClasses/Area.g.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,22 @@ public static AreaUnit BaseUnit
9393
get { return AreaUnit.SquareMeter; }
9494
}
9595

96+
/// <summary>
97+
/// Get Area in Acres.
98+
/// </summary>
99+
public double Acres
100+
{
101+
get { return _squareMeters/4046.85642; }
102+
}
103+
104+
/// <summary>
105+
/// Get Area in Hectares.
106+
/// </summary>
107+
public double Hectares
108+
{
109+
get { return _squareMeters/1e4; }
110+
}
111+
96112
/// <summary>
97113
/// Get Area in SquareCentimeters.
98114
/// </summary>
@@ -182,6 +198,22 @@ public static Area Zero
182198
get { return new Area(); }
183199
}
184200

201+
/// <summary>
202+
/// Get Area from Acres.
203+
/// </summary>
204+
public static Area FromAcres(double acres)
205+
{
206+
return new Area(acres*4046.85642);
207+
}
208+
209+
/// <summary>
210+
/// Get Area from Hectares.
211+
/// </summary>
212+
public static Area FromHectares(double hectares)
213+
{
214+
return new Area(hectares*1e4);
215+
}
216+
185217
/// <summary>
186218
/// Get Area from SquareCentimeters.
187219
/// </summary>
@@ -263,6 +295,36 @@ public static Area FromSquareYards(double squareyards)
263295
}
264296

265297
#if !WINDOWS_UWP
298+
/// <summary>
299+
/// Get nullable Area from nullable Acres.
300+
/// </summary>
301+
public static Area? FromAcres(double? acres)
302+
{
303+
if (acres.HasValue)
304+
{
305+
return FromAcres(acres.Value);
306+
}
307+
else
308+
{
309+
return null;
310+
}
311+
}
312+
313+
/// <summary>
314+
/// Get nullable Area from nullable Hectares.
315+
/// </summary>
316+
public static Area? FromHectares(double? hectares)
317+
{
318+
if (hectares.HasValue)
319+
{
320+
return FromHectares(hectares.Value);
321+
}
322+
else
323+
{
324+
return null;
325+
}
326+
}
327+
266328
/// <summary>
267329
/// Get nullable Area from nullable SquareCentimeters.
268330
/// </summary>
@@ -425,6 +487,10 @@ public static Area From(double val, AreaUnit fromUnit)
425487
{
426488
switch (fromUnit)
427489
{
490+
case AreaUnit.Acre:
491+
return FromAcres(val);
492+
case AreaUnit.Hectare:
493+
return FromHectares(val);
428494
case AreaUnit.SquareCentimeter:
429495
return FromSquareCentimeters(val);
430496
case AreaUnit.SquareDecimeter:
@@ -466,6 +532,10 @@ public static Area From(double val, AreaUnit fromUnit)
466532
}
467533
switch (fromUnit)
468534
{
535+
case AreaUnit.Acre:
536+
return FromAcres(value.Value);
537+
case AreaUnit.Hectare:
538+
return FromHectares(value.Value);
469539
case AreaUnit.SquareCentimeter:
470540
return FromSquareCentimeters(value.Value);
471541
case AreaUnit.SquareDecimeter:
@@ -640,6 +710,10 @@ public double As(AreaUnit unit)
640710
{
641711
switch (unit)
642712
{
713+
case AreaUnit.Acre:
714+
return Acres;
715+
case AreaUnit.Hectare:
716+
return Hectares;
643717
case AreaUnit.SquareCentimeter:
644718
return SquareCentimeters;
645719
case AreaUnit.SquareDecimeter:

UnitsNet/GeneratedCode/UnitClasses/Volume.g.cs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,14 @@ public static Volume FromDeciliters(double deciliters)
448448
return new Volume((deciliters/1e3) * 1e-1d);
449449
}
450450

451+
/// <summary>
452+
/// Get Volume from Drums.
453+
/// </summary>
454+
public static Volume FromDrums(double drums)
455+
{
456+
return new Volume(drums*0.20819765);
457+
}
458+
451459
/// <summary>
452460
/// Get Volume from Hectoliters.
453461
/// </summary>
@@ -528,6 +536,14 @@ public static Volume FromTeaspoons(double teaspoons)
528536
return new Volume(teaspoons*4.92892159375e-6);
529537
}
530538

539+
/// <summary>
540+
/// Get Volume from Totes.
541+
/// </summary>
542+
public static Volume FromTotes(double totes)
543+
{
544+
return new Volume(totes*1.0409882);
545+
}
546+
531547
/// <summary>
532548
/// Get Volume from UkTablespoons.
533549
/// </summary>
@@ -780,6 +796,21 @@ public static Volume FromUsTeaspoons(double usteaspoons)
780796
}
781797
}
782798

799+
/// <summary>
800+
/// Get nullable Volume from nullable Drums.
801+
/// </summary>
802+
public static Volume? FromDrums(double? drums)
803+
{
804+
if (drums.HasValue)
805+
{
806+
return FromDrums(drums.Value);
807+
}
808+
else
809+
{
810+
return null;
811+
}
812+
}
813+
783814
/// <summary>
784815
/// Get nullable Volume from nullable Hectoliters.
785816
/// </summary>
@@ -930,6 +961,21 @@ public static Volume FromUsTeaspoons(double usteaspoons)
930961
}
931962
}
932963

964+
/// <summary>
965+
/// Get nullable Volume from nullable Totes.
966+
/// </summary>
967+
public static Volume? FromTotes(double? totes)
968+
{
969+
if (totes.HasValue)
970+
{
971+
return FromTotes(totes.Value);
972+
}
973+
else
974+
{
975+
return null;
976+
}
977+
}
978+
933979
/// <summary>
934980
/// Get nullable Volume from nullable UkTablespoons.
935981
/// </summary>
@@ -1073,6 +1119,8 @@ public static Volume From(double val, VolumeUnit fromUnit)
10731119
return FromCubicYards(val);
10741120
case VolumeUnit.Deciliter:
10751121
return FromDeciliters(val);
1122+
case VolumeUnit.Drum:
1123+
return FromDrums(val);
10761124
case VolumeUnit.Hectoliter:
10771125
return FromHectoliters(val);
10781126
case VolumeUnit.ImperialGallon:
@@ -1093,6 +1141,8 @@ public static Volume From(double val, VolumeUnit fromUnit)
10931141
return FromTablespoons(val);
10941142
case VolumeUnit.Teaspoon:
10951143
return FromTeaspoons(val);
1144+
case VolumeUnit.Tote:
1145+
return FromTotes(val);
10961146
case VolumeUnit.UkTablespoon:
10971147
return FromUkTablespoons(val);
10981148
case VolumeUnit.UsCustomaryCup:
@@ -1154,6 +1204,8 @@ public static Volume From(double val, VolumeUnit fromUnit)
11541204
return FromCubicYards(value.Value);
11551205
case VolumeUnit.Deciliter:
11561206
return FromDeciliters(value.Value);
1207+
case VolumeUnit.Drum:
1208+
return FromDrums(value.Value);
11571209
case VolumeUnit.Hectoliter:
11581210
return FromHectoliters(value.Value);
11591211
case VolumeUnit.ImperialGallon:
@@ -1174,6 +1226,8 @@ public static Volume From(double val, VolumeUnit fromUnit)
11741226
return FromTablespoons(value.Value);
11751227
case VolumeUnit.Teaspoon:
11761228
return FromTeaspoons(value.Value);
1229+
case VolumeUnit.Tote:
1230+
return FromTotes(value.Value);
11771231
case VolumeUnit.UkTablespoon:
11781232
return FromUkTablespoons(value.Value);
11791233
case VolumeUnit.UsCustomaryCup:
@@ -1368,6 +1422,8 @@ public double As(VolumeUnit unit)
13681422
return CubicYards;
13691423
case VolumeUnit.Deciliter:
13701424
return Deciliters;
1425+
case VolumeUnit.Drum:
1426+
return Drums;
13711427
case VolumeUnit.Hectoliter:
13721428
return Hectoliters;
13731429
case VolumeUnit.ImperialGallon:
@@ -1388,6 +1444,8 @@ public double As(VolumeUnit unit)
13881444
return Tablespoons;
13891445
case VolumeUnit.Teaspoon:
13901446
return Teaspoons;
1447+
case VolumeUnit.Tote:
1448+
return Totes;
13911449
case VolumeUnit.UkTablespoon:
13921450
return UkTablespoons;
13931451
case VolumeUnit.UsCustomaryCup:

UnitsNet/GeneratedCode/UnitSystem.Default.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,16 @@ private static readonly ReadOnlyCollection<UnitLocalization> DefaultLocalization
175175
new UnitLocalization(typeof (AreaUnit),
176176
new[]
177177
{
178+
new CulturesForEnumValue((int) AreaUnit.Acre,
179+
new[]
180+
{
181+
new AbbreviationsForCulture("en-US", "ac"),
182+
}),
183+
new CulturesForEnumValue((int) AreaUnit.Hectare,
184+
new[]
185+
{
186+
new AbbreviationsForCulture("en-US", "ha"),
187+
}),
178188
new CulturesForEnumValue((int) AreaUnit.SquareCentimeter,
179189
new[]
180190
{

UnitsNet/Scripts/UnitDefinitions/Area.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,30 @@
162162
"Abbreviations": [ "дюйм²" ]
163163
}
164164
]
165+
},
166+
{
167+
"SingularName": "Acre",
168+
"PluralName": "Acres",
169+
"FromUnitToBaseFunc": "x*4046.85642",
170+
"FromBaseToUnitFunc": "x/4046.85642",
171+
"Localization": [
172+
{
173+
"Culture": "en-US",
174+
"Abbreviations": [ "ac" ]
175+
}
176+
]
177+
},
178+
{
179+
"SingularName": "Hectare",
180+
"PluralName": "Hectares",
181+
"FromUnitToBaseFunc": "x*1e4",
182+
"FromBaseToUnitFunc": "x/1e4",
183+
"Localization": [
184+
{
185+
"Culture": "en-US",
186+
"Abbreviations": [ "ha" ]
187+
}
188+
]
165189
}
166190
]
167191
}

0 commit comments

Comments
 (0)