Skip to content

Commit 1fad2bb

Browse files
Ferit Tunçerangularsen
authored andcommitted
Add AmountOfSubstance (#304)
1 parent 6800561 commit 1fad2bb

File tree

12 files changed

+4611
-0
lines changed

12 files changed

+4611
-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+
using System;
43+
44+
namespace UnitsNet.Tests.CustomCode
45+
{
46+
public class AmountOfSubstanceTests : AmountOfSubstanceTestsBase
47+
{
48+
protected override double CentimolesInOneMole => 1e2;
49+
protected override double CentipoundMolesInOneMole => 0.002204622621848776 * 1e2;
50+
protected override double DecimolesInOneMole => 1e1;
51+
protected override double DecipoundMolesInOneMole => 0.002204622621848776 * 1e1;
52+
protected override double KilomolesInOneMole => 1e-3;
53+
protected override double KilopoundMolesInOneMole => 0.002204622621848776 * 1e-3;
54+
protected override double MicromolesInOneMole => 1e6;
55+
protected override double MicropoundMolesInOneMole => 0.002204622621848776 * 1e6;
56+
protected override double MillimolesInOneMole => 1e3;
57+
protected override double MillipoundMolesInOneMole => 0.002204622621848776 * 1e3;
58+
protected override double MolesInOneMole => 1;
59+
protected override double NanomolesInOneMole => 1e9;
60+
protected override double NanopoundMolesInOneMole => 0.002204622621848776 * 1e9;
61+
protected override double PoundMolesInOneMole => 0.002204622621848776;
62+
}
63+
}
Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
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 AmountOfSubstance.
51+
/// </summary>
52+
// ReSharper disable once PartialTypeWithSinglePart
53+
public abstract partial class AmountOfSubstanceTestsBase
54+
{
55+
protected abstract double CentimolesInOneMole { get; }
56+
protected abstract double CentipoundMolesInOneMole { get; }
57+
protected abstract double DecimolesInOneMole { get; }
58+
protected abstract double DecipoundMolesInOneMole { get; }
59+
protected abstract double KilomolesInOneMole { get; }
60+
protected abstract double KilopoundMolesInOneMole { get; }
61+
protected abstract double MicromolesInOneMole { get; }
62+
protected abstract double MicropoundMolesInOneMole { get; }
63+
protected abstract double MillimolesInOneMole { get; }
64+
protected abstract double MillipoundMolesInOneMole { get; }
65+
protected abstract double MolesInOneMole { get; }
66+
protected abstract double NanomolesInOneMole { get; }
67+
protected abstract double NanopoundMolesInOneMole { get; }
68+
protected abstract double PoundMolesInOneMole { get; }
69+
70+
// ReSharper disable VirtualMemberNeverOverriden.Global
71+
protected virtual double CentimolesTolerance { get { return 1e-5; } }
72+
protected virtual double CentipoundMolesTolerance { get { return 1e-5; } }
73+
protected virtual double DecimolesTolerance { get { return 1e-5; } }
74+
protected virtual double DecipoundMolesTolerance { get { return 1e-5; } }
75+
protected virtual double KilomolesTolerance { get { return 1e-5; } }
76+
protected virtual double KilopoundMolesTolerance { get { return 1e-5; } }
77+
protected virtual double MicromolesTolerance { get { return 1e-5; } }
78+
protected virtual double MicropoundMolesTolerance { get { return 1e-5; } }
79+
protected virtual double MillimolesTolerance { get { return 1e-5; } }
80+
protected virtual double MillipoundMolesTolerance { get { return 1e-5; } }
81+
protected virtual double MolesTolerance { get { return 1e-5; } }
82+
protected virtual double NanomolesTolerance { get { return 1e-5; } }
83+
protected virtual double NanopoundMolesTolerance { get { return 1e-5; } }
84+
protected virtual double PoundMolesTolerance { get { return 1e-5; } }
85+
// ReSharper restore VirtualMemberNeverOverriden.Global
86+
87+
[Fact]
88+
public void MoleToAmountOfSubstanceUnits()
89+
{
90+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
91+
AssertEx.EqualTolerance(CentimolesInOneMole, mole.Centimoles, CentimolesTolerance);
92+
AssertEx.EqualTolerance(CentipoundMolesInOneMole, mole.CentipoundMoles, CentipoundMolesTolerance);
93+
AssertEx.EqualTolerance(DecimolesInOneMole, mole.Decimoles, DecimolesTolerance);
94+
AssertEx.EqualTolerance(DecipoundMolesInOneMole, mole.DecipoundMoles, DecipoundMolesTolerance);
95+
AssertEx.EqualTolerance(KilomolesInOneMole, mole.Kilomoles, KilomolesTolerance);
96+
AssertEx.EqualTolerance(KilopoundMolesInOneMole, mole.KilopoundMoles, KilopoundMolesTolerance);
97+
AssertEx.EqualTolerance(MicromolesInOneMole, mole.Micromoles, MicromolesTolerance);
98+
AssertEx.EqualTolerance(MicropoundMolesInOneMole, mole.MicropoundMoles, MicropoundMolesTolerance);
99+
AssertEx.EqualTolerance(MillimolesInOneMole, mole.Millimoles, MillimolesTolerance);
100+
AssertEx.EqualTolerance(MillipoundMolesInOneMole, mole.MillipoundMoles, MillipoundMolesTolerance);
101+
AssertEx.EqualTolerance(MolesInOneMole, mole.Moles, MolesTolerance);
102+
AssertEx.EqualTolerance(NanomolesInOneMole, mole.Nanomoles, NanomolesTolerance);
103+
AssertEx.EqualTolerance(NanopoundMolesInOneMole, mole.NanopoundMoles, NanopoundMolesTolerance);
104+
AssertEx.EqualTolerance(PoundMolesInOneMole, mole.PoundMoles, PoundMolesTolerance);
105+
}
106+
107+
[Fact]
108+
public void FromValueAndUnit()
109+
{
110+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Centimole).Centimoles, CentimolesTolerance);
111+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.CentipoundMole).CentipoundMoles, CentipoundMolesTolerance);
112+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Decimole).Decimoles, DecimolesTolerance);
113+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.DecipoundMole).DecipoundMoles, DecipoundMolesTolerance);
114+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Kilomole).Kilomoles, KilomolesTolerance);
115+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.KilopoundMole).KilopoundMoles, KilopoundMolesTolerance);
116+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Micromole).Micromoles, MicromolesTolerance);
117+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.MicropoundMole).MicropoundMoles, MicropoundMolesTolerance);
118+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Millimole).Millimoles, MillimolesTolerance);
119+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.MillipoundMole).MillipoundMoles, MillipoundMolesTolerance);
120+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Mole).Moles, MolesTolerance);
121+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.Nanomole).Nanomoles, NanomolesTolerance);
122+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.NanopoundMole).NanopoundMoles, NanopoundMolesTolerance);
123+
AssertEx.EqualTolerance(1, AmountOfSubstance.From(1, AmountOfSubstanceUnit.PoundMole).PoundMoles, PoundMolesTolerance);
124+
}
125+
126+
[Fact]
127+
public void As()
128+
{
129+
var mole = AmountOfSubstance.FromMoles(1);
130+
AssertEx.EqualTolerance(CentimolesInOneMole, mole.As(AmountOfSubstanceUnit.Centimole), CentimolesTolerance);
131+
AssertEx.EqualTolerance(CentipoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.CentipoundMole), CentipoundMolesTolerance);
132+
AssertEx.EqualTolerance(DecimolesInOneMole, mole.As(AmountOfSubstanceUnit.Decimole), DecimolesTolerance);
133+
AssertEx.EqualTolerance(DecipoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.DecipoundMole), DecipoundMolesTolerance);
134+
AssertEx.EqualTolerance(KilomolesInOneMole, mole.As(AmountOfSubstanceUnit.Kilomole), KilomolesTolerance);
135+
AssertEx.EqualTolerance(KilopoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.KilopoundMole), KilopoundMolesTolerance);
136+
AssertEx.EqualTolerance(MicromolesInOneMole, mole.As(AmountOfSubstanceUnit.Micromole), MicromolesTolerance);
137+
AssertEx.EqualTolerance(MicropoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.MicropoundMole), MicropoundMolesTolerance);
138+
AssertEx.EqualTolerance(MillimolesInOneMole, mole.As(AmountOfSubstanceUnit.Millimole), MillimolesTolerance);
139+
AssertEx.EqualTolerance(MillipoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.MillipoundMole), MillipoundMolesTolerance);
140+
AssertEx.EqualTolerance(MolesInOneMole, mole.As(AmountOfSubstanceUnit.Mole), MolesTolerance);
141+
AssertEx.EqualTolerance(NanomolesInOneMole, mole.As(AmountOfSubstanceUnit.Nanomole), NanomolesTolerance);
142+
AssertEx.EqualTolerance(NanopoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.NanopoundMole), NanopoundMolesTolerance);
143+
AssertEx.EqualTolerance(PoundMolesInOneMole, mole.As(AmountOfSubstanceUnit.PoundMole), PoundMolesTolerance);
144+
}
145+
146+
[Fact]
147+
public void ConversionRoundTrip()
148+
{
149+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
150+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromCentimoles(mole.Centimoles).Moles, CentimolesTolerance);
151+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromCentipoundMoles(mole.CentipoundMoles).Moles, CentipoundMolesTolerance);
152+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromDecimoles(mole.Decimoles).Moles, DecimolesTolerance);
153+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromDecipoundMoles(mole.DecipoundMoles).Moles, DecipoundMolesTolerance);
154+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromKilomoles(mole.Kilomoles).Moles, KilomolesTolerance);
155+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromKilopoundMoles(mole.KilopoundMoles).Moles, KilopoundMolesTolerance);
156+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromMicromoles(mole.Micromoles).Moles, MicromolesTolerance);
157+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromMicropoundMoles(mole.MicropoundMoles).Moles, MicropoundMolesTolerance);
158+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromMillimoles(mole.Millimoles).Moles, MillimolesTolerance);
159+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromMillipoundMoles(mole.MillipoundMoles).Moles, MillipoundMolesTolerance);
160+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromMoles(mole.Moles).Moles, MolesTolerance);
161+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromNanomoles(mole.Nanomoles).Moles, NanomolesTolerance);
162+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromNanopoundMoles(mole.NanopoundMoles).Moles, NanopoundMolesTolerance);
163+
AssertEx.EqualTolerance(1, AmountOfSubstance.FromPoundMoles(mole.PoundMoles).Moles, PoundMolesTolerance);
164+
}
165+
166+
[Fact]
167+
public void ArithmeticOperators()
168+
{
169+
AmountOfSubstance v = AmountOfSubstance.FromMoles(1);
170+
AssertEx.EqualTolerance(-1, -v.Moles, MolesTolerance);
171+
AssertEx.EqualTolerance(2, (AmountOfSubstance.FromMoles(3)-v).Moles, MolesTolerance);
172+
AssertEx.EqualTolerance(2, (v + v).Moles, MolesTolerance);
173+
AssertEx.EqualTolerance(10, (v*10).Moles, MolesTolerance);
174+
AssertEx.EqualTolerance(10, (10*v).Moles, MolesTolerance);
175+
AssertEx.EqualTolerance(2, (AmountOfSubstance.FromMoles(10)/5).Moles, MolesTolerance);
176+
AssertEx.EqualTolerance(2, AmountOfSubstance.FromMoles(10)/AmountOfSubstance.FromMoles(5), MolesTolerance);
177+
}
178+
179+
[Fact]
180+
public void ComparisonOperators()
181+
{
182+
AmountOfSubstance oneMole = AmountOfSubstance.FromMoles(1);
183+
AmountOfSubstance twoMoles = AmountOfSubstance.FromMoles(2);
184+
185+
Assert.True(oneMole < twoMoles);
186+
Assert.True(oneMole <= twoMoles);
187+
Assert.True(twoMoles > oneMole);
188+
Assert.True(twoMoles >= oneMole);
189+
190+
Assert.False(oneMole > twoMoles);
191+
Assert.False(oneMole >= twoMoles);
192+
Assert.False(twoMoles < oneMole);
193+
Assert.False(twoMoles <= oneMole);
194+
}
195+
196+
[Fact]
197+
public void CompareToIsImplemented()
198+
{
199+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
200+
Assert.Equal(0, mole.CompareTo(mole));
201+
Assert.True(mole.CompareTo(AmountOfSubstance.Zero) > 0);
202+
Assert.True(AmountOfSubstance.Zero.CompareTo(mole) < 0);
203+
}
204+
205+
[Fact]
206+
public void CompareToThrowsOnTypeMismatch()
207+
{
208+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
209+
Assert.Throws<ArgumentException>(() => mole.CompareTo(new object()));
210+
}
211+
212+
[Fact]
213+
public void CompareToThrowsOnNull()
214+
{
215+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
216+
Assert.Throws<ArgumentNullException>(() => mole.CompareTo(null));
217+
}
218+
219+
220+
[Fact]
221+
public void EqualityOperators()
222+
{
223+
AmountOfSubstance a = AmountOfSubstance.FromMoles(1);
224+
AmountOfSubstance b = AmountOfSubstance.FromMoles(2);
225+
226+
// ReSharper disable EqualExpressionComparison
227+
Assert.True(a == a);
228+
Assert.True(a != b);
229+
230+
Assert.False(a == b);
231+
Assert.False(a != a);
232+
// ReSharper restore EqualExpressionComparison
233+
}
234+
235+
[Fact]
236+
public void EqualsIsImplemented()
237+
{
238+
AmountOfSubstance v = AmountOfSubstance.FromMoles(1);
239+
Assert.True(v.Equals(AmountOfSubstance.FromMoles(1)));
240+
Assert.False(v.Equals(AmountOfSubstance.Zero));
241+
}
242+
243+
[Fact]
244+
public void EqualsReturnsFalseOnTypeMismatch()
245+
{
246+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
247+
Assert.False(mole.Equals(new object()));
248+
}
249+
250+
[Fact]
251+
public void EqualsReturnsFalseOnNull()
252+
{
253+
AmountOfSubstance mole = AmountOfSubstance.FromMoles(1);
254+
Assert.False(mole.Equals(null));
255+
}
256+
}
257+
}

0 commit comments

Comments
 (0)