 };
 
 template <typename T>
-struct tbb_scan_test
-{
-  typedef typename std::vector<T> Vector;  Vector v;
-  void        setup(void) { v.resize(N);  randomize(v); }
+struct tbb_inclusive_scan_test
+{
+  typedef typename std::vector<T> Vector; Vector v;
+  void        setup(void) { v.resize(N); randomize(v); }
   void        run(void)   { tbb_scan(v); }
   std::string name(void)  { return std::string("tbb::parallel_scan");  }
 };

template <typename T>
struct stl_reduce_test
{
  typedef typename std::vector<T> Vector;  Vector v;
  void        setup(void) { v.resize(N);  randomize(v); }
  void        run(void)   { if (std::accumulate(v.begin(), v.end(), T(0)) == 0) std::cout << "xyz"; } // prevent optimizer from removing body
  std::string name(void)  { return std::string("std::accumulate");  }
};

template <typename T>
struct stl_sort_test
{
  typedef typename std::vector<T> Vector; Vector v;
  void        setup(void) { v.resize(N); randomize(v); }
  void        run(void)   { std::sort(v.begin(), v.end()); }
  std::string name(void)  { return std::string("std::sort");  }
};
