20 #include <ripple/json/MultivarJson.h>
21 #include <ripple/rpc/impl/RPCHelpers.h>
23 #include <ripple/beast/unit_test.h>
24 #include "ripple/beast/unit_test/suite.hpp"
25 #include "ripple/json/json_value.h"
53 static_assert(
sizeof(subject) ==
sizeof(subject.val));
54 static_assert(subject.size == subject.val.size());
58 BEAST_EXPECT(subject.val.size() == 3);
63 subject.val[0] = obj1;
64 subject.val[1] = obj2;
67 testcase(
"default copy construction / assignment");
71 BEAST_EXPECT(x.val.size() == subject.val.size());
72 BEAST_EXPECT(x.val[0] == subject.val[0]);
73 BEAST_EXPECT(x.val[1] == subject.val[1]);
74 BEAST_EXPECT(x.val[2] == subject.val[2]);
75 BEAST_EXPECT(x.val == subject.val);
76 BEAST_EXPECT(&x.val[0] != &subject.val[0]);
77 BEAST_EXPECT(&x.val[1] != &subject.val[1]);
78 BEAST_EXPECT(&x.val[2] != &subject.val[2]);
83 BEAST_EXPECT(y.
val == subject.val);
84 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
85 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
86 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
89 BEAST_EXPECT(y.
val == subject.val);
90 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
91 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
92 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
99 subject.select([]() ->
std::size_t { return 0; }) == obj1);
101 subject.select([]() ->
std::size_t { return 1; }) == obj2);
103 subject.select([]() ->
std::size_t { return 2; }) == jsonNull);
106 static_assert([](
auto&& v) {
112 static_assert([](
auto&& v) {
115 v.select([]() constexpr->std::size_t { return 0; });
118 static_assert([](
auto&& v) {
121 v.select([]()
mutable ->
std::size_t {
return 0; });
126 static_assert([](
auto&& a) {
129 subject.select([]() ->
int {
return 0; });
132 static_assert([](
auto&& v) {
135 v.select([]() ->
void {});
138 static_assert([](
auto&& v) {
141 v.select([]() ->
bool {
return false; });
151 BEAST_EXPECT(x.val[0].isMember(
"name1"));
152 BEAST_EXPECT(x.val[1].isMember(
"name1"));
153 BEAST_EXPECT(x.val[0][
"name1"].isInt());
154 BEAST_EXPECT(x.val[1][
"name1"].isInt());
155 BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
156 BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
158 x.set(
"name2",
"bar");
159 BEAST_EXPECT(x.val[0].isMember(
"name2"));
160 BEAST_EXPECT(x.val[1].isMember(
"name2"));
161 BEAST_EXPECT(x.val[0][
"name2"].isString());
162 BEAST_EXPECT(x.val[1][
"name2"].isString());
163 BEAST_EXPECT(x.val[0][
"name2"].asString() ==
"bar");
164 BEAST_EXPECT(x.val[1][
"name2"].asString() ==
"bar");
167 static_assert([](
auto&& v) {
173 static_assert([](
auto&& v) {
176 v.set(
"name",
"value");
179 static_assert([](
auto&& v) {
185 static_assert([](
auto&& v) {
196 static_assert([](
auto&& v) {
199 v.set(
"name", foo_t{});
202 static_assert([](
auto&& v) {
205 v.set(
"name", std::nullopt);
211 testcase(
"isMember");
214 BEAST_EXPECT(subject.isMember(
"foo") == decltype(subject)::none);
221 BEAST_EXPECT(s1.isMember(
"One") == decltype(s1)::
all);
222 BEAST_EXPECT(s1.isMember(
"Two") == decltype(s1)::none);
230 BEAST_EXPECT(s2.isMember(
"One") == decltype(s2)::
some);
231 BEAST_EXPECT(s2.isMember(
"Two") == decltype(s2)::
some);
239 BEAST_EXPECT(s3.isMember(
"One") == decltype(s3)::
some);
240 BEAST_EXPECT(s3.isMember(
"Two") == decltype(s3)::none);
246 testcase(
"apiVersionSelector");
255 static_assert([](
auto&& v) {
277 testcase(
"apiVersionSelector invariants");
299 if (BEAST_EXPECT(
json.isObject() &&
json.isMember(
"value")))
301 auto const value = json[
"value"].asInt();
303 (value == 2 && i == 1) ||
304 (value == 3 && i == 2) ||
305 (value == 5 && i == 3));
309 BEAST_EXPECT(result == 30);
312 static_assert([](
auto&& v) {
321 static_assert([](
auto&& v) {
324 ripple::visit<1, 3>(v, [](
auto&,
auto) constexpr {});
329 static_assert([](
auto&& v) {
332 ripple::visit<1, 3>(v, [](
auto&,
std::size_t) constexpr {});
337 static_assert([](
auto&& v) {
346 static_assert([](
auto&& v) {
355 static_assert([](
auto&& v) {
364 static_assert([](
auto&& v) {
373 static_assert([](
auto&& v) {