Skip to content

Commit 2c0322e

Browse files
committed
Merge pull request #124 from eriove/feature/operator-overloading
Add operator overloads of the most common unit conversions
2 parents 153185d + 1794043 commit 2c0322e

31 files changed

+1014
-13
lines changed

UnitsNet.Tests/CustomCode/AngleTests.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,25 @@
2020
// THE SOFTWARE.
2121

2222
using System;
23+
using NUnit.Framework;
2324

2425
namespace UnitsNet.Tests.CustomCode
2526
{
2627
public class AngleTests : AngleTestsBase
2728
{
29+
[Test]
30+
public void AngleDividedByTimeSpanEqualsRotationalSpeed()
31+
{
32+
var rotationalSpeed = Angle.FromRadians(10)/TimeSpan.FromSeconds(5);
33+
Assert.AreEqual(rotationalSpeed, RotationalSpeed.FromRadiansPerSecond(2));
34+
}
35+
36+
[Test]
37+
public void AngleDividedByDurationEqualsRotationalSpeed()
38+
{
39+
var rotationalSpeed = Angle.FromRadians(10) / Duration.FromSeconds(5);
40+
Assert.AreEqual(rotationalSpeed, RotationalSpeed.FromRadiansPerSecond(2));
41+
}
2842

2943
protected override double DegreesInOneDegree
3044
{
@@ -33,7 +47,7 @@ protected override double DegreesInOneDegree
3347

3448
protected override double GradiansInOneDegree
3549
{
36-
get { return 400/360.0; }
50+
get { return 400 / 360.0; }
3751
}
3852

3953
protected override double ArcminutesInOneDegree
@@ -46,7 +60,7 @@ protected override double ArcminutesInOneDegree
4660

4761
protected override double RadiansInOneDegree
4862
{
49-
get { return Math.PI/2/90; }
63+
get { return Math.PI / 2 / 90; }
5064
}
5165

5266
protected override double NanoradiansInOneDegree

UnitsNet.Tests/CustomCode/AreaTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,19 @@
1919
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2020
// THE SOFTWARE.
2121

22+
using NUnit.Framework;
23+
2224
namespace UnitsNet.Tests.CustomCode
2325
{
2426
public class AreaTests : AreaTestsBase
2527
{
28+
[Test]
29+
public void AreaDividedByLengthEqualsLength()
30+
{
31+
var length = Area.FromSquareMeters(50) / Length.FromMeters(5);
32+
Assert.AreEqual(length, Length.FromMeters(10));
33+
}
34+
2635
protected override double SquareCentimetersInOneSquareMeter
2736
{
2837
get { return 1E4; }

UnitsNet.Tests/CustomCode/DensityTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,26 @@
1919
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2020
// THE SOFTWARE.
2121

22+
using NUnit.Framework;
23+
2224
namespace UnitsNet.Tests.CustomCode
2325
{
2426
public class DensityTests : DensityTestsBase
2527
{
28+
[Test]
29+
public static void DensityTimesVolumeEqualsMass()
30+
{
31+
var mass = Density.FromKilogramsPerCubicMeter(2) * Volume.FromCubicMeters(3);
32+
Assert.AreEqual(mass, Mass.FromKilograms(6));
33+
}
34+
35+
[Test]
36+
public static void VolumeTimesDensityEqualsMass()
37+
{
38+
var mass = Volume.FromCubicMeters(3) * Density.FromKilogramsPerCubicMeter(2);
39+
Assert.AreEqual(mass, Mass.FromKilograms(6));
40+
}
41+
2642
protected override double KilogramsPerCubicCentimeterInOneKilogramPerCubicMeter
2743
{
2844
get { return 1e-6; }

UnitsNet.Tests/CustomCode/ForceTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,36 @@
1818
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1919
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2020
// THE SOFTWARE.
21+
using NUnit.Framework;
2122

2223
namespace UnitsNet.Tests.CustomCode
2324
{
2425
public class ForceTests : ForceTestsBase
2526
{
27+
[Test]
28+
public void ForceTimesSpeedEqualsPower()
29+
{
30+
var power = Force.FromNewtons(27.0) * Speed.FromMetersPerSecond(10.0);
31+
Assert.AreEqual(power, Power.FromWatts(270));
32+
}
33+
[Test]
34+
public void SpeedTimesForceEqualsPower()
35+
{
36+
var power = Speed.FromMetersPerSecond(10.0)* Force.FromNewtons(27.0);
37+
Assert.AreEqual(power, Power.FromWatts(270));
38+
}
39+
[Test]
40+
public void ForceDividedByMassEqualsAcceleration()
41+
{
42+
var acceleration= Force.FromNewtons(27)/Mass.FromKilograms(9);
43+
Assert.AreEqual(acceleration, Acceleration.FromMeterPerSecondSquared(3));
44+
}
45+
[Test]
46+
public void ForceDividedByAreaEqualsPressure()
47+
{
48+
var pressure=Force.FromNewtons(81)/Area.FromSquareMeters(9);
49+
Assert.AreEqual(pressure, Pressure.FromNewtonsPerSquareMeter(9));
50+
}
2651
protected override double DyneInOneNewton
2752
{
2853
get { return 1E5; }

UnitsNet.Tests/CustomCode/KinematicViscosityTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,48 @@
2020
// THE SOFTWARE.
2121

2222

23+
using NUnit.Framework;
2324
using System;
2425

2526
namespace UnitsNet.Tests.CustomCode
2627
{
2728
public class KinematicViscosityTests : KinematicViscosityTestsBase
2829
{
30+
[Test]
31+
public static void KinematicViscosityDividedByLengthEqualsSpeed()
32+
{
33+
var speed = KinematicViscosity.FromSquareMetersPerSecond(4) / Length.FromMeters(2);
34+
Assert.AreEqual(speed, Speed.FromMetersPerSecond(2));
35+
}
36+
37+
[Test]
38+
public static void KinematicViscosityTimesTimeSpanEqualsArea()
39+
{
40+
var area = KinematicViscosity.FromSquareMetersPerSecond(4) * TimeSpan.FromSeconds(2);
41+
Assert.AreEqual(area, Area.FromSquareMeters(8));
42+
}
43+
44+
[Test]
45+
public static void TimeSpanTimesKinematicViscosityEqualsArea()
46+
{
47+
var area = TimeSpan.FromSeconds(2) * KinematicViscosity.FromSquareMetersPerSecond(4);
48+
Assert.AreEqual(area, Area.FromSquareMeters(8));
49+
}
50+
51+
[Test]
52+
public static void KinematicViscosityTimesDurationEqualsArea()
53+
{
54+
var area = KinematicViscosity.FromSquareMetersPerSecond(4) * Duration.FromSeconds(2);
55+
Assert.AreEqual(area, Area.FromSquareMeters(8));
56+
}
57+
58+
[Test]
59+
public static void DurationTimesKinematicViscosityEqualsArea()
60+
{
61+
var area = Duration.FromSeconds(2) * KinematicViscosity.FromSquareMetersPerSecond(4);
62+
Assert.AreEqual(area, Area.FromSquareMeters(8));
63+
}
64+
2965
#region Overrides of KinematicViscosityTestsBase
3066

3167
protected override double CentistokesInOneSquareMeterPerSecond

UnitsNet.Tests/CustomCode/LengthTests.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,46 @@
2020
// THE SOFTWARE.
2121

2222
using System;
23+
using NUnit.Framework;
2324

2425
namespace UnitsNet.Tests.CustomCode
2526
{
2627
public class LengthTests : LengthTestsBase
2728
{
29+
[Test]
30+
public void LengthTimesLengthEqualsArea()
31+
{
32+
var area = Length.FromMeters(10) * Length.FromMeters(2);
33+
Assert.AreEqual(area, Area.FromSquareMeters(20));
34+
}
35+
36+
[Test]
37+
public void AreaTimesLengthEqualsVolume()
38+
{
39+
var volume = Area.FromSquareMeters(10) * Length.FromMeters(3);
40+
Assert.AreEqual(volume, Volume.FromCubicMeters(30));
41+
}
42+
[Test]
43+
public void LengthTimesAreaEqualsVolume()
44+
{
45+
var volume = Length.FromMeters(3) * Area.FromSquareMeters(9);
46+
Assert.AreEqual(volume, Volume.FromCubicMeters(27));
47+
}
48+
49+
[Test]
50+
public void ForceTimesLengthEqualsTorque()
51+
{
52+
var torque = Force.FromNewtons(1) * Length.FromMeters(3);
53+
Assert.AreEqual(torque, Torque.FromNewtonMeters(3));
54+
}
55+
56+
[Test]
57+
public void LengthTimesForceEqualsTorque()
58+
{
59+
var torque = Length.FromMeters(3) * Force.FromNewtons(1);
60+
Assert.AreEqual(torque, Torque.FromNewtonMeters(3));
61+
}
62+
2863
protected override double CentimetersInOneMeter
2964
{
3065
get { return 100; }
@@ -90,10 +125,12 @@ protected override double YardsInOneMeter
90125
get { return 1.09361; }
91126
}
92127

128+
93129
protected override double NauticalMilesInOneMeter
94130
{
95131
get
96132
{ return 1.0/1852.0; }
97133
}
134+
98135
}
99136
}

UnitsNet.Tests/CustomCode/MassFlowTests.cs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,49 @@
1919
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2020
// THE SOFTWARE.
2121

22-
2322
using System;
23+
using NUnit.Framework;
24+
using UnitsNet.Units;
2425

2526
namespace UnitsNet.Tests.CustomCode
2627
{
2728
public class MassFlowTests : MassFlowTestsBase
2829
{
30+
[Test]
31+
public void MassFlowTimesTimeSpanEqualsMass()
32+
{
33+
var mass = MassFlow.FromKilogramsPerSecond(20.0) * TimeSpan.FromSeconds(4.0);
34+
Assert.AreEqual(mass, Mass.FromKilograms(80.0));
35+
}
36+
[Test]
37+
public void TimeSpanTimesMassFlowEqualsMass()
38+
{
39+
var mass = TimeSpan.FromSeconds(4.0) * MassFlow.FromKilogramsPerSecond(20.0);
40+
Assert.AreEqual(mass, Mass.FromKilograms(80.0));
41+
}
42+
43+
[Test]
44+
public void MassFlowTimesDurationEqualsMass()
45+
{
46+
var mass = MassFlow.FromKilogramsPerSecond(20.0) * Duration.FromSeconds(4.0);
47+
Assert.AreEqual(mass, Mass.FromKilograms(80.0));
48+
}
49+
[Test]
50+
public void DurationTimesMassFlowEqualsMass()
51+
{
52+
var mass = Duration.FromSeconds(4.0) * MassFlow.FromKilogramsPerSecond(20.0);
53+
Assert.AreEqual(mass, Mass.FromKilograms(80.0));
54+
}
55+
2956
protected override double GramsPerSecondInOneGramPerSecond
3057
{
3158
get { return 1; }
3259
}
3360

3461
protected override double DecagramsPerSecondInOneGramPerSecond
35-
{
62+
{
3663
get { return 1E-1; }
37-
}
64+
}
3865

3966
protected override double HectogramsPerSecondInOneGramPerSecond
4067
{

UnitsNet.Tests/CustomCode/MassTests.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,48 @@
1818
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1919
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2020
// THE SOFTWARE.
21+
using NUnit.Framework;
22+
using System;
2123

2224
namespace UnitsNet.Tests.CustomCode
2325
{
2426
public class MassTests : MassTestsBase
2527
{
28+
[Test]
29+
public void MassDividedByTimeSpanEqualsMassFlow()
30+
{
31+
var massFlow= Mass.FromKilograms(18.0) / TimeSpan.FromSeconds(6);
32+
Assert.AreEqual(massFlow, MassFlow.FromKilogramsPerSecond(3.0));
33+
}
34+
35+
[Test]
36+
public void MassDividedByDurationEqualsMassFlow()
37+
{
38+
var massFlow = Mass.FromKilograms(18.0) / Duration.FromSeconds(6);
39+
Assert.AreEqual(massFlow, MassFlow.FromKilogramsPerSecond(3.0));
40+
}
41+
42+
[Test]
43+
public void MassDividedByVolumeEqualsDensity()
44+
{
45+
var density = Mass.FromKilograms(18) / Volume.FromCubicMeters(3);
46+
Assert.AreEqual(density, Density.FromKilogramsPerCubicMeter(6));
47+
}
48+
49+
[Test]
50+
public void MassTimesAccelerationEqualsForce()
51+
{
52+
var force = Mass.FromKilograms(18) * Acceleration.FromMeterPerSecondSquared(3);
53+
Assert.AreEqual(force, Force.FromNewtons(54));
54+
}
55+
56+
[Test]
57+
public void AccelerationTimesMassEqualsForce()
58+
{
59+
var force = Acceleration.FromMeterPerSecondSquared(3) * Mass.FromKilograms(18);
60+
Assert.AreEqual(force, Force.FromNewtons(54));
61+
}
62+
2663
protected override double CentigramsInOneKilogram
2764
{
2865
get { return 1E5; }

UnitsNet.Tests/CustomCode/PowerTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,57 @@
1818
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1919
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2020
// THE SOFTWARE.
21+
using NUnit.Framework;
22+
using System;
2123

2224
namespace UnitsNet.Tests.CustomCode
2325
{
2426
public class PowerTests : PowerTestsBase
2527
{
28+
[Test]
29+
public void PowerDividedBySpeedEqualsForce()
30+
{
31+
var force= Power.FromWatts(15.0) / Speed.FromMetersPerSecond(3);
32+
Assert.AreEqual(force, Force.FromNewtons(5));
33+
}
34+
[Test]
35+
public void PowerDividedByRotationalSpeedEqualsForce()
36+
{
37+
var torque = Power.FromWatts(15.0) / RotationalSpeed.FromRadiansPerSecond(3);
38+
Assert.AreEqual(torque, Torque.FromNewtonMeters(5));
39+
}
40+
[Test]
41+
public void PowerDividedByTorqueEqualsRotationalSpeed()
42+
{
43+
var rotationalSpeed= Power.FromWatts(15.0) / Torque.FromNewtonMeters(3);
44+
Assert.AreEqual(rotationalSpeed, RotationalSpeed.FromRadiansPerSecond(5));
45+
}
46+
[Test]
47+
public void PowerTimesTimeSpanEqualsEnergy()
48+
{
49+
var energy = Power.FromWatts(5.0)*TimeSpan.FromSeconds(8.0);
50+
Assert.AreEqual(energy, Energy.FromJoules(40.0));
51+
}
52+
[Test]
53+
public void TimeSpanTimesPowerEqualsEnergy()
54+
{
55+
var energy = TimeSpan.FromSeconds(8.0)* Power.FromWatts(5.0);
56+
Assert.AreEqual(energy, Energy.FromJoules(40.0));
57+
}
58+
59+
[Test]
60+
public void PowerTimesDurationEqualsEnergy()
61+
{
62+
var energy = Power.FromWatts(5.0) * Duration.FromSeconds(8.0);
63+
Assert.AreEqual(energy, Energy.FromJoules(40.0));
64+
}
65+
[Test]
66+
public void DurationTimesPowerEqualsEnergy()
67+
{
68+
var energy = Duration.FromSeconds(8.0) * Power.FromWatts(5.0);
69+
Assert.AreEqual(energy, Energy.FromJoules(40.0));
70+
}
71+
2672
protected override double FemtowattsInOneWatt
2773
{
2874
get { return 1e15; }

0 commit comments

Comments
 (0)