20#include <xrpl/basics/Buffer.h>
21#include <xrpl/beast/unit_test.h>
35 return b.
data() ==
nullptr;
37 return b.
data() !=
nullptr;
44 0xa8, 0xa1, 0x38, 0x45, 0x23, 0xec, 0xe4, 0x23, 0x71, 0x6d, 0x2a,
45 0x18, 0xb4, 0x70, 0xcb, 0xf5, 0xac, 0x2d, 0x89, 0x4d, 0x19, 0x9c,
46 0xf0, 0x2c, 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));
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__) && (!defined(__APPLE__) && (__clang_major__ >= 7)) || \
102 (defined(__APPLE__) && (__apple_build_version__ >= 10010043))
103#pragma clang diagnostic push
104#pragma clang diagnostic ignored "-Wself-assign-overloaded"
108 BEAST_EXPECT(x == b0);
109 BEAST_EXPECT(
sane(x));
111 BEAST_EXPECT(y == b3);
112 BEAST_EXPECT(
sane(y));
114#if defined(__clang__) && (!defined(__APPLE__) && (__clang_major__ >= 7)) || \
115 (defined(__APPLE__) && (__apple_build_version__ >= 10010043))
116#pragma clang diagnostic pop
122 testcase(
"Move Construction / Assignment");
131 BEAST_EXPECT(
sane(x));
132 BEAST_EXPECT(x.
empty());
133 BEAST_EXPECT(
sane(y));
134 BEAST_EXPECT(y.empty());
135 BEAST_EXPECT(x == y);
141 BEAST_EXPECT(
sane(x));
142 BEAST_EXPECT(x.empty());
143 BEAST_EXPECT(
sane(y));
144 BEAST_EXPECT(y == b1);
152 BEAST_EXPECT(
sane(x));
153 BEAST_EXPECT(x.
empty());
154 BEAST_EXPECT(
sane(y));
155 BEAST_EXPECT(y.
empty());
163 BEAST_EXPECT(
sane(x));
164 BEAST_EXPECT(x == b1);
165 BEAST_EXPECT(
sane(y));
166 BEAST_EXPECT(y.empty());
174 BEAST_EXPECT(
sane(x));
175 BEAST_EXPECT(x.empty());
176 BEAST_EXPECT(
sane(y));
177 BEAST_EXPECT(y.
empty());
186 BEAST_EXPECT(
sane(x));
187 BEAST_EXPECT(!x.empty());
188 BEAST_EXPECT(
sane(y));
189 BEAST_EXPECT(y.empty());
192 BEAST_EXPECT(
sane(x));
193 BEAST_EXPECT(!x.empty());
194 BEAST_EXPECT(
sane(z));
195 BEAST_EXPECT(z.empty());
200 testcase(
"Slice Conversion / Construction / Assignment");
203 BEAST_EXPECT(
sane(w));
204 BEAST_EXPECT(w == b0);
207 BEAST_EXPECT(
sane(x));
208 BEAST_EXPECT(x == b1);
211 BEAST_EXPECT(
sane(y));
212 BEAST_EXPECT(y == b2);
215 BEAST_EXPECT(
sane(z));
216 BEAST_EXPECT(z == b3);
219 w =
static_cast<Slice>(b0);
220 BEAST_EXPECT(
sane(w));
221 BEAST_EXPECT(w == b0);
224 w =
static_cast<Slice>(b1);
225 BEAST_EXPECT(
sane(w));
226 BEAST_EXPECT(w == b1);
229 x =
static_cast<Slice>(b2);
230 BEAST_EXPECT(
sane(x));
231 BEAST_EXPECT(x == b2);
234 y =
static_cast<Slice>(z);
235 BEAST_EXPECT(
sane(y));
236 BEAST_EXPECT(y == z);
239 z =
static_cast<Slice>(b0);
240 BEAST_EXPECT(
sane(z));
241 BEAST_EXPECT(z == b0);
245 testcase(
"Allocation, Deallocation and Clearing");
253 BEAST_EXPECT(
sane(x));
254 BEAST_EXPECT(x.size() == i);
255 BEAST_EXPECT((x.data() ==
nullptr) == (i == 0));
259 BEAST_EXPECT(
sane(x));
260 BEAST_EXPECT(x.size() == i + 1);
261 BEAST_EXPECT(x.data() !=
nullptr);
265 BEAST_EXPECT(
sane(x));
266 BEAST_EXPECT(x.size() == 0);
267 BEAST_EXPECT(x.data() ==
nullptr);
271 BEAST_EXPECT(
sane(x));
272 BEAST_EXPECT(x.size() == 0);
273 BEAST_EXPECT(x.data() ==
nullptr);
testcase_t testcase
Memberspace for declaring test cases.
Like std::vector<char> but better.
std::size_t size() const noexcept
Returns the number of bytes in the buffer.
bool empty() const noexcept
std::uint8_t const * data() const noexcept
Return a pointer to beginning of the storage.
An immutable linear range of bytes.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
bool sane(Buffer const &b) const
void run() override
Runs the suite.