Skip to content

Commit 4f50c03

Browse files
authored
Merge pull request #528 from tmilnthorp/Dimensionless
Dimensionless
2 parents 876f31f + b2c0097 commit 4f50c03

11 files changed

+76
-12
lines changed

UnitsNet.Tests/BaseDimensionsTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,5 +721,24 @@ public void GetHashCodeWorksProperly()
721721
Assert.True(baseDimensions1.GetHashCode() != baseDimensions2.GetHashCode());
722722
Assert.True(baseDimensions1.GetHashCode() == baseDimensions3.GetHashCode());
723723
}
724+
725+
[Fact]
726+
public void DimensionlessPropertyIsCorrect()
727+
{
728+
Assert.True(BaseDimensions.Dimensionless == new BaseDimensions(0, 0, 0, 0, 0, 0, 0));
729+
}
730+
731+
[Fact]
732+
public void IsDimensionlessMethodImplementedCorrectly()
733+
{
734+
Assert.True(BaseDimensions.Dimensionless.IsDimensionless());
735+
Assert.True(new BaseDimensions(0, 0, 0, 0, 0, 0, 0).IsDimensionless());
736+
737+
Assert.False(BaseDimensions.Dimensionless.IsBaseQuantity());
738+
Assert.False(BaseDimensions.Dimensionless.IsDerivedQuantity());
739+
740+
// Example case
741+
Assert.True(Level.BaseDimensions.IsDimensionless());
742+
}
724743
}
725744
}

UnitsNet.Tests/GeneratedCode/InformationTestsBase.g.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ public void UnitsDoesNotContainUndefined()
435435
}
436436

437437
[Fact]
438-
public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
438+
public void HasAtLeastOneAbbreviationSpecified()
439439
{
440440
var units = Enum.GetValues(typeof(InformationUnit)).Cast<InformationUnit>();
441441
foreach(var unit in units)
@@ -446,5 +446,11 @@ public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
446446
var defaultAbbreviation = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(unit);
447447
}
448448
}
449+
450+
[Fact]
451+
public void BaseDimensionsShouldNeverBeNull()
452+
{
453+
Assert.False(Information.BaseDimensions is null);
454+
}
449455
}
450456
}

UnitsNet.Tests/GeneratedCode/LengthTestsBase.g.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ public void UnitsDoesNotContainUndefined()
419419
}
420420

421421
[Fact]
422-
public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
422+
public void HasAtLeastOneAbbreviationSpecified()
423423
{
424424
var units = Enum.GetValues(typeof(LengthUnit)).Cast<LengthUnit>();
425425
foreach(var unit in units)
@@ -430,5 +430,11 @@ public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
430430
var defaultAbbreviation = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(unit);
431431
}
432432
}
433+
434+
[Fact]
435+
public void BaseDimensionsShouldNeverBeNull()
436+
{
437+
Assert.False(Length.BaseDimensions is null);
438+
}
433439
}
434440
}

UnitsNet.Tests/GeneratedCode/LevelTestsBase.g.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public void UnitsDoesNotContainUndefined()
224224
}
225225

226226
[Fact]
227-
public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
227+
public void HasAtLeastOneAbbreviationSpecified()
228228
{
229229
var units = Enum.GetValues(typeof(LevelUnit)).Cast<LevelUnit>();
230230
foreach(var unit in units)
@@ -235,5 +235,11 @@ public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
235235
var defaultAbbreviation = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(unit);
236236
}
237237
}
238+
239+
[Fact]
240+
public void BaseDimensionsShouldNeverBeNull()
241+
{
242+
Assert.False(Level.BaseDimensions is null);
243+
}
238244
}
239245
}

UnitsNet.WindowsRuntimeComponent/GeneratedCode/Quantities/Information.WindowsRuntimeComponent.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public sealed partial class Information : IQuantity
6666

6767
static Information()
6868
{
69-
BaseDimensions = new BaseDimensions(0, 0, 0, 0, 0, 0, 0);
69+
BaseDimensions = BaseDimensions.Dimensionless;
7070
}
7171
/// <summary>
7272
/// Creates the quantity with a value of 0 in the base unit Bit.

UnitsNet.WindowsRuntimeComponent/GeneratedCode/Quantities/Level.WindowsRuntimeComponent.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public sealed partial class Level : IQuantity
6666

6767
static Level()
6868
{
69-
BaseDimensions = new BaseDimensions(0, 0, 0, 0, 0, 0, 0);
69+
BaseDimensions = BaseDimensions.Dimensionless;
7070
}
7171
/// <summary>
7272
/// Creates the quantity with a value of 0 in the base unit Decibel.

UnitsNet/BaseDimensions.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,21 @@ public bool IsBaseQuantity()
5454
}
5555

5656
/// <summary>
57-
/// Checks the dimensions represent a derived quantity.
57+
/// Checks if the dimensions represent a derived quantity.
5858
/// </summary>
5959
/// <returns>True if the dimensions represent a derived quantity, otherwise false.</returns>
6060
public bool IsDerivedQuantity()
6161
{
62-
return !IsBaseQuantity();
62+
return !IsBaseQuantity() && !IsDimensionless();
63+
}
64+
65+
/// <summary>
66+
/// Checks if this base dimensions object represents a dimensionless quantity.
67+
/// </summary>
68+
/// <returns>True if this object represents a dimensionless quantity, otherwise false.</returns>
69+
public bool IsDimensionless()
70+
{
71+
return this == Dimensionless;
6372
}
6473

6574
/// <inheritdoc />
@@ -246,5 +255,10 @@ private static void AppendDimensionString(StringBuilder sb, string name, int val
246255
/// Gets the luminous intensity dimensions (J).
247256
/// </summary>
248257
public int LuminousIntensity{ get; }
258+
259+
/// <summary>
260+
/// Represents a dimensionless (unitless) quantity.
261+
/// </summary>
262+
public static BaseDimensions Dimensionless { get; } = new BaseDimensions(0, 0, 0, 0, 0, 0, 0);
249263
}
250264
}

UnitsNet/GeneratedCode/Quantities/Information.NetFramework.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public partial struct Information : IQuantity<InformationUnit>, IComparable, ICo
6363

6464
static Information()
6565
{
66-
BaseDimensions = new BaseDimensions(0, 0, 0, 0, 0, 0, 0);
66+
BaseDimensions = BaseDimensions.Dimensionless;
6767
}
6868

6969
/// <summary>

UnitsNet/GeneratedCode/Quantities/Level.NetFramework.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public partial struct Level : IQuantity<LevelUnit>, IComparable, IComparable<Lev
6363

6464
static Level()
6565
{
66-
BaseDimensions = new BaseDimensions(0, 0, 0, 0, 0, 0, 0);
66+
BaseDimensions = BaseDimensions.Dimensionless;
6767
}
6868

6969
/// <summary>

UnitsNet/Scripts/Include-GenerateQuantitySourceCodeNetFramework.ps1

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ function GenerateQuantitySourceCodeNetFramework([Quantity]$quantity, [string]$ta
1919
$unitEnumName = "$quantityName" + "Unit"
2020
$wrc = $target -eq "WindowsRuntimeComponent"
2121
$privateAccessModifierIfWrc = if ($wrc) { "private" } else { "public" }
22+
2223
$baseDimensions = $quantity.BaseDimensions;
24+
$isDimensionless = $baseDimensions -eq $null -or ( $baseDimensions.Length -eq 0 -and $baseDimensions.Mass -eq 0 -and $baseDimensions.Time -eq 0 -and $baseDimensions.ElectricCurrent -eq 0 -and $baseDimensions.Temperature -eq 0 -and $baseDimensions.AmountOfSubstance -eq 0 -and $baseDimensions.LuminousIntensity -eq 0 )
2325

2426
[GeneratorArgs]$genArgs = New-Object GeneratorArgs -Property @{
2527
Quantity = $quantity;
@@ -112,10 +114,15 @@ if ($obsoleteAttribute)
112114
113115
static $quantityName()
114116
{
115-
"@; if($baseDimensions)
117+
"@; if($isDimensionless)
118+
{@"
119+
BaseDimensions = BaseDimensions.Dimensionless;
120+
"@; }
121+
else
116122
{@"
117123
BaseDimensions = new BaseDimensions($($baseDimensions.Length), $($baseDimensions.Mass), $($baseDimensions.Time), $($baseDimensions.ElectricCurrent), $($baseDimensions.Temperature), $($baseDimensions.AmountOfSubstance), $($baseDimensions.LuminousIntensity));
118-
"@; }@"
124+
"@; }
125+
@"
119126
}
120127
"@; # Windows Runtime Component requires a default constructor
121128
if ($wrc) {@"

UnitsNet/Scripts/Include-GenerateUnitTestBaseClassSourceCode.ps1

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ namespace UnitsNet.Tests
264264
}
265265
266266
[Fact]
267-
public void AllUnitsHaveAtLeastOneAbbreviationSpecified()
267+
public void HasAtLeastOneAbbreviationSpecified()
268268
{
269269
var units = Enum.GetValues(typeof($unitEnumName)).Cast<$unitEnumName>();
270270
foreach(var unit in units)
@@ -275,6 +275,12 @@ namespace UnitsNet.Tests
275275
var defaultAbbreviation = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(unit);
276276
}
277277
}
278+
279+
[Fact]
280+
public void BaseDimensionsShouldNeverBeNull()
281+
{
282+
Assert.False($quantityName.BaseDimensions is null);
283+
}
278284
}
279285
}
280286
"@;

0 commit comments

Comments
 (0)