static generated_by<range_gen> _( Params const& params ) { SampleType begin_val = params.has( data::begin ) ? params[data::begin] : SampleType(); optional<SampleType> end_val = params.has( data::end ) ? params[data::end] : optional<SampleType>(); StepType step_val = params.has( data::step ) ? params[data::step] : 1; BOOST_TEST_DS_ASSERT( step_val != 0, "Range step can't be zero" ); data::size_t size; if( !end_val.is_initialized() ) size = BOOST_TEST_DS_INFINITE_SIZE; else { BOOST_TEST_DS_ASSERT( (step_val < 0) ^ (begin_val < *end_val), "Invalid step direction" ); SampleType abs_distance = step_val < 0 ? begin_val - *end_val : *end_val-begin_val; StepType abs_step = make_xrange::abs(step_val, (typename boost::is_unsigned<StepType>::type*)0 ); std::size_t s = static_cast<std::size_t>(abs_distance/abs_step); if( static_cast<SampleType>(s*abs_step) < abs_distance ) s++; size = s; } return generated_by<range_gen>( range_gen( begin_val, step_val, size ) ); }
inline typename boost::lazy_enable_if_c<is_dataset<DS1>::value && is_dataset<DS2>::value, result_of::grid<mpl::identity<DS1>,mpl::identity<DS2>> >::type operator*( DS1&& ds1, DS2&& ds2 ) { BOOST_TEST_DS_ASSERT( !ds1.size().is_inf() && !ds2.size().is_inf(), "Grid dimension can't have infinite size" ); return grid<DS1,DS2>( std::forward<DS1>( ds1 ), std::forward<DS2>( ds2 ) ); }
inline typename std::enable_if<monomorphic::is_dataset<DataSet>::value,void>::type for_each_sample( DataSet const& samples, Action const& act, data::size_t number_of_samples = BOOST_TEST_DS_INFINITE_SIZE ) { data::size_t size = (std::min)( samples.size(), number_of_samples ); BOOST_TEST_DS_ASSERT( !size.is_inf(), "Dataset has infinite size. Please specify the number of samples" ); auto it = samples.begin(); while( size-- > 0 ) { data::traits<typename DataSet::sample>::invoke_action( *it, act ); ++it; } }