diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index 1f79f59e27..5a8c662d8e 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -195,7 +195,7 @@ Quantity Quantity::pow(double p) const { return Quantity( std::pow(this->_Value, p), - this->_Unit.pow((short)p) + this->_Unit.pow(p) ); } diff --git a/tests/src/Base/Units.cpp b/tests/src/Base/Units.cpp index 3fc369ae8d..f3a7b430e5 100644 --- a/tests/src/Base/Units.cpp +++ b/tests/src/Base/Units.cpp @@ -201,9 +201,40 @@ TEST(BaseQuantity, TestNoDim) { Base::Quantity q1{}; + EXPECT_EQ(q1.pow(2), Base::Quantity{0}); EXPECT_EQ(q1.isDimensionless(), true); } +TEST(BaseQuantity, TestPowEQ1) +{ + Base::Quantity q1{2, Base::Unit::Area}; + EXPECT_EQ(q1.pow(1), Base::Quantity(2, Base::Unit::Area)); +} + +TEST(BaseQuantity, TestPowEQ0) +{ + Base::Quantity q1{2, Base::Unit::Area}; + EXPECT_EQ(q1.pow(0), Base::Quantity{1}); +} + +TEST(BaseQuantity, TestPowGT1) +{ + Base::Quantity q1{2, Base::Unit::Length}; + EXPECT_EQ(q1.pow(2), Base::Quantity(4, Base::Unit::Area)); +} + +TEST(BaseQuantity, TestPowLT1) +{ + Base::Quantity q1{8, Base::Unit::Volume}; + EXPECT_EQ(q1.pow(1.0/3.0), Base::Quantity(2, Base::Unit::Length)); +} + +TEST(BaseQuantity, TestPow3DIV2) +{ + Base::Quantity unit{8, Base::Unit::Volume}; + EXPECT_THROW(unit.pow(3.0/2.0), Base::UnitsMismatchError); +} + TEST(BaseQuantity, TestString) { Base::Quantity q1{2, QString::fromLatin1("kg*m/s^2")};