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 | |
6 | // Distributed under the Boost Software License, Version 1.0. (See |
7 | // accompanying file LICENSE_1_0.txt or copy at |
8 | // https://www.boost.org/LICENSE_1_0.txt) |
9 | |
10 | // libs/uuid/test/test_string_generator.cpp -------------------------------// |
11 | |
12 | #include <boost/uuid/uuid.hpp> |
13 | #include <boost/uuid/uuid_io.hpp> |
14 | #include <boost/uuid/string_generator.hpp> |
15 | #include <boost/detail/lightweight_test.hpp> |
16 | #include <boost/config.hpp> |
17 | #include <stdexcept> |
18 | #include <string> |
19 | |
20 | int main(int, char*[]) |
21 | { |
22 | using namespace boost::uuids; |
23 | |
24 | uuid nil_uuid = {.data: {0}}; |
25 | BOOST_TEST_EQ(nil_uuid.is_nil(), true); |
26 | |
27 | string_generator gen; |
28 | uuid u = gen("00000000-0000-0000-0000-000000000000" ); |
29 | BOOST_TEST_EQ(u, nil_uuid); |
30 | BOOST_TEST_EQ(u.is_nil(), true); |
31 | |
32 | const uuid u_increasing = {.data: { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }}; |
33 | const uuid u_decreasing = {.data: { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }}; |
34 | |
35 | u = gen("0123456789abcdef0123456789ABCDEF" ); |
36 | BOOST_TEST_EQ(memcmp(&u, &u_increasing, sizeof(uuid)), 0); |
37 | BOOST_TEST_EQ(u, u_increasing); |
38 | |
39 | u = gen("{0123456789abcdef0123456789ABCDEF}" ); |
40 | BOOST_TEST_EQ(u, u_increasing); |
41 | |
42 | u = gen("{01234567-89AB-CDEF-0123-456789abcdef}" ); |
43 | BOOST_TEST_EQ(u, u_increasing); |
44 | |
45 | u = gen("01234567-89AB-CDEF-0123-456789abcdef" ); |
46 | BOOST_TEST_EQ(u, u_increasing); |
47 | |
48 | u = gen(std::string("fedcba98-7654-3210-fedc-ba9876543210" )); |
49 | BOOST_TEST_EQ(u, u_decreasing); |
50 | |
51 | #ifndef BOOST_NO_STD_WSTRING |
52 | u = gen(L"fedcba98-7654-3210-fedc-ba9876543210" ); |
53 | BOOST_TEST_EQ(u, u_decreasing); |
54 | |
55 | u = gen(std::wstring(L"01234567-89ab-cdef-0123-456789abcdef" )); |
56 | BOOST_TEST_EQ(u, u_increasing); |
57 | |
58 | u = gen(std::wstring(L"{01234567-89ab-cdef-0123-456789abcdef}" )); |
59 | BOOST_TEST_EQ(u, u_increasing); |
60 | #endif //BOOST_NO_STD_WSTRING |
61 | |
62 | const char raw[36] = { '0', '1', '2', '3', '4', '5', '6', '7', '-', |
63 | '8', '9', 'a', 'b', '-', |
64 | 'c', 'd', 'e', 'f', '-', |
65 | 0 , '1', '2', '3', '-', // 0x00 character is intentional |
66 | '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; |
67 | BOOST_TEST_THROWS(gen(std::string(raw, 36)), std::runtime_error); |
68 | |
69 | BOOST_TEST_THROWS(gen("01234567-89ab-cdef-0123456789abcdef" ), std::runtime_error); |
70 | BOOST_TEST_THROWS(gen("01234567-89ab-cdef0123-456789abcdef" ), std::runtime_error); |
71 | BOOST_TEST_THROWS(gen("01234567-89abcdef-0123-456789abcdef" ), std::runtime_error); |
72 | BOOST_TEST_THROWS(gen("0123456789ab-cdef-0123-456789abcdef" ), std::runtime_error); |
73 | |
74 | BOOST_TEST_THROWS(gen("{01234567-89AB-CDEF-0123-456789abcdef)" ), std::runtime_error); |
75 | BOOST_TEST_THROWS(gen("{01234567-89AB-CDEF-0123-456789abcdef" ), std::runtime_error); |
76 | BOOST_TEST_THROWS(gen("01234567-89AB-CDEF-0123-456789abcdef}" ), std::runtime_error); |
77 | #ifndef BOOST_NO_STD_WSTRING |
78 | BOOST_TEST_THROWS(gen(std::wstring(L"{01234567-89AB-CDEF-0123-456789abcdef)" )), std::runtime_error); |
79 | BOOST_TEST_THROWS(gen(std::wstring(L"{01234567-89AB-CDEF-0123-456789abcdef" )), std::runtime_error); |
80 | BOOST_TEST_THROWS(gen(std::wstring(L"01234567-89AB-CDEF-0123-456789abcdef}" )), std::runtime_error); |
81 | BOOST_TEST_THROWS(gen(std::wstring(L"G1234567-89AB-CDEF-0123-456789abcdef}" )), std::runtime_error); |
82 | #endif //BOOST_NO_STD_WSTRING |
83 | |
84 | BOOST_TEST_THROWS(gen("G1234567-89AB-CDEF-0123-456789abcdef" ), std::runtime_error); |
85 | BOOST_TEST_THROWS(gen("Have a great big roast-beef sandwich!" ), std::runtime_error); |
86 | |
87 | BOOST_TEST_THROWS(gen("83f8638b-8dca-4152-zzzz-2ca8b33039b4" ), std::runtime_error); |
88 | |
89 | return boost::report_errors(); |
90 | } |
91 | |