From ed443c0aa284fc071760922260ec4df5dd8916bd Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Mon, 24 Mar 2025 12:59:17 -0400 Subject: [PATCH] test(tests/composition): added composition tests, atomicSpecies tests, and sandbox --- tests/composition/compositionTest.cpp | 58 +++++++++++++++++++++++++-- tests/composition/meson.build | 2 +- tests/composition_sandbox/comp.cpp | 15 +++++++ tests/composition_sandbox/config.yaml | 2 + tests/composition_sandbox/meson.build | 1 + tests/meson.build | 1 + 6 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 tests/composition_sandbox/comp.cpp create mode 100644 tests/composition_sandbox/config.yaml create mode 100644 tests/composition_sandbox/meson.build diff --git a/tests/composition/compositionTest.cpp b/tests/composition/compositionTest.cpp index 1336983..5bd2a3d 100644 --- a/tests/composition/compositionTest.cpp +++ b/tests/composition/compositionTest.cpp @@ -3,8 +3,10 @@ #include #include "atomicSpecies.h" +#include "composition.h" +#include "config.h" -std::string EXAMPLE_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/tests/composition/example.yaml"; +std::string EXAMPLE_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/tests/config/example.yaml"; /** * @brief Test suite for the composition class. @@ -14,8 +16,56 @@ class compositionTest : public ::testing::Test {}; /** * @brief Test the constructor of the composition class. */ -TEST_F(compositionTest, constructor) { - std::cout << "Testing the constructor of the composition class." << std::endl; - std::cout << chemSpecies::species.at("H-1") << std::endl; +TEST_F(compositionTest, isotopeMasses) { + EXPECT_NO_THROW(chemSpecies::species.at("H-1")); + EXPECT_DOUBLE_EQ(chemSpecies::species.at("H-1").mass(), 1.007825031898); + EXPECT_DOUBLE_EQ(chemSpecies::species.at("He-3").mass(), 3.0160293219700001); + EXPECT_DOUBLE_EQ(chemSpecies::species.at("He-4").mass(),4.0026032541300003); } +TEST_F(compositionTest, constructor) { + Config::getInstance().loadConfig(EXAMPLE_FILENAME); + EXPECT_NO_THROW(composition::Composition comp); +} + +TEST_F(compositionTest, registerSymbol) { + Config::getInstance().loadConfig(EXAMPLE_FILENAME); + composition::Composition comp; + EXPECT_NO_THROW(comp.registerSymbol("H-1")); + EXPECT_NO_THROW(comp.registerSymbol("He-4")); + EXPECT_THROW(comp.registerSymbol("H-19"), std::runtime_error); + EXPECT_THROW(comp.registerSymbol("He-21"), std::runtime_error); + + std::set registeredSymbols = comp.getRegisteredSymbols(); + EXPECT_TRUE(registeredSymbols.find("H-1") != registeredSymbols.end()); + EXPECT_TRUE(registeredSymbols.find("He-4") != registeredSymbols.end()); + EXPECT_TRUE(registeredSymbols.find("H-19") == registeredSymbols.end()); + EXPECT_TRUE(registeredSymbols.find("He-21") == registeredSymbols.end()); +} + +TEST_F(compositionTest, setGetComposition) { + Config::getInstance().loadConfig(EXAMPLE_FILENAME); + composition::Composition comp; + comp.registerSymbol("H-1"); + comp.registerSymbol("He-4"); + + EXPECT_DOUBLE_EQ(comp.setComposition("H-1", 0.5), 0.0); + EXPECT_DOUBLE_EQ(comp.setComposition("He-4", 0.5), 0.0); + EXPECT_DOUBLE_EQ(comp.setComposition("H-1", 0.6), 0.5); + EXPECT_DOUBLE_EQ(comp.setComposition("He-4", 0.4), 0.5); + + EXPECT_NO_THROW(comp.finalize()); + std::unordered_map compositions = comp.getCompositions(); + EXPECT_DOUBLE_EQ(compositions["H-1"].mass_fraction, 0.6); + + EXPECT_THROW(comp.setComposition("He-3", 0.3), std::runtime_error); + + EXPECT_NO_THROW(comp.setComposition({"H-1", "He-4"}, {0.5, 0.5})); + EXPECT_THROW(comp.getComposition("H-1"), std::runtime_error); + EXPECT_TRUE(comp.finalize()); + EXPECT_DOUBLE_EQ(comp.getComposition("H-1").mass_fraction, 0.5); + + EXPECT_NO_THROW(comp.setComposition({"H-1", "He-4"}, {0.6, 0.6})); + EXPECT_FALSE(comp.finalize()); + EXPECT_THROW(comp.getComposition("H-1"), std::runtime_error); +} \ No newline at end of file diff --git a/tests/composition/meson.build b/tests/composition/meson.build index a5b6889..4819521 100644 --- a/tests/composition/meson.build +++ b/tests/composition/meson.build @@ -11,7 +11,7 @@ foreach test_file : test_sources test_exe = executable( exe_name, test_file, - dependencies: [gtest_dep, species_weight_dep, gtest_main], + dependencies: [gtest_dep, species_weight_dep, gtest_main, composition_dep], install_rpath: '@loader_path/../../src' # Ensure runtime library path resolves correctly ) diff --git a/tests/composition_sandbox/comp.cpp b/tests/composition_sandbox/comp.cpp new file mode 100644 index 0000000..570f859 --- /dev/null +++ b/tests/composition_sandbox/comp.cpp @@ -0,0 +1,15 @@ +#include "composition.h" +#include "config.h" +#include + +int main(int argv, char* argc[]) { + std::string pathToConfigFile; + if (argv == 2) { + pathToConfigFile = argc[1]; + } else { + pathToConfigFile = "config.json"; + } + Config::getInstance().loadConfig(pathToConfigFile); + composition::Composition comp; + return 0; +} \ No newline at end of file diff --git a/tests/composition_sandbox/config.yaml b/tests/composition_sandbox/config.yaml new file mode 100644 index 0000000..7413909 --- /dev/null +++ b/tests/composition_sandbox/config.yaml @@ -0,0 +1,2 @@ +Composition: + Tracked: "H-1" \ No newline at end of file diff --git a/tests/composition_sandbox/meson.build b/tests/composition_sandbox/meson.build new file mode 100644 index 0000000..1e84ae5 --- /dev/null +++ b/tests/composition_sandbox/meson.build @@ -0,0 +1 @@ +executable('composition_sandbox', 'comp.cpp', dependencies: [composition_dep, config_dep]) \ No newline at end of file diff --git a/tests/meson.build b/tests/meson.build index ad4c0fa..1632bbd 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -18,4 +18,5 @@ subdir('composition') # Subdirectories for sandbox tests subdir('dobj_sandbox') subdir('opatIO_sandbox') +subdir('composition_sandbox')