diff --git a/work/week9/particles/starting_point/main.cc b/work/week9/particles/starting_point/main.cc index 2114412..c38789d 100644 --- a/work/week9/particles/starting_point/main.cc +++ b/work/week9/particles/starting_point/main.cc @@ -1,96 +1,140 @@ #include "compute_gravity.hh" #include "compute_verlet_integration.hh" #include "csv_reader.hh" #include "csv_writer.hh" #include "my_types.hh" #include "ping_pong_balls_factory.hh" #include "planets_factory.hh" #include "system.hh" /* -------------------------------------------------------------------------- */ +#include #include #include #include /* -------------------------------------------------------------------------- */ +struct PlanetStruct { + std::array position; + std::array velocity; + std::array force; + Real mass; + std::string name; + + PlanetStruct(){ + position = {0,0,0}; + velocity = {0,0,0}; + force = {0,0,0}; + mass = 1; + name = "sun"; + } +}; + +class PlanetCsvTest : public ::testing::Test { + public: + PlanetCsvTest(){ + // Create system object + system = new System; + planetTest = new PlanetStruct; + // Read planet from file + std::string filename = "ex4_3.txt"; + CsvReader reader(filename); + reader.read(*system); + } + virtual ~PlanetCsvTest(){ + // Delete system object + delete system; + delete planetTest; + } + public: + System* system; + PlanetStruct* planetTest; +}; + +// Fixture test +TEST_F(PlanetCsvTest, ReadCorrectInfoFromCSV) { + EXPECT_EQ(1,planetTest->mass); +} + + int main(int argc, char** argv) { if (argc != 6) { std::cout << "Usage: " << argv[0] << " nsteps dump_freq input.csv particle_type timestep" << std::endl; std::cout << "\tparticle type can be: planet, ping_pong" << std::endl; std::exit(EXIT_FAILURE); } // Parse arguments into stringstream std::stringstream sstr; for (int i = 1; i < argc; ++i) { // std::cout << argv[i] << std::endl; sstr << argv[i] << " "; } // Set number of steps Real nsteps; sstr >> nsteps; // Set dumper frequency int freq; sstr >> freq; // Set filename std::string filename; sstr >> filename; // std::cout << filename << std::endl; // Set particle's type std::string particle_type; sstr >> particle_type; // Set time step Real timestep; sstr >> timestep; // std::cout << "dt set to: " << timestep << std::endl; // Init system obj std::unique_ptr system = std::make_unique(); // auto system = std::make_unique(); // System system; // Init reader obj CsvReader reader(filename); // Read from file reader.read(*system); // Init writer obj (ex 1.2) //std::string saveFile = "saveFile.txt"; //Init writer obj for initial step std::string saveFile = "Step-0000.csv"; CsvWriter writer(saveFile); writer.write(*system); // Create all relevant interactions auto gravity = std::make_shared(); // Create integrator and add interactions auto integrator = std::make_shared(timestep); integrator->addInteraction(gravity); // Create system evolution obj SystemEvolution sev(std::move(system)); sev.setNSteps(nsteps); sev.setDumpFreq(freq); sev.addCompute(integrator); sev.evolve(); // // Integrate system for each time step // for (UInt i = 0; i < nsteps; ++i) { // integrator.compute(*system); // // Write updated variables at a chosen frequency // if (fmod(i, freq) == 0) { // std::string writeInterFile; // writeInterFile = "Step" + std::to_string(i) + ".csv"; // std::cout << writeInterFile << std::endl; // CsvWriter writer(writeInterFile); // writer.write(*system); // } // } return EXIT_SUCCESS; }