Skip to content

Commit 7d53a69

Browse files
gojanpaoloangularsen
authored andcommitted
Add Mass Flux (#362)
Also added operators with Mass Flux' relation to Density, Speed, Area, and Mass Flow.
1 parent b70ef14 commit 7d53a69

17 files changed

+1295
-0
lines changed

UnitsNet.Tests/CustomCode/AreaTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,12 @@ public void AreaDividedByLengthEqualsLength()
5656
Length length = Area.FromSquareMeters(50)/Length.FromMeters(5);
5757
Assert.Equal(length, Length.FromMeters(10));
5858
}
59+
60+
[Fact]
61+
public void AreaTimesMassFluxEqualsMassFlow()
62+
{
63+
MassFlow massFlow = Area.FromSquareMeters(20) * MassFlux.FromKilogramsPerSecondPerSquareMeter(2);
64+
Assert.Equal(massFlow, MassFlow.FromKilogramsPerSecond(40));
65+
}
5966
}
6067
}

UnitsNet.Tests/CustomCode/DensityTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,5 +132,12 @@ public void ExpectDensityConvertedToMolarityCorrectly()
132132
var molarity = density.ToMolarity(mw).MolesPerCubicMeter;
133133
AssertEx.EqualTolerance(1026.98355, molarity, KilogramsPerCubicMeterTolerance);
134134
}
135+
136+
[Fact]
137+
public void DensityTimesSpeedEqualsMassFlux()
138+
{
139+
MassFlux massFlux = Density.FromKilogramsPerCubicMeter(20) * Speed.FromMetersPerSecond(2);
140+
Assert.Equal(massFlux, MassFlux.FromKilogramsPerSecondPerSquareMeter(40));
141+
}
135142
}
136143
}

UnitsNet.Tests/CustomCode/MassFlowTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,5 +102,19 @@ public void MassFlowTimesSpecificEnergyEqualsPower()
102102
Power power = MassFlow.FromKilogramsPerSecond(20.0) * SpecificEnergy.FromJoulesPerKilogram(10.0);
103103
Assert.Equal(200, power.Watts);
104104
}
105+
106+
[Fact]
107+
public void MassFlowDividedByAreaEqualsMassFlux()
108+
{
109+
MassFlux massFlux = MassFlow.FromKilogramsPerSecond(20) / Area.FromSquareMeters(2);
110+
Assert.Equal(10, massFlux.KilogramsPerSecondPerSquareMeter);
111+
}
112+
113+
[Fact]
114+
public void MassFlowDividedByMassFluxEqualsArea()
115+
{
116+
Area area = MassFlow.FromKilogramsPerSecond(20) / MassFlux.FromKilogramsPerSecondPerSquareMeter(2);
117+
Assert.Equal(10, area.SquareMeters);
118+
}
105119
}
106120
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated (once) by \generate-code.bat, but will not be
4+
// regenerated when it already exists. The purpose of creating this file is to make
5+
// it easier to remember to implement all the unit conversion test cases.
6+
//
7+
// Whenever a new unit is added to this quantity and \generate-code.bat is run,
8+
// the base test class will get a new abstract property and cause a compile error
9+
// in this derived class, reminding the developer to implement the test case
10+
// for the new unit.
11+
//
12+
// See https://github.com/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
13+
//
14+
// Add CustomCode\Quantities\MyUnit.extra.cs files to add code to generated quantities.
15+
// Add Extensions\MyUnitExtensions.cs to decorate quantities with new behavior.
16+
// Add UnitDefinitions\MyUnit.json and run GeneratUnits.bat to generate new units or quantities.
17+
//
18+
// </auto-generated>
19+
//------------------------------------------------------------------------------
20+
21+
// Copyright (c) 2013 Andreas Gullberg Larsen ([email protected]).
22+
// https://github.com/angularsen/UnitsNet
23+
//
24+
// Permission is hereby granted, free of charge, to any person obtaining a copy
25+
// of this software and associated documentation files (the "Software"), to deal
26+
// in the Software without restriction, including without limitation the rights
27+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
28+
// copies of the Software, and to permit persons to whom the Software is
29+
// furnished to do so, subject to the following conditions:
30+
//
31+
// The above copyright notice and this permission notice shall be included in
32+
// all copies or substantial portions of the Software.
33+
//
34+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
35+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
36+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
37+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
38+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
39+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
40+
// THE SOFTWARE.
41+
42+
using Xunit;
43+
44+
namespace UnitsNet.Tests.CustomCode
45+
{
46+
public class MassFluxTests : MassFluxTestsBase
47+
{
48+
protected override double GramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter => 1E3;
49+
50+
protected override double KilogramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter => 1;
51+
52+
[Fact]
53+
public void MassFluxDividedBySpeedEqualsDensity()
54+
{
55+
Density density = MassFlux.FromKilogramsPerSecondPerSquareMeter(20) / Speed.FromMetersPerSecond(2);
56+
Assert.Equal(density, Density.FromKilogramsPerCubicMeter(10));
57+
}
58+
59+
[Fact]
60+
public void MassFluxDividedByDensityEqualsSpeed()
61+
{
62+
Speed speed = MassFlux.FromKilogramsPerSecondPerSquareMeter(20) / Density.FromKilogramsPerCubicMeter(2);
63+
Assert.Equal(speed, Speed.FromMetersPerSecond(10));
64+
}
65+
66+
[Fact]
67+
public void MassFluxTimesAreaEqualsMassFlow()
68+
{
69+
MassFlow massFlow = MassFlux.FromKilogramsPerSecondPerSquareMeter(20) * Area.FromSquareMeters(2);
70+
Assert.Equal(massFlow, MassFlow.FromKilogramsPerSecond(40));
71+
}
72+
}
73+
}

UnitsNet.Tests/CustomCode/SpeedTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,5 +160,12 @@ public void SpeedTimesSpeedEqualsSpecificEnergy()
160160
SpecificEnergy length = Speed.FromMetersPerSecond(2) * Speed.FromMetersPerSecond(20);
161161
Assert.Equal(length, SpecificEnergy.FromJoulesPerKilogram(40));
162162
}
163+
164+
[Fact]
165+
public void SpeedTimesDensityEqualsMassFlux()
166+
{
167+
MassFlux massFlux = Speed.FromMetersPerSecond(20) * Density.FromKilogramsPerCubicMeter(2);
168+
Assert.Equal(massFlux, MassFlux.FromKilogramsPerSecondPerSquareMeter(40));
169+
}
163170
}
164171
}
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by \generate-code.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/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
10+
//
11+
// Add CustomCode\Quantities\MyUnit.extra.cs files to add code to generated quantities.
12+
// Add Extensions\MyUnitExtensions.cs to decorate quantities with new behavior.
13+
// Add UnitDefinitions\MyUnit.json and run GeneratUnits.bat to generate new units or quantities.
14+
//
15+
// </auto-generated>
16+
//------------------------------------------------------------------------------
17+
18+
// Copyright (c) 2013 Andreas Gullberg Larsen ([email protected]).
19+
// https://github.com/angularsen/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 UnitsNet.Units;
41+
using Xunit;
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 MassFlux.
51+
/// </summary>
52+
// ReSharper disable once PartialTypeWithSinglePart
53+
public abstract partial class MassFluxTestsBase
54+
{
55+
protected abstract double GramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter { get; }
56+
protected abstract double KilogramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter { get; }
57+
58+
// ReSharper disable VirtualMemberNeverOverriden.Global
59+
protected virtual double GramsPerSecondPerSquareMeterTolerance { get { return 1e-5; } }
60+
protected virtual double KilogramsPerSecondPerSquareMeterTolerance { get { return 1e-5; } }
61+
// ReSharper restore VirtualMemberNeverOverriden.Global
62+
63+
[Fact]
64+
public void KilogramPerSecondPerSquareMeterToMassFluxUnits()
65+
{
66+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
67+
AssertEx.EqualTolerance(GramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter, kilogrampersecondpersquaremeter.GramsPerSecondPerSquareMeter, GramsPerSecondPerSquareMeterTolerance);
68+
AssertEx.EqualTolerance(KilogramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter, kilogrampersecondpersquaremeter.KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
69+
}
70+
71+
[Fact]
72+
public void FromValueAndUnit()
73+
{
74+
AssertEx.EqualTolerance(1, MassFlux.From(1, MassFluxUnit.GramPerSecondPerSquareMeter).GramsPerSecondPerSquareMeter, GramsPerSecondPerSquareMeterTolerance);
75+
AssertEx.EqualTolerance(1, MassFlux.From(1, MassFluxUnit.KilogramPerSecondPerSquareMeter).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
76+
}
77+
78+
[Fact]
79+
public void As()
80+
{
81+
var kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
82+
AssertEx.EqualTolerance(GramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter, kilogrampersecondpersquaremeter.As(MassFluxUnit.GramPerSecondPerSquareMeter), GramsPerSecondPerSquareMeterTolerance);
83+
AssertEx.EqualTolerance(KilogramsPerSecondPerSquareMeterInOneKilogramPerSecondPerSquareMeter, kilogrampersecondpersquaremeter.As(MassFluxUnit.KilogramPerSecondPerSquareMeter), KilogramsPerSecondPerSquareMeterTolerance);
84+
}
85+
86+
[Fact]
87+
public void ConversionRoundTrip()
88+
{
89+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
90+
AssertEx.EqualTolerance(1, MassFlux.FromGramsPerSecondPerSquareMeter(kilogrampersecondpersquaremeter.GramsPerSecondPerSquareMeter).KilogramsPerSecondPerSquareMeter, GramsPerSecondPerSquareMeterTolerance);
91+
AssertEx.EqualTolerance(1, MassFlux.FromKilogramsPerSecondPerSquareMeter(kilogrampersecondpersquaremeter.KilogramsPerSecondPerSquareMeter).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
92+
}
93+
94+
[Fact]
95+
public void ArithmeticOperators()
96+
{
97+
MassFlux v = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
98+
AssertEx.EqualTolerance(-1, -v.KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
99+
AssertEx.EqualTolerance(2, (MassFlux.FromKilogramsPerSecondPerSquareMeter(3)-v).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
100+
AssertEx.EqualTolerance(2, (v + v).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
101+
AssertEx.EqualTolerance(10, (v*10).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
102+
AssertEx.EqualTolerance(10, (10*v).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
103+
AssertEx.EqualTolerance(2, (MassFlux.FromKilogramsPerSecondPerSquareMeter(10)/5).KilogramsPerSecondPerSquareMeter, KilogramsPerSecondPerSquareMeterTolerance);
104+
AssertEx.EqualTolerance(2, MassFlux.FromKilogramsPerSecondPerSquareMeter(10)/MassFlux.FromKilogramsPerSecondPerSquareMeter(5), KilogramsPerSecondPerSquareMeterTolerance);
105+
}
106+
107+
[Fact]
108+
public void ComparisonOperators()
109+
{
110+
MassFlux oneKilogramPerSecondPerSquareMeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
111+
MassFlux twoKilogramsPerSecondPerSquareMeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(2);
112+
113+
Assert.True(oneKilogramPerSecondPerSquareMeter < twoKilogramsPerSecondPerSquareMeter);
114+
Assert.True(oneKilogramPerSecondPerSquareMeter <= twoKilogramsPerSecondPerSquareMeter);
115+
Assert.True(twoKilogramsPerSecondPerSquareMeter > oneKilogramPerSecondPerSquareMeter);
116+
Assert.True(twoKilogramsPerSecondPerSquareMeter >= oneKilogramPerSecondPerSquareMeter);
117+
118+
Assert.False(oneKilogramPerSecondPerSquareMeter > twoKilogramsPerSecondPerSquareMeter);
119+
Assert.False(oneKilogramPerSecondPerSquareMeter >= twoKilogramsPerSecondPerSquareMeter);
120+
Assert.False(twoKilogramsPerSecondPerSquareMeter < oneKilogramPerSecondPerSquareMeter);
121+
Assert.False(twoKilogramsPerSecondPerSquareMeter <= oneKilogramPerSecondPerSquareMeter);
122+
}
123+
124+
[Fact]
125+
public void CompareToIsImplemented()
126+
{
127+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
128+
Assert.Equal(0, kilogrampersecondpersquaremeter.CompareTo(kilogrampersecondpersquaremeter));
129+
Assert.True(kilogrampersecondpersquaremeter.CompareTo(MassFlux.Zero) > 0);
130+
Assert.True(MassFlux.Zero.CompareTo(kilogrampersecondpersquaremeter) < 0);
131+
}
132+
133+
[Fact]
134+
public void CompareToThrowsOnTypeMismatch()
135+
{
136+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
137+
Assert.Throws<ArgumentException>(() => kilogrampersecondpersquaremeter.CompareTo(new object()));
138+
}
139+
140+
[Fact]
141+
public void CompareToThrowsOnNull()
142+
{
143+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
144+
Assert.Throws<ArgumentNullException>(() => kilogrampersecondpersquaremeter.CompareTo(null));
145+
}
146+
147+
148+
[Fact]
149+
public void EqualityOperators()
150+
{
151+
MassFlux a = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
152+
MassFlux b = MassFlux.FromKilogramsPerSecondPerSquareMeter(2);
153+
154+
// ReSharper disable EqualExpressionComparison
155+
Assert.True(a == a);
156+
Assert.True(a != b);
157+
158+
Assert.False(a == b);
159+
Assert.False(a != a);
160+
// ReSharper restore EqualExpressionComparison
161+
}
162+
163+
[Fact]
164+
public void EqualsIsImplemented()
165+
{
166+
MassFlux v = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
167+
Assert.True(v.Equals(MassFlux.FromKilogramsPerSecondPerSquareMeter(1), MassFlux.FromKilogramsPerSecondPerSquareMeter(KilogramsPerSecondPerSquareMeterTolerance)));
168+
Assert.False(v.Equals(MassFlux.Zero, MassFlux.FromKilogramsPerSecondPerSquareMeter(KilogramsPerSecondPerSquareMeterTolerance)));
169+
}
170+
171+
[Fact]
172+
public void EqualsReturnsFalseOnTypeMismatch()
173+
{
174+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
175+
Assert.False(kilogrampersecondpersquaremeter.Equals(new object()));
176+
}
177+
178+
[Fact]
179+
public void EqualsReturnsFalseOnNull()
180+
{
181+
MassFlux kilogrampersecondpersquaremeter = MassFlux.FromKilogramsPerSecondPerSquareMeter(1);
182+
Assert.False(kilogrampersecondpersquaremeter.Equals(null));
183+
}
184+
}
185+
}

UnitsNet/CustomCode/Quantities/Area.extra.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public partial struct Area
3636
{
3737
return Length.FromMeters(area.SquareMeters / length.Meters);
3838
}
39+
40+
public static MassFlow operator *(Area area, MassFlux massFlux)
41+
{
42+
return MassFlow.FromGramsPerSecond(area.SquareMeters * massFlux.GramsPerSecondPerSquareMeter);
43+
}
3944
#endif
4045
}
4146
}

UnitsNet/CustomCode/Quantities/Density.extra.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public static Molarity ToMolarity(Density density, Mass molecularWeight)
6161
{
6262
return DynamicViscosity.FromNewtonSecondsPerMeterSquared(kinematicViscosity.SquareMetersPerSecond * density.KilogramsPerCubicMeter);
6363
}
64+
65+
public static MassFlux operator *(Density density, Speed speed)
66+
{
67+
return MassFlux.FromKilogramsPerSecondPerSquareMeter(density.KilogramsPerCubicMeter * speed.MetersPerSecond);
68+
}
6469
#endif
6570
}
6671
}

UnitsNet/CustomCode/Quantities/MassFlow.extra.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,16 @@ public partial struct MassFlow
7070
{
7171
return Power.FromWatts(massFlow.KilogramsPerSecond * specificEnergy.JoulesPerKilogram);
7272
}
73+
74+
public static MassFlux operator /(MassFlow massFlow, Area area)
75+
{
76+
return MassFlux.FromKilogramsPerSecondPerSquareMeter(massFlow.KilogramsPerSecond / area.SquareMeters);
77+
}
78+
79+
public static Area operator /(MassFlow massFlow, MassFlux massFlux)
80+
{
81+
return Area.FromSquareMeters(massFlow.KilogramsPerSecond / massFlux.KilogramsPerSecondPerSquareMeter);
82+
}
7383
#endif
7484
}
7585
}

0 commit comments

Comments
 (0)