test_string_generator.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // (C) Copyright Andy Tompkins 2010. 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_string_generator.cpp -------------------------------//
  9. #include <boost/uuid/uuid.hpp>
  10. #include <boost/uuid/uuid_io.hpp>
  11. #include <boost/uuid/string_generator.hpp>
  12. #include <boost/detail/lightweight_test.hpp>
  13. #include <boost/config.hpp>
  14. #include <stdexcept>
  15. #include <string>
  16. int main(int, char*[])
  17. {
  18. using namespace boost::uuids;
  19. uuid nil_uuid = {{0}};
  20. BOOST_TEST_EQ(nil_uuid.is_nil(), true);
  21. string_generator gen;
  22. uuid u = gen("00000000-0000-0000-0000-000000000000");
  23. BOOST_TEST_EQ(u, nil_uuid);
  24. BOOST_TEST_EQ(u.is_nil(), true);
  25. const uuid u_increasing = {{ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }};
  26. const uuid u_decreasing = {{ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }};
  27. u = gen("0123456789abcdef0123456789ABCDEF");
  28. BOOST_TEST_EQ(memcmp(&u, &u_increasing, sizeof(uuid)), 0);
  29. BOOST_TEST_EQ(u, u_increasing);
  30. u = gen("{0123456789abcdef0123456789ABCDEF}");
  31. BOOST_TEST_EQ(u, u_increasing);
  32. u = gen("{01234567-89AB-CDEF-0123-456789abcdef}");
  33. BOOST_TEST_EQ(u, u_increasing);
  34. u = gen("01234567-89AB-CDEF-0123-456789abcdef");
  35. BOOST_TEST_EQ(u, u_increasing);
  36. u = gen(std::string("fedcba98-7654-3210-fedc-ba9876543210"));
  37. BOOST_TEST_EQ(u, u_decreasing);
  38. #ifndef BOOST_NO_STD_WSTRING
  39. u = gen(L"fedcba98-7654-3210-fedc-ba9876543210");
  40. BOOST_TEST_EQ(u, u_decreasing);
  41. u = gen(std::wstring(L"01234567-89ab-cdef-0123-456789abcdef"));
  42. BOOST_TEST_EQ(u, u_increasing);
  43. u = gen(std::wstring(L"{01234567-89ab-cdef-0123-456789abcdef}"));
  44. BOOST_TEST_EQ(u, u_increasing);
  45. #endif //BOOST_NO_STD_WSTRING
  46. const char raw[36] = { '0', '1', '2', '3', '4', '5', '6', '7', '-',
  47. '8', '9', 'a', 'b', '-',
  48. 'c', 'd', 'e', 'f', '-',
  49. 0 , '1', '2', '3', '-', // 0x00 character is intentional
  50. '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  51. BOOST_TEST_THROWS(gen(std::string(raw, 36)), std::runtime_error);
  52. BOOST_TEST_THROWS(gen("01234567-89ab-cdef-0123456789abcdef"), std::runtime_error);
  53. BOOST_TEST_THROWS(gen("01234567-89ab-cdef0123-456789abcdef"), std::runtime_error);
  54. BOOST_TEST_THROWS(gen("01234567-89abcdef-0123-456789abcdef"), std::runtime_error);
  55. BOOST_TEST_THROWS(gen("0123456789ab-cdef-0123-456789abcdef"), std::runtime_error);
  56. BOOST_TEST_THROWS(gen("{01234567-89AB-CDEF-0123-456789abcdef)"), std::runtime_error);
  57. BOOST_TEST_THROWS(gen("{01234567-89AB-CDEF-0123-456789abcdef"), std::runtime_error);
  58. BOOST_TEST_THROWS(gen("01234567-89AB-CDEF-0123-456789abcdef}"), std::runtime_error);
  59. #ifndef BOOST_NO_STD_WSTRING
  60. BOOST_TEST_THROWS(gen(std::wstring(L"{01234567-89AB-CDEF-0123-456789abcdef)")), std::runtime_error);
  61. BOOST_TEST_THROWS(gen(std::wstring(L"{01234567-89AB-CDEF-0123-456789abcdef")), std::runtime_error);
  62. BOOST_TEST_THROWS(gen(std::wstring(L"01234567-89AB-CDEF-0123-456789abcdef}")), std::runtime_error);
  63. BOOST_TEST_THROWS(gen(std::wstring(L"G1234567-89AB-CDEF-0123-456789abcdef}")), std::runtime_error);
  64. #endif //BOOST_NO_STD_WSTRING
  65. BOOST_TEST_THROWS(gen("G1234567-89AB-CDEF-0123-456789abcdef"), std::runtime_error);
  66. BOOST_TEST_THROWS(gen("Have a great big roast-beef sandwich!"), std::runtime_error);
  67. BOOST_TEST_THROWS(gen("83f8638b-8dca-4152-zzzz-2ca8b33039b4"), std::runtime_error);
  68. return boost::report_errors();
  69. }