tstNuclideSet.cpp

./Core/dc/tests/tstNuclideSet.cpp

#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
#include "Nemesis/gtest/nemesis_gtest.hh"
#include "ScaleSTL/Functions.h"
#include "Standard/Interface/SerialStream.h"
using ScaleSTL::eq_vec;
using namespace Origen;
/*
This is not only a test of the NuclideSet but of the accessors
and behavior of implicit constructors and assignment operator
for the "standard" ORIGEN accessors.
*/
{
return Vec_Int( {10008016, 20092235, 21092235, 20092238, 30054135} );
}
{
return Vec_Int(
{10008016, 20092235, 21092235, 20092238, 30053135, 30054135} );
}
TEST( NuclidSetDefinition, Basic )
{
// make a library header
EXPECT_EQ( 5, nsd.total_nuclides() );
EXPECT_EQ( 1, nsd.num_in_sublib( SUBLIB_1LT ) );
EXPECT_EQ( 3, nsd.num_in_sublib( SUBLIB_2AC ) );
EXPECT_EQ( 1, nsd.num_in_sublib( SUBLIB_3FP ) );
}
TEST( NuclideSet, ConstructorCopy )
{
// make a library header
// shallow copy
NuclideSet nsd_copy( nsd );
// pointer compare
EXPECT_EQ( nsd.ids(), nsd_copy.ids() );
// objects have same data
EXPECT_TRUE( nsd == nsd_copy );
// set new ids on copy
nsd_copy.set_ids( createNuclideIds5() );
// pointers are different/vectors are same
EXPECT_NE( nsd.scp_ids(), nsd_copy.scp_ids() );
EXPECT_VEC_EQ( nsd.ids(), nsd_copy.ids() );
// set new ids on copy
nsd_copy.set_ids( createNuclideIds6() );
// pointers are different/vectors are different
EXPECT_NE( nsd.scp_ids(), nsd_copy.scp_ids() );
EXPECT_FALSE( eq_vec( nsd.ids(), nsd_copy.ids() ) );
}
TEST( NuclideSet, AssignmentCopy )
{
// make a library header
// shallow copy
NuclideSet nsd_copy = nsd;
// pointer compare
EXPECT_EQ( nsd.scp_ids(), nsd_copy.scp_ids() );
// objects have same data
EXPECT_TRUE( nsd == nsd_copy );
// set new ids on copy
nsd_copy.set_ids( createNuclideIds5() );
// pointers are different/vectors are same
EXPECT_NE( nsd.scp_ids(), nsd_copy.scp_ids() );
EXPECT_VEC_EQ( nsd.ids(), nsd_copy.ids() );
// set new ids on copy
nsd_copy.set_ids( createNuclideIds6() );
// pointers are different/vectors are different
EXPECT_NE( nsd.scp_ids(), nsd_copy.scp_ids() );
EXPECT_FALSE( eq_vec( nsd.ids(), nsd_copy.ids() ) );
}
TEST( NuclideSet, Serialize )
{
SerialStream ss;
int return_code;
NuclideSet nsd_copy;
// serialize without data
{
return_code = nsd.serialize( &ss );
ASSERT_EQ( 0, return_code );
return_code = nsd_copy.deserialize( &ss );
ASSERT_EQ( 0, return_code );
EXPECT_EQ( 0, nsd.ids().size() );
EXPECT_TRUE( nsd == nsd_copy );
}
// serialize with data
{
return_code = nsd.serialize( &ss );
ASSERT_EQ( 0, return_code );
return_code = nsd_copy.deserialize( &ss );
ASSERT_EQ( 0, return_code );
EXPECT_NE( nsd.scp_ids(), nsd_copy.scp_ids() );
EXPECT_VEC_EQ( nsd.ids(), nsd_copy.ids() ) << nsd.to_string() << "\n"
<< nsd_copy.to_string();
EXPECT_TRUE( nsd == nsd_copy );
}
}
TEST( NuclideSet, Sublibs )
{
// use constructor
NuclideSet nsd( {1003} );
EXPECT_FALSE( nsd.has_sublibs() );
EXPECT_EQ( 1003, nsd.ids_at( 0 ) );
nsd.set_ids( {1001003} );
EXPECT_FALSE( nsd.has_sublibs() );
const Vec_Int* ids;
nsd.getptr_ids( ids );
EXPECT_EQ( 1001003, ids->at( 0 ) );
// as soon as we set new ids, this pointer is invalid
nsd.set_ids( {21001003} );
EXPECT_TRUE( nsd.has_sublibs() );
EXPECT_TRUE( nsd.has_sublib( 2 ) );
EXPECT_FALSE( nsd.has_sublib( 1 ) );
}
TEST( NuclideSet, RealLibrary )
{
// create library
Library lib;
bool created = FakeFactory::Library_scale_pwr( lib );
ASSERT_TRUE( created );
EXPECT_EQ( 910,
EXPECT_EQ( 176,
EXPECT_EQ( 1151,
}