Skip to content

Commit

Permalink
save
Browse files Browse the repository at this point in the history
  • Loading branch information
barne856 committed Jul 14, 2024
1 parent c161a4a commit 0d4983b
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 31 deletions.
76 changes: 47 additions & 29 deletions tests/dimension_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>>);
Expand All @@ -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>>);
Expand All @@ -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>>);
Expand All @@ -58,18 +64,19 @@ 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>>);
CHECK(std::is_same_v<squared::K, std::ratio<8>>);
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>>);
Expand All @@ -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>>);
Expand All @@ -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>>);
Expand All @@ -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>>);
Expand All @@ -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
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions tests/linalg_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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") {
Expand Down

0 comments on commit 0d4983b

Please sign in to comment.