Skip to content

Commit b2b9b1c

Browse files
authored
Merge pull request #406 from baxcoders/Angle
Added Revolution to Angle
2 parents 0b6d1d2 + 1c5a3d3 commit b2b9b1c

File tree

7 files changed

+122
-19
lines changed

7 files changed

+122
-19
lines changed

UnitsNet.Tests/CustomCode/AngleTests.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,42 +28,44 @@ public class AngleTests : AngleTestsBase
2828
{
2929
protected override double DegreesInOneDegree => 1;
3030

31-
protected override double GradiansInOneDegree => 400/360.0;
31+
protected override double GradiansInOneDegree => 400 / 360.0;
3232

3333
protected override double ArcminutesInOneDegree => 60.0;
3434

35-
protected override double RadiansInOneDegree => Math.PI/2/90;
35+
protected override double RadiansInOneDegree => Math.PI / 2 / 90;
3636

3737
protected override double MillidegreesInOneDegree => 1E3;
3838

3939
protected override double MicrodegreesInOneDegree => 1E6;
4040

4141
protected override double NanodegreesInOneDegree => 1E9;
4242

43-
protected override double NanoradiansInOneDegree => Math.PI/2/90*1E9;
43+
protected override double NanoradiansInOneDegree => Math.PI / 2 / 90 * 1E9;
4444

45-
protected override double MicroradiansInOneDegree => Math.PI/2/90*1E6;
45+
protected override double MicroradiansInOneDegree => Math.PI / 2 / 90 * 1E6;
4646

47-
protected override double MilliradiansInOneDegree => Math.PI/2/90*1E3;
47+
protected override double MilliradiansInOneDegree => Math.PI / 2 / 90 * 1E3;
4848

49-
protected override double CentiradiansInOneDegree => Math.PI/2/90*1E2;
49+
protected override double CentiradiansInOneDegree => Math.PI / 2 / 90 * 1E2;
5050

51-
protected override double DeciradiansInOneDegree => Math.PI/2/90*1E1;
51+
protected override double DeciradiansInOneDegree => Math.PI / 2 / 90 * 1E1;
5252

5353
protected override double ArcsecondsInOneDegree => 3600.0;
5454

55+
protected override double RevolutionsInOneDegree => 2.77E-3;
56+
5557
[Fact]
5658
public void AngleDividedByDurationEqualsRotationalSpeed()
5759
{
58-
RotationalSpeed rotationalSpeed = Angle.FromRadians(10)/Duration.FromSeconds(5);
60+
RotationalSpeed rotationalSpeed = Angle.FromRadians(10) / Duration.FromSeconds(5);
5961
Assert.Equal(rotationalSpeed, RotationalSpeed.FromRadiansPerSecond(2));
6062
}
6163

6264
[Fact]
6365
public void AngleDividedByTimeSpanEqualsRotationalSpeed()
6466
{
65-
RotationalSpeed rotationalSpeed = Angle.FromRadians(10)/TimeSpan.FromSeconds(5);
67+
RotationalSpeed rotationalSpeed = Angle.FromRadians(10) / TimeSpan.FromSeconds(5);
6668
Assert.Equal(rotationalSpeed, RotationalSpeed.FromRadiansPerSecond(2));
6769
}
6870
}
69-
}
71+
}

UnitsNet.Tests/GeneratedCode/AngleTestsBase.g.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public abstract partial class AngleTestsBase
6565
protected abstract double NanodegreesInOneDegree { get; }
6666
protected abstract double NanoradiansInOneDegree { get; }
6767
protected abstract double RadiansInOneDegree { get; }
68+
protected abstract double RevolutionsInOneDegree { get; }
6869

6970
// ReSharper disable VirtualMemberNeverOverriden.Global
7071
protected virtual double ArcminutesTolerance { get { return 1e-5; } }
@@ -80,6 +81,7 @@ public abstract partial class AngleTestsBase
8081
protected virtual double NanodegreesTolerance { get { return 1e-5; } }
8182
protected virtual double NanoradiansTolerance { get { return 1e-5; } }
8283
protected virtual double RadiansTolerance { get { return 1e-5; } }
84+
protected virtual double RevolutionsTolerance { get { return 1e-5; } }
8385
// ReSharper restore VirtualMemberNeverOverriden.Global
8486

8587
[Fact]
@@ -99,6 +101,7 @@ public void DegreeToAngleUnits()
99101
AssertEx.EqualTolerance(NanodegreesInOneDegree, degree.Nanodegrees, NanodegreesTolerance);
100102
AssertEx.EqualTolerance(NanoradiansInOneDegree, degree.Nanoradians, NanoradiansTolerance);
101103
AssertEx.EqualTolerance(RadiansInOneDegree, degree.Radians, RadiansTolerance);
104+
AssertEx.EqualTolerance(RevolutionsInOneDegree, degree.Revolutions, RevolutionsTolerance);
102105
}
103106

104107
[Fact]
@@ -117,6 +120,7 @@ public void FromValueAndUnit()
117120
AssertEx.EqualTolerance(1, Angle.From(1, AngleUnit.Nanodegree).Nanodegrees, NanodegreesTolerance);
118121
AssertEx.EqualTolerance(1, Angle.From(1, AngleUnit.Nanoradian).Nanoradians, NanoradiansTolerance);
119122
AssertEx.EqualTolerance(1, Angle.From(1, AngleUnit.Radian).Radians, RadiansTolerance);
123+
AssertEx.EqualTolerance(1, Angle.From(1, AngleUnit.Revolution).Revolutions, RevolutionsTolerance);
120124
}
121125

122126
[Fact]
@@ -136,6 +140,7 @@ public void As()
136140
AssertEx.EqualTolerance(NanodegreesInOneDegree, degree.As(AngleUnit.Nanodegree), NanodegreesTolerance);
137141
AssertEx.EqualTolerance(NanoradiansInOneDegree, degree.As(AngleUnit.Nanoradian), NanoradiansTolerance);
138142
AssertEx.EqualTolerance(RadiansInOneDegree, degree.As(AngleUnit.Radian), RadiansTolerance);
143+
AssertEx.EqualTolerance(RevolutionsInOneDegree, degree.As(AngleUnit.Revolution), RevolutionsTolerance);
139144
}
140145

141146
[Fact]
@@ -155,6 +160,7 @@ public void ConversionRoundTrip()
155160
AssertEx.EqualTolerance(1, Angle.FromNanodegrees(degree.Nanodegrees).Degrees, NanodegreesTolerance);
156161
AssertEx.EqualTolerance(1, Angle.FromNanoradians(degree.Nanoradians).Degrees, NanoradiansTolerance);
157162
AssertEx.EqualTolerance(1, Angle.FromRadians(degree.Radians).Degrees, RadiansTolerance);
163+
AssertEx.EqualTolerance(1, Angle.FromRevolutions(degree.Revolutions).Degrees, RevolutionsTolerance);
158164
}
159165

160166
[Fact]

UnitsNet/GeneratedCode/Extensions/Number/NumberToAngleExtensions.g.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,40 @@ public static class NumberToAngleExtensions
486486

487487
#endregion
488488

489+
#region Revolution
490+
491+
/// <inheritdoc cref="Angle.FromRevolutions(double)"/>
492+
public static Angle Revolutions(this int value) => Angle.FromRevolutions(value);
493+
494+
/// <inheritdoc cref="Angle.FromRevolutions(double?)"/>
495+
public static Angle? Revolutions(this int? value) => Angle.FromRevolutions(value);
496+
497+
/// <inheritdoc cref="Angle.FromRevolutions(double)"/>
498+
public static Angle Revolutions(this long value) => Angle.FromRevolutions(value);
499+
500+
/// <inheritdoc cref="Angle.FromRevolutions(double?)"/>
501+
public static Angle? Revolutions(this long? value) => Angle.FromRevolutions(value);
502+
503+
/// <inheritdoc cref="Angle.FromRevolutions(double)"/>
504+
public static Angle Revolutions(this double value) => Angle.FromRevolutions(value);
505+
506+
/// <inheritdoc cref="Angle.FromRevolutions(double?)"/>
507+
public static Angle? Revolutions(this double? value) => Angle.FromRevolutions(value);
508+
509+
/// <inheritdoc cref="Angle.FromRevolutions(double)"/>
510+
public static Angle Revolutions(this float value) => Angle.FromRevolutions(value);
511+
512+
/// <inheritdoc cref="Angle.FromRevolutions(double?)"/>
513+
public static Angle? Revolutions(this float? value) => Angle.FromRevolutions(value);
514+
515+
/// <inheritdoc cref="Angle.FromRevolutions(double)"/>
516+
public static Angle Revolutions(this decimal value) => Angle.FromRevolutions(Convert.ToDouble(value));
517+
518+
/// <inheritdoc cref="Angle.FromRevolutions(double?)"/>
519+
public static Angle? Revolutions(this decimal? value) => Angle.FromRevolutions(value == null ? (double?)null : Convert.ToDouble(value.Value));
520+
521+
#endregion
522+
489523
}
490524
}
491525
#endif

UnitsNet/GeneratedCode/Quantities/Angle.g.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,14 @@ public double Radians
233233
get { return _degrees/180*Math.PI; }
234234
}
235235

236+
/// <summary>
237+
/// Get Angle in Revolutions.
238+
/// </summary>
239+
public double Revolutions
240+
{
241+
get { return _degrees/360; }
242+
}
243+
236244
#endregion
237245

238246
#region Static
@@ -476,6 +484,24 @@ public static Angle FromRadians(QuantityValue radians)
476484
}
477485
#endif
478486

487+
/// <summary>
488+
/// Get Angle from Revolutions.
489+
/// </summary>
490+
#if WINDOWS_UWP
491+
[Windows.Foundation.Metadata.DefaultOverload]
492+
public static Angle FromRevolutions(double revolutions)
493+
{
494+
double value = (double) revolutions;
495+
return new Angle(value*360);
496+
}
497+
#else
498+
public static Angle FromRevolutions(QuantityValue revolutions)
499+
{
500+
double value = (double) revolutions;
501+
return new Angle((value*360));
502+
}
503+
#endif
504+
479505
// Windows Runtime Component does not support nullable types (double?): https://msdn.microsoft.com/en-us/library/br230301.aspx
480506
#if !WINDOWS_UWP
481507
/// <summary>
@@ -673,6 +699,21 @@ public static Angle FromRadians(QuantityValue radians)
673699
}
674700
}
675701

702+
/// <summary>
703+
/// Get nullable Angle from nullable Revolutions.
704+
/// </summary>
705+
public static Angle? FromRevolutions(QuantityValue? revolutions)
706+
{
707+
if (revolutions.HasValue)
708+
{
709+
return FromRevolutions(revolutions.Value);
710+
}
711+
else
712+
{
713+
return null;
714+
}
715+
}
716+
676717
#endif
677718

678719
/// <summary>
@@ -717,6 +758,8 @@ public static Angle From(QuantityValue value, AngleUnit fromUnit)
717758
return FromNanoradians(value);
718759
case AngleUnit.Radian:
719760
return FromRadians(value);
761+
case AngleUnit.Revolution:
762+
return FromRevolutions(value);
720763

721764
default:
722765
throw new NotImplementedException("fromUnit: " + fromUnit);
@@ -765,6 +808,8 @@ public static Angle From(QuantityValue value, AngleUnit fromUnit)
765808
return FromNanoradians(value.Value);
766809
case AngleUnit.Radian:
767810
return FromRadians(value.Value);
811+
case AngleUnit.Revolution:
812+
return FromRevolutions(value.Value);
768813

769814
default:
770815
throw new NotImplementedException("fromUnit: " + fromUnit);
@@ -964,6 +1009,8 @@ public double As(AngleUnit unit)
9641009
return Nanoradians;
9651010
case AngleUnit.Radian:
9661011
return Radians;
1012+
case AngleUnit.Revolution:
1013+
return Revolutions;
9671014

9681015
default:
9691016
throw new NotImplementedException("unit: " + unit);

UnitsNet/GeneratedCode/UnitSystem.Default.g.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,12 @@ private static readonly ReadOnlyCollection<UnitLocalization> DefaultLocalization
297297
new AbbreviationsForCulture("en-US", "rad"),
298298
new AbbreviationsForCulture("ru-RU", "рад"),
299299
}),
300+
new CulturesForEnumValue((int) AngleUnit.Revolution,
301+
new[]
302+
{
303+
new AbbreviationsForCulture("en-US", "r"),
304+
new AbbreviationsForCulture("ru-RU", "r"),
305+
}),
300306
}),
301307
new UnitLocalization(typeof (ApparentEnergyUnit),
302308
new[]
@@ -424,15 +430,6 @@ private static readonly ReadOnlyCollection<UnitLocalization> DefaultLocalization
424430
new AbbreviationsForCulture("en-US", "kg/m²"),
425431
}),
426432
}),
427-
new UnitLocalization(typeof (AreaDensityUnit),
428-
new[]
429-
{
430-
new CulturesForEnumValue((int) AreaDensityUnit.KilogramPerSquareMeter,
431-
new[]
432-
{
433-
new AbbreviationsForCulture("en-US", "kg/m²"),
434-
}),
435-
}),
436433
new UnitLocalization(typeof (AreaMomentOfInertiaUnit),
437434
new[]
438435
{

UnitsNet/GeneratedCode/Units/AngleUnit.g.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,6 @@ public enum AngleUnit
5555
Nanodegree,
5656
Nanoradian,
5757
Radian,
58+
Revolution,
5859
}
5960
}

UnitsNet/UnitDefinitions/Angle.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,22 @@
7676
"Abbreviations": [ "g" ]
7777
}
7878
]
79+
},
80+
{
81+
"SingularName": "Revolution",
82+
"PluralName": "Revolutions",
83+
"FromUnitToBaseFunc": "x*360",
84+
"FromBaseToUnitFunc": "x/360",
85+
"Localization": [
86+
{
87+
"Culture": "en-US",
88+
"Abbreviations": [ "r" ]
89+
},
90+
{
91+
"Culture": "ru-RU",
92+
"Abbreviations": [ "r" ]
93+
}
94+
]
7995
}
8096
]
8197
}

0 commit comments

Comments
 (0)