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 main(int,char * [])20 int main(int, char*[]) 21 { 22 using namespace boost::uuids; 23 24 uuid nil_uuid = {{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 = {{ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }}; 33 const uuid u_decreasing = {{ 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