diff --git a/tests/dimension_tests.cpp b/tests/dimension_tests.cpp index e897926..d190cb8 100644 --- a/tests/dimension_tests.cpp +++ b/tests/dimension_tests.cpp @@ -12,14 +12,16 @@ TEST_CASE("Rational concept") { } TEST_CASE("Dimensional concept") { - CHECK(dimensional<dimension<std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>>>); + CHECK(dimensional<dimension<std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<0>>>); CHECK_FALSE(dimensional<int>); CHECK_FALSE(dimensional<std::ratio<1>>); } TEST_CASE("Dimension struct") { - using test_dim = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, std::ratio<7>>; - + using test_dim = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, + std::ratio<7>>; + CHECK(std::is_same_v<test_dim::L, std::ratio<1>>); CHECK(std::is_same_v<test_dim::T, std::ratio<2>>); CHECK(std::is_same_v<test_dim::M, std::ratio<3>>); @@ -30,10 +32,12 @@ TEST_CASE("Dimension struct") { } TEST_CASE("Dimension multiplication") { - using dim1 = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, std::ratio<7>>; - using dim2 = dimension<std::ratio<7>, std::ratio<6>, std::ratio<5>, std::ratio<4>, std::ratio<3>, std::ratio<2>, std::ratio<1>>; + using dim1 = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, + std::ratio<7>>; + using dim2 = dimension<std::ratio<7>, std::ratio<6>, std::ratio<5>, std::ratio<4>, std::ratio<3>, std::ratio<2>, + std::ratio<1>>; using result = mult_t<dim1, dim2>; - + CHECK(std::is_same_v<result::L, std::ratio<8>>); CHECK(std::is_same_v<result::T, std::ratio<8>>); CHECK(std::is_same_v<result::M, std::ratio<8>>); @@ -44,10 +48,12 @@ TEST_CASE("Dimension multiplication") { } TEST_CASE("Dimension division") { - using dim1 = dimension<std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>>; - using dim2 = dimension<std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>>; + using dim1 = dimension<std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>, std::ratio<8>, + std::ratio<8>>; + using dim2 = dimension<std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>, std::ratio<3>, + std::ratio<3>>; using result = squint::div_t<dim1, dim2>; - + CHECK(std::is_same_v<result::L, std::ratio<5>>); CHECK(std::is_same_v<result::T, std::ratio<5>>); CHECK(std::is_same_v<result::M, std::ratio<5>>); @@ -58,10 +64,11 @@ TEST_CASE("Dimension division") { } TEST_CASE("Dimension power") { - using base_dim = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, std::ratio<7>>; + using base_dim = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, + std::ratio<7>>; using squared = pow_t<base_dim, 2>; using cubed = pow_t<base_dim, 3>; - + CHECK(std::is_same_v<squared::L, std::ratio<2>>); CHECK(std::is_same_v<squared::T, std::ratio<4>>); CHECK(std::is_same_v<squared::M, std::ratio<6>>); @@ -69,7 +76,7 @@ TEST_CASE("Dimension power") { CHECK(std::is_same_v<squared::I, std::ratio<10>>); CHECK(std::is_same_v<squared::N, std::ratio<12>>); CHECK(std::is_same_v<squared::J, std::ratio<14>>); - + CHECK(std::is_same_v<cubed::L, std::ratio<3>>); CHECK(std::is_same_v<cubed::T, std::ratio<6>>); CHECK(std::is_same_v<cubed::M, std::ratio<9>>); @@ -80,9 +87,10 @@ TEST_CASE("Dimension power") { } TEST_CASE("Dimension root") { - using base_dim = dimension<std::ratio<2>, std::ratio<4>, std::ratio<6>, std::ratio<8>, std::ratio<10>, std::ratio<12>, std::ratio<14>>; + using base_dim = dimension<std::ratio<2>, std::ratio<4>, std::ratio<6>, std::ratio<8>, std::ratio<10>, + std::ratio<12>, std::ratio<14>>; using sqrt_dim = root_t<base_dim, 2>; - + CHECK(std::is_same_v<sqrt_dim::L, std::ratio<1>>); CHECK(std::is_same_v<sqrt_dim::T, std::ratio<2>>); CHECK(std::is_same_v<sqrt_dim::M, std::ratio<3>>); @@ -93,9 +101,10 @@ TEST_CASE("Dimension root") { } TEST_CASE("Dimension inverse") { - using base_dim = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, std::ratio<7>>; + using base_dim = dimension<std::ratio<1>, std::ratio<2>, std::ratio<3>, std::ratio<4>, std::ratio<5>, std::ratio<6>, + std::ratio<7>>; using inv_dim = inv_t<base_dim>; - + CHECK(std::is_same_v<inv_dim::L, std::ratio<-1>>); CHECK(std::is_same_v<inv_dim::T, std::ratio<-2>>); CHECK(std::is_same_v<inv_dim::M, std::ratio<-3>>); @@ -107,20 +116,28 @@ TEST_CASE("Dimension inverse") { TEST_CASE("Predefined dimensions") { using namespace dimensions; - - CHECK(std::is_same_v<dimensionless, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>>>); - CHECK(std::is_same_v<length, dimension<std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>>>); - CHECK(std::is_same_v<dimensions::time, dimension<std::ratio<0>, std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>>>); - CHECK(std::is_same_v<mass, dimension<std::ratio<0>, std::ratio<0>, std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>>>); - CHECK(std::is_same_v<temperature, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>>>); - CHECK(std::is_same_v<current, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>, std::ratio<0>, std::ratio<0>>>); - CHECK(std::is_same_v<amount_of_substance, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>, std::ratio<0>>>); - CHECK(std::is_same_v<luminous_intensity, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>>>); + + CHECK(std::is_same_v<dimensionless, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<0>, std::ratio<0>>>); + CHECK(std::is_same_v<length, dimension<std::ratio<1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<0>>>); + CHECK(std::is_same_v<dimensions::time, dimension<std::ratio<0>, std::ratio<1>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<0>, std::ratio<0>>>); + CHECK(std::is_same_v<mass, dimension<std::ratio<0>, std::ratio<0>, std::ratio<1>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<0>>>); + CHECK(std::is_same_v<temperature, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>, + std::ratio<0>, std::ratio<0>, std::ratio<0>>>); + CHECK(std::is_same_v<current, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>, + std::ratio<0>, std::ratio<0>>>); + CHECK(std::is_same_v<amount_of_substance, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<1>, std::ratio<0>>>); + CHECK(std::is_same_v<luminous_intensity, dimension<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>, + std::ratio<0>, std::ratio<0>, std::ratio<1>>>); } TEST_CASE("Derived dimensions") { using namespace dimensions; - + CHECK(std::is_same_v<velocity, squint::div_t<length, dimensions::time>>); CHECK(std::is_same_v<acceleration, squint::div_t<velocity, dimensions::time>>); CHECK(std::is_same_v<force, mult_t<mass, acceleration>>); @@ -139,7 +156,7 @@ TEST_CASE("Derived dimensions") { TEST_CASE("Complex derived dimensions") { using namespace squint::dimensions; - + using force_length = mult_t<force, length>; // force = M * L * T^-2 // length = L @@ -157,8 +174,9 @@ TEST_CASE("Complex derived dimensions") { using complex_dim = mult_t<force_length_per_time_squared, temp_sqrt>; // complex_dim = (M * L^2 * T^-4) * K^(1/2) = M * L^2 * T^-4 * K^(1/2) - using expected = dimension<std::ratio<2>, std::ratio<-4>, std::ratio<1>, std::ratio<1, 2>, std::ratio<0>, std::ratio<0>, std::ratio<0>>; - + using expected = dimension<std::ratio<2>, std::ratio<-4>, std::ratio<1>, std::ratio<1, 2>, std::ratio<0>, + std::ratio<0>, std::ratio<0>>; + CHECK(std::is_same_v<complex_dim, expected>); // Let's also check each component individually diff --git a/tests/linalg_tests.cpp b/tests/linalg_tests.cpp index faf3066..6cda6b7 100644 --- a/tests/linalg_tests.cpp +++ b/tests/linalg_tests.cpp @@ -495,8 +495,8 @@ TEST_CASE("Matrix operations with quantity types") { quantity<float, mult_t<dimensions::velocity, dimensions::mass>>>, "Result should be a vector of velocity * mass (momentum)"); - CHECK(result[0] == doctest::Approx(5)); - CHECK(result[1] == doctest::Approx(8)); + CHECK(result[0].value() == doctest::Approx(5)); + CHECK(result[1].value() == doctest::Approx(8)); } SUBCASE("Matrix addition with force") {