test_data& insert(F func, const parameter_info<T>& arg1, const parameter_info<T>& arg2, const parameter_info<T>& arg3) { // generate data for 3-argument functor F typedef typename std::set<T>::const_iterator it_type; std::set<T> points1, points2, points3; create_test_points(points1, arg1); create_test_points(points2, arg2); create_test_points(points3, arg3); it_type a = points1.begin(); it_type b = points1.end(); row_type row; while(a != b) { it_type c = points2.begin(); it_type d = points2.end(); while(c != d) { it_type e = points3.begin(); it_type f = points3.end(); while(e != f) { if((arg1.type & dummy_param) == 0) row.push_back(*a); if((arg2.type & dummy_param) == 0) row.push_back(*c); if((arg3.type & dummy_param) == 0) row.push_back(*e); #ifndef BOOST_NO_EXCEPTIONS try{ #endif // domain_error exceptions from func are swallowed // and this data point is ignored: detail::unpack_and_append(row, func(*a, *c, *e)); m_data.insert(row); #ifndef BOOST_NO_EXCEPTIONS } catch(const std::domain_error&){} #endif row.clear(); ++e; } ++c; } ++a; } return *this; }
test_data& insert(F func, const parameter_info<T>& arg1) { // generate data for single argument functor F typedef typename std::set<T>::const_iterator it_type; std::set<T> points; create_test_points(points, arg1); it_type a = points.begin(); it_type b = points.end(); row_type row; while(a != b) { if((arg1.type & dummy_param) == 0) row.push_back(*a); try{ // domain_error exceptions from func are swallowed // and this data point is ignored: boost::math::tools::detail::unpack_and_append(row, func(*a)); m_data.insert(row); } catch(const std::domain_error&){} row.clear(); ++a; } return *this; }