1
0
Fork 0
mirror of https://github.com/gwm17/catima.git synced 2024-11-26 20:18:51 -05:00
catima/tests/test_storage.cpp

151 lines
4.7 KiB
C++
Raw Normal View History

2017-07-25 12:19:11 -04:00
#include "lest.hpp"
#include <math.h>
2018-01-18 18:39:54 -05:00
#include "testutils.h"
2017-07-25 12:19:11 -04:00
using namespace std;
#include "catima/catima.h"
#include "catima/storage.h"
2017-10-17 10:39:04 -04:00
2018-01-18 18:39:54 -05:00
using catima::approx;
2017-07-25 12:19:11 -04:00
const lest::test specification[] =
{
CASE("datapoints equal operator"){
catima::Projectile p{12,6,6,1000};
catima::Material water({
{1,1,2},
{16,8,1}
});
catima::Material graphite({
{12,6,1}
});
2018-01-18 18:39:54 -05:00
catima::Config c2;
c2.z_effective = catima::z_eff_type::winger;
2017-07-25 12:19:11 -04:00
catima::DataPoint a(p,water);
catima::DataPoint b(p,water);
catima::DataPoint c(p,graphite);
catima::DataPoint d;
2018-01-18 18:39:54 -05:00
catima::DataPoint e(p,water,c2);
2017-07-25 12:19:11 -04:00
d = c;
EXPECT(a == b);
EXPECT(!(a==c));
EXPECT(d == c);
EXPECT(!(d==b));
2018-01-18 18:39:54 -05:00
EXPECT(!(e==a));
2017-07-25 12:19:11 -04:00
d = a;
EXPECT(!(d==c));
EXPECT(d==b);
},
CASE("storage add"){
catima::Projectile p{12,6,6,1000};
catima::Material water({
{1,1,2},
{16,8,1}
});
catima::Material graphite({
{12,6,1}
});
2019-05-11 13:18:35 -04:00
2017-07-25 12:19:11 -04:00
catima::_storage.Reset();
EXPECT(catima::_storage.get_index()==0);
catima::_storage.Add(p,water);
2018-10-21 16:08:16 -04:00
auto& dp = catima::_storage.Get(0);
2017-07-25 12:19:11 -04:00
EXPECT(catima::_storage.get_index()==1);
2017-11-17 04:49:28 -05:00
EXPECT(dp.p.A==12);
EXPECT(dp.m.ncomponents()==2);
2017-07-25 12:19:11 -04:00
catima::_storage.Add(p,water);
2018-10-21 16:08:16 -04:00
auto& dp2 = catima::_storage.Get(1);
2017-07-25 12:19:11 -04:00
EXPECT(catima::_storage.get_index()==1);
2017-11-17 04:49:28 -05:00
EXPECT(dp2.p.A==0);
EXPECT(dp2.m.ncomponents()==0);
2017-07-25 12:19:11 -04:00
catima::_storage.Add(p,graphite);
2018-10-21 16:08:16 -04:00
auto& dp3 = catima::_storage.Get(1);
2017-07-25 12:19:11 -04:00
EXPECT(catima::_storage.get_index()==2);
2017-11-17 04:49:28 -05:00
EXPECT(dp3.p.A==12);
EXPECT(dp3.m.ncomponents()==1);
2017-07-25 12:19:11 -04:00
catima::_storage.Add(p,graphite);
EXPECT(catima::_storage.get_index()==2);
2018-01-20 22:05:42 -05:00
2019-05-11 13:18:35 -04:00
catima::Config c1;
c1.z_effective = catima::z_eff_type::global;
2018-01-20 22:05:42 -05:00
catima::_storage.Add(p,graphite, c1);
EXPECT(catima::_storage.get_index()==3);
catima::_storage.Add(p,graphite);
EXPECT(catima::_storage.get_index()==3);
2019-05-11 13:18:35 -04:00
c1.z_effective = catima::z_eff_type::hubert;
2018-01-20 22:05:42 -05:00
catima::_storage.Add(p,graphite ,c1);
EXPECT(catima::_storage.get_index()==4);
2017-07-25 12:19:11 -04:00
},
2018-02-07 18:52:16 -05:00
CASE("test maximum storage"){
auto maxdata = catima::max_storage_data;
2017-10-17 10:39:04 -04:00
catima::Projectile p{12,6,6,1000};
catima::Material water({
{1,1,2},
{16,8,1}
});
catima::Material graphite({
{12,6,1}
});
catima::_storage.Reset();
EXPECT(catima::_storage.get_index()==0);
2018-02-07 18:52:16 -05:00
for(int i=1;i<maxdata+1;i++){
2018-10-09 06:23:51 -04:00
catima::Projectile p1{2.0*i,(double)i,(double)i,1000};
2017-10-17 10:39:04 -04:00
catima::_storage.Add(p1,graphite);
EXPECT(catima::_storage.get_index()==i);
2018-02-07 18:52:16 -05:00
EXPECT(catima::_storage.GetN()==maxdata);
2017-08-02 06:17:34 -04:00
}
2018-02-07 18:52:16 -05:00
EXPECT(catima::_storage.get_index()==maxdata);
for(int i=1;i<maxdata-1;i++){
2018-10-09 06:23:51 -04:00
catima::Projectile p1{2.0*i,(double)i,(double)i,1000};
2017-10-17 10:39:04 -04:00
catima::_storage.Add(p1,water);
EXPECT(catima::_storage.get_index()==i);
2018-02-07 18:52:16 -05:00
EXPECT(catima::_storage.GetN()==maxdata);
2017-10-17 10:39:04 -04:00
}
2017-08-02 06:17:34 -04:00
},
2017-07-25 12:19:11 -04:00
CASE("energy table"){
double step = (catima::logEmax - catima::logEmin)/(catima::max_datapoints-1);
EXPECT(catima::energy_table.step==step);
EXPECT(catima::energy_table.values[0]==exp(M_LN10*(catima::logEmin)));
EXPECT(catima::energy_table.values[1]==exp(M_LN10*(catima::logEmin+step)));
2018-10-31 14:14:29 -04:00
EXPECT(catima::energy_table.values[2]==exp(M_LN10*(catima::logEmin+2.0*step)));
EXPECT(catima::energy_table.values[3]==exp(M_LN10*(catima::logEmin+3.0*step)));
EXPECT(catima::energy_table.values[4]==exp(M_LN10*(catima::logEmin+4.0*step)));
EXPECT(catima::energy_table.values[5]==exp(M_LN10*(catima::logEmin+5.0*step)));
2018-01-18 18:39:54 -05:00
EXPECT(catima::energy_table.values[catima::max_datapoints-1]==approx(exp(M_LN10*(catima::logEmax))).epsilon(1e-6));
2018-02-26 17:20:42 -05:00
},
CASE("indexing"){
double val, dif;
EXPECT(EnergyTable_index(catima::energy_table, 0.0)==-1);
2018-10-31 20:49:48 -04:00
for(int i=0;i<catima::max_datapoints-1;i++){
2018-02-26 17:20:42 -05:00
val = catima::energy_table.values[i];
dif = catima::energy_table.values[i+1] - val;
EXPECT(EnergyTable_index(catima::energy_table, val)==i);
EXPECT(EnergyTable_index(catima::energy_table, val+0.5*dif)==i);
2018-10-31 20:49:48 -04:00
EXPECT(catima::energy_table.index(val)==i);
EXPECT(catima::energy_table.index(val+0.5*dif)==i);
2018-02-26 17:20:42 -05:00
}
2017-07-25 12:19:11 -04:00
}
};
int main( int argc, char * argv[] )
{
return lest::run( specification, argc, argv );
}