Skip to content

Commit 6800561

Browse files
Ferit Tunçerangularsen
Ferit Tunçer
authored andcommitted
Add MolarMass Quantity Type (#305)
* added MolarMass * added russian abbreviations NanogramPerMole to KilogramPerMole convertion tests were failing, so we set the tolerance to 1e-3 like in massTests.
1 parent 9a50294 commit 6800561

File tree

8 files changed

+2894
-0
lines changed

8 files changed

+2894
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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) 2007 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+
43+
using System;
44+
45+
namespace UnitsNet.Tests.CustomCode
46+
{
47+
public class MolarMassTests : MolarMassTestsBase
48+
{
49+
protected override double CentigramsPerMoleInOneKilogramPerMole => 1e5;
50+
protected override double DecagramsPerMoleInOneKilogramPerMole => 1e2;
51+
protected override double DecigramsPerMoleInOneKilogramPerMole => 1e4;
52+
protected override double GramsPerMoleInOneKilogramPerMole => 1e3;
53+
protected override double HectogramsPerMoleInOneKilogramPerMole => 10;
54+
protected override double KilogramsPerMoleInOneKilogramPerMole => 1;
55+
protected override double KilopoundsPerMoleInOneKilogramPerMole => 2.2046226218487757e-3;
56+
protected override double MegapoundsPerMoleInOneKilogramPerMole => 2.2046226218487757e-6;
57+
protected override double MicrogramsPerMoleInOneKilogramPerMole => 1e9;
58+
protected override double MilligramsPerMoleInOneKilogramPerMole => 1e6;
59+
protected override double NanogramsPerMoleTolerance => 1e-3;
60+
protected override double NanogramsPerMoleInOneKilogramPerMole => 1e12;
61+
protected override double PoundsPerMoleInOneKilogramPerMole => 2.2046226218487757;
62+
}
63+
}
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
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) 2007 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 MolarMass.
51+
/// </summary>
52+
// ReSharper disable once PartialTypeWithSinglePart
53+
public abstract partial class MolarMassTestsBase
54+
{
55+
protected abstract double CentigramsPerMoleInOneKilogramPerMole { get; }
56+
protected abstract double DecagramsPerMoleInOneKilogramPerMole { get; }
57+
protected abstract double DecigramsPerMoleInOneKilogramPerMole { get; }
58+
protected abstract double GramsPerMoleInOneKilogramPerMole { get; }
59+
protected abstract double HectogramsPerMoleInOneKilogramPerMole { get; }
60+
protected abstract double KilogramsPerMoleInOneKilogramPerMole { get; }
61+
protected abstract double KilopoundsPerMoleInOneKilogramPerMole { get; }
62+
protected abstract double MegapoundsPerMoleInOneKilogramPerMole { get; }
63+
protected abstract double MicrogramsPerMoleInOneKilogramPerMole { get; }
64+
protected abstract double MilligramsPerMoleInOneKilogramPerMole { get; }
65+
protected abstract double NanogramsPerMoleInOneKilogramPerMole { get; }
66+
protected abstract double PoundsPerMoleInOneKilogramPerMole { get; }
67+
68+
// ReSharper disable VirtualMemberNeverOverriden.Global
69+
protected virtual double CentigramsPerMoleTolerance { get { return 1e-5; } }
70+
protected virtual double DecagramsPerMoleTolerance { get { return 1e-5; } }
71+
protected virtual double DecigramsPerMoleTolerance { get { return 1e-5; } }
72+
protected virtual double GramsPerMoleTolerance { get { return 1e-5; } }
73+
protected virtual double HectogramsPerMoleTolerance { get { return 1e-5; } }
74+
protected virtual double KilogramsPerMoleTolerance { get { return 1e-5; } }
75+
protected virtual double KilopoundsPerMoleTolerance { get { return 1e-5; } }
76+
protected virtual double MegapoundsPerMoleTolerance { get { return 1e-5; } }
77+
protected virtual double MicrogramsPerMoleTolerance { get { return 1e-5; } }
78+
protected virtual double MilligramsPerMoleTolerance { get { return 1e-5; } }
79+
protected virtual double NanogramsPerMoleTolerance { get { return 1e-5; } }
80+
protected virtual double PoundsPerMoleTolerance { get { return 1e-5; } }
81+
// ReSharper restore VirtualMemberNeverOverriden.Global
82+
83+
[Fact]
84+
public void KilogramPerMoleToMolarMassUnits()
85+
{
86+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
87+
AssertEx.EqualTolerance(CentigramsPerMoleInOneKilogramPerMole, kilogrampermole.CentigramsPerMole, CentigramsPerMoleTolerance);
88+
AssertEx.EqualTolerance(DecagramsPerMoleInOneKilogramPerMole, kilogrampermole.DecagramsPerMole, DecagramsPerMoleTolerance);
89+
AssertEx.EqualTolerance(DecigramsPerMoleInOneKilogramPerMole, kilogrampermole.DecigramsPerMole, DecigramsPerMoleTolerance);
90+
AssertEx.EqualTolerance(GramsPerMoleInOneKilogramPerMole, kilogrampermole.GramsPerMole, GramsPerMoleTolerance);
91+
AssertEx.EqualTolerance(HectogramsPerMoleInOneKilogramPerMole, kilogrampermole.HectogramsPerMole, HectogramsPerMoleTolerance);
92+
AssertEx.EqualTolerance(KilogramsPerMoleInOneKilogramPerMole, kilogrampermole.KilogramsPerMole, KilogramsPerMoleTolerance);
93+
AssertEx.EqualTolerance(KilopoundsPerMoleInOneKilogramPerMole, kilogrampermole.KilopoundsPerMole, KilopoundsPerMoleTolerance);
94+
AssertEx.EqualTolerance(MegapoundsPerMoleInOneKilogramPerMole, kilogrampermole.MegapoundsPerMole, MegapoundsPerMoleTolerance);
95+
AssertEx.EqualTolerance(MicrogramsPerMoleInOneKilogramPerMole, kilogrampermole.MicrogramsPerMole, MicrogramsPerMoleTolerance);
96+
AssertEx.EqualTolerance(MilligramsPerMoleInOneKilogramPerMole, kilogrampermole.MilligramsPerMole, MilligramsPerMoleTolerance);
97+
AssertEx.EqualTolerance(NanogramsPerMoleInOneKilogramPerMole, kilogrampermole.NanogramsPerMole, NanogramsPerMoleTolerance);
98+
AssertEx.EqualTolerance(PoundsPerMoleInOneKilogramPerMole, kilogrampermole.PoundsPerMole, PoundsPerMoleTolerance);
99+
}
100+
101+
[Fact]
102+
public void FromValueAndUnit()
103+
{
104+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.CentigramPerMole).CentigramsPerMole, CentigramsPerMoleTolerance);
105+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.DecagramPerMole).DecagramsPerMole, DecagramsPerMoleTolerance);
106+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.DecigramPerMole).DecigramsPerMole, DecigramsPerMoleTolerance);
107+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.GramPerMole).GramsPerMole, GramsPerMoleTolerance);
108+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.HectogramPerMole).HectogramsPerMole, HectogramsPerMoleTolerance);
109+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.KilogramPerMole).KilogramsPerMole, KilogramsPerMoleTolerance);
110+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.KilopoundPerMole).KilopoundsPerMole, KilopoundsPerMoleTolerance);
111+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.MegapoundPerMole).MegapoundsPerMole, MegapoundsPerMoleTolerance);
112+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.MicrogramPerMole).MicrogramsPerMole, MicrogramsPerMoleTolerance);
113+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.MilligramPerMole).MilligramsPerMole, MilligramsPerMoleTolerance);
114+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.NanogramPerMole).NanogramsPerMole, NanogramsPerMoleTolerance);
115+
AssertEx.EqualTolerance(1, MolarMass.From(1, MolarMassUnit.PoundPerMole).PoundsPerMole, PoundsPerMoleTolerance);
116+
}
117+
118+
[Fact]
119+
public void As()
120+
{
121+
var kilogrampermole = MolarMass.FromKilogramsPerMole(1);
122+
AssertEx.EqualTolerance(CentigramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.CentigramPerMole), CentigramsPerMoleTolerance);
123+
AssertEx.EqualTolerance(DecagramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.DecagramPerMole), DecagramsPerMoleTolerance);
124+
AssertEx.EqualTolerance(DecigramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.DecigramPerMole), DecigramsPerMoleTolerance);
125+
AssertEx.EqualTolerance(GramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.GramPerMole), GramsPerMoleTolerance);
126+
AssertEx.EqualTolerance(HectogramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.HectogramPerMole), HectogramsPerMoleTolerance);
127+
AssertEx.EqualTolerance(KilogramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.KilogramPerMole), KilogramsPerMoleTolerance);
128+
AssertEx.EqualTolerance(KilopoundsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.KilopoundPerMole), KilopoundsPerMoleTolerance);
129+
AssertEx.EqualTolerance(MegapoundsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.MegapoundPerMole), MegapoundsPerMoleTolerance);
130+
AssertEx.EqualTolerance(MicrogramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.MicrogramPerMole), MicrogramsPerMoleTolerance);
131+
AssertEx.EqualTolerance(MilligramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.MilligramPerMole), MilligramsPerMoleTolerance);
132+
AssertEx.EqualTolerance(NanogramsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.NanogramPerMole), NanogramsPerMoleTolerance);
133+
AssertEx.EqualTolerance(PoundsPerMoleInOneKilogramPerMole, kilogrampermole.As(MolarMassUnit.PoundPerMole), PoundsPerMoleTolerance);
134+
}
135+
136+
[Fact]
137+
public void ConversionRoundTrip()
138+
{
139+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
140+
AssertEx.EqualTolerance(1, MolarMass.FromCentigramsPerMole(kilogrampermole.CentigramsPerMole).KilogramsPerMole, CentigramsPerMoleTolerance);
141+
AssertEx.EqualTolerance(1, MolarMass.FromDecagramsPerMole(kilogrampermole.DecagramsPerMole).KilogramsPerMole, DecagramsPerMoleTolerance);
142+
AssertEx.EqualTolerance(1, MolarMass.FromDecigramsPerMole(kilogrampermole.DecigramsPerMole).KilogramsPerMole, DecigramsPerMoleTolerance);
143+
AssertEx.EqualTolerance(1, MolarMass.FromGramsPerMole(kilogrampermole.GramsPerMole).KilogramsPerMole, GramsPerMoleTolerance);
144+
AssertEx.EqualTolerance(1, MolarMass.FromHectogramsPerMole(kilogrampermole.HectogramsPerMole).KilogramsPerMole, HectogramsPerMoleTolerance);
145+
AssertEx.EqualTolerance(1, MolarMass.FromKilogramsPerMole(kilogrampermole.KilogramsPerMole).KilogramsPerMole, KilogramsPerMoleTolerance);
146+
AssertEx.EqualTolerance(1, MolarMass.FromKilopoundsPerMole(kilogrampermole.KilopoundsPerMole).KilogramsPerMole, KilopoundsPerMoleTolerance);
147+
AssertEx.EqualTolerance(1, MolarMass.FromMegapoundsPerMole(kilogrampermole.MegapoundsPerMole).KilogramsPerMole, MegapoundsPerMoleTolerance);
148+
AssertEx.EqualTolerance(1, MolarMass.FromMicrogramsPerMole(kilogrampermole.MicrogramsPerMole).KilogramsPerMole, MicrogramsPerMoleTolerance);
149+
AssertEx.EqualTolerance(1, MolarMass.FromMilligramsPerMole(kilogrampermole.MilligramsPerMole).KilogramsPerMole, MilligramsPerMoleTolerance);
150+
AssertEx.EqualTolerance(1, MolarMass.FromNanogramsPerMole(kilogrampermole.NanogramsPerMole).KilogramsPerMole, NanogramsPerMoleTolerance);
151+
AssertEx.EqualTolerance(1, MolarMass.FromPoundsPerMole(kilogrampermole.PoundsPerMole).KilogramsPerMole, PoundsPerMoleTolerance);
152+
}
153+
154+
[Fact]
155+
public void ArithmeticOperators()
156+
{
157+
MolarMass v = MolarMass.FromKilogramsPerMole(1);
158+
AssertEx.EqualTolerance(-1, -v.KilogramsPerMole, KilogramsPerMoleTolerance);
159+
AssertEx.EqualTolerance(2, (MolarMass.FromKilogramsPerMole(3)-v).KilogramsPerMole, KilogramsPerMoleTolerance);
160+
AssertEx.EqualTolerance(2, (v + v).KilogramsPerMole, KilogramsPerMoleTolerance);
161+
AssertEx.EqualTolerance(10, (v*10).KilogramsPerMole, KilogramsPerMoleTolerance);
162+
AssertEx.EqualTolerance(10, (10*v).KilogramsPerMole, KilogramsPerMoleTolerance);
163+
AssertEx.EqualTolerance(2, (MolarMass.FromKilogramsPerMole(10)/5).KilogramsPerMole, KilogramsPerMoleTolerance);
164+
AssertEx.EqualTolerance(2, MolarMass.FromKilogramsPerMole(10)/MolarMass.FromKilogramsPerMole(5), KilogramsPerMoleTolerance);
165+
}
166+
167+
[Fact]
168+
public void ComparisonOperators()
169+
{
170+
MolarMass oneKilogramPerMole = MolarMass.FromKilogramsPerMole(1);
171+
MolarMass twoKilogramsPerMole = MolarMass.FromKilogramsPerMole(2);
172+
173+
Assert.True(oneKilogramPerMole < twoKilogramsPerMole);
174+
Assert.True(oneKilogramPerMole <= twoKilogramsPerMole);
175+
Assert.True(twoKilogramsPerMole > oneKilogramPerMole);
176+
Assert.True(twoKilogramsPerMole >= oneKilogramPerMole);
177+
178+
Assert.False(oneKilogramPerMole > twoKilogramsPerMole);
179+
Assert.False(oneKilogramPerMole >= twoKilogramsPerMole);
180+
Assert.False(twoKilogramsPerMole < oneKilogramPerMole);
181+
Assert.False(twoKilogramsPerMole <= oneKilogramPerMole);
182+
}
183+
184+
[Fact]
185+
public void CompareToIsImplemented()
186+
{
187+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
188+
Assert.Equal(0, kilogrampermole.CompareTo(kilogrampermole));
189+
Assert.True(kilogrampermole.CompareTo(MolarMass.Zero) > 0);
190+
Assert.True(MolarMass.Zero.CompareTo(kilogrampermole) < 0);
191+
}
192+
193+
[Fact]
194+
public void CompareToThrowsOnTypeMismatch()
195+
{
196+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
197+
Assert.Throws<ArgumentException>(() => kilogrampermole.CompareTo(new object()));
198+
}
199+
200+
[Fact]
201+
public void CompareToThrowsOnNull()
202+
{
203+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
204+
Assert.Throws<ArgumentNullException>(() => kilogrampermole.CompareTo(null));
205+
}
206+
207+
208+
[Fact]
209+
public void EqualityOperators()
210+
{
211+
MolarMass a = MolarMass.FromKilogramsPerMole(1);
212+
MolarMass b = MolarMass.FromKilogramsPerMole(2);
213+
214+
// ReSharper disable EqualExpressionComparison
215+
Assert.True(a == a);
216+
Assert.True(a != b);
217+
218+
Assert.False(a == b);
219+
Assert.False(a != a);
220+
// ReSharper restore EqualExpressionComparison
221+
}
222+
223+
[Fact]
224+
public void EqualsIsImplemented()
225+
{
226+
MolarMass v = MolarMass.FromKilogramsPerMole(1);
227+
Assert.True(v.Equals(MolarMass.FromKilogramsPerMole(1)));
228+
Assert.False(v.Equals(MolarMass.Zero));
229+
}
230+
231+
[Fact]
232+
public void EqualsReturnsFalseOnTypeMismatch()
233+
{
234+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
235+
Assert.False(kilogrampermole.Equals(new object()));
236+
}
237+
238+
[Fact]
239+
public void EqualsReturnsFalseOnNull()
240+
{
241+
MolarMass kilogrampermole = MolarMass.FromKilogramsPerMole(1);
242+
Assert.False(kilogrampermole.Equals(null));
243+
}
244+
}
245+
}

0 commit comments

Comments
 (0)