1 #include <gtest/gtest.h> 20 in_c1.push_back(
"in_c1");
21 out_c1.push_back(
"out_c1");
30 cyclus::Composition::Ptr recipe = cyclus::Composition::CreateFromAtom(v);
48 EXPECT_EQ(
in_r1, fac->in_recipe);
52 cyclus::Material::Ptr mat){
53 double amt = mat->quantity();
54 double before = fac->inventory.quantity();
56 double after = fac->inventory.quantity();
57 EXPECT_EQ(amt, after - before);
61 double proc,
double ready,
double stocks){
62 double t =
tc_.get()->time();
64 EXPECT_EQ(inv, fac->inventory.quantity());
65 EXPECT_EQ(proc, fac->processing.quantity());
66 EXPECT_EQ(stocks, fac->stocks.quantity());
67 EXPECT_EQ(ready, fac->ready.quantity());
72 cyclus::toolkit::ResBuf<cyclus::Material>* buffer = &fac->stocks;
73 Material::Ptr final_mat = cyclus::ResCast<Material>(buffer->PopBack());
74 cyclus::CompMap final_comp = final_mat->comp()->atom();
75 EXPECT_EQ(final_comp,v);
81 EXPECT_EQ(inv, fac->current_capacity());
86 EXPECT_EQ(t, fac->ready_time());
90 TEST_F(StorageTest, clone) {
97 TEST_F(StorageTest, InitialState) {
103 TEST_F(StorageTest, CurrentCapacity){
111 TEST_F(StorageTest, Print) {
117 TEST_F(StorageTest, AddMats) {
119 cyclus::Material::Ptr mat = cyclus::NewBlankMaterial(0.5*cap);
122 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
123 cyclus::Material::Ptr recmat = cyclus::Material::CreateUntracked(0.5*cap, rec);
128 TEST_F(StorageTest, Tick) {
134 TEST_F(StorageTest, Tock) {
140 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
141 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(cap, rec);
152 EXPECT_EQ(0,
tc_.get()->time());
159 tc_.get()->time(residence_time);
160 EXPECT_EQ(residence_time,
tc_.get()->time());
165 tc_.get()->time(residence_time+1);
173 TEST_F(StorageTest, NoProcessTime) {
177 EXPECT_EQ(0, residence_time);
180 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
181 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(cap, rec);
193 TEST_F(StorageTest, NoConvert) {
196 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
197 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(cap, rec);
202 tc_.get()->time(residence_time);
206 cyclus::CompMap in_rec;
207 in_rec[922350000] = 1;
208 in_rec[922380000] = 2;
212 TEST_F(StorageTest, MultipleSmallBatches) {
215 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
216 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(0.2*cap, rec);
229 cyclus::Material::Ptr mat1 = cyclus::Material::CreateUntracked(0.3*cap, rec);
238 tc_.get()->time(residence_time);
243 tc_.get()->time(residence_time+2);
249 TEST_F(StorageTest, ChangeCapacity) {
256 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
257 cyclus::Material::Ptr mat1 = cyclus::Material::CreateUntracked(cap1, rec);
267 cyclus::Material::Ptr mat2 = cyclus::Material::CreateUntracked(cap2,rec);
272 cyclus::Material::Ptr mat3 = cyclus::Material::CreateUntracked(cap2,rec);
278 tc_.get()->time(residence_time);
285 tc_.get()->time(residence_time+2);
291 tc_.get()->time(residence_time+3);
296 tc_.get()->time(residence_time+4);
302 TEST_F(StorageTest, TwoBatchSameTime) {
305 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
306 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(0.2*cap, rec);
311 cyclus::Material::Ptr mat1 = cyclus::Material::CreateUntracked(0.2*cap, rec);
319 tc_.get()->time(residence_time);
324 TEST_F(StorageTest,ChangeProcessTime){
328 cyclus::Composition::Ptr rec =
tc_.get()->GetRecipe(
in_r1);
329 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(cap, rec);
338 cyclus::Material::Ptr mat1 = cyclus::Material::CreateUntracked(cap,rec);
346 residence_time = proc_time1+5;
349 EXPECT_EQ(residence_time,proc_time1+5);
350 EXPECT_EQ(residence_time,15);
354 for(
int i=proc_time1; i < proc_time2 - 1; ++i){
361 tc_.get()->time(proc_time2);
366 residence_time = proc_time2-3;
371 tc_.get()->time(proc_time3 +8);
377 TEST_F(StorageTest,DifferentRecipe){
383 cyclus::Composition::Ptr rec = cyclus::Composition::CreateFromAtom(v);
384 cyclus::Material::Ptr mat = cyclus::Material::CreateUntracked(cap, rec);
391 tc_.get()->time(residence_time);
396 TEST_F(StorageTest, BehaviorTest){
400 " <in_commods> <val>spent_fuel</val> </in_commods> " 401 " <out_commods> <val>dry_spent</val> </out_commods> " 402 " <residence_time>1</residence_time>" 403 " <max_inv_size>10</max_inv_size>";
407 cyclus::MockSim sim(cyclus::AgentSpec (
":cycamore:Storage"), config, simdur);
409 sim.AddSource(
"spent_fuel").Finalize();
410 sim.AddSink(
"dry_spent").Finalize();
415 std::vector<cyclus::Cond> conds;
416 conds.push_back(cyclus::Cond(
"Commodity",
"==",
std::string(
"dry_spent")));
417 cyclus::QueryResult qr = sim.db().Query(
"Transactions", &conds);
418 int n_trans = qr.rows.size();
419 EXPECT_EQ(1, n_trans) <<
"expected 1 transactions, got " << n_trans;
423 TEST_F(StorageTest, MultipleCommods){
427 " <in_commods> <val>spent_fuel</val>" 428 " <val>spent_fuel2</val> </in_commods>" 429 " <in_commod_prefs> <val>1</val>" 430 " <val>1</val> </in_commod_prefs>" 431 " <out_commods> <val>dry_spent</val> </out_commods> " 432 " <max_inv_size>10</max_inv_size>";
436 cyclus::MockSim sim(cyclus::AgentSpec (
":cycamore:Storage"), config, simdur);
438 sim.AddSource(
"spent_fuel").capacity(5).Finalize();
439 sim.AddSource(
"spent_fuel2").capacity(5).Finalize();
440 sim.AddSink(
"dry_spent").Finalize();
445 std::vector<cyclus::Cond> conds;
446 conds.push_back(cyclus::Cond(
"Commodity",
"==",
std::string(
"spent_fuel")));
447 cyclus::QueryResult qr = sim.db().Query(
"Transactions", &conds);
448 int n_trans = qr.rows.size();
449 EXPECT_EQ(1, n_trans) <<
"expected 1 transactions, got " << n_trans;
451 std::vector<cyclus::Cond> conds2;
452 conds2.push_back(cyclus::Cond(
"Commodity",
"==",
std::string(
"spent_fuel2")));
453 cyclus::QueryResult qr2 = sim.db().Query(
"Transactions", &conds2);
454 int n_trans2 = qr2.rows.size();
455 EXPECT_EQ(1, n_trans2) <<
"expected 1 transactions, got " << n_trans;
458 TEST_F(StorageTest, PositionInitialize){
462 " <in_commods> <val>spent_fuel</val> </in_commods> " 463 " <out_commods> <val>dry_spent</val> </out_commods> " 464 " <residence_time>1</residence_time>" 465 " <max_inv_size>10</max_inv_size>";
469 cyclus::MockSim sim(cyclus::AgentSpec (
":cycamore:Storage"), config, simdur);
471 sim.AddSource(
"spent_fuel").Finalize();
472 sim.AddSink(
"dry_spent").Finalize();
476 cyclus::QueryResult qr = sim.db().Query(
"AgentPosition", NULL);
477 EXPECT_EQ(qr.GetVal<
double>(
"Latitude"), 0.0);
478 EXPECT_EQ(qr.GetVal<
double>(
"Longitude"), 0.0);
481 TEST_F(StorageTest, Longitude){
485 " <in_commods> <val>spent_fuel</val> </in_commods> " 486 " <out_commods> <val>dry_spent</val> </out_commods> " 487 " <residence_time>1</residence_time>" 488 " <max_inv_size>10</max_inv_size>" 489 " <latitude>50.0</latitude> " 490 " <longitude>35.0</longitude> ";
494 cyclus::MockSim sim(cyclus::AgentSpec (
":cycamore:Storage"), config, simdur);
496 sim.AddSource(
"spent_fuel").Finalize();
497 sim.AddSink(
"dry_spent").Finalize();
501 cyclus::QueryResult qr = sim.db().Query(
"AgentPosition", NULL);
502 EXPECT_EQ(qr.GetVal<
double>(
"Latitude"), 50.0);
503 EXPECT_EQ(qr.GetVal<
double>(
"Longitude"), 35.0);
514 #ifndef CYCLUS_AGENT_TESTS_CONNECTED 517 #define CYCLUS_AGENT_TESTS_CONNECTED cyclus_agent_tests_connected 518 #endif // CYCLUS_AGENT_TESTS_CONNECTED virtual cyclus::Agent * Clone()
void TestCurrentCap(storage::Storage *fac, double inv)
void TestInitState(storage::Storage *fac)
void TestAddMat(storage::Storage *fac, cyclus::Material::Ptr mat)
virtual std::string str()
A verbose printer for the Storage Facility.
static int cyclus_agent_tests_connected
void TestStocks(storage::Storage *fac, cyclus::CompMap v)
virtual void Tock()
The handleTick function specific to the Storage.
void TestBuffers(storage::Storage *fac, double inv, double proc, double ready, double stocks)
std::vector< std::string > in_c1
cyclus::Agent * StorageConstructor(cyclus::Context *ctx)
void TestReadyTime(storage::Storage *fac, int t)
virtual void Tick()
The handleTick function specific to the Storage.
cycamore::GrowthRegion string
INSTANTIATE_TEST_CASE_P(StorageFac, FacilityTests, ::testing::Values(&StorageConstructor))
TEST_F(StorageTest, clone)
This Facility is intended to hold materials for a user specified amount of time in order to model a s...
std::vector< std::string > out_c1
std::vector< std::string > in_commods
std::vector< std::string > out_commods