[libcxx] r305453 - Renamed some of the newly added tests. No functional change
Marshall Clow via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 14 22:44:49 PDT 2017
Author: marshall
Date: Thu Jun 15 00:44:49 2017
New Revision: 305453
URL: http://llvm.org/viewvc/llvm-project?rev=305453&view=rev
Log:
Renamed some of the newly added tests. No functional change
Added:
libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan.pass.cpp
- copied unchanged from r305452, libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_init_op.pass.cpp
- copied unchanged from r305452, libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter_init_op.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce.pass.cpp
- copied unchanged from r305452, libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_init.pass.cpp
- copied unchanged from r305452, libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_init_op.pass.cpp
- copied unchanged from r305452, libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T_op.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_init_bop_uop.pass.cpp
- copied unchanged from r305452, libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_iter_iter_iter_init_bop_uop.pass.cpp
Removed:
libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter_init_op.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T_op.pass.cpp
libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_iter_iter_iter_init_bop_uop.pass.cpp
Removed: libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter.pass.cpp?rev=305452&view=auto
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter.pass.cpp (removed)
@@ -1,97 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <numeric>
-// UNSUPPORTED: c++98, c++03, c++11, c++14
-
-// template<class InputIterator, class OutputIterator, class T>
-// OutputIterator exclusive_scan(InputIterator first, InputIterator last,
-// OutputIterator result, T init);
-//
-
-#include <numeric>
-#include <vector>
-#include <cassert>
-
-#include "test_iterators.h"
-
-template <class Iter1, class T, class Iter2>
-void
-test(Iter1 first, Iter1 last, T init, Iter2 rFirst, Iter2 rLast)
-{
- std::vector<typename std::iterator_traits<Iter1>::value_type> v;
-
-// Not in place
- std::exclusive_scan(first, last, std::back_inserter(v), init);
- assert(std::equal(v.begin(), v.end(), rFirst, rLast));
-
-// In place
- v.clear();
- v.assign(first, last);
- std::exclusive_scan(v.begin(), v.end(), v.begin(), init);
- assert(std::equal(v.begin(), v.end(), rFirst, rLast));
-}
-
-
-template <class Iter>
-void
-test()
-{
- int ia[] = {1, 3, 5, 7, 9};
- const int pRes[] = {0, 1, 4, 9, 16};
- const unsigned sa = sizeof(ia) / sizeof(ia[0]);
- static_assert(sa == sizeof(pRes) / sizeof(pRes[0])); // just to be sure
-
- for (unsigned int i = 0; i < sa; ++i )
- test(Iter(ia), Iter(ia + i), 0, pRes, pRes + i);
-}
-
-int triangle(int n) { return n*(n+1)/2; }
-
-// Basic sanity
-void basic_tests()
-{
- {
- std::vector<int> v(10);
- std::fill(v.begin(), v.end(), 3);
- std::exclusive_scan(v.begin(), v.end(), v.begin(), 50);
- for (size_t i = 0; i < v.size(); ++i)
- assert(v[i] == 50 + (int) i * 3);
- }
-
- {
- std::vector<int> v(10);
- std::iota(v.begin(), v.end(), 0);
- std::exclusive_scan(v.begin(), v.end(), v.begin(), 30);
- for (size_t i = 0; i < v.size(); ++i)
- assert(v[i] == 30 + triangle(i-1));
- }
-
- {
- std::vector<int> v(10);
- std::iota(v.begin(), v.end(), 1);
- std::exclusive_scan(v.begin(), v.end(), v.begin(), 40);
- for (size_t i = 0; i < v.size(); ++i)
- assert(v[i] == 40 + triangle(i));
- }
-
-}
-
-int main()
-{
- basic_tests();
-
-// All the iterator categories
- test<input_iterator <const int*> >();
- test<forward_iterator <const int*> >();
- test<bidirectional_iterator<const int*> >();
- test<random_access_iterator<const int*> >();
- test<const int*>();
- test< int*>();
-}
Removed: libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter_init_op.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter_init_op.pass.cpp?rev=305452&view=auto
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter_init_op.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/exclusive.scan/exclusive_scan_iter_iter_iter_init_op.pass.cpp (removed)
@@ -1,87 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <numeric>
-// UNSUPPORTED: c++98, c++03, c++11, c++14
-
-// template<class InputIterator, class OutputIterator, class T, class BinaryOperation>
-// OutputIterator
-// exclusive_scan(InputIterator first, InputIterator last,
-// OutputIterator result,
-// T init, BinaryOperation binary_op); // C++17
-
-#include <numeric>
-#include <vector>
-#include <cassert>
-
-#include "test_iterators.h"
-
-template <class Iter1, class T, class Op, class Iter2>
-void
-test(Iter1 first, Iter1 last, T init, Op op, Iter2 rFirst, Iter2 rLast)
-{
- std::vector<typename std::iterator_traits<Iter1>::value_type> v;
-
-// Not in place
- std::exclusive_scan(first, last, std::back_inserter(v), init, op);
- assert(std::equal(v.begin(), v.end(), rFirst, rLast));
-
-// In place
- v.clear();
- v.assign(first, last);
- std::exclusive_scan(v.begin(), v.end(), v.begin(), init, op);
- assert(std::equal(v.begin(), v.end(), rFirst, rLast));
-}
-
-
-template <class Iter>
-void
-test()
-{
- int ia[] = {1, 3, 5, 7, 9};
- const int pRes[] = {0, 1, 4, 9, 16};
- const int mRes[] = {1, 1, 3, 15, 105};
- const unsigned sa = sizeof(ia) / sizeof(ia[0]);
- static_assert(sa == sizeof(pRes) / sizeof(pRes[0])); // just to be sure
- static_assert(sa == sizeof(mRes) / sizeof(mRes[0])); // just to be sure
-
- for (unsigned int i = 0; i < sa; ++i ) {
- test(Iter(ia), Iter(ia + i), 0, std::plus<>(), pRes, pRes + i);
- test(Iter(ia), Iter(ia + i), 1, std::multiplies<>(), mRes, mRes + i);
- }
-}
-
-int main()
-{
-// All the iterator categories
- test<input_iterator <const int*> >();
- test<forward_iterator <const int*> >();
- test<bidirectional_iterator<const int*> >();
- test<random_access_iterator<const int*> >();
- test<const int*>();
- test< int*>();
-
-// Make sure that the calculations are done using the init typedef
- {
- std::vector<unsigned char> v(10);
- std::iota(v.begin(), v.end(), 1);
- std::vector<int> res;
- std::exclusive_scan(v.begin(), v.end(), std::back_inserter(res), 1, std::multiplies<>());
-
- assert(res.size() == 10);
- int j = 1;
- assert(res[0] == 1);
- for (size_t i = 1; i < v.size(); ++i)
- {
- j *= i;
- assert(res[i] == j);
- }
- }
-}
-
\ No newline at end of file
Removed: libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp?rev=305452&view=auto
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp (removed)
@@ -1,63 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <numeric>
-// UNSUPPORTED: c++98, c++03, c++11, c++14
-
-// template<class InputIterator>
-// typename iterator_traits<InputIterator>::value_type
-// reduce(InputIterator first, InputIterator last);
-
-#include <numeric>
-#include <cassert>
-
-#include "test_iterators.h"
-
-template <class Iter, class T>
-void
-test(Iter first, Iter last, T x)
-{
- static_assert( std::is_same_v<typename std::iterator_traits<decltype(first)>::value_type,
- decltype(std::reduce(first, last))> );
- assert(std::reduce(first, last) == x);
-}
-
-template <class Iter>
-void
-test()
-{
- int ia[] = {1, 2, 3, 4, 5, 6};
- unsigned sa = sizeof(ia) / sizeof(ia[0]);
- test(Iter(ia), Iter(ia), 0);
- test(Iter(ia), Iter(ia+1), 1);
- test(Iter(ia), Iter(ia+2), 3);
- test(Iter(ia), Iter(ia+sa), 21);
-}
-
-template <typename T>
-void test_return_type()
-{
- T *p = nullptr;
- static_assert( std::is_same_v<T, decltype(std::reduce(p, p))> );
-}
-
-int main()
-{
- test_return_type<char>();
- test_return_type<int>();
- test_return_type<unsigned long>();
- test_return_type<float>();
- test_return_type<double>();
-
- test<input_iterator<const int*> >();
- test<forward_iterator<const int*> >();
- test<bidirectional_iterator<const int*> >();
- test<random_access_iterator<const int*> >();
- test<const int*>();
-}
Removed: libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T.pass.cpp?rev=305452&view=auto
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T.pass.cpp (removed)
@@ -1,67 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <numeric>
-// UNSUPPORTED: c++98, c++03, c++11, c++14
-
-// template<class InputIterator, class T>
-// T reduce(InputIterator first, InputIterator last, T init);
-
-#include <numeric>
-#include <cassert>
-
-#include "test_iterators.h"
-
-template <class Iter, class T>
-void
-test(Iter first, Iter last, T init, T x)
-{
- static_assert( std::is_same_v<T, decltype(std::reduce(first, last, init))> );
- assert(std::reduce(first, last, init) == x);
-}
-
-template <class Iter>
-void
-test()
-{
- int ia[] = {1, 2, 3, 4, 5, 6};
- unsigned sa = sizeof(ia) / sizeof(ia[0]);
- test(Iter(ia), Iter(ia), 0, 0);
- test(Iter(ia), Iter(ia), 1, 1);
- test(Iter(ia), Iter(ia+1), 0, 1);
- test(Iter(ia), Iter(ia+1), 2, 3);
- test(Iter(ia), Iter(ia+2), 0, 3);
- test(Iter(ia), Iter(ia+2), 3, 6);
- test(Iter(ia), Iter(ia+sa), 0, 21);
- test(Iter(ia), Iter(ia+sa), 4, 25);
-}
-
-template <typename T, typename Init>
-void test_return_type()
-{
- T *p = nullptr;
- static_assert( std::is_same_v<Init, decltype(std::reduce(p, p, Init{}))> );
-}
-
-int main()
-{
- test_return_type<char, int>();
- test_return_type<int, int>();
- test_return_type<int, unsigned long>();
- test_return_type<float, int>();
- test_return_type<short, float>();
- test_return_type<double, char>();
- test_return_type<char, double>();
-
- test<input_iterator<const int*> >();
- test<forward_iterator<const int*> >();
- test<bidirectional_iterator<const int*> >();
- test<random_access_iterator<const int*> >();
- test<const int*>();
-}
Removed: libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T_op.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T_op.pass.cpp?rev=305452&view=auto
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T_op.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/reduce/reduce_iter_iter_T_op.pass.cpp (removed)
@@ -1,74 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <numeric>
-// UNSUPPORTED: c++98, c++03, c++11, c++14
-
-// template<class InputIterator, class T, class BinaryOperation>
-// T reduce(InputIterator first, InputIterator last, T init, BinaryOperation op);
-
-#include <numeric>
-#include <cassert>
-
-#include "test_iterators.h"
-
-template <class Iter, class T, class Op>
-void
-test(Iter first, Iter last, T init, Op op, T x)
-{
- static_assert( std::is_same_v<T, decltype(std::reduce(first, last, init, op))>, "" );
- assert(std::reduce(first, last, init, op) == x);
-}
-
-template <class Iter>
-void
-test()
-{
- int ia[] = {1, 2, 3, 4, 5, 6};
- unsigned sa = sizeof(ia) / sizeof(ia[0]);
- test(Iter(ia), Iter(ia), 0, std::plus<>(), 0);
- test(Iter(ia), Iter(ia), 1, std::multiplies<>(), 1);
- test(Iter(ia), Iter(ia+1), 0, std::plus<>(), 1);
- test(Iter(ia), Iter(ia+1), 2, std::multiplies<>(), 2);
- test(Iter(ia), Iter(ia+2), 0, std::plus<>(), 3);
- test(Iter(ia), Iter(ia+2), 3, std::multiplies<>(), 6);
- test(Iter(ia), Iter(ia+sa), 0, std::plus<>(), 21);
- test(Iter(ia), Iter(ia+sa), 4, std::multiplies<>(), 2880);
-}
-
-template <typename T, typename Init>
-void test_return_type()
-{
- T *p = nullptr;
- static_assert( std::is_same_v<Init, decltype(std::reduce(p, p, Init{}, std::plus<>()))>, "" );
-}
-
-int main()
-{
- test_return_type<char, int>();
- test_return_type<int, int>();
- test_return_type<int, unsigned long>();
- test_return_type<float, int>();
- test_return_type<short, float>();
- test_return_type<double, char>();
- test_return_type<char, double>();
-
- test<input_iterator<const int*> >();
- test<forward_iterator<const int*> >();
- test<bidirectional_iterator<const int*> >();
- test<random_access_iterator<const int*> >();
- test<const int*>();
-
-// Make sure the math is done using the correct type
- {
- auto v = {1, 2, 3, 4, 5, 6, 7, 8};
- unsigned res = std::reduce(v.begin(), v.end(), 1U, std::multiplies<>());
- assert(res == 40320); // 8! will not fit into a char
- }
-}
Removed: libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_iter_iter_iter_init_bop_uop.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_iter_iter_iter_init_bop_uop.pass.cpp?rev=305452&view=auto
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_iter_iter_iter_init_bop_uop.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_iter_iter_iter_init_bop_uop.pass.cpp (removed)
@@ -1,160 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <numeric>
-// UNSUPPORTED: c++98, c++03, c++11, c++14
-
-// template<class InputIterator, class OutputIterator, class T,
-// class BinaryOperation, class UnaryOperation>
-// OutputIterator transform_exclusive_scan(InputIterator first, InputIterator last,
-// OutputIterator result, T init,
-// BinaryOperation binary_op,
-// UnaryOperation unary_op);
-
-
-#include <numeric>
-#include <vector>
-#include <cassert>
-#include <iostream>
-
-#include "test_iterators.h"
-
-template <class _Tp = void>
-struct identity : std::unary_function<_Tp, _Tp>
-{
- constexpr const _Tp& operator()(const _Tp& __x) const { return __x;}
-};
-
-template <>
-struct identity<void>
-{
- template <class _Tp>
- constexpr auto operator()(_Tp&& __x) const
- _NOEXCEPT_(noexcept(_VSTD::forward<_Tp>(__x)))
- -> decltype (_VSTD::forward<_Tp>(__x))
- { return _VSTD::forward<_Tp>(__x); }
-};
-
-template <class Iter1, class BOp, class UOp, class T, class Iter2>
-void
-test(Iter1 first, Iter1 last, BOp bop, UOp uop, T init, Iter2 rFirst, Iter2 rLast)
-{
- std::vector<typename std::iterator_traits<Iter1>::value_type> v;
-// Test not in-place
- std::transform_exclusive_scan(first, last, std::back_inserter(v), init, bop, uop);
- assert(std::equal(v.begin(), v.end(), rFirst, rLast));
-
-// Test in-place
- v.clear();
- v.assign(first, last);
- std::transform_exclusive_scan(v.begin(), v.end(), v.begin(), init, bop, uop);
- assert(std::equal(v.begin(), v.end(), rFirst, rLast));
-}
-
-
-template <class Iter>
-void
-test()
-{
- int ia[] = { 1, 3, 5, 7, 9};
- const int pResI0[] = { 0, 1, 4, 9, 16}; // with identity
- const int mResI0[] = { 0, 0, 0, 0, 0};
- const int pResN0[] = { 0, -1, -4, -9, -16}; // with negate
- const int mResN0[] = { 0, 0, 0, 0, 0};
- const int pResI2[] = { 2, 3, 6, 11, 18}; // with identity
- const int mResI2[] = { 2, 2, 6, 30, 210};
- const int pResN2[] = { 2, 1, -2, -7, -14}; // with negate
- const int mResN2[] = { 2, -2, 6, -30, 210};
- const unsigned sa = sizeof(ia) / sizeof(ia[0]);
- static_assert(sa == sizeof(pResI0) / sizeof(pResI0[0])); // just to be sure
- static_assert(sa == sizeof(mResI0) / sizeof(mResI0[0])); // just to be sure
- static_assert(sa == sizeof(pResN0) / sizeof(pResN0[0])); // just to be sure
- static_assert(sa == sizeof(mResN0) / sizeof(mResN0[0])); // just to be sure
- static_assert(sa == sizeof(pResI2) / sizeof(pResI2[0])); // just to be sure
- static_assert(sa == sizeof(mResI2) / sizeof(mResI2[0])); // just to be sure
- static_assert(sa == sizeof(pResN2) / sizeof(pResN2[0])); // just to be sure
- static_assert(sa == sizeof(mResN2) / sizeof(mResN2[0])); // just to be sure
-
- for (unsigned int i = 0; i < sa; ++i ) {
- test(Iter(ia), Iter(ia + i), std::plus<>(), identity<>(), 0, pResI0, pResI0 + i);
- test(Iter(ia), Iter(ia + i), std::multiplies<>(), identity<>(), 0, mResI0, mResI0 + i);
- test(Iter(ia), Iter(ia + i), std::plus<>(), std::negate<>(), 0, pResN0, pResN0 + i);
- test(Iter(ia), Iter(ia + i), std::multiplies<>(), std::negate<>(), 0, mResN0, mResN0 + i);
- test(Iter(ia), Iter(ia + i), std::plus<>(), identity<>(), 2, pResI2, pResI2 + i);
- test(Iter(ia), Iter(ia + i), std::multiplies<>(), identity<>(), 2, mResI2, mResI2 + i);
- test(Iter(ia), Iter(ia + i), std::plus<>(), std::negate<>(), 2, pResN2, pResN2 + i);
- test(Iter(ia), Iter(ia + i), std::multiplies<>(), std::negate<>(), 2, mResN2, mResN2 + i);
- }
-}
-
-int triangle(int n) { return n*(n+1)/2; }
-
-// Basic sanity
-void basic_tests()
-{
- {
- std::vector<int> v(10);
- std::fill(v.begin(), v.end(), 3);
- std::transform_exclusive_scan(v.begin(), v.end(), v.begin(), 50, std::plus<>(), identity<>());
- for (size_t i = 0; i < v.size(); ++i)
- assert(v[i] == 50 + (int) i * 3);
- }
-
- {
- std::vector<int> v(10);
- std::iota(v.begin(), v.end(), 0);
- std::transform_exclusive_scan(v.begin(), v.end(), v.begin(), 30, std::plus<>(), identity<>());
- for (size_t i = 0; i < v.size(); ++i)
- assert(v[i] == 30 + triangle(i-1));
- }
-
- {
- std::vector<int> v(10);
- std::iota(v.begin(), v.end(), 1);
- std::transform_exclusive_scan(v.begin(), v.end(), v.begin(), 40, std::plus<>(), identity<>());
- for (size_t i = 0; i < v.size(); ++i)
- assert(v[i] == 40 + triangle(i));
- }
-
- {
- std::vector<int> v, res;
- std::transform_exclusive_scan(v.begin(), v.end(), std::back_inserter(res), 40, std::plus<>(), identity<>());
- assert(res.empty());
- }
-
-// Make sure that the calculations are done using the init typedef
- {
- std::vector<unsigned char> v(10);
- std::iota(v.begin(), v.end(), 1);
- std::vector<int> res;
- std::transform_exclusive_scan(v.begin(), v.end(), std::back_inserter(res), 1, std::multiplies<>(), identity<>());
-
- assert(res.size() == 10);
- int j = 1;
- assert(res[0] == 1);
- for (size_t i = 1; i < res.size(); ++i)
- {
- j *= i;
- assert(res[i] == j);
- }
- }
-}
-
-int main()
-{
- basic_tests();
-
-// All the iterator categories
- test<input_iterator <const int*> >();
- test<forward_iterator <const int*> >();
- test<bidirectional_iterator<const int*> >();
- test<random_access_iterator<const int*> >();
- test<const int*>();
- test< int*>();
-}
More information about the cfe-commits
mailing list