tstObiwan.cpp

./Core/ut/tests/tstObiwan.cpp

#include "Nemesis/gtest/nemesis_gtest.hh"
#include "Standard/Interface/Reporter.h"
template <typename T>
class ObiwanTester : public ::testing::Test
{
virtual void SetUp()
{
// quiet STDERR output
Standard::err.level = 0;
}
};
//! Check to make sure the help screen works.
TYPED_TEST_P( ObiwanTester, HelpWorks ) { EXPECT_NE( "", TypeParam::help() ); }
typedef ::testing::Types<Origen::Obiwan_convert,
// test a bad mode
TEST( ObiwanMain, BadMode )
{
Origen::Vec_Str args{"obiwan", "xxx"};
std::stringstream out, err;
int status = Origen::obiwan_main( args, out, err );
EXPECT_NE( 0, status );
}
// test that flags in view mode work
TEST( ObiwanMain, LibraryView1 )
{
// create library
ScaleUtils::IO::DB opts;
Origen::saveLibrary( *lib, "a.f33", opts );
// view
Origen::Vec_Str args{"obiwan",
"view",
"-format=loxs",
"-sizzzaaa=94000",
"-pos=0",
"-transpose=1",
"-symbols=1",
"a.f33"};
std::stringstream out, err;
int status = Origen::obiwan_main( args, out, err );
// std::cout<<out.str();
// std::cerr<<err.str();
EXPECT_EQ( 0, status );
std::string ref0 =
" burnup 2:pu238 2:pu239 2:pu240 2:pu241 "
"2:pu242";
std::string ref1 =
" 3.4028e+38 1.0000e+00 1.0000e+00 1.0000e+00 1.0000e+00 "
"1.0000e+00";
Origen::Vec_Str lines = ScaleUtils::IO::splitString( "\n", out.str() );
EXPECT_EQ( ref0, lines[0] );
EXPECT_EQ( ref1, lines[1] );
}
// test that globs work
TEST( ObiwanMain, LibraryInfoGlob )
{
// create library
ScaleUtils::IO::DB opts;
// save two
Origen::saveLibrary( *lib, "lib_a.f33", opts );
Origen::saveLibrary( *lib, "lib_b.f33", opts );
Origen::Vec_Str args{"obiwan", "info", "lib_*.f33"};
std::stringstream out, err;
int status = Origen::obiwan_main( args, out, err );
// std::cout<<out.str();
// std::cerr<<err.str();
EXPECT_EQ( 0, status );
Origen::Vec_Str lines = ScaleUtils::IO::splitString( "\n", out.str() );
EXPECT_EQ( 3, lines.size() );
}
// test the idformat specifier
TEST( ObiwanMain, StateSetView1 )
{
// create state set
ScaleUtils::IO::DB opts;
Origen::saveStateSet( *state_set, "b.f71", opts );
// view
"obiwan", "view", "-type=f71", "-format=csv", "-idform=$Ee", "b.f71"};
std::stringstream out, err;
int status = Origen::obiwan_main( args, out, err );
// std::cout<<out.str();
// std::cerr<<err.str();
// reference with elements ("-idform=$Ee")
std::string line_nd =
" Nd, 5.0000000E-03, 1.0000000E-02, 1.5000000E-02, "
"2.0000000E-02, 2.5000000E-02, 3.0000000E-02, 3.5000000E-02, "
"4.0000000E-02, 4.5000000E-02, 5.0000000E-02, 5.5000000E-02, "
"6.0000000E-02, 6.5000000E-02, 7.0000000E-02, 7.5000000E-02, "
"8.0000000E-02, 8.5000000E-02, 9.0000000E-02, 9.5000000E-02, "
"1.0000000E-01";
std::string line_o =
" O, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, "
"1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, "
"1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, "
"1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, "
"1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, "
"1.0000000E+00";
std::string line_pu =
" Pu, 1.0000000E-03, 2.0000000E-03, 3.0000000E-03, "
"4.0000000E-03, 5.0000000E-03, 6.0000000E-03, 7.0000000E-03, "
"8.0000000E-03, 9.0000000E-03, 1.0000000E-02, 1.1000000E-02, "
"1.2000000E-02, 1.3000000E-02, 1.4000000E-02, 1.5000000E-02, "
"1.6000000E-02, 1.7000000E-02, 1.8000000E-02, 1.9000000E-02, "
"2.0000000E-02";
std::string line_u =
" U, 1.9651000E+00, 1.9102000E+00, 1.8553000E+00, "
"1.8004000E+00, 1.7455000E+00, 1.6906000E+00, 1.6357000E+00, "
"1.5808000E+00, 1.5259000E+00, 1.4710000E+00, 1.4161000E+00, "
"1.3612000E+00, 1.3063000E+00, 1.2514000E+00, 1.1965000E+00, "
"1.1416000E+00, 1.0867000E+00, 1.0318000E+00, 9.7690000E-01, "
"9.2200000E-01";
// reference with nuclides ("-idform=$Ee-$AAA$m")
// Nd-148, 5.0000000E-03, 1.0000000E-02, 1.5000000E-02, 2.0000000E-02,
// 2.5000000E-02, 3.0000000E-02, 3.5000000E-02, 4.0000000E-02,
// 4.5000000E-02, 5.0000000E-02, 5.5000000E-02, 6.0000000E-02,
// 6.5000000E-02, 7.0000000E-02, 7.5000000E-02, 8.0000000E-02,
// 8.5000000E-02, 9.0000000E-02, 9.5000000E-02, 1.0000000E-01
// O-016, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00,
// 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00,
// 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00,
// 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00,
// 1.0000000E+00, 1.0000000E+00, 1.0000000E+00, 1.0000000E+00
// Pu-238, 1.0000000E-04, 2.0000000E-04, 3.0000000E-04, 4.0000000E-04,
// 5.0000000E-04, 6.0000000E-04, 7.0000000E-04, 8.0000000E-04,
// 9.0000000E-04, 1.0000000E-03, 1.1000000E-03, 1.2000000E-03,
// 1.3000000E-03, 1.4000000E-03, 1.5000000E-03, 1.6000000E-03,
// 1.7000000E-03, 1.8000000E-03, 1.9000000E-03, 2.0000000E-03
// Pu-239, 2.0000000E-04, 4.0000000E-04, 6.0000000E-04, 8.0000000E-04,
// 1.0000000E-03, 1.2000000E-03, 1.4000000E-03, 1.6000000E-03,
// 1.8000000E-03, 2.0000000E-03, 2.2000000E-03, 2.4000000E-03,
// 2.6000000E-03, 2.8000000E-03, 3.0000000E-03, 3.2000000E-03,
// 3.4000000E-03, 3.6000000E-03, 3.8000000E-03, 4.0000000E-03
// Pu-240, 3.0000000E-04, 6.0000000E-04, 9.0000000E-04, 1.2000000E-03,
// 1.5000000E-03, 1.8000000E-03, 2.1000000E-03, 2.4000000E-03,
// 2.7000000E-03, 3.0000000E-03, 3.3000000E-03, 3.6000000E-03,
// 3.9000000E-03, 4.2000000E-03, 4.5000000E-03, 4.8000000E-03,
// 5.1000000E-03, 5.4000000E-03, 5.7000000E-03, 6.0000000E-03
// Pu-241, 4.0000000E-04, 8.0000000E-04, 1.2000000E-03, 1.6000000E-03,
// 2.0000000E-03, 2.4000000E-03, 2.8000000E-03, 3.2000000E-03,
// 3.6000000E-03, 4.0000000E-03, 4.4000000E-03, 4.8000000E-03,
// 5.2000000E-03, 5.6000000E-03, 6.0000000E-03, 6.4000000E-03,
// 6.8000000E-03, 7.2000000E-03, 7.6000000E-03, 8.0000000E-03
// Pu-242,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300,1.0000000E-300
// U-234, 2.0100000E-02, 2.0200000E-02, 2.0300000E-02, 2.0400000E-02,
// 2.0500000E-02, 2.0600000E-02, 2.0700000E-02, 2.0800000E-02,
// 2.0900000E-02, 2.1000000E-02, 2.1100000E-02, 2.1200000E-02,
// 2.1300000E-02, 2.1400000E-02, 2.1500000E-02, 2.1600000E-02,
// 2.1700000E-02, 2.1800000E-02, 2.1900000E-02, 2.2000000E-02
// U-235, 1.9500000E-01, 1.9000000E-01, 1.8500000E-01, 1.8000000E-01,
// 1.7500000E-01, 1.7000000E-01, 1.6500000E-01, 1.6000000E-01,
// 1.5500000E-01, 1.5000000E-01, 1.4500000E-01, 1.4000000E-01,
// 1.3500000E-01, 1.3000000E-01, 1.2500000E-01, 1.2000000E-01,
// 1.1500000E-01, 1.1000000E-01, 1.0500000E-01, 1.0000000E-01
// U-238, 1.7500000E+00, 1.7000000E+00, 1.6500000E+00, 1.6000000E+00,
// 1.5500000E+00, 1.5000000E+00, 1.4500000E+00, 1.4000000E+00,
// 1.3500000E+00, 1.3000000E+00, 1.2500000E+00, 1.2000000E+00,
// 1.1500000E+00, 1.1000000E+00, 1.0500000E+00, 1.0000000E+00,
// 9.5000000E-01, 9.0000000E-01, 8.5000000E-01, 8.0000000E-01
EXPECT_EQ( 0, status );
Origen::Vec_Str lines = ScaleUtils::IO::splitString( "\n", out.str() );
EXPECT_EQ( 10, lines.size() );
if( lines.size() != 10 )
{
int i = 0;
std::cout << "lines found:\n";
for( const auto& s : lines )
std::cout << ( ++i ) << ":" << s << std::endl;
}
if( lines.size() > 7 ) EXPECT_EQ( line_nd, lines[6] );
if( lines.size() > 8 ) EXPECT_EQ( line_o, lines[7] );
if( lines.size() > 9 ) EXPECT_EQ( line_pu, lines[8] );
if( lines.size() > 10 ) EXPECT_EQ( line_u, lines[9] );
}
// test that we can convert an f71 from bof to s62b
TEST( ObiwanMain, StateSetConvert1 )
{
// create state set
ScaleUtils::IO::DB opts;
opts.set( "fileFormat", "bof" );
Origen::saveStateSet( *state_set, "StateSetConvert1.original.f71", opts );
// view
Origen::Vec_Str args{"obiwan",
"convert",
"-format=s62b",
"-i",
"StateSetConvert1.original.f71"};
std::stringstream out, err;
int status = Origen::obiwan_main( args, out, err );
EXPECT_EQ( 0, status );
}
// test that obiwan patch can patch a file
TEST( Obiwan, Patch_Library_nProductionXs )
{
std::stringstream out;
int status;
// create the patch
status =
Origen::obiwan_main( {"obiwan",
"patch",
"-from=NULL",
"-data=coeff/n_production_xs",
"-verbose",
"lib_a.f33"
},
out,
std::cerr );
EXPECT_EQ( 0, status );
}