Skip to content

Commit aeea580

Browse files
authored
Merge pull request #209 from VBP8501/add-distributedForceUnit
Add distributed force unit with operator overloads
2 parents 229bf9f + ec90299 commit aeea580

File tree

11 files changed

+1694
-2
lines changed

11 files changed

+1694
-2
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by \GenerateUnits.bat.
4+
//
5+
// Changes to this file will be lost when the code is regenerated.
6+
// The build server regenerates the code before each build and a pre-build
7+
// step will regenerate the code on each local build.
8+
//
9+
// See https://github.com/anjdreas/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
10+
//
11+
// Add CustomCode\UnitClasses\MyUnit.extra.cs files to add code to generated unit classes.
12+
// Add Extensions\MyUnitExtensions.cs to decorate unit classes with new behavior.
13+
// Add Scripts\UnitDefinitions\MyUnit.json and run GeneratUnits.bat to generate new units or unit classes.
14+
//
15+
// </auto-generated>
16+
//------------------------------------------------------------------------------
17+
18+
// Copyright (c) 2007 Andreas Gullberg Larsen ([email protected]).
19+
// https://github.com/anjdreas/UnitsNet
20+
//
21+
// Permission is hereby granted, free of charge, to any person obtaining a copy
22+
// of this software and associated documentation files (the "Software"), to deal
23+
// in the Software without restriction, including without limitation the rights
24+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25+
// copies of the Software, and to permit persons to whom the Software is
26+
// furnished to do so, subject to the following conditions:
27+
//
28+
// The above copyright notice and this permission notice shall be included in
29+
// all copies or substantial portions of the Software.
30+
//
31+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
37+
// THE SOFTWARE.
38+
39+
using NUnit.Framework;
40+
41+
namespace UnitsNet.Tests.CustomCode
42+
{
43+
public class ForcePerLengthTests : ForcePerLengthTestsBase
44+
{
45+
protected override double CentinewtonsPerMeterInOneNewtonPerMeter => 1E2;
46+
protected override double DecinewtonsPerMeterInOneNewtonPerMeter => 1E1;
47+
protected override double KilogramsForcePerMeterInOneNewtonPerMeter => 0.101972;
48+
protected override double KilonewtonsPerMeterInOneNewtonPerMeter => 1E-3;
49+
protected override double MicronewtonsPerMeterInOneNewtonPerMeter => 1E6;
50+
protected override double MillinewtonsPerMeterInOneNewtonPerMeter => 1E3;
51+
protected override double NanonewtonsPerMeterInOneNewtonPerMeter => 1E9;
52+
protected override double NewtonsPerMeterInOneNewtonPerMeter => 1;
53+
54+
[Test]
55+
public void ForcePerLengthDividedByLengthEqualsPressure()
56+
{
57+
Pressure pressure = ForcePerLength.FromNewtonsPerMeter(90) / Length.FromMeters(9);
58+
Assert.AreEqual(pressure, Pressure.FromNewtonsPerSquareMeter(10));
59+
}
60+
61+
[Test]
62+
public void ForceDividedByForcePerLengthEqualsLength()
63+
{
64+
Length length = Force.FromNewtons(10) / ForcePerLength.FromNewtonsPerMeter(2);
65+
Assert.AreEqual(length, Length.FromMeters(5));
66+
}
67+
68+
[Test]
69+
public void ForcePerLenghTimesLengthEqualForce()
70+
{
71+
Force force = ForcePerLength.FromNewtonsPerMeter(10) * Length.FromMeters(9);
72+
Assert.AreEqual(force, Force.FromNewtons(90));
73+
}
74+
}
75+
}

UnitsNet.Tests/CustomCode/ForceTests.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public class ForceTests : ForceTestsBase
4444
[Test]
4545
public void ForceDividedByAreaEqualsPressure()
4646
{
47-
Pressure pressure = Force.FromNewtons(81)/Area.FromSquareMeters(9);
48-
Assert.AreEqual(pressure, Pressure.FromNewtonsPerSquareMeter(9));
47+
Pressure pressure = Force.FromNewtons(90)/Area.FromSquareMeters(9);
48+
Assert.AreEqual(pressure, Pressure.FromNewtonsPerSquareMeter(10));
4949
}
5050

5151
[Test]
@@ -76,6 +76,13 @@ public void ForceDividedByAccelerationEqualsMass()
7676
Assert.AreEqual(acceleration, Mass.FromKilograms(4));
7777
}
7878

79+
[Test]
80+
public void ForceDividedByLengthEqualsForcePerLength()
81+
{
82+
ForcePerLength forcePerLength = Force.FromNewtons(200) / Length.FromMeters(50);
83+
Assert.AreEqual(forcePerLength, ForcePerLength.FromNewtonsPerMeter(4));
84+
}
85+
7986
[Test]
8087
public void MassByAccelerationEqualsForceUsingDouble()
8188
{
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by \GenerateUnits.bat.
4+
//
5+
// Changes to this file will be lost when the code is regenerated.
6+
// The build server regenerates the code before each build and a pre-build
7+
// step will regenerate the code on each local build.
8+
//
9+
// See https://github.com/anjdreas/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
10+
//
11+
// Add CustomCode\UnitClasses\MyUnit.extra.cs files to add code to generated unit classes.
12+
// Add Extensions\MyUnitExtensions.cs to decorate unit classes with new behavior.
13+
// Add Scripts\UnitDefinitions\MyUnit.json and run GeneratUnits.bat to generate new units or unit classes.
14+
//
15+
// </auto-generated>
16+
//------------------------------------------------------------------------------
17+
18+
// Copyright (c) 2007 Andreas Gullberg Larsen ([email protected]).
19+
// https://github.com/anjdreas/UnitsNet
20+
//
21+
// Permission is hereby granted, free of charge, to any person obtaining a copy
22+
// of this software and associated documentation files (the "Software"), to deal
23+
// in the Software without restriction, including without limitation the rights
24+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25+
// copies of the Software, and to permit persons to whom the Software is
26+
// furnished to do so, subject to the following conditions:
27+
//
28+
// The above copyright notice and this permission notice shall be included in
29+
// all copies or substantial portions of the Software.
30+
//
31+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
37+
// THE SOFTWARE.
38+
39+
using System;
40+
using NUnit.Framework;
41+
using UnitsNet.Units;
42+
43+
// Disable build warning CS1718: Comparison made to same variable; did you mean to compare something else?
44+
#pragma warning disable 1718
45+
46+
// ReSharper disable once CheckNamespace
47+
namespace UnitsNet.Tests
48+
{
49+
/// <summary>
50+
/// Test of ForcePerLength.
51+
/// </summary>
52+
[TestFixture]
53+
// ReSharper disable once PartialTypeWithSinglePart
54+
public abstract partial class ForcePerLengthTestsBase
55+
{
56+
protected abstract double CentinewtonsPerMeterInOneNewtonPerMeter { get; }
57+
protected abstract double DecinewtonsPerMeterInOneNewtonPerMeter { get; }
58+
protected abstract double KilogramsForcePerMeterInOneNewtonPerMeter { get; }
59+
protected abstract double KilonewtonsPerMeterInOneNewtonPerMeter { get; }
60+
protected abstract double MicronewtonsPerMeterInOneNewtonPerMeter { get; }
61+
protected abstract double MillinewtonsPerMeterInOneNewtonPerMeter { get; }
62+
protected abstract double NanonewtonsPerMeterInOneNewtonPerMeter { get; }
63+
protected abstract double NewtonsPerMeterInOneNewtonPerMeter { get; }
64+
65+
// ReSharper disable VirtualMemberNeverOverriden.Global
66+
protected virtual double CentinewtonsPerMeterTolerance { get { return 1e-5; } }
67+
protected virtual double DecinewtonsPerMeterTolerance { get { return 1e-5; } }
68+
protected virtual double KilogramsForcePerMeterTolerance { get { return 1e-5; } }
69+
protected virtual double KilonewtonsPerMeterTolerance { get { return 1e-5; } }
70+
protected virtual double MicronewtonsPerMeterTolerance { get { return 1e-5; } }
71+
protected virtual double MillinewtonsPerMeterTolerance { get { return 1e-5; } }
72+
protected virtual double NanonewtonsPerMeterTolerance { get { return 1e-5; } }
73+
protected virtual double NewtonsPerMeterTolerance { get { return 1e-5; } }
74+
// ReSharper restore VirtualMemberNeverOverriden.Global
75+
76+
[Test]
77+
public void NewtonPerMeterToForcePerLengthUnits()
78+
{
79+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
80+
Assert.AreEqual(CentinewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.CentinewtonsPerMeter, CentinewtonsPerMeterTolerance);
81+
Assert.AreEqual(DecinewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.DecinewtonsPerMeter, DecinewtonsPerMeterTolerance);
82+
Assert.AreEqual(KilogramsForcePerMeterInOneNewtonPerMeter, newtonpermeter.KilogramsForcePerMeter, KilogramsForcePerMeterTolerance);
83+
Assert.AreEqual(KilonewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.KilonewtonsPerMeter, KilonewtonsPerMeterTolerance);
84+
Assert.AreEqual(MicronewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.MicronewtonsPerMeter, MicronewtonsPerMeterTolerance);
85+
Assert.AreEqual(MillinewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.MillinewtonsPerMeter, MillinewtonsPerMeterTolerance);
86+
Assert.AreEqual(NanonewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.NanonewtonsPerMeter, NanonewtonsPerMeterTolerance);
87+
Assert.AreEqual(NewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.NewtonsPerMeter, NewtonsPerMeterTolerance);
88+
}
89+
90+
[Test]
91+
public void FromValueAndUnit()
92+
{
93+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.CentinewtonPerMeter).CentinewtonsPerMeter, CentinewtonsPerMeterTolerance);
94+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.DecinewtonPerMeter).DecinewtonsPerMeter, DecinewtonsPerMeterTolerance);
95+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.KilogramForcePerMeter).KilogramsForcePerMeter, KilogramsForcePerMeterTolerance);
96+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.KilonewtonPerMeter).KilonewtonsPerMeter, KilonewtonsPerMeterTolerance);
97+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.MicronewtonPerMeter).MicronewtonsPerMeter, MicronewtonsPerMeterTolerance);
98+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.MillinewtonPerMeter).MillinewtonsPerMeter, MillinewtonsPerMeterTolerance);
99+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.NanonewtonPerMeter).NanonewtonsPerMeter, NanonewtonsPerMeterTolerance);
100+
Assert.AreEqual(1, ForcePerLength.From(1, ForcePerLengthUnit.NewtonPerMeter).NewtonsPerMeter, NewtonsPerMeterTolerance);
101+
}
102+
103+
[Test]
104+
public void As()
105+
{
106+
var newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
107+
Assert.AreEqual(CentinewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.CentinewtonPerMeter), CentinewtonsPerMeterTolerance);
108+
Assert.AreEqual(DecinewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.DecinewtonPerMeter), DecinewtonsPerMeterTolerance);
109+
Assert.AreEqual(KilogramsForcePerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.KilogramForcePerMeter), KilogramsForcePerMeterTolerance);
110+
Assert.AreEqual(KilonewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.KilonewtonPerMeter), KilonewtonsPerMeterTolerance);
111+
Assert.AreEqual(MicronewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.MicronewtonPerMeter), MicronewtonsPerMeterTolerance);
112+
Assert.AreEqual(MillinewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.MillinewtonPerMeter), MillinewtonsPerMeterTolerance);
113+
Assert.AreEqual(NanonewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.NanonewtonPerMeter), NanonewtonsPerMeterTolerance);
114+
Assert.AreEqual(NewtonsPerMeterInOneNewtonPerMeter, newtonpermeter.As(ForcePerLengthUnit.NewtonPerMeter), NewtonsPerMeterTolerance);
115+
}
116+
117+
[Test]
118+
public void ConversionRoundTrip()
119+
{
120+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
121+
Assert.AreEqual(1, ForcePerLength.FromCentinewtonsPerMeter(newtonpermeter.CentinewtonsPerMeter).NewtonsPerMeter, CentinewtonsPerMeterTolerance);
122+
Assert.AreEqual(1, ForcePerLength.FromDecinewtonsPerMeter(newtonpermeter.DecinewtonsPerMeter).NewtonsPerMeter, DecinewtonsPerMeterTolerance);
123+
Assert.AreEqual(1, ForcePerLength.FromKilogramsForcePerMeter(newtonpermeter.KilogramsForcePerMeter).NewtonsPerMeter, KilogramsForcePerMeterTolerance);
124+
Assert.AreEqual(1, ForcePerLength.FromKilonewtonsPerMeter(newtonpermeter.KilonewtonsPerMeter).NewtonsPerMeter, KilonewtonsPerMeterTolerance);
125+
Assert.AreEqual(1, ForcePerLength.FromMicronewtonsPerMeter(newtonpermeter.MicronewtonsPerMeter).NewtonsPerMeter, MicronewtonsPerMeterTolerance);
126+
Assert.AreEqual(1, ForcePerLength.FromMillinewtonsPerMeter(newtonpermeter.MillinewtonsPerMeter).NewtonsPerMeter, MillinewtonsPerMeterTolerance);
127+
Assert.AreEqual(1, ForcePerLength.FromNanonewtonsPerMeter(newtonpermeter.NanonewtonsPerMeter).NewtonsPerMeter, NanonewtonsPerMeterTolerance);
128+
Assert.AreEqual(1, ForcePerLength.FromNewtonsPerMeter(newtonpermeter.NewtonsPerMeter).NewtonsPerMeter, NewtonsPerMeterTolerance);
129+
}
130+
131+
[Test]
132+
public void ArithmeticOperators()
133+
{
134+
ForcePerLength v = ForcePerLength.FromNewtonsPerMeter(1);
135+
Assert.AreEqual(-1, -v.NewtonsPerMeter, NewtonsPerMeterTolerance);
136+
Assert.AreEqual(2, (ForcePerLength.FromNewtonsPerMeter(3)-v).NewtonsPerMeter, NewtonsPerMeterTolerance);
137+
Assert.AreEqual(2, (v + v).NewtonsPerMeter, NewtonsPerMeterTolerance);
138+
Assert.AreEqual(10, (v*10).NewtonsPerMeter, NewtonsPerMeterTolerance);
139+
Assert.AreEqual(10, (10*v).NewtonsPerMeter, NewtonsPerMeterTolerance);
140+
Assert.AreEqual(2, (ForcePerLength.FromNewtonsPerMeter(10)/5).NewtonsPerMeter, NewtonsPerMeterTolerance);
141+
Assert.AreEqual(2, ForcePerLength.FromNewtonsPerMeter(10)/ForcePerLength.FromNewtonsPerMeter(5), NewtonsPerMeterTolerance);
142+
}
143+
144+
[Test]
145+
public void ComparisonOperators()
146+
{
147+
ForcePerLength oneNewtonPerMeter = ForcePerLength.FromNewtonsPerMeter(1);
148+
ForcePerLength twoNewtonsPerMeter = ForcePerLength.FromNewtonsPerMeter(2);
149+
150+
Assert.True(oneNewtonPerMeter < twoNewtonsPerMeter);
151+
Assert.True(oneNewtonPerMeter <= twoNewtonsPerMeter);
152+
Assert.True(twoNewtonsPerMeter > oneNewtonPerMeter);
153+
Assert.True(twoNewtonsPerMeter >= oneNewtonPerMeter);
154+
155+
Assert.False(oneNewtonPerMeter > twoNewtonsPerMeter);
156+
Assert.False(oneNewtonPerMeter >= twoNewtonsPerMeter);
157+
Assert.False(twoNewtonsPerMeter < oneNewtonPerMeter);
158+
Assert.False(twoNewtonsPerMeter <= oneNewtonPerMeter);
159+
}
160+
161+
[Test]
162+
public void CompareToIsImplemented()
163+
{
164+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
165+
Assert.AreEqual(0, newtonpermeter.CompareTo(newtonpermeter));
166+
Assert.Greater(newtonpermeter.CompareTo(ForcePerLength.Zero), 0);
167+
Assert.Less(ForcePerLength.Zero.CompareTo(newtonpermeter), 0);
168+
}
169+
170+
[Test]
171+
[ExpectedException(typeof(ArgumentException))]
172+
public void CompareToThrowsOnTypeMismatch()
173+
{
174+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
175+
// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
176+
newtonpermeter.CompareTo(new object());
177+
}
178+
179+
[Test]
180+
[ExpectedException(typeof(ArgumentNullException))]
181+
public void CompareToThrowsOnNull()
182+
{
183+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
184+
// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
185+
newtonpermeter.CompareTo(null);
186+
}
187+
188+
189+
[Test]
190+
public void EqualityOperators()
191+
{
192+
ForcePerLength a = ForcePerLength.FromNewtonsPerMeter(1);
193+
ForcePerLength b = ForcePerLength.FromNewtonsPerMeter(2);
194+
195+
// ReSharper disable EqualExpressionComparison
196+
Assert.True(a == a);
197+
Assert.True(a != b);
198+
199+
Assert.False(a == b);
200+
Assert.False(a != a);
201+
// ReSharper restore EqualExpressionComparison
202+
}
203+
204+
[Test]
205+
public void EqualsIsImplemented()
206+
{
207+
ForcePerLength v = ForcePerLength.FromNewtonsPerMeter(1);
208+
Assert.IsTrue(v.Equals(ForcePerLength.FromNewtonsPerMeter(1)));
209+
Assert.IsFalse(v.Equals(ForcePerLength.Zero));
210+
}
211+
212+
[Test]
213+
public void EqualsReturnsFalseOnTypeMismatch()
214+
{
215+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
216+
Assert.IsFalse(newtonpermeter.Equals(new object()));
217+
}
218+
219+
[Test]
220+
public void EqualsReturnsFalseOnNull()
221+
{
222+
ForcePerLength newtonpermeter = ForcePerLength.FromNewtonsPerMeter(1);
223+
Assert.IsFalse(newtonpermeter.Equals(null));
224+
}
225+
}
226+
}

UnitsNet/CustomCode/UnitClasses/Force.extra.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public partial struct Force
5353
{
5454
return Pressure.FromPascals(force.Newtons/area.SquareMeters);
5555
}
56+
57+
public static ForcePerLength operator /(Force force, Length length)
58+
{
59+
return ForcePerLength.FromNewtonsPerMeter(force.Newtons/length.Meters);
60+
}
5661
#endif
5762

5863
// Method overloads with same number of argumnets not supported in Universal Windows Platform (WinRT Components)

0 commit comments

Comments
 (0)