Added in testing
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include "body.hpp"
|
||||
#include <cmath>
|
||||
#include <memory>
|
||||
|
||||
class BodyTest : public testing::Test {
|
||||
protected:
|
||||
BodyTest() {
|
||||
test_body = std::make_unique<Body>(
|
||||
Position{Decimal(0), Decimal(0), Decimal(0)},
|
||||
Velocity{Decimal(0), Decimal(0), Decimal(0)},
|
||||
Mass(1.0),
|
||||
"test_body"
|
||||
);
|
||||
}
|
||||
|
||||
std::unique_ptr<Body> test_body;
|
||||
};
|
||||
|
||||
TEST_F(BodyTest, AddAcceleration) {
|
||||
Acceleration new_A{Decimal(1.0), Decimal(2.0), Decimal(3.0)};
|
||||
test_body->addAcceleration(new_A);
|
||||
|
||||
const auto& A = test_body->getAcceleration();
|
||||
EXPECT_DOUBLE_EQ(A[0], 1.0);
|
||||
EXPECT_DOUBLE_EQ(A[1], 2.0);
|
||||
EXPECT_DOUBLE_EQ(A[2], 3.0);
|
||||
|
||||
// Add another acceleration
|
||||
Acceleration another_A{Decimal(2.0), Decimal(3.0), Decimal(4.0)};
|
||||
test_body->addAcceleration(another_A);
|
||||
|
||||
EXPECT_DOUBLE_EQ(A[0], 3.0);
|
||||
EXPECT_DOUBLE_EQ(A[1], 5.0);
|
||||
EXPECT_DOUBLE_EQ(A[2], 7.0);
|
||||
}
|
||||
|
||||
TEST_F(BodyTest, Step) {
|
||||
// Set initial velocity and acceleration
|
||||
test_body->setAcceleration(Acceleration{Decimal(1.0), Decimal(2.0), Decimal(3.0)});
|
||||
|
||||
// Take a step
|
||||
test_body->step(1.0);
|
||||
|
||||
// Check new position
|
||||
const auto& X = test_body->getPosition();
|
||||
EXPECT_DOUBLE_EQ(X[0], 0.0);
|
||||
EXPECT_DOUBLE_EQ(X[1], 0.0);
|
||||
EXPECT_DOUBLE_EQ(X[2], 0.0);
|
||||
|
||||
// Check new velocity
|
||||
const auto& V = test_body->getVelocity();
|
||||
EXPECT_DOUBLE_EQ(V[0], 1.0);
|
||||
EXPECT_DOUBLE_EQ(V[1], 2.0);
|
||||
EXPECT_DOUBLE_EQ(V[2], 3.0);
|
||||
|
||||
// Check acceleration is reset
|
||||
const auto& A = test_body->getAcceleration();
|
||||
EXPECT_DOUBLE_EQ(A[0], 0.0);
|
||||
EXPECT_DOUBLE_EQ(A[1], 0.0);
|
||||
EXPECT_DOUBLE_EQ(A[2], 0.0);
|
||||
|
||||
}
|
||||
|
||||
TEST_F(BodyTest, Energy) {
|
||||
// Set position and velocity through save/load
|
||||
auto state = std::make_tuple(
|
||||
Position{Decimal(1.0), Decimal(0.0), Decimal(0.0)},
|
||||
Velocity{Decimal(1.0), Decimal(0.0), Decimal(0.0)},
|
||||
Mass(1.0)
|
||||
);
|
||||
test_body = std::make_unique<Body>(Body::load(state));
|
||||
|
||||
// Calculate expected values
|
||||
Decimal expected_ke = Decimal(0.5); // 0.5 * m * v^2
|
||||
Decimal expected_pe = Decimal(-1.0); // -m/r
|
||||
Decimal expected_total = expected_ke + expected_pe;
|
||||
|
||||
EXPECT_DOUBLE_EQ(test_body->ke(), expected_ke);
|
||||
EXPECT_DOUBLE_EQ(test_body->pe(), expected_pe);
|
||||
EXPECT_DOUBLE_EQ(test_body->E(), expected_total);
|
||||
}
|
||||
|
||||
TEST_F(BodyTest, SaveAndLoad) {
|
||||
// Set some values through save/load
|
||||
auto state = std::make_tuple(
|
||||
Position{Decimal(1.0), Decimal(2.0), Decimal(3.0)},
|
||||
Velocity{Decimal(4.0), Decimal(5.0), Decimal(6.0)},
|
||||
Mass(7.0)
|
||||
);
|
||||
test_body = std::make_unique<Body>(Body::load(state));
|
||||
|
||||
// Save state
|
||||
auto saved_state = test_body->save();
|
||||
|
||||
// Create new body from saved state
|
||||
Body loaded_body = Body::load(saved_state);
|
||||
|
||||
// Verify loaded values
|
||||
const auto& X = loaded_body.getPosition();
|
||||
const auto& V = loaded_body.getVelocity();
|
||||
const auto& m = loaded_body.getMass();
|
||||
|
||||
EXPECT_DOUBLE_EQ(X[0], 1.0);
|
||||
EXPECT_DOUBLE_EQ(X[1], 2.0);
|
||||
EXPECT_DOUBLE_EQ(X[2], 3.0);
|
||||
EXPECT_DOUBLE_EQ(V[0], 4.0);
|
||||
EXPECT_DOUBLE_EQ(V[1], 5.0);
|
||||
EXPECT_DOUBLE_EQ(V[2], 6.0);
|
||||
EXPECT_DOUBLE_EQ(m, 7.0);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include "calc.hpp"
|
||||
#include <cmath>
|
||||
|
||||
TEST(CalcTest, FormatSigFigs) {
|
||||
// Test positive numbers
|
||||
EXPECT_EQ(format_sig_figs(123.456, 3), "1.23e+02");
|
||||
EXPECT_EQ(format_sig_figs(123.456, 4), "1.235e+02");
|
||||
EXPECT_EQ(format_sig_figs(123.456, 5), "1.2346e+02");
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include "simulator.hpp"
|
||||
#include <vector>
|
||||
#include <filesystem>
|
||||
#include <memory>
|
||||
|
||||
class SimulatorTest : public testing::Test {
|
||||
protected:
|
||||
SimulatorTest() :
|
||||
bodies({
|
||||
Body(
|
||||
Position{Decimal(0), Decimal(0), Decimal(0)},
|
||||
Velocity{Decimal(0), Decimal(0), Decimal(0)},
|
||||
Mass(1.0),
|
||||
"body1"
|
||||
),
|
||||
Body(
|
||||
Position{Decimal(1), Decimal(0), Decimal(0)},
|
||||
Velocity{Decimal(0), Decimal(1), Decimal(0)},
|
||||
Mass(1.0),
|
||||
"body2"
|
||||
)
|
||||
})
|
||||
{
|
||||
simulator = std::make_unique<Simulator>(
|
||||
bodies,
|
||||
Decimal(0.1), // step_size
|
||||
1, // steps_per_save
|
||||
std::filesystem::path("test_output.json"), // output_file
|
||||
0, // current_step
|
||||
true // overwrite_output
|
||||
);
|
||||
}
|
||||
|
||||
std::vector<Body> bodies;
|
||||
std::unique_ptr<Simulator> simulator;
|
||||
};
|
||||
|
||||
TEST_F(SimulatorTest, Step) {
|
||||
// Take a step
|
||||
//TODO
|
||||
}
|
||||
|
||||
TEST_F(SimulatorTest, TotalEnergy) {
|
||||
//TODO
|
||||
// Decimal initial_energy = simulator->total_energy();
|
||||
|
||||
// simulator->step(Decimal(0.1));
|
||||
|
||||
// Decimal new_energy = simulator->total_energy();
|
||||
|
||||
// EXPECT_NEAR(initial_energy, new_energy, 1e-10);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user