|
|
|
|
@ -81,37 +81,6 @@ TEST_CASE("Gravitational acceleration evaluation", "[physics][gravity]") {
|
|
|
|
|
REQUIRE(compare_double(accel.x, -expected_magnitude, 1e-10)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_CASE("RK4 integration step", "[physics][rk4]") { |
|
|
|
|
Vec3 position = {0.0, 1.0, 0.0}; |
|
|
|
|
Vec3 velocity = {sqrt(G * 1e10 / 1.0), 0.0, 0.0}; |
|
|
|
|
double dt = 1.0; |
|
|
|
|
double body_mass = 1.0; |
|
|
|
|
double parent_mass = 1e10; |
|
|
|
|
|
|
|
|
|
double initial_distance = vec3_magnitude(position); |
|
|
|
|
|
|
|
|
|
rk4_step(&position, &velocity, dt, body_mass, parent_mass); |
|
|
|
|
|
|
|
|
|
double final_distance = vec3_magnitude(position); |
|
|
|
|
|
|
|
|
|
REQUIRE(final_distance > 0.9 * initial_distance); |
|
|
|
|
REQUIRE(final_distance < 1.1 * initial_distance); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_CASE("Matrix identity", "[matrix][identity]") { |
|
|
|
|
Mat3 I = mat3_identity(); |
|
|
|
|
|
|
|
|
|
REQUIRE(compare_double(I.m00, 1.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m01, 0.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m02, 0.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m10, 0.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m11, 1.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m12, 0.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m20, 0.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m21, 0.0, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(I.m22, 1.0, 1e-10)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_CASE("Matrix-vector multiplication", "[matrix][vector]") { |
|
|
|
|
Mat3 m = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; |
|
|
|
|
Vec3 v = {1.0, 2.0, 3.0}; |
|
|
|
|
@ -123,23 +92,6 @@ TEST_CASE("Matrix-vector multiplication", "[matrix][vector]") {
|
|
|
|
|
REQUIRE(compare_double(result.z, 50.0, 1e-10)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_CASE("Matrix multiplication with identity", "[matrix][multiply]") { |
|
|
|
|
Mat3 A = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; |
|
|
|
|
Mat3 I = mat3_identity(); |
|
|
|
|
|
|
|
|
|
Mat3 result = mat3_multiply(A, I); |
|
|
|
|
|
|
|
|
|
REQUIRE(compare_double(result.m00, A.m00, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m01, A.m01, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m02, A.m02, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m10, A.m10, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m11, A.m11, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m12, A.m12, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m20, A.m20, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m21, A.m21, 1e-10)); |
|
|
|
|
REQUIRE(compare_double(result.m22, A.m22, 1e-10)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_CASE("Rotation about Z axis", "[matrix][rotation]") { |
|
|
|
|
double angle = M_PI / 2; // 90 degrees
|
|
|
|
|
Mat3 Rz = mat3_rotation_z(angle); |
|
|
|
|
|