equal_pred.pass.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is dual licensed under the MIT and the University of Illinois Open
  6. // Source Licenses. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <algorithm>
  10. // template<InputIterator Iter1, InputIterator Iter2,
  11. // Predicate<auto, Iter1::value_type, Iter2::value_type> Pred>
  12. // requires CopyConstructible<Pred>
  13. // bool
  14. // equal(Iter1 first1, Iter1 last1, Iter2 first2, Pred pred);
  15. #include <algorithm>
  16. #include <functional>
  17. #include <cassert>
  18. #include "test_macros.h"
  19. #include "test_iterators.h"
  20. int comparison_count = 0;
  21. template <typename T>
  22. bool counting_equals ( const T &a, const T &b ) {
  23. ++comparison_count;
  24. return a == b;
  25. }
  26. int main()
  27. {
  28. int ia[] = {0, 1, 2, 3, 4, 5};
  29. const unsigned s = sizeof(ia)/sizeof(ia[0]);
  30. int ib[s] = {0, 1, 2, 5, 4, 5};
  31. assert(std::equal(input_iterator<const int*>(ia),
  32. input_iterator<const int*>(ia+s),
  33. input_iterator<const int*>(ia),
  34. std::equal_to<int>()));
  35. #if TEST_STD_VER >= 14
  36. assert(std::equal(input_iterator<const int*>(ia),
  37. input_iterator<const int*>(ia+s),
  38. input_iterator<const int*>(ia),
  39. input_iterator<const int*>(ia+s),
  40. std::equal_to<int>()));
  41. assert(std::equal(random_access_iterator<const int*>(ia),
  42. random_access_iterator<const int*>(ia+s),
  43. random_access_iterator<const int*>(ia),
  44. random_access_iterator<const int*>(ia+s),
  45. std::equal_to<int>()));
  46. comparison_count = 0;
  47. assert(!std::equal(input_iterator<const int*>(ia),
  48. input_iterator<const int*>(ia+s),
  49. input_iterator<const int*>(ia),
  50. input_iterator<const int*>(ia+s-1),
  51. counting_equals<int>));
  52. assert(comparison_count > 0);
  53. comparison_count = 0;
  54. assert(!std::equal(random_access_iterator<const int*>(ia),
  55. random_access_iterator<const int*>(ia+s),
  56. random_access_iterator<const int*>(ia),
  57. random_access_iterator<const int*>(ia+s-1),
  58. counting_equals<int>));
  59. assert(comparison_count == 0);
  60. #endif
  61. assert(!std::equal(input_iterator<const int*>(ia),
  62. input_iterator<const int*>(ia+s),
  63. input_iterator<const int*>(ib),
  64. std::equal_to<int>()));
  65. #if TEST_STD_VER >= 14
  66. assert(!std::equal(input_iterator<const int*>(ia),
  67. input_iterator<const int*>(ia+s),
  68. input_iterator<const int*>(ib),
  69. input_iterator<const int*>(ib+s),
  70. std::equal_to<int>()));
  71. assert(!std::equal(random_access_iterator<const int*>(ia),
  72. random_access_iterator<const int*>(ia+s),
  73. random_access_iterator<const int*>(ib),
  74. random_access_iterator<const int*>(ib+s),
  75. std::equal_to<int>()));
  76. #endif
  77. }