summaryrefslogtreecommitdiff
path: root/boost/test/data/for_each_sample.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/test/data/for_each_sample.hpp')
-rw-r--r--boost/test/data/for_each_sample.hpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/boost/test/data/for_each_sample.hpp b/boost/test/data/for_each_sample.hpp
new file mode 100644
index 0000000000..8bc1964311
--- /dev/null
+++ b/boost/test/data/for_each_sample.hpp
@@ -0,0 +1,71 @@
+// (C) Copyright Gennadiy Rozental 2001.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// Defines for_each_sample algorithm
+// ***************************************************************************
+
+#ifndef BOOST_TEST_DATA_FOR_EACH_SAMPLE_HPP_102211GER
+#define BOOST_TEST_DATA_FOR_EACH_SAMPLE_HPP_102211GER
+
+// Boost.Test
+#include <boost/test/data/config.hpp>
+#include <boost/test/data/traits.hpp>
+#include <boost/test/data/size.hpp>
+#include <boost/test/data/monomorphic/fwd.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// needed for std::min
+#include <algorithm>
+
+//____________________________________________________________________________//
+
+namespace boost {
+namespace unit_test {
+namespace data {
+
+// ************************************************************************** //
+// ************** for_each_sample ************** //
+// ************************************************************************** //
+
+template<typename DataSet, typename Action>
+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;
+ }
+}
+
+//____________________________________________________________________________//
+
+template<typename DataSet, typename Action>
+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::for_each_sample( data::make( samples ), act, number_of_samples );
+}
+
+} // namespace data
+} // namespace unit_test
+} // namespace boost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_DATA_FOR_EACH_SAMPLE_HPP_102211GER
+