lightweight_test_all_with_fail.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // Negative est for BOOST_TEST_ALL_WITH
  3. //
  4. // Copyright (c) 2017 Bjorn Reese
  5. //
  6. // Distributed under the Boost Software License, Version 1.0.
  7. // See accompanying file LICENSE_1_0.txt or copy at
  8. // http://www.boost.org/LICENSE_1_0.txt
  9. //
  10. #include <cmath>
  11. #include <functional>
  12. #include <vector>
  13. #include <boost/core/lightweight_test.hpp>
  14. int fail_vector()
  15. {
  16. int test_cases = 0;
  17. {
  18. std::vector<int> x, y;
  19. x.push_back( 1 );
  20. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), std::equal_to<int>() );
  21. ++test_cases;
  22. }
  23. {
  24. std::vector<int> x, y;
  25. y.push_back( 1 );
  26. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), std::equal_to<int>() );
  27. ++test_cases;
  28. }
  29. {
  30. std::vector<int> x, y;
  31. x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 ); x.push_back( 4 );
  32. y.push_back( 1 ); y.push_back( 2 ); y.push_back( 3 );
  33. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), std::equal_to<int>() );
  34. ++test_cases;
  35. }
  36. {
  37. std::vector<int> x, y;
  38. x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 );
  39. y.push_back( 1 ); y.push_back( 2 ); y.push_back( 3 ); y.push_back( 4 );
  40. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), std::equal_to<int>() );
  41. ++test_cases;
  42. }
  43. {
  44. std::vector<int> x, y;
  45. x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 ); x.push_back( 4 );
  46. y.push_back( 1 ); y.push_back( 3 ); y.push_back( 2 ); y.push_back( 4 );
  47. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), std::equal_to<int>() );
  48. ++test_cases;
  49. }
  50. {
  51. std::vector<int> x, y;
  52. x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 ); x.push_back( 4 );
  53. y.push_back( 1 ); y.push_back( 3 ); y.push_back( 2 ); y.push_back( 4 );
  54. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), std::less<int>() );
  55. ++test_cases;
  56. }
  57. return test_cases;
  58. }
  59. template <typename T>
  60. struct with_tolerance
  61. {
  62. with_tolerance(T tolerance) : tolerance(tolerance) {}
  63. bool operator()(T lhs, T rhs)
  64. {
  65. return (std::abs(lhs - rhs) <= tolerance);
  66. }
  67. private:
  68. T tolerance;
  69. };
  70. int fail_tolerance_predicate()
  71. {
  72. int test_cases = 0;
  73. {
  74. std::vector<double> x, y;
  75. x.push_back( 1.0 ); x.push_back( 1.0 );
  76. y.push_back( 1.0 - 1e-4 ); y.push_back( 1.0 + 1e-4 );
  77. BOOST_TEST_ALL_WITH( x.begin(), x.end(), y.begin(), y.end(), with_tolerance<double>(1e-5) );
  78. ++test_cases;
  79. }
  80. return test_cases;
  81. }
  82. int main()
  83. {
  84. int test_cases = 0;
  85. test_cases += fail_vector();
  86. test_cases += fail_tolerance_predicate();
  87. return boost::report_errors() == test_cases;
  88. }