feat(MaskedComposition): added MaskedComposition to libcomposition
MaskedComposition is a generally useful decorator, therefore instead of forcing callers to impliment it on their own, we have implimented it as part of libcomposition
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
#include "fourdst/composition/composition.h"
|
||||
#include "fourdst/composition/exceptions/exceptions_composition.h"
|
||||
#include "fourdst/composition/utils.h"
|
||||
#include "fourdst/composition/composition_abstract.h"
|
||||
#include "fourdst/composition/decorators/composition_masked.h"
|
||||
|
||||
#include "fourdst/config/config.h"
|
||||
|
||||
@@ -236,41 +236,18 @@ TEST_F(compositionTest, buildFromMassFractions) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests inheritance from CompositionAbstract and overriding a getter.
|
||||
* @details This test defines a derived class that overrides getMolarAbundance,
|
||||
* and verifies that the override works and other getters are inherited.
|
||||
* @par What this test proves:
|
||||
* - Derived classes can override getters.
|
||||
* - All CompositionAbstract children have the standard getter interface.
|
||||
*/
|
||||
TEST_F(compositionTest, abstractBase) {
|
||||
class UnrestrictedComposition : public fourdst::composition::CompositionDecorator {
|
||||
public:
|
||||
UnrestrictedComposition(std::unique_ptr<CompositionAbstract> base, const fourdst::atomic::Species& species):
|
||||
CompositionDecorator(std::move(base)),
|
||||
m_species(species)
|
||||
{}
|
||||
|
||||
double getMolarAbundance(const fourdst::atomic::Species &species) const override {
|
||||
if (species == m_species) {
|
||||
return 1.0;
|
||||
}
|
||||
return CompositionDecorator::getMolarAbundance(species);
|
||||
}
|
||||
private:
|
||||
fourdst::atomic::Species m_species;
|
||||
};
|
||||
|
||||
TEST_F(compositionTest, decorators) {
|
||||
fourdst::composition::Composition comp;
|
||||
comp.registerSymbol("H-1"); comp.registerSymbol("He-4"); comp.registerSymbol("O-16");
|
||||
comp.setMolarAbundance("H-1", 0.6); comp.setMolarAbundance("He-4", 0.6);
|
||||
const fourdst::composition::MaskedComposition mComp(comp, {fourdst::atomic::H_1, fourdst::atomic::He_4});
|
||||
|
||||
ASSERT_DOUBLE_EQ(mComp.getMolarAbundance(fourdst::atomic::H_1), 0.6);
|
||||
ASSERT_DOUBLE_EQ(mComp.getMolarAbundance("He-4"), 0.6);
|
||||
ASSERT_FALSE(mComp.contains("O-16"));
|
||||
|
||||
comp.setMolarAbundance("H-1", 1.0);
|
||||
ASSERT_NE(mComp.getMolarAbundance(fourdst::atomic::H_1), 1.0);
|
||||
|
||||
const UnrestrictedComposition uComp(std::make_unique<fourdst::composition::Composition>(comp), fourdst::atomic::H_1);
|
||||
|
||||
ASSERT_DOUBLE_EQ(uComp.getMolarAbundance(fourdst::atomic::H_1), 1.0);
|
||||
ASSERT_DOUBLE_EQ(uComp.getMassFraction("He-4"), comp.getMassFraction("He-4"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user