24 #include "cheetah/data/test_utils/DmTrialsTester.h" 25 #include "cheetah/data/DmTrials.h" 36 template<
typename DmTrialsTesterTraitsT>
37 DmTrialsTester<DmTrialsTesterTraitsT>::DmTrialsTester()
41 TYPED_TEST_P(DmTrialsTester, construct_nullptr_metadata)
43 typedef TypeParam Traits;
44 typedef typename Traits::DmTrialsType DmTrialsType;
45 typedef typename DmTrialsType::TimeType TimeType;
46 typedef typename DmTrialsType::DmType Dm;
49 auto now = cheetah::utils::ModifiedJulianClock::now();
50 std::shared_ptr<data::DmTrialsMetadata> metadata;
52 for(
auto& device : this->_system.devices()) {
53 ASSERT_THROW(DmTrialsType dm_trials(metadata, now, traits.allocator(*device)), panda::Error);
57 TYPED_TEST_P(DmTrialsTester, construct_empty_metadata)
59 typedef TypeParam Traits;
60 typedef typename Traits::DmTrialsType DmTrialsType;
61 typedef typename DmTrialsType::TimeType TimeType;
62 typedef typename DmTrialsType::DmType Dm;
65 auto now = cheetah::utils::ModifiedJulianClock::now();
66 auto metadata = data::DmTrialsMetadata::make_shared(TimeType(0.000064*data::seconds),1<<6);
68 for(
auto& device : this->_system.devices()) {
69 ASSERT_THROW(DmTrialsType dm_trials(metadata, now, traits.allocator(*device)), panda::Error);
73 TYPED_TEST_P(DmTrialsTester, begin_end)
75 typedef TypeParam Traits;
76 typedef typename Traits::DmTrialsType DmTrialsType;
77 typedef typename DmTrialsType::DmType Dm;
80 auto now = cheetah::utils::ModifiedJulianClock::now();
81 std::size_t size=1<<6;
82 auto metadata = data::DmTrialsMetadata::make_shared(TimeType(0.000064*data::seconds), size);
83 metadata->emplace_back(Dm(0.0*data::parsecs_per_cube_cm),1);
84 metadata->emplace_back(Dm(10.0*data::parsecs_per_cube_cm),2);
85 metadata->emplace_back(Dm(20.0*data::parsecs_per_cube_cm),4);
87 std::size_t n=metadata->size();
88 for(
auto& device : this->_system.devices()) {
89 DmTrialsType dm_trials(metadata, now, traits.allocator(*device));
94 auto it = dm_trials.begin();
95 ASSERT_EQ(n, std::size_t(std::distance(it, dm_trials.end())));
96 while(it != dm_trials.end()) {
104 const DmTrialsType& const_dm_trials = dm_trials;
107 auto it = const_dm_trials.begin();
108 ASSERT_EQ(n, std::size_t(std::distance(it, const_dm_trials.end())));
109 while(it != const_dm_trials.end()) {
119 auto it = const_dm_trials.cbegin();
120 ASSERT_EQ(n, std::size_t(std::distance(it, dm_trials.cend())));
121 while(it != const_dm_trials.cend()) {
122 ASSERT_EQ(it->size(), std::size_t((size)/std::pow(2, count)) ) << count;
131 TYPED_TEST_P(DmTrialsTester, host_conversion)
133 typedef TypeParam Traits;
134 typedef typename Traits::DmTrialsType DmTrialsType;
135 typedef typename DmTrialsType::DmType Dm;
136 typedef typename DmTrialsType::ValueType ValueType;
138 auto now = cheetah::utils::ModifiedJulianClock::now();
139 std::size_t size=1<<4;
140 auto metadata = data::DmTrialsMetadata::make_shared(TimeType(0.000064*data::seconds), size);
141 metadata->emplace_back(Dm(0.0*data::parsecs_per_cube_cm),1);
142 metadata->emplace_back(Dm(10.0*data::parsecs_per_cube_cm),2);
143 metadata->emplace_back(Dm(20.0*data::parsecs_per_cube_cm),4);
145 typedef typename DmTrialsType::ValueType ValueType;
146 typedef DmTrials<panda::Cpu, ValueType, std::allocator<ValueType>> HostDmTrialsType;
149 HostDmTrialsType host_data(metadata, now, std::allocator<ValueType>());
150 for(
auto& trial : host_data) {
151 std::iota(trial.begin(), trial.end(), 1);
155 for(
auto& device : this->_system.devices()) {
157 DmTrialsType dm_trials(host_data, traits.allocator(*device));
158 ASSERT_EQ(dm_trials.size(), host_data.size());
160 HostDmTrialsType host_data_copy(dm_trials);
161 ASSERT_EQ(host_data_copy.size(), metadata->size());
162 auto copy_it=host_data_copy.cbegin();
163 auto it=host_data.cbegin();
164 while(it!=host_data.cend()) {
165 ASSERT_EQ(it->size(), copy_it->size());
166 auto copy_trial_it=copy_it->begin();
167 for(
auto const& v : *it) {
168 ASSERT_EQ(v, *copy_trial_it);
177 REGISTER_TYPED_TEST_CASE_P(DmTrialsTester, construct_nullptr_metadata, construct_empty_metadata, begin_end, host_conversion);
Some limits and constants for FLDO.