tstNuclideResource.cpp

./Core/re/tests/tstNuclideResource.cpp

#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <istream>
#include <sstream>
#include <string>
#include <vector>
#include "Nemesis/gtest/nemesis_gtest.hh"
#include "Nemesis/harness/DBC.hh"
using namespace Origen;
{
NuclideResource nr( true ); // load default resource
ASSERT_TRUE( nr.is_present( 92235 ) );
ASSERT_TRUE( nr.is_present( 1092235 ) );
// check that it's not 235 but close
EXPECT_NE( 235, nr.parent_map[92235].mass );
EXPECT_NEAR( 235.0, nr.parent_map[92235].mass, 0.1 );
EXPECT_NEAR( 235.0, nr.parent_map[1092235].mass, 0.1 );
EXPECT_NE( 235, nr.parent_map[1092235].mass );
}
TEST( NuclideResource, Default )
{
ASSERT_FALSE( nr1 == nullptr );
// check use count (NuclideResource class owns unique)
EXPECT_EQ( 2, nr1.use_count() );
EXPECT_FALSE( nr1.unique() );
ASSERT_FALSE( nr2 == nullptr );
EXPECT_EQ( 3, nr1.use_count() );
EXPECT_FALSE( nr1.unique() );
// points to same data
EXPECT_EQ( nr1.get(), nr2.get() );
// clear on class
EXPECT_EQ( 2, nr1.use_count() );
nr2 = nullptr;
EXPECT_EQ( 1, nr1.use_count() );
EXPECT_TRUE( nr1.unique() );
// create new resource
EXPECT_NE( nr1.get(), nr2.get() );
}
TEST( NuclideResource, AbundanceSums )
{
NuclideResource nr( true ); // load default resource
std::vector<double> total_num( 150, 0.0 );
std::vector<double> total_wt( 150, 0.0 );
for( auto it = nr.parent_map.begin(), ite = nr.parent_map.end(); it != ite;
++it )
{
int id = it->first;
int z = ( id / 1000 ) % 1000;
total_num[z - 1] += it->second.abundance_num;
total_wt[z - 1] += it->second.abundance_wt;
}
for( size_t zm1 = 0; zm1 < total_num.size(); ++zm1 )
{
EXPECT_TRUE( total_num[zm1] == 0.0 ||
std::abs( total_num[zm1] - 1.0 ) < 1e-3 );
EXPECT_TRUE( total_wt[zm1] == 0.0 ||
std::abs( total_wt[zm1] - 1.0 ) < 1e-3 );
}
}