]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/uuid/test/test_io.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / uuid / test / test_io.cpp
index c425a87d044df93ab641f5e38cc3a69e8051d8b9..e1a7a4621b5c8c8bc8845ddbdbe89dbe92b6e78b 100644 (file)
 #include <sstream>
 #include <iomanip>
 
+using namespace boost::uuids;
+
+void uufail(const std::string& in)
+{
+    uuid out;
+    std::stringstream ss;
+    ss << in;
+    ss >> out;
+    BOOST_TEST_EQ(true, ss.fail());
+}
+
 #ifndef BOOST_NO_STD_WSTRING
-namespace std {
-template <typename Elem, typename Traits>
-std::basic_ostream<Elem, Traits>& operator<<(std::basic_ostream<Elem, Traits>& os, std::wstring const& s) {
-    // convert to string
-    std::string temp(s.begin(), s.end());
-    os << temp;
-    return os;
+void uufail(const std::wstring& in)
+{
+    uuid out;
+    std::wstringstream ss;
+    ss << in;
+    ss >> out;
+    BOOST_TEST_EQ(true, ss.fail());
 }
-} // namespace std
 #endif
 
-int main(int, char*[])
+void uuroundtrip(const uuid& in, const std::string& expect)
 {
-    using namespace boost::uuids;
+    std::stringstream ss;
+    ss << in;
+    BOOST_TEST_EQ(false, ss.fail());
+    BOOST_TEST_EQ(expect, ss.str());
+
+    uuid out;
+    std::stringstream ss2;
+    ss2 << expect;
+    ss2 >> out;
+    BOOST_TEST_EQ(false, ss2.fail());
+    BOOST_TEST_EQ(in, out);
+}
 
+#ifndef BOOST_NO_STD_WSTRING
+void uuroundtrip(const uuid& in, const std::wstring& expect)
+{
+    std::wstringstream ss;
+    ss << in;
+    BOOST_TEST_EQ(false, ss.fail());
+    BOOST_TEST   (expect == ss.str());
+
+    uuid out;
+    std::wstringstream ss2;
+    ss2 << expect;
+    ss2 >> out;
+    BOOST_TEST_EQ(false, ss2.fail());
+    BOOST_TEST   (in == out);
+}
+#endif
+
+int main(int, char*[])
+{
     const uuid u1 = {{0}};
     const uuid u2 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
     const uuid u3 = {{0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef}};
 
-    { // test insert/extract operators
-        std::stringstream ss1;
-        ss1 << u1;
-        BOOST_TEST_EQ(ss1.str(), "00000000-0000-0000-0000-000000000000");
-
-        std::stringstream ss2;
-        ss2 << u2;
-        BOOST_TEST_EQ(ss2.str(), "00010203-0405-0607-0809-0a0b0c0d0e0f");
-
-        std::stringstream ss3;
-        ss3 << u3;
-        BOOST_TEST_EQ(ss3.str(), "12345678-90ab-cdef-1234-567890abcdef");
-
-        std::stringstream ss4;
-        ss4 << std::uppercase << u3;
-        BOOST_TEST_EQ(ss4.str(), "12345678-90AB-CDEF-1234-567890ABCDEF");
-
-        std::stringstream ss5;
-        ss5 << 'a' << std::right << std::setfill('*') << std::setw(40) << u1 << 'a';
-        BOOST_TEST_EQ(ss5.str(), "a****00000000-0000-0000-0000-000000000000a");
-
-        std::stringstream ss6;
-        ss6 << std::left << std::setfill('*') << std::setw(45) << u1;
-        BOOST_TEST_EQ(ss6.str(), "00000000-0000-0000-0000-000000000000*********");
-
-        std::stringstream ss7;
-        ss7 << std::left << std::setfill('*') << std::setw(45) << u2;
-        BOOST_TEST_EQ(ss7.str(), "00010203-0405-0607-0809-0a0b0c0d0e0f*********");
-    }
-
- #ifndef BOOST_NO_STD_WSTRING
-    { // test insert/extract operators
-        std::wstringstream ss1;
-        ss1 << u1;
-        BOOST_TEST_EQ(ss1.str(), L"00000000-0000-0000-0000-000000000000");
-
-        std::wstringstream ss2;
-        ss2 << u2;
-        BOOST_TEST_EQ(ss2.str(), L"00010203-0405-0607-0809-0a0b0c0d0e0f");
-
-        std::wstringstream ss3;
-        ss3 << u3;
-        BOOST_TEST_EQ(ss3.str(), L"12345678-90ab-cdef-1234-567890abcdef");
-
-        std::wstringstream ss4;
-        ss4 << std::uppercase << u3;
-        BOOST_TEST_EQ(ss4.str(), L"12345678-90AB-CDEF-1234-567890ABCDEF");
-
-        std::wstringstream ss5;
-        ss5 << L'a' << std::right << std::setfill(L'*') << std::setw(40) << u1 << L'a';
-        BOOST_TEST_EQ(ss5.str(), L"a****00000000-0000-0000-0000-000000000000a");
-
-        std::wstringstream ss6;
-        ss6 << std::left << std::setfill(L'*') << std::setw(45) << u1;
-        BOOST_TEST_EQ(ss6.str(), L"00000000-0000-0000-0000-000000000000*********");
-
-        std::wstringstream ss7;
-        ss7 << std::left << std::setfill(L'*') << std::setw(45) << u2;
-        BOOST_TEST_EQ(ss7.str(), L"00010203-0405-0607-0809-0a0b0c0d0e0f*********");
-    }
-#endif
+    uuroundtrip(u1, "00000000-0000-0000-0000-000000000000");
+    uuroundtrip(u2, "00010203-0405-0607-0809-0a0b0c0d0e0f");
+    uuroundtrip(u3, "12345678-90ab-cdef-1234-567890abcdef");
 
-    {
-        uuid u;
+    std::stringstream ss5;
+    ss5 << 'a' << std::right << std::setfill('*') << std::setw(40) << u1 << 'a';
+    BOOST_TEST_EQ(ss5.str(), "a****00000000-0000-0000-0000-000000000000a");
 
-        std::stringstream ss;
-        ss << "00000000-0000-0000-0000-000000000000";
-        ss >> u;
-        BOOST_TEST_EQ(u, u1);
+    std::stringstream ss6;
+    ss6 << std::left << std::setfill('*') << std::setw(45) << u1;
+    BOOST_TEST_EQ(ss6.str(), "00000000-0000-0000-0000-000000000000*********");
 
-        ss << "12345678-90ab-cdef-1234-567890abcdef";
-        ss >> u;
-        BOOST_TEST_EQ(u, u3);
-    }
+    std::stringstream ss7;
+    ss7 << std::left << std::setfill('*') << std::setw(45) << u2;
+    BOOST_TEST_EQ(ss7.str(), "00010203-0405-0607-0809-0a0b0c0d0e0f*********");
 
- #ifndef BOOST_NO_STD_WSTRING
-   {
-        uuid u;
+#ifndef BOOST_NO_STD_WSTRING
+    uuroundtrip(u1, L"00000000-0000-0000-0000-000000000000");
+    uuroundtrip(u2, L"00010203-0405-0607-0809-0a0b0c0d0e0f");
+    uuroundtrip(u3, L"12345678-90ab-cdef-1234-567890abcdef");
+#endif
 
-        std::wstringstream ss;
-        ss << L"00000000-0000-0000-0000-000000000000";
-        ss >> u;
-        BOOST_TEST_EQ(u, u1);
+    const char raw[36] = { '0', '1', '2', '3', '4', '5', '6', '7', '-',
+        '8', '9', 'a', 'b', '-',
+        'c', 'd', 'e', 'f', '-',
+        0 , '1', '2', '3', '-',  // 0x00 character is intentional
+        '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+    uufail(std::string(raw, 36));
+    uufail("01234567-89ab-cdef-0123456789abcdef");
+    uufail("01234567-89ab-cdef0123-456789abcdef");
+    uufail("01234567-89abcdef-0123-456789abcdef");
+    uufail("0123456789ab-cdef-0123-456789abcdef");
+    uufail("{12345678-90ab-cdef-1234-567890abcdef}");  // stream is not as flexible as string
+    uufail("G1234567-89AB-CDEF-0123-456789abcdef");
+    uufail("01234567-89AB-CDEF-0123-456789abcdeg");
 
-        ss << L"12345678-90ab-cdef-1234-567890abcdef";
-        ss >> u;
-        BOOST_TEST_EQ(u, u3);
-    }
+#ifndef BOOST_NO_STD_WSTRING
+    uufail(L"01234567-89ab-cdef-");
+    uufail(L"01234567-89ab-cdef-0123456789abcdef");
+    uufail(L"01234567-89ab-cdef0123-456789abcdef");
+    uufail(L"01234567-89abcdef-0123-456789abcdef");
+    uufail(L"0123456789ab-cdef-0123-456789abcdef");
+    uufail(L"{12345678-90ab-cdef-1234-567890abcdef}");  // stream is not as flexible as string
+    uufail(L"G1234567-89AB-CDEF-0123-456789abcdef");
+    uufail(L"01234567-89AB-CDEF-0123-456789abcdeg");
 #endif
 
-    { // test with lexical_cast
-        BOOST_TEST_EQ(boost::lexical_cast<std::string>(u1), std::string("00000000-0000-0000-0000-000000000000"));
-        BOOST_TEST_EQ(boost::lexical_cast<uuid>("00000000-0000-0000-0000-000000000000"), u1);
+    BOOST_TEST(boost::lexical_cast<std::string>(u1) == std::string("00000000-0000-0000-0000-000000000000"));
+    BOOST_TEST(boost::lexical_cast<uuid>("00000000-0000-0000-0000-000000000000") == u1);
 
-        BOOST_TEST_EQ(boost::lexical_cast<std::string>(u3), std::string("12345678-90ab-cdef-1234-567890abcdef"));
-        BOOST_TEST_EQ(boost::lexical_cast<uuid>("12345678-90ab-cdef-1234-567890abcdef"), u3);
-    }
+    BOOST_TEST(boost::lexical_cast<std::string>(u3) == std::string("12345678-90ab-cdef-1234-567890abcdef"));
+    BOOST_TEST(boost::lexical_cast<uuid>("12345678-90ab-cdef-1234-567890abcdef") == u3);
 
 #ifndef BOOST_NO_STD_WSTRING
-    { // test with lexical_cast
-        BOOST_TEST_EQ(boost::lexical_cast<std::wstring>(u1), std::wstring(L"00000000-0000-0000-0000-000000000000"));
-        BOOST_TEST_EQ(boost::lexical_cast<uuid>(L"00000000-0000-0000-0000-000000000000"), u1);
+    BOOST_TEST(boost::lexical_cast<std::wstring>(u1) == std::wstring(L"00000000-0000-0000-0000-000000000000"));
+    BOOST_TEST(boost::lexical_cast<uuid>(L"00000000-0000-0000-0000-000000000000") == u1);
 
-        BOOST_TEST_EQ(boost::lexical_cast<std::wstring>(u3), std::wstring(L"12345678-90ab-cdef-1234-567890abcdef"));
-        BOOST_TEST_EQ(boost::lexical_cast<uuid>(L"12345678-90ab-cdef-1234-567890abcdef"), u3);
-    }
+    BOOST_TEST(boost::lexical_cast<std::wstring>(u3) == std::wstring(L"12345678-90ab-cdef-1234-567890abcdef"));
+    BOOST_TEST(boost::lexical_cast<uuid>(L"12345678-90ab-cdef-1234-567890abcdef") == u3);
 #endif
 
-    { // test to_string
-        BOOST_TEST_EQ(to_string(u1), std::string("00000000-0000-0000-0000-000000000000"));
-        BOOST_TEST_EQ(to_string(u3), std::string("12345678-90ab-cdef-1234-567890abcdef"));
-    }
+    BOOST_TEST(to_string(u1) == std::string("00000000-0000-0000-0000-000000000000"));
+    BOOST_TEST(to_string(u3) == std::string("12345678-90ab-cdef-1234-567890abcdef"));
 
 #ifndef BOOST_NO_STD_WSTRING
-    { // test to_wstring
-        BOOST_TEST_EQ(to_wstring(u1), std::wstring(L"00000000-0000-0000-0000-000000000000"));
-        BOOST_TEST_EQ(to_wstring(u3), std::wstring(L"12345678-90ab-cdef-1234-567890abcdef"));
-    }
+    BOOST_TEST(to_wstring(u1) == std::wstring(L"00000000-0000-0000-0000-000000000000"));
+    BOOST_TEST(to_wstring(u3) == std::wstring(L"12345678-90ab-cdef-1234-567890abcdef"));
 #endif
 
     return boost::report_errors();
 }
+