math_test enabled

This commit is contained in:
Mateusz Pusz
2019-12-06 12:56:44 +01:00
parent 71eec182f9
commit 33f14f39f3
4 changed files with 17 additions and 10 deletions

View File

@@ -408,8 +408,13 @@ struct dimension_pow_impl<D, N> {
using type = downcast<derived_dimension<exp<D, N>>>; using type = downcast<derived_dimension<exp<D, N>>>;
}; };
template<BaseDimension D>
struct dimension_pow_impl<D, 1> {
using type = D;
};
template<BaseDimension D, std::size_t N> template<BaseDimension D, std::size_t N>
struct dimension_pow_impl<exp<D, 1, N>, N> { struct dimension_pow_impl<derived_dimension<exp<D, 1, N>>, N> {
using type = D; using type = D;
}; };

View File

@@ -38,16 +38,18 @@ namespace units {
inline Quantity AUTO pow(const quantity<D, U, Rep>& q) noexcept inline Quantity AUTO pow(const quantity<D, U, Rep>& q) noexcept
{ {
using dim = dimension_pow<D, N>; using dim = dimension_pow<D, N>;
using r = ratio_pow<typename U::ratio, N>; using ratio = ratio_pow<typename U::ratio, N>;
return quantity<dim, downcast<scaled_unit<typename dim::coherent_unit::reference, r>>, Rep>(static_cast<Rep>(std::pow(q.count(), N))); using unit = detail::unit_for_dimension<dim, ratio>;
return quantity<dim, unit, Rep>(static_cast<Rep>(std::pow(q.count(), N)));
} }
template<typename D, typename U, typename Rep> template<typename D, typename U, typename Rep>
inline Quantity AUTO sqrt(const quantity<D, U, Rep>& q) noexcept inline Quantity AUTO sqrt(const quantity<D, U, Rep>& q) noexcept
{ {
using dim = dimension_sqrt<typename U::dimension>; using dim = dimension_sqrt<D>;
using r = ratio_sqrt<typename U::ratio>; using ratio = ratio_sqrt<typename U::ratio>;
return quantity<dim, downcast<scaled_unit<typename dim::coherent_unit::reference, r>>, Rep>(static_cast<Rep>(std::sqrt(q.count()))); using unit = detail::unit_for_dimension<dim, ratio>;
return quantity<dim, unit, Rep>(static_cast<Rep>(std::sqrt(q.count())));
} }
} // namespace units } // namespace units

View File

@@ -25,7 +25,7 @@ add_library(unit_tests_static
# custom_unit_test.cpp # custom_unit_test.cpp
dimension_test.cpp dimension_test.cpp
# fixed_string_test.cpp # fixed_string_test.cpp
# math_test.cpp math_test.cpp
# new_design.cpp # new_design.cpp
quantity_test.cpp quantity_test.cpp
ratio_test.cpp ratio_test.cpp

View File

@@ -20,13 +20,13 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#include "units/dimensions/area.h" #include "units/physical/si/area.h"
#include "units/math.h" #include "units/math.h"
using namespace units;
namespace { namespace {
using namespace units::si::literals;
static_assert(std::is_same_v<decltype(pow<0>(2m)), std::int64_t>); static_assert(std::is_same_v<decltype(pow<0>(2m)), std::int64_t>);
static_assert(std::is_same_v<decltype(pow<1>(2m)), decltype(2m)>); static_assert(std::is_same_v<decltype(pow<1>(2m)), decltype(2m)>);
static_assert(std::is_same_v<decltype(pow<2>(2m)), decltype(4sq_m)>); static_assert(std::is_same_v<decltype(pow<2>(2m)), decltype(4sq_m)>);