diff --git a/UnitsNet.Tests/BaseDimensionsTests.cs b/UnitsNet.Tests/BaseDimensionsTests.cs index 9923cf59c6..c033c260e6 100644 --- a/UnitsNet.Tests/BaseDimensionsTests.cs +++ b/UnitsNet.Tests/BaseDimensionsTests.cs @@ -28,15 +28,53 @@ public void ConstructorImplementedCorrectly() [InlineData(0, 0, 0, 0, 1, 0, 0)] [InlineData(0, 0, 0, 0, 0, 1, 0)] [InlineData(0, 0, 0, 0, 0, 0, 1)] - public void IsBaseQuantityImplementedProperly(int length, int mass, int time, int current, int temperature, int amount, int luminousIntensity) + public void IsBaseQuantity_ForBaseQuantity_ReturnsTrue(int length, int mass, int time, int current, int temperature, int amount, int luminousIntensity) { var baseDimensions = new BaseDimensions(length, mass, time, current, temperature, amount, luminousIntensity); - var derivedDimensions = new BaseDimensions(length * 2, mass * 2, time * 2, current * 2, temperature * 2, amount * 2, luminousIntensity * 2); - Assert.True(baseDimensions.IsBaseQuantity()); + } + + [Theory] + [InlineData(2, 0, 0, 0, 0, 0, 0)] + [InlineData(0, 2, 0, 0, 0, 0, 0)] + [InlineData(0, 0, 2, 0, 0, 0, 0)] + [InlineData(0, 0, 0, 2, 0, 0, 0)] + [InlineData(0, 0, 0, 0, 2, 0, 0)] + [InlineData(0, 0, 0, 0, 0, 2, 0)] + [InlineData(0, 0, 0, 0, 0, 0, 2)] + public void IsBaseQuantity_ForDerivedQuantity_ReturnsFalse(int length, int mass, int time, int current, int temperature, int amount, int luminousIntensity) + { + var derivedDimensions = new BaseDimensions(length, mass, time, current, temperature, amount, luminousIntensity); + Assert.False(derivedDimensions.IsBaseQuantity()); + } + + [Theory] + [InlineData(1, 1, 0, 0, 0, 0, 0)] + [InlineData(0, 2, 1, 0, 0, 0, 0)] + [InlineData(0, 2, 1, 1, 0, 0, 0)] + [InlineData(1, 2, 1, 1, 1, 1, 1)] + [InlineData(0, 0, 1, 2,-2, 0, 0)] + [InlineData(0, 0, 2,-1, 0, 0, 0)] + [InlineData(0, 0, 0,-3, 1, 0, 0)] + [InlineData(0, 0, 0, 0,-4,-4, 0)] + public void IsBaseQuantity_ForMultipleDimensions_ReturnsFalse(int length, int mass, int time, int current, int temperature, int amount, int luminousIntensity) + { + var derivedDimensions = new BaseDimensions(length, mass, time, current, temperature, amount, luminousIntensity); Assert.False(derivedDimensions.IsBaseQuantity()); } + [Fact] + public void IsBaseQuantity_ForDimensionless_ReturnsFalse() + { + Assert.False(BaseDimensions.Dimensionless.IsBaseQuantity()); + } + + [Fact] + public void IsBaseQuantity_ForAcceleration_ReturnsFalse() + { + Assert.False(Acceleration.BaseDimensions.IsBaseQuantity()); + } + [Theory] [InlineData(2, 0, 0, 0, 0, 0, 0)] [InlineData(0, 2, 0, 0, 0, 0, 0)] diff --git a/UnitsNet/BaseDimensions.cs b/UnitsNet/BaseDimensions.cs index 26b31de6fc..b229b21501 100644 --- a/UnitsNet/BaseDimensions.cs +++ b/UnitsNet/BaseDimensions.cs @@ -31,7 +31,7 @@ public BaseDimensions(int length, int mass, int time, int current, int temperatu public bool IsBaseQuantity() { var dimensionsArray = new[] { Length, Mass, Time, Current, Temperature, Amount, LuminousIntensity }; - bool onlyOneEqualsOne = dimensionsArray.Where(dimension => dimension == 1).Take(2).Count() == 1; + bool onlyOneEqualsOne = dimensionsArray.Select(dimension => dimension is 0 or 1 ? dimension : 2).Sum() == 1; return onlyOneEqualsOne; }