feat(composition): added composition module stub

This commit is contained in:
2025-03-24 10:41:13 -04:00
parent 9d827f6fa5
commit 3c3d714702
5 changed files with 113 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
# Define the library
composition_sources = files(
'private/composition.cpp',
)
composition_headers = files(
'public/composition.h'
)
dependencies = [
probe_dep,
config_dep,
quill_dep,
]
# Define the libcomposition library so it can be linked against by other parts of the build system
libcomposition = static_library('composition',
composition_sources,
include_directories: include_directories('public'),
cpp_args: ['-fvisibility=default'],
dependencies: dependencies,
install : true)
composition_dep = declare_dependency(
include_directories: include_directories('public'),
link_with: libcomposition,
dependencies: dependencies,
sources: composition_sources,
)
# Make headers accessible
install_headers(composition_headers, subdir : '4DSSE/composition')

View File

@@ -0,0 +1,36 @@
#ifndef COMPOSITION_H
#define COMPOSITION_H
#include <iomanip>
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include "quill/LogMacros.h
#include "probe.h"
#include "config.h"
struct CompositionEntry {
std::string symbol;
std::string mass_fraction;
friend std::ostream& operator<<(std::ostream& os, const CompositionEntry& entry) {
os << std::setw(5) << "<" << entry.symbol << " : " << entry.mass_fraction << ">";
return os;
}
};
class Composition {
private:
Config& m_config = Config::getInstance();
Probe::LogManager& m_logManager = Probe::LogManager::getInstance();
quill::Logger* m_logger = logManager.getLogger('log');
std::vector<std::string> m_registeredSymbols;
std::unordered_map<std::string, CompositionEntry> m_compositions;
}
#endif // COMPOSITION_H

View File

@@ -0,0 +1,21 @@
#include <gtest/gtest.h>
#include <string>
#include <algorithm>
#include "atomicSpecies.h"
std::string EXAMPLE_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/tests/composition/example.yaml";
/**
* @brief Test suite for the composition class.
*/
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;
}

View File

@@ -0,0 +1,23 @@
# Test files for const
test_sources = [
'compositionTest.cpp',
]
foreach test_file : test_sources
exe_name = test_file.split('.')[0]
message('Building test: ' + exe_name)
# Create an executable target for each test
test_exe = executable(
exe_name,
test_file,
dependencies: [gtest_dep, species_weight_dep, gtest_main],
install_rpath: '@loader_path/../../src' # Ensure runtime library path resolves correctly
)
# Add the executable as a test
test(
exe_name,
test_exe,
env: ['MESON_SOURCE_ROOT=' + meson.project_source_root(), 'MESON_BUILD_ROOT=' + meson.project_build_root()])
endforeach

View File

@@ -13,6 +13,7 @@ subdir('probe')
subdir('eos')
subdir('resource')
subdir('network')
subdir('composition')
# Subdirectories for sandbox tests
subdir('dobj_sandbox')