test_uuid_no_simd.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // (C) Copyright Andy Tompkins 2007. Permission to copy, use, modify, sell and
  2. // distribute this software is granted provided this copyright notice appears
  3. // in all copies. This software is provided "as is" without express or implied
  4. // warranty, and with no claim as to its suitability for any purpose.
  5. // Distributed under the Boost Software License, Version 1.0. (See
  6. // accompanying file LICENSE_1_0.txt or copy at
  7. // https://www.boost.org/LICENSE_1_0.txt)
  8. // libs/uuid/test/test_uuid_no_simd.cpp -------------------------------//
  9. // This test is a subset of libs/uuid/test/test_uuid.cpp, compiled without any
  10. // SIMD optimizations. The test specifically verifies generic implementations
  11. // of the routines.
  12. #define BOOST_UUID_NO_SIMD
  13. #include <iostream>
  14. #include <boost/uuid/uuid.hpp>
  15. #include <boost/uuid/uuid_io.hpp>
  16. #include <boost/detail/lightweight_test.hpp>
  17. #include <boost/current_function.hpp>
  18. void test_uuid_equal_array(char const * file, int line, char const * function,
  19. boost::uuids::uuid const& lhs, const unsigned char (&rhs)[16])
  20. {
  21. for (size_t i=0; i<16; i++) {
  22. if ( *(lhs.begin()+i) != rhs[i]) {
  23. std::cerr << file << "(" << line << "): uuid " << lhs << " not equal " << "{";
  24. for (size_t j=0; j<16; j++) {
  25. if (j != 0) {
  26. std::cerr << " ";
  27. }
  28. std::cerr << std::hex << (int)rhs[j];
  29. }
  30. std::cerr << "} in function '" << function << "'" << std::endl;
  31. ++boost::detail::test_errors();
  32. return;
  33. }
  34. }
  35. }
  36. #define BOOST_TEST_UUID(lhs, rhs) ( test_uuid_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
  37. int main(int, char*[])
  38. {
  39. using namespace boost::uuids;
  40. { // uuid::operator=()
  41. uuid u1 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
  42. uuid u2 = u1;
  43. BOOST_TEST_EQ(u2, u1);
  44. }
  45. { // uuid::is_nil()
  46. uuid u1 = {{0}};
  47. BOOST_TEST_EQ(u1.is_nil(), true);
  48. uuid u2 = {{1,0}};
  49. BOOST_TEST_EQ(u2.is_nil(), false);
  50. }
  51. { // uuid::swap(), swap()
  52. uuid u1 = {{0}};
  53. uuid u2 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
  54. u1.swap(u2);
  55. unsigned char values1[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  56. unsigned char values2[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  57. BOOST_TEST_UUID(u1, values2);
  58. BOOST_TEST_UUID(u2, values1);
  59. swap(u1, u2);
  60. BOOST_TEST_UUID(u1, values1);
  61. BOOST_TEST_UUID(u2, values2);
  62. }
  63. { // test comparsion
  64. uuid u1 = {{0}};
  65. uuid u2 = {{1,0}};
  66. uuid u3 = {{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}};
  67. uuid u4 = {{0,1,0}};
  68. uuid u5 = {{0,255,0}};
  69. BOOST_TEST_EQ(u1, u1);
  70. BOOST_TEST_NE(u1, u2);
  71. BOOST_TEST(u1 < u2);
  72. BOOST_TEST(u2 < u3);
  73. BOOST_TEST(u1 < u4);
  74. BOOST_TEST(u1 < u5);
  75. BOOST_TEST(u4 < u5);
  76. BOOST_TEST(u4 < u2);
  77. BOOST_TEST(u5 < u2);
  78. BOOST_TEST(u1 <= u1);
  79. BOOST_TEST(u1 <= u2);
  80. BOOST_TEST(u2 <= u3);
  81. BOOST_TEST(u2 >= u1);
  82. BOOST_TEST(u3 >= u1);
  83. BOOST_TEST(u3 >= u3);
  84. BOOST_TEST(u2 >= u1);
  85. BOOST_TEST(u3 >= u1);
  86. }
  87. { // ticket 10510
  88. // the uuids in the report
  89. uuid u6 = {{0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3b}};
  90. uuid u7 = {{0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3c}};
  91. // simple uuids to reproduce problem
  92. uuid u8 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
  93. uuid u9 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}};
  94. uuid u10 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254}};
  95. uuid u11 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
  96. // some additional uuids for testing boundary cases
  97. uuid u12 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}};
  98. uuid u13 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,2}};
  99. uuid u14 = {{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
  100. uuid u15 = {{255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
  101. BOOST_TEST(u6 < u7);
  102. BOOST_TEST(!(u7 < u6));
  103. BOOST_TEST(u8 < u9);
  104. BOOST_TEST(!(u9 < u8));
  105. BOOST_TEST(u8 < u10);
  106. BOOST_TEST(!(u10 < u8));
  107. BOOST_TEST(u8 < u11);
  108. BOOST_TEST(!(u11 < u8));
  109. BOOST_TEST(u9 < u10);
  110. BOOST_TEST(!(u10 < u9));
  111. BOOST_TEST(u9 < u11);
  112. BOOST_TEST(!(u11 < u9));
  113. BOOST_TEST(u10 < u11);
  114. BOOST_TEST(!(u11 < u10));
  115. BOOST_TEST(u12 < u13);
  116. BOOST_TEST(!(u13 < u12));
  117. BOOST_TEST(u14 < u15);
  118. BOOST_TEST(!(u15 < u14));
  119. }
  120. return boost::report_errors();
  121. }