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
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_uuid_no_simd.cpp -------------------------------//
11
12// This test is a subset of libs/uuid/test/test_uuid.cpp, compiled without any
13// SIMD optimizations. The test specifically verifies generic implementations
14// of the routines.
15
16#define BOOST_UUID_NO_SIMD
17
18#include <iostream>
19#include <boost/uuid/uuid.hpp>
20#include <boost/uuid/uuid_io.hpp>
21#include <boost/detail/lightweight_test.hpp>
22#include <boost/current_function.hpp>
23
24void test_uuid_equal_array(char const * file, int line, char const * function,
25 boost::uuids::uuid const& lhs, const unsigned char (&rhs)[16])
26{
27 for (size_t i=0; i<16; i++) {
28 if ( *(lhs.begin()+i) != rhs[i]) {
29 std::cerr << file << "(" << line << "): uuid " << lhs << " not equal " << "{";
30 for (size_t j=0; j<16; j++) {
31 if (j != 0) {
32 std::cerr << " ";
33 }
34 std::cerr << std::hex << (int)rhs[j];
35 }
36 std::cerr << "} in function '" << function << "'" << std::endl;
37 ++boost::detail::test_errors();
38 return;
39 }
40 }
41}
42
43
44#define BOOST_TEST_UUID(lhs, rhs) ( test_uuid_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
45
46
47int main(int, char*[])
48{
49 using namespace boost::uuids;
50
51 { // uuid::operator=()
52 uuid u1 = {.data: {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
53 uuid u2 = u1;
54 BOOST_TEST_EQ(u2, u1);
55 }
56
57 { // uuid::is_nil()
58 uuid u1 = {.data: {0}};
59 BOOST_TEST_EQ(u1.is_nil(), true);
60
61 uuid u2 = {.data: {1,0}};
62 BOOST_TEST_EQ(u2.is_nil(), false);
63 }
64
65 { // uuid::swap(), swap()
66 uuid u1 = {.data: {0}};
67 uuid u2 = {.data: {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
68 u1.swap(rhs&: u2);
69
70 unsigned char values1[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
71 unsigned char values2[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
72 BOOST_TEST_UUID(u1, values2);
73 BOOST_TEST_UUID(u2, values1);
74
75 swap(lhs&: u1, rhs&: u2);
76 BOOST_TEST_UUID(u1, values1);
77 BOOST_TEST_UUID(u2, values2);
78 }
79
80 { // test comparsion
81 uuid u1 = {.data: {0}};
82 uuid u2 = {.data: {1,0}};
83 uuid u3 = {.data: {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}};
84 uuid u4 = {.data: {0,1,0}};
85 uuid u5 = {.data: {0,255,0}};
86
87 BOOST_TEST_EQ(u1, u1);
88
89 BOOST_TEST_NE(u1, u2);
90
91 BOOST_TEST(u1 < u2);
92 BOOST_TEST(u2 < u3);
93 BOOST_TEST(u1 < u4);
94 BOOST_TEST(u1 < u5);
95 BOOST_TEST(u4 < u5);
96 BOOST_TEST(u4 < u2);
97 BOOST_TEST(u5 < u2);
98
99 BOOST_TEST(u1 <= u1);
100 BOOST_TEST(u1 <= u2);
101 BOOST_TEST(u2 <= u3);
102
103 BOOST_TEST(u2 >= u1);
104 BOOST_TEST(u3 >= u1);
105
106 BOOST_TEST(u3 >= u3);
107 BOOST_TEST(u2 >= u1);
108 BOOST_TEST(u3 >= u1);
109 }
110
111 { // ticket 10510
112 // the uuids in the report
113 uuid u6 = {.data: {0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3b}};
114 uuid u7 = {.data: {0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3c}};
115
116 // simple uuids to reproduce problem
117 uuid u8 = {.data: {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
118 uuid u9 = {.data: {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}};
119 uuid u10 = {.data: {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254}};
120 uuid u11 = {.data: {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
121
122 // some additional uuids for testing boundary cases
123 uuid u12 = {.data: {0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}};
124 uuid u13 = {.data: {0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,2}};
125 uuid u14 = {.data: {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
126 uuid u15 = {.data: {255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
127
128 BOOST_TEST(u6 < u7);
129 BOOST_TEST(!(u7 < u6));
130
131 BOOST_TEST(u8 < u9);
132 BOOST_TEST(!(u9 < u8));
133 BOOST_TEST(u8 < u10);
134 BOOST_TEST(!(u10 < u8));
135 BOOST_TEST(u8 < u11);
136 BOOST_TEST(!(u11 < u8));
137
138 BOOST_TEST(u9 < u10);
139 BOOST_TEST(!(u10 < u9));
140 BOOST_TEST(u9 < u11);
141 BOOST_TEST(!(u11 < u9));
142
143 BOOST_TEST(u10 < u11);
144 BOOST_TEST(!(u11 < u10));
145
146 BOOST_TEST(u12 < u13);
147 BOOST_TEST(!(u13 < u12));
148 BOOST_TEST(u14 < u15);
149 BOOST_TEST(!(u15 < u14));
150 }
151
152 return boost::report_errors();
153}
154

source code of boost/libs/uuid/test/test_uuid_no_simd.cpp