diff --git a/tests/database/database_selector.cpp b/tests/database/database_selector.cpp index 07f7bb7..9f013a1 100644 --- a/tests/database/database_selector.cpp +++ b/tests/database/database_selector.cpp @@ -1,120 +1,124 @@ #include "catch.hpp" #include "database/yaml_reader.hpp" #include "database/selector.hpp" #include "database/mineral_selector.hpp" #include "str_database.hpp" #include "utils/timer.hpp" #include #include using namespace specmicp; using namespace specmicp::database; TEST_CASE("DatabaseSelector", "[Database, Component]") { std::istringstream input(good_test_database); DataReaderYaml reader(input); auto data = reader.get_database(); SECTION("Remove a component") { Timer timer; DatabaseSelector selector(data); selector.remove_component({data->components.get_id("C3")}); timer.stop(); std::cout << "Removing a component : " << timer.elapsed_time()*1000 << " ms (Ref 0.010ms)" << std::endl; CHECK(data->components.is_valid()); CHECK(data->aqueous.is_valid()); CHECK(data->minerals.is_valid()); CHECK(data->minerals_kinetic.is_valid()); CHECK(data->gas.is_valid()); CHECK(data->is_valid()); // basis CHECK(data->nb_component() == 4); CHECK(data->components.get_id("C3") == no_species); // aqueous CHECK(data->nb_aqueous() == 2); CHECK(data->aqueous.get_id("A3") == no_species); // minerals CHECK(data->nb_mineral() == 1); CHECK(data->minerals.get_id("M2") == no_species); // minerals_kinetic CHECK(data->nb_mineral_kinetic() == 0); CHECK(data->minerals_kinetic.get_id("MK1") == no_species); // Gas CHECK(data->nb_gas() == 0); CHECK(data->gas.get_id("G1") == no_species); // Sorbed CHECK(data->nb_sorbed() == 0); CHECK(data->sorbed.get_id("S1") == no_species); + // compound + CHECK(data->nb_compounds() == 0); + CHECK(data->compounds.get_id("Comp1") == no_species); + // Element CHECK(data->get_id_component_from_element("C3") == no_species); CHECK(data->get_label_component_from_element("C1") == "C1[-]"); CHECK(data->get_label_component_from_element("C2") == "C2[+]"); } } TEST_CASE("MineralSelector", "[Select,minerals]") { std::istringstream input(good_test_database); auto data = DataReaderYaml(input).get_database(); SECTION("Mineral selector") { size_t orig_hash = data->get_hash(); MineralSelector(data).keep_only({"M1"}); CHECK(data->minerals.is_valid()); CHECK(data->minerals_kinetic.is_valid()); CHECK(data->is_valid()); CHECK(data->get_hash() != orig_hash); // Mineral // ------- CHECK(data->nb_mineral() == 1); CHECK(data->minerals.get_id("M2") == no_species); CHECK(data->nu_mineral(0, 0) == 0.0); CHECK(data->nu_mineral(0, 1) == 0.0); CHECK(data->nu_mineral(0, 2) == 1.0); CHECK(data->nu_mineral(0, 3) == 1.0); CHECK(data->nu_mineral(0, 4) == 0.0); CHECK(data->logk_mineral(0) == -7); CHECK(data->molar_volume_mineral(0) == 1e-6*10.0); // Mineral kinetic // --------------- CHECK(data->nb_mineral_kinetic() == 2); CHECK(data->minerals_kinetic.get_id("M2") == 1); CHECK(data->nu_mineral_kinetic(0, 0) == 0.0); CHECK(data->nu_mineral_kinetic(0, 1) == 0.0); CHECK(data->nu_mineral_kinetic(0, 2) == 1.0); CHECK(data->nu_mineral_kinetic(0, 3) == 1.0); CHECK(data->nu_mineral_kinetic(0, 4) == 2.0); CHECK(data->logk_mineral_kinetic(0) == -9); CHECK(data->molar_volume_mineral_kinetic(0) == 1e-6*30.0); CHECK(data->nu_mineral_kinetic(1, 0) == 0.0); CHECK(data->nu_mineral_kinetic(1, 1) == 0.0); CHECK(data->nu_mineral_kinetic(1, 2) == 2.0); CHECK(data->nu_mineral_kinetic(1, 3) == 2.0); CHECK(data->nu_mineral_kinetic(1, 4) == 1.0); CHECK(data->logk_mineral_kinetic(1) == -6+data->logk_aqueous(1)+data->logk_aqueous(2)); CHECK(data->unsafe_molar_volume_mineral_kinetic(1) < 0); } } diff --git a/tests/database/database_switch.cpp b/tests/database/database_switch.cpp index 45421f3..28d3a4c 100644 --- a/tests/database/database_switch.cpp +++ b/tests/database/database_switch.cpp @@ -1,112 +1,123 @@ #include "catch.hpp" #include "database/yaml_reader.hpp" #include "database/switch_basis.hpp" #include "str_database.hpp" #include "utils/timer.hpp" #include #include using namespace specmicp; using namespace specmicp::database; TEST_CASE("Switch basis") { std::istringstream input(good_test_database); DataReaderYaml reader(input); auto data = reader.get_database(); SECTION("switch basis") { size_t orig_hash = data->get_hash(); Timer timer; BasisSwitcher switcher(data); std::map swapping = {{"C3", "A3[-]"}}; switcher.swap_components(swapping); timer.stop(); std::cout << "Switching basis : " << timer.elapsed_time()*1000 << " ms (Ref 0.020ms)" << std::endl; CHECK(data->components.is_valid()); CHECK(data->aqueous.is_valid()); CHECK(data->minerals.is_valid()); CHECK(data->minerals_kinetic.is_valid()); CHECK(data->is_valid()); CHECK(data->get_hash() != orig_hash); // Basis CHECK(data->nb_component() == 5); CHECK(data->components.get_id("C3") == no_species); CHECK(data->components.get_id("A3[-]") == 4); // Aqueous CHECK(data->nb_aqueous() == 3); CHECK(data->aqueous.get_id("A3[-]") == no_species); CHECK(data->aqueous.get_id("C3") == 2); CHECK(data->nu_aqueous(2, 0) == 0.0); CHECK(data->nu_aqueous(2, 1) == 0.0); CHECK(data->nu_aqueous(2, 2) == -1.0); CHECK(data->nu_aqueous(2, 3) == 0.0); CHECK(data->nu_aqueous(2, 4) == 1.0); CHECK(data->logk_aqueous(2) == 2.0); // Mineral CHECK(data->nb_mineral() == 2); CHECK(data->nu_mineral(1, 0) == 0.0); CHECK(data->nu_mineral(1, 1) == 0.0); CHECK(data->nu_mineral(1, 2) == 1.0); CHECK(data->nu_mineral(1, 3) == 2.0); CHECK(data->nu_mineral(1, 4) == 1.0); CHECK(data->logk_mineral(1) == -10.0); CHECK(data->unsafe_molar_volume_mineral(1) < 0); CHECK(data->molar_mass_mineral(0, units::MassUnit::gram) == 5.0); // Kinetic mineral CHECK(data->nb_mineral_kinetic() == 1); CHECK(data->nu_mineral_kinetic(0, 0) == 0.0); CHECK(data->nu_mineral_kinetic(0, 1) == 0.0); CHECK(data->nu_mineral_kinetic(0, 2) == -1.0); CHECK(data->nu_mineral_kinetic(0, 3) == 1.0); CHECK(data->nu_mineral_kinetic(0, 4) == 2.0); CHECK(data->logk_mineral_kinetic(0) == -5.0); CHECK(data->molar_volume_mineral_kinetic(0) == 1e-6*30.0); CHECK(data->molar_mass_mineral_kinetic(0, units::MassUnit::gram) == 13.0); // gas CHECK(data->nb_gas() == 1); CHECK(data->nu_gas(0, 0) == 0.0); CHECK(data->nu_gas(0, 1) == 0.0); CHECK(data->nu_gas(0, 2) == -1.0); CHECK(data->nu_gas(0, 3) == 0.0); CHECK(data->nu_gas(0, 4) == 1.0); CHECK(data->logk_gas(0) == 5.0); // Sorbed CHECK(data->nb_sorbed() == 1); CHECK(data->sorbed.get_label(0) == "S1"); CHECK(data->nu_sorbed(0, 0) == 0.0); CHECK(data->nu_sorbed(0, 1) == 0.0); CHECK(data->nu_sorbed(0, 2) == -1.0); CHECK(data->nu_sorbed(0, 3) == 0.0); CHECK(data->nu_sorbed(0, 4) == 1.0); CHECK(data->logk_sorbed(0) == -4); + // compounds + CHECK(data->nb_compounds() == 1); + CHECK(data->compounds.get_label(0) == "Comp1"); + + CHECK(data->nu_compound(0, 0) == 2.0); + CHECK(data->nu_compound(0, 1) == 0.0); + CHECK(data->nu_compound(0, 2) == -1.0); + CHECK(data->nu_compound(0, 3) == 0.0); + CHECK(data->nu_compound(0, 4) == 1.0); + + // Element CHECK(data->get_id_component_from_element("plop") == -1); CHECK(data->get_id_component_from_element("C1") != -1); CHECK(data->get_label_component_from_element("C1") == "C1[-]"); CHECK(data->get_label_component_from_element("C3") == "A3[-]"); } }