move.pass.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. // UNSUPPORTED: c++98, c++03
  9. // <valarray>
  10. // template<class T> class valarray;
  11. // valarray(const valarray<value_type>& v);
  12. #include <valarray>
  13. #include <utility>
  14. #include <cassert>
  15. #include <cstddef>
  16. int main(int, char**)
  17. {
  18. {
  19. typedef int T;
  20. T a[] = {1, 2, 3, 4, 5};
  21. const unsigned N = sizeof(a)/sizeof(a[0]);
  22. std::valarray<T> v(a, N);
  23. std::valarray<T> v2 = std::move(v);
  24. assert(v2.size() == N);
  25. assert(v.size() == 0);
  26. for (std::size_t i = 0; i < v2.size(); ++i)
  27. assert(v2[i] == a[i]);
  28. }
  29. {
  30. typedef double T;
  31. T a[] = {1, 2.5, 3, 4.25, 5};
  32. const unsigned N = sizeof(a)/sizeof(a[0]);
  33. std::valarray<T> v(a, N);
  34. std::valarray<T> v2 = std::move(v);
  35. assert(v2.size() == N);
  36. assert(v.size() == 0);
  37. for (std::size_t i = 0; i < v2.size(); ++i)
  38. assert(v2[i] == a[i]);
  39. }
  40. {
  41. typedef std::valarray<double> T;
  42. T a[] = {T(1), T(2), T(3), T(4), T(5)};
  43. const unsigned N = sizeof(a)/sizeof(a[0]);
  44. std::valarray<T> v(a, N);
  45. std::valarray<T> v2 = std::move(v);
  46. assert(v2.size() == N);
  47. assert(v.size() == 0);
  48. for (unsigned i = 0; i < N; ++i)
  49. {
  50. assert(v2[i].size() == a[i].size());
  51. for (std::size_t j = 0; j < v2[i].size(); ++j)
  52. assert(v2[i][j] == a[i][j]);
  53. }
  54. }
  55. return 0;
  56. }