20 #include <ripple/basics/Buffer.h>
21 #include <ripple/beast/unit_test.h>
33 return b.
data() ==
nullptr;
35 return b.
data() !=
nullptr;
42 0xa8, 0xa1, 0x38, 0x45, 0x23, 0xec, 0xe4, 0x23,
43 0x71, 0x6d, 0x2a, 0x18, 0xb4, 0x70, 0xcb, 0xf5,
44 0xac, 0x2d, 0x89, 0x4d, 0x19, 0x9c, 0xf0, 0x2c,
45 0x15, 0xd1, 0xf9, 0x9b, 0x66, 0xd2, 0x30, 0xd3
49 BEAST_EXPECT (
sane (b0));
50 BEAST_EXPECT (b0.
empty());
53 BEAST_EXPECT (
sane (b1));
54 BEAST_EXPECT (b1.empty());
56 BEAST_EXPECT (
sane (b1));
57 BEAST_EXPECT (!b1.empty());
58 BEAST_EXPECT (b1.size() == 16);
61 BEAST_EXPECT (
sane (b2));
62 BEAST_EXPECT (!b2.empty());
63 BEAST_EXPECT (b2.size() == b1.size());
66 Buffer b3 { data,
sizeof(data) };
67 BEAST_EXPECT (
sane (b3));
68 BEAST_EXPECT (!b3.empty());
69 BEAST_EXPECT (b3.size() ==
sizeof(data));
70 BEAST_EXPECT (
std::memcmp (b3.data(), data, b3.size()) == 0);
73 BEAST_EXPECT (b0 == b0);
74 BEAST_EXPECT (b0 != b1);
75 BEAST_EXPECT (b1 == b1);
76 BEAST_EXPECT (b1 != b2);
77 BEAST_EXPECT (b2 != b3);
81 testcase (
"Copy Construction / Assignment");
84 BEAST_EXPECT (x == b0);
85 BEAST_EXPECT (
sane (x));
87 BEAST_EXPECT (y == b1);
88 BEAST_EXPECT (
sane (y));
90 BEAST_EXPECT (x == b2);
91 BEAST_EXPECT (
sane (x));
93 BEAST_EXPECT (x == y);
94 BEAST_EXPECT (
sane (x));
96 BEAST_EXPECT (y == b3);
97 BEAST_EXPECT (
sane (y));
99 BEAST_EXPECT (x == b0);
100 BEAST_EXPECT (
sane (x));
101 #if defined(__clang__) && \
102 (!defined(__APPLE__) && (__clang_major__ >= 7)) || \
103 (defined(__APPLE__) && (__apple_build_version__ >= 10010043))
104 #pragma clang diagnostic push
105 #pragma clang diagnostic ignored "-Wself-assign-overloaded"
109 BEAST_EXPECT (x == b0);
110 BEAST_EXPECT (
sane (x));
112 BEAST_EXPECT (y == b3);
113 BEAST_EXPECT (
sane (y));
115 #if defined(__clang__) && \
116 (!defined(__APPLE__) && (__clang_major__ >= 7)) || \
117 (defined(__APPLE__) && (__apple_build_version__ >= 10010043))
118 #pragma clang diagnostic pop
124 testcase (
"Move Construction / Assignment");
131 Buffer y { std::move(x) };
132 BEAST_EXPECT (
sane(x));
133 BEAST_EXPECT (x.
empty());
134 BEAST_EXPECT (
sane(y));
135 BEAST_EXPECT (y.empty());
136 BEAST_EXPECT (x == y);
141 Buffer y { std::move(x) };
142 BEAST_EXPECT (
sane(x));
143 BEAST_EXPECT (x.empty());
144 BEAST_EXPECT (
sane(y));
145 BEAST_EXPECT (y == b1);
153 BEAST_EXPECT (
sane(x));
154 BEAST_EXPECT (x.
empty());
155 BEAST_EXPECT (
sane(y));
156 BEAST_EXPECT (y.
empty());
164 BEAST_EXPECT (
sane(x));
165 BEAST_EXPECT (x == b1);
166 BEAST_EXPECT (
sane(y));
167 BEAST_EXPECT (y.empty());
175 BEAST_EXPECT (
sane(x));
176 BEAST_EXPECT (x.empty());
177 BEAST_EXPECT (
sane(y));
178 BEAST_EXPECT (y.
empty());
187 BEAST_EXPECT (
sane(x));
188 BEAST_EXPECT (!x.empty());
189 BEAST_EXPECT (
sane(y));
190 BEAST_EXPECT (y.empty());
193 BEAST_EXPECT (
sane(x));
194 BEAST_EXPECT (!x.empty());
195 BEAST_EXPECT (
sane(z));
196 BEAST_EXPECT (z.empty());
201 testcase (
"Slice Conversion / Construction / Assignment");
204 BEAST_EXPECT(
sane(w));
205 BEAST_EXPECT(w == b0);
208 BEAST_EXPECT(
sane(x));
209 BEAST_EXPECT(x == b1);
212 BEAST_EXPECT(
sane(y));
213 BEAST_EXPECT(y == b2);
216 BEAST_EXPECT(
sane(z));
217 BEAST_EXPECT(z == b3);
220 w =
static_cast<Slice>(b0);
221 BEAST_EXPECT(
sane(w));
222 BEAST_EXPECT(w == b0);
225 w =
static_cast<Slice>(b1);
226 BEAST_EXPECT(
sane(w));
227 BEAST_EXPECT(w == b1);
230 x =
static_cast<Slice>(b2);
231 BEAST_EXPECT(
sane(x));
232 BEAST_EXPECT(x == b2);
235 y =
static_cast<Slice>(z);
236 BEAST_EXPECT(
sane(y));
237 BEAST_EXPECT(y == z);
240 z =
static_cast<Slice>(b0);
241 BEAST_EXPECT(
sane(z));
242 BEAST_EXPECT (z == b0);
246 testcase (
"Allocation, Deallocation and Clearing");
255 BEAST_EXPECT (
sane(x));
256 BEAST_EXPECT (x.size() == i);
257 BEAST_EXPECT ((x.data() ==
nullptr) == (i == 0));
261 BEAST_EXPECT (
sane(x));
262 BEAST_EXPECT (x.size() == i + 1);
263 BEAST_EXPECT (x.data() !=
nullptr);
267 BEAST_EXPECT (
sane(x));
268 BEAST_EXPECT (x.size() == 0);
269 BEAST_EXPECT (x.data() ==
nullptr);
273 BEAST_EXPECT (
sane(x));
274 BEAST_EXPECT (x.size() == 0);
275 BEAST_EXPECT (x.data() ==
nullptr);