Skip to content

Commit adfc84a

Browse files
author
Erik Ovegard
committed
Merge branch 'master' into feature/operator-overloading
Conflicts: UnitsNet.Tests/CustomCode/AngleTests.cs UnitsNet.Tests/CustomCode/MassFlowTests.cs UnitsNet.Tests/CustomCode/RotationalSpeedTests.cs
2 parents ecec14d + 0f3d871 commit adfc84a

29 files changed

+3556
-246
lines changed

.vs/config/applicationhost.config

Lines changed: 1030 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ Serialization
123123
**Important!**
124124
We cannot guarantee backwards compatibility, although we will strive to do that on a "best effort" basis and bumping the major nuget version when a change is necessary.
125125

126+
The base unit of any unit should be be treated as volatile as we have changed this several times in the history of this library already. Either to reduce precision errors of common units or to simplify code generation. An example is Mass, where the base unit was first Kilogram as this is the SI unit of mass, but in order to use powershell scripts to generate milligrams, nanograms etc. it was easier to choose Gram as the base unit of Mass.
127+
126128
What It Is Not
127129
===
128130
* It is not an equation solver

UnitsNet.Tests/CustomCode/AngleTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,31 @@ protected override double RadiansInOneDegree
6363
get { return Math.PI / 2 / 90; }
6464
}
6565

66+
protected override double NanoradiansInOneDegree
67+
{
68+
get { return (Math.PI / 2 / 90) * 1E9; }
69+
}
70+
71+
protected override double MicroradiansInOneDegree
72+
{
73+
get { return (Math.PI / 2 / 90) * 1E6; }
74+
}
75+
76+
protected override double MilliradiansInOneDegree
77+
{
78+
get { return (Math.PI / 2 / 90) * 1E3; }
79+
}
80+
81+
protected override double CentiradiansInOneDegree
82+
{
83+
get { return (Math.PI / 2 / 90) * 1E2; }
84+
}
85+
86+
protected override double DeciradiansInOneDegree
87+
{
88+
get { return (Math.PI / 2 / 90) * 1E1; }
89+
}
90+
6691
protected override double ArcsecondsInOneDegree
6792
{
6893
get
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright © 2007 by Initial Force AS. All rights reserved.
2+
// https://github.com/InitialForce/UnitsNet
3+
//
4+
// Permission is hereby granted, free of charge, to any person obtaining a copy
5+
// of this software and associated documentation files (the "Software"), to deal
6+
// in the Software without restriction, including without limitation the rights
7+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
// copies of the Software, and to permit persons to whom the Software is
9+
// furnished to do so, subject to the following conditions:
10+
//
11+
// The above copyright notice and this permission notice shall be included in
12+
// all copies or substantial portions of the Software.
13+
//
14+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20+
// THE SOFTWARE.
21+
22+
23+
using System;
24+
25+
namespace UnitsNet.Tests.CustomCode
26+
{
27+
public class ForceChangeRateTests : ForceChangeRateTestsBase
28+
{
29+
// TODO Override properties in base class here
30+
protected override double NewtonsPerSecondInOneNewtonPerSecond
31+
{
32+
get { return 1; }
33+
}
34+
}
35+
}

UnitsNet.Tests/CustomCode/MassFlowTests.cs

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,56 @@ public void DurationTimesMassFlowEqualsMass()
5353
Assert.AreEqual(mass, Mass.FromKilograms(80.0));
5454
}
5555

56-
protected override double KilogramsPerSecondInOneKilogramPerSecond
56+
protected override double GramsPerSecondInOneGramPerSecond
5757
{
58-
get
58+
get { return 1; }
59+
}
60+
61+
protected override double DecagramsPerSecondInOneGramPerSecond
5962
{
60-
return 1.0;
63+
get { return 1E-1; }
6164
}
65+
66+
protected override double HectogramsPerSecondInOneGramPerSecond
67+
{
68+
get { return 1E-2; }
69+
}
70+
71+
protected override double KilogramsPerSecondInOneGramPerSecond
72+
{
73+
get { return 1E-3; }
74+
}
75+
76+
protected override double DecigramsPerSecondInOneGramPerSecond
77+
{
78+
get { return 1E1; }
79+
}
80+
81+
protected override double CentigramsPerSecondInOneGramPerSecond
82+
{
83+
get { return 1E2; }
84+
}
85+
86+
protected override double MilligramsPerSecondInOneGramPerSecond
87+
{
88+
get { return 1E3; }
89+
}
90+
91+
protected override double MicrogramsPerSecondInOneGramPerSecond
92+
{
93+
get { return 1E6; }
94+
}
95+
96+
protected override double NanogramsPerSecondInOneGramPerSecond
97+
{
98+
get { return 1E9; }
6299
}
63100

64-
protected override double TonnesPerDayInOneKilogramPerSecond
101+
protected override double TonnesPerDayInOneGramPerSecond
65102
{
66103
get
67104
{
68-
return (60.0 * 60 * 24 / 1000);
105+
return (60.0 * 60 * 24 / 1E6);
69106
}
70107
}
71108
}

UnitsNet.Tests/CustomCode/RotationalSpeedTests.cs

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,22 +69,44 @@ public void ForceTimesRotationalSpeedEqualsPower()
6969
Assert.AreEqual(power, Power.FromWatts(20.0));
7070
}
7171

72-
protected override double RadiansPerSecondInOneRevolutionPerSecond
72+
protected override double RadiansPerSecondInOneRadianPerSecond
7373
{
74-
get
74+
get { return 1; }
75+
}
76+
77+
protected override double DeciradiansPerSecondInOneRadianPerSecond
7578
{
76-
return 2 * Math.PI;
79+
get { return 1E1; }
7780
}
81+
82+
protected override double CentiradiansPerSecondInOneRadianPerSecond
83+
{
84+
get { return 1E2; }
7885
}
7986

80-
protected override double RevolutionsPerMinuteInOneRevolutionPerSecond
87+
protected override double MilliradiansPerSecondInOneRadianPerSecond
8188
{
82-
get { return 1.0*60; }
89+
get { return 1E3; }
8390
}
8491

85-
protected override double RevolutionsPerSecondInOneRevolutionPerSecond
92+
protected override double MicroradiansPerSecondInOneRadianPerSecond
8693
{
87-
get { return 1; }
94+
get { return 1E6; }
95+
}
96+
97+
protected override double NanoradiansPerSecondInOneRadianPerSecond
98+
{
99+
get { return 1E9; }
100+
}
101+
102+
protected override double RevolutionsPerMinuteInOneRadianPerSecond
103+
{
104+
get { return (60*1) / (2 * Math.PI); }
105+
}
106+
107+
protected override double RevolutionsPerSecondInOneRadianPerSecond
108+
{
109+
get { return 1/(2*Math.PI); }
88110
}
89111
}
90112
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright © 2007 by Initial Force AS. All rights reserved.
2+
// https://github.com/InitialForce/UnitsNet
3+
//
4+
// Permission is hereby granted, free of charge, to any person obtaining a copy
5+
// of this software and associated documentation files (the "Software"), to deal
6+
// in the Software without restriction, including without limitation the rights
7+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
// copies of the Software, and to permit persons to whom the Software is
9+
// furnished to do so, subject to the following conditions:
10+
//
11+
// The above copyright notice and this permission notice shall be included in
12+
// all copies or substantial portions of the Software.
13+
//
14+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20+
// THE SOFTWARE.
21+
22+
23+
using System;
24+
25+
namespace UnitsNet.Tests.CustomCode
26+
{
27+
public class TemperatureChangeRateTests : TemperatureChangeRateTestsBase
28+
{
29+
protected override double DegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
30+
{
31+
get { return 1; }
32+
}
33+
34+
protected override double DecadegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
35+
{
36+
get { return 1E-1; }
37+
}
38+
39+
protected override double HectodegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
40+
{
41+
get { return 1E-2; }
42+
}
43+
44+
protected override double KilodegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
45+
{
46+
get { return 1E-3; }
47+
}
48+
49+
protected override double DecidegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
50+
{
51+
get { return 1E1; }
52+
}
53+
54+
protected override double CentidegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
55+
{
56+
get { return 1E2; }
57+
}
58+
59+
protected override double MillidegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
60+
{
61+
get { return 1E3; }
62+
}
63+
64+
protected override double MicrodegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
65+
{
66+
get { return 1E6; }
67+
}
68+
69+
protected override double NanodegreesCelsiusPerSecondInOneDegreeCelsiusPerSecond
70+
{
71+
get { return 1E9; }
72+
}
73+
}
74+
}

UnitsNet.Tests/GeneratedCode/AngleTestsBase.g.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,25 @@ public abstract partial class AngleTestsBase
3838
{
3939
protected abstract double ArcminutesInOneDegree { get; }
4040
protected abstract double ArcsecondsInOneDegree { get; }
41+
protected abstract double CentiradiansInOneDegree { get; }
42+
protected abstract double DeciradiansInOneDegree { get; }
4143
protected abstract double DegreesInOneDegree { get; }
4244
protected abstract double GradiansInOneDegree { get; }
45+
protected abstract double MicroradiansInOneDegree { get; }
46+
protected abstract double MilliradiansInOneDegree { get; }
47+
protected abstract double NanoradiansInOneDegree { get; }
4348
protected abstract double RadiansInOneDegree { get; }
4449

4550
// ReSharper disable VirtualMemberNeverOverriden.Global
4651
protected virtual double ArcminutesTolerance { get { return 1e-5; } }
4752
protected virtual double ArcsecondsTolerance { get { return 1e-5; } }
53+
protected virtual double CentiradiansTolerance { get { return 1e-5; } }
54+
protected virtual double DeciradiansTolerance { get { return 1e-5; } }
4855
protected virtual double DegreesTolerance { get { return 1e-5; } }
4956
protected virtual double GradiansTolerance { get { return 1e-5; } }
57+
protected virtual double MicroradiansTolerance { get { return 1e-5; } }
58+
protected virtual double MilliradiansTolerance { get { return 1e-5; } }
59+
protected virtual double NanoradiansTolerance { get { return 1e-5; } }
5060
protected virtual double RadiansTolerance { get { return 1e-5; } }
5161
// ReSharper restore VirtualMemberNeverOverriden.Global
5262

@@ -56,8 +66,13 @@ public void DegreeToAngleUnits()
5666
Angle degree = Angle.FromDegrees(1);
5767
Assert.AreEqual(ArcminutesInOneDegree, degree.Arcminutes, ArcminutesTolerance);
5868
Assert.AreEqual(ArcsecondsInOneDegree, degree.Arcseconds, ArcsecondsTolerance);
69+
Assert.AreEqual(CentiradiansInOneDegree, degree.Centiradians, CentiradiansTolerance);
70+
Assert.AreEqual(DeciradiansInOneDegree, degree.Deciradians, DeciradiansTolerance);
5971
Assert.AreEqual(DegreesInOneDegree, degree.Degrees, DegreesTolerance);
6072
Assert.AreEqual(GradiansInOneDegree, degree.Gradians, GradiansTolerance);
73+
Assert.AreEqual(MicroradiansInOneDegree, degree.Microradians, MicroradiansTolerance);
74+
Assert.AreEqual(MilliradiansInOneDegree, degree.Milliradians, MilliradiansTolerance);
75+
Assert.AreEqual(NanoradiansInOneDegree, degree.Nanoradians, NanoradiansTolerance);
6176
Assert.AreEqual(RadiansInOneDegree, degree.Radians, RadiansTolerance);
6277
}
6378

@@ -66,8 +81,13 @@ public void FromValueAndUnit()
6681
{
6782
Assert.AreEqual(1, Angle.From(1, AngleUnit.Arcminute).Arcminutes, ArcminutesTolerance);
6883
Assert.AreEqual(1, Angle.From(1, AngleUnit.Arcsecond).Arcseconds, ArcsecondsTolerance);
84+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Centiradian).Centiradians, CentiradiansTolerance);
85+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Deciradian).Deciradians, DeciradiansTolerance);
6986
Assert.AreEqual(1, Angle.From(1, AngleUnit.Degree).Degrees, DegreesTolerance);
7087
Assert.AreEqual(1, Angle.From(1, AngleUnit.Gradian).Gradians, GradiansTolerance);
88+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Microradian).Microradians, MicroradiansTolerance);
89+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Milliradian).Milliradians, MilliradiansTolerance);
90+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Nanoradian).Nanoradians, NanoradiansTolerance);
7191
Assert.AreEqual(1, Angle.From(1, AngleUnit.Radian).Radians, RadiansTolerance);
7292
}
7393

@@ -77,8 +97,13 @@ public void As()
7797
var degree = Angle.FromDegrees(1);
7898
Assert.AreEqual(ArcminutesInOneDegree, degree.As(AngleUnit.Arcminute), ArcminutesTolerance);
7999
Assert.AreEqual(ArcsecondsInOneDegree, degree.As(AngleUnit.Arcsecond), ArcsecondsTolerance);
100+
Assert.AreEqual(CentiradiansInOneDegree, degree.As(AngleUnit.Centiradian), CentiradiansTolerance);
101+
Assert.AreEqual(DeciradiansInOneDegree, degree.As(AngleUnit.Deciradian), DeciradiansTolerance);
80102
Assert.AreEqual(DegreesInOneDegree, degree.As(AngleUnit.Degree), DegreesTolerance);
81103
Assert.AreEqual(GradiansInOneDegree, degree.As(AngleUnit.Gradian), GradiansTolerance);
104+
Assert.AreEqual(MicroradiansInOneDegree, degree.As(AngleUnit.Microradian), MicroradiansTolerance);
105+
Assert.AreEqual(MilliradiansInOneDegree, degree.As(AngleUnit.Milliradian), MilliradiansTolerance);
106+
Assert.AreEqual(NanoradiansInOneDegree, degree.As(AngleUnit.Nanoradian), NanoradiansTolerance);
82107
Assert.AreEqual(RadiansInOneDegree, degree.As(AngleUnit.Radian), RadiansTolerance);
83108
}
84109

@@ -88,8 +113,13 @@ public void ConversionRoundTrip()
88113
Angle degree = Angle.FromDegrees(1);
89114
Assert.AreEqual(1, Angle.FromArcminutes(degree.Arcminutes).Degrees, ArcminutesTolerance);
90115
Assert.AreEqual(1, Angle.FromArcseconds(degree.Arcseconds).Degrees, ArcsecondsTolerance);
116+
Assert.AreEqual(1, Angle.FromCentiradians(degree.Centiradians).Degrees, CentiradiansTolerance);
117+
Assert.AreEqual(1, Angle.FromDeciradians(degree.Deciradians).Degrees, DeciradiansTolerance);
91118
Assert.AreEqual(1, Angle.FromDegrees(degree.Degrees).Degrees, DegreesTolerance);
92119
Assert.AreEqual(1, Angle.FromGradians(degree.Gradians).Degrees, GradiansTolerance);
120+
Assert.AreEqual(1, Angle.FromMicroradians(degree.Microradians).Degrees, MicroradiansTolerance);
121+
Assert.AreEqual(1, Angle.FromMilliradians(degree.Milliradians).Degrees, MilliradiansTolerance);
122+
Assert.AreEqual(1, Angle.FromNanoradians(degree.Nanoradians).Degrees, NanoradiansTolerance);
93123
Assert.AreEqual(1, Angle.FromRadians(degree.Radians).Degrees, RadiansTolerance);
94124
}
95125

0 commit comments

Comments
 (0)