Skip to content

Commit 4b2e366

Browse files
committed
Added imperial area units and unit tests for them:
SquareMiles, SquareYards, SquareFeet, SquareInches.
1 parent 40e1ef0 commit 4b2e366

File tree

4 files changed

+83
-0
lines changed

4 files changed

+83
-0
lines changed

Src/UnitsNet/Area.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ public struct Area : IComparable, IComparable<Area>
88
private const double SquareDecimetersToSquareMetersRatio = 1E-2;
99
private const double SquareCentimetersToSquareMetersRatio = 1E-4;
1010
private const double SquareMillimetersToSquareMetersRatio = 1E-6;
11+
private const double SquareMilesToSquareMetersRatio = 2.59*1E+6;
12+
private const double SquareYardsToSquareMetersRatio = 0.836127;
13+
private const double SquareFeetToSquareMetersRatio = 0.092903;
14+
private const double SquareInchesToSquareMetersRatio = 0.00064516;
1115

1216
public readonly double SquareMeters;
1317

@@ -38,6 +42,27 @@ public double SquareMillimeters
3842
get { return SquareMeters / SquareMillimetersToSquareMetersRatio; }
3943
}
4044

45+
public double SquareMiles
46+
{
47+
get { return SquareMeters / SquareMilesToSquareMetersRatio; }
48+
}
49+
50+
public double SquareYards
51+
{
52+
get { return SquareMeters / SquareYardsToSquareMetersRatio; }
53+
}
54+
55+
public double SquareFeet
56+
{
57+
get { return SquareMeters / SquareFeetToSquareMetersRatio; }
58+
}
59+
60+
public double SquareInches
61+
{
62+
get { return SquareMeters / SquareInchesToSquareMetersRatio; }
63+
}
64+
65+
4166
#endregion
4267

4368
#region Static
@@ -88,6 +113,26 @@ public static Area FromSquareMillimeters(double squareMillimeters)
88113
return new Area(squareMillimeters * SquareMillimetersToSquareMetersRatio);
89114
}
90115

116+
public static Area FromSquareMiles(double sqmi)
117+
{
118+
return new Area(sqmi * SquareMilesToSquareMetersRatio);
119+
}
120+
121+
public static Area FromSquareYards(double yds)
122+
{
123+
return new Area(yds * SquareYardsToSquareMetersRatio);
124+
}
125+
126+
public static Area FromSquareFeet(double ft)
127+
{
128+
return new Area(ft * SquareFeetToSquareMetersRatio);
129+
}
130+
131+
public static Area FromSquareInches(double inches)
132+
{
133+
return new Area(inches * SquareInchesToSquareMetersRatio);
134+
}
135+
91136
#endregion
92137

93138
#region Arithmetic operators

Src/UnitsNet/Unit.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ public enum Unit
9797
SquareCentimeter,
9898
SquareMillimeter,
9999

100+
// Area Imperial
101+
SquareMile,
102+
SquareYard,
103+
SquareFoot,
104+
SquareInch,
105+
100106
// Volume
101107
CubicKilometer,
102108
CubicMeter,

Src/UnitsNet/UnitConverter.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,15 @@ private static bool TryConvertArea(double value, Unit fromUnit, Unit toUnit, out
229229
case Unit.SquareMillimeter:
230230
return TryConvert(Area.FromSquareMillimeters(value), toUnit, out newValue);
231231

232+
case Unit.SquareMile:
233+
return TryConvert(Area.FromSquareMiles(value), toUnit, out newValue);
234+
case Unit.SquareYard:
235+
return TryConvert(Area.FromSquareYards(value), toUnit, out newValue);
236+
case Unit.SquareFoot:
237+
return TryConvert(Area.FromSquareFeet(value), toUnit, out newValue);
238+
case Unit.SquareInch:
239+
return TryConvert(Area.FromSquareInches(value), toUnit, out newValue);
240+
232241
default:
233242
newValue = 0;
234243
return false;
@@ -368,6 +377,19 @@ private static bool TryConvert(Area volume, Unit toUnit, out double newValue)
368377
newValue = volume.SquareMillimeters;
369378
return true;
370379

380+
case Unit.SquareMile:
381+
newValue = volume.SquareMiles;
382+
return true;
383+
case Unit.SquareYard:
384+
newValue = volume.SquareYards;
385+
return true;
386+
case Unit.SquareFoot:
387+
newValue = volume.SquareFeet;
388+
return true;
389+
case Unit.SquareInch:
390+
newValue = volume.SquareInches;
391+
return true;
392+
371393
default:
372394
newValue = 0;
373395
return false;

Tests/AreaTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public void SquareMetersToAreaUnits()
1717
Assert.AreEqual(1E2, _squareMeter.SquareDecimeters, Delta);
1818
Assert.AreEqual(1E4, _squareMeter.SquareCentimeters, Delta);
1919
Assert.AreEqual(1E6, _squareMeter.SquareMillimeters, Delta);
20+
21+
Assert.AreEqual(3.86102*1E-7, _squareMeter.SquareMiles, Delta);
22+
Assert.AreEqual(1.19599, _squareMeter.SquareYards, Delta);
23+
Assert.AreEqual(10.76391, _squareMeter.SquareFeet, Delta);
24+
Assert.AreEqual(1550.003100, _squareMeter.SquareInches, Delta);
2025
}
2126

2227
[Test]
@@ -27,6 +32,11 @@ public void AreaUnitsRoundTrip()
2732
Assert.AreEqual(1, Area.FromSquareDecimeters(_squareMeter.SquareDecimeters).SquareMeters, Delta);
2833
Assert.AreEqual(1, Area.FromSquareCentimeters(_squareMeter.SquareCentimeters).SquareMeters, Delta);
2934
Assert.AreEqual(1, Area.FromSquareMillimeters(_squareMeter.SquareMillimeters).SquareMeters, Delta);
35+
36+
Assert.AreEqual(1, Area.FromSquareMiles(_squareMeter.SquareMiles).SquareMeters, Delta);
37+
Assert.AreEqual(1, Area.FromSquareYards(_squareMeter.SquareYards).SquareMeters, Delta);
38+
Assert.AreEqual(1, Area.FromSquareFeet(_squareMeter.SquareFeet).SquareMeters, Delta);
39+
Assert.AreEqual(1, Area.FromSquareInches(_squareMeter.SquareInches).SquareMeters, Delta);
3040
}
3141

3242
[Test]

0 commit comments

Comments
 (0)