47 static_assert(
sizeof(subject) ==
sizeof(subject.val));
48 static_assert(subject.size == subject.val.size());
51 BEAST_EXPECT(subject.val.size() == 3);
54 subject.val[0] = obj1;
55 subject.val[1] = obj2;
58 testcase(
"forApiVersions, forAllApiVersions");
61 static int const primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,
62 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
68 int productAllVersions = 1;
72 BEAST_EXPECT(index == s1.index(i));
73 BEAST_EXPECT(s1.valid(i));
74 s1.val[index] =
makeJson(
"value", primes[i]);
75 productAllVersions *= primes[i];
77 BEAST_EXPECT(!s1.valid(0));
83 forApiVersions<RPC::apiMinimumSupportedVersion, RPC::apiMinimumSupportedVersion + 1>(
88 if (BEAST_EXPECT(
json.isMember(
"value")))
90 *result *=
json[
"value"].asInt();
99 BEAST_EXPECT(s1.val[s1.index(version)] == json);
100 if (BEAST_EXPECT(json.isMember(
"value")))
102 BEAST_EXPECT(json[
"value"].asInt() == primes[version]);
111 if (BEAST_EXPECT(
json.isMember(
"value")))
113 *result *=
json[
"value"].asInt();
118 BEAST_EXPECT(result == productAllVersions);
121 static_assert([](
auto&& v) {
128 static_assert([](
auto&& v) {
135 static_assert([](
auto&& v) {
142 static_assert([](
auto&& v) {
150 static_assert([](
auto&& v) {
158 static_assert([](
auto&& v) {
162 [](
auto,
auto,
char const*) {},
168 static_assert([](
auto&& v) {
175 static_assert([](
auto&& v) {
182 static_assert([](
auto&& v) {
189 static_assert([](
auto&& v) {
196 static_assert([](
auto&& v) {
205 static_assert([](
auto&& v) {
209 []<
unsigned int Version>(
215 static_assert([](
auto&& v) {
222 static_assert([](
auto&& v) {
232 testcase(
"default copy construction / assignment");
236 BEAST_EXPECT(x.val.size() == subject.val.size());
237 BEAST_EXPECT(x.val[0] == subject.val[0]);
238 BEAST_EXPECT(x.val[1] == subject.val[1]);
239 BEAST_EXPECT(x.val[2] == subject.val[2]);
240 BEAST_EXPECT(x.val == subject.val);
241 BEAST_EXPECT(&x.val[0] != &subject.val[0]);
242 BEAST_EXPECT(&x.val[1] != &subject.val[1]);
243 BEAST_EXPECT(&x.val[2] != &subject.val[2]);
248 BEAST_EXPECT(y.
val == subject.val);
249 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
250 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
251 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
254 BEAST_EXPECT(y.
val == subject.val);
255 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
256 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
257 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
265 BEAST_EXPECT(x.val[0].isMember(
"name1"));
266 BEAST_EXPECT(x.val[1].isMember(
"name1"));
267 BEAST_EXPECT(x.val[0][
"name1"].isInt());
268 BEAST_EXPECT(x.val[1][
"name1"].isInt());
269 BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
270 BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
272 x.set(
"name2",
"bar");
273 BEAST_EXPECT(x.val[0].isMember(
"name2"));
274 BEAST_EXPECT(x.val[1].isMember(
"name2"));
275 BEAST_EXPECT(x.val[0][
"name2"].isString());
276 BEAST_EXPECT(x.val[1][
"name2"].isString());
277 BEAST_EXPECT(x.val[0][
"name2"].asString() ==
"bar");
278 BEAST_EXPECT(x.val[1][
"name2"].asString() ==
"bar");
281 static_assert([](
auto&& v) {
return requires { v.set(
"name",
Json::nullValue); }; }(x));
282 static_assert([](
auto&& v) {
return requires { v.set(
"name",
"value"); }; }(x));
283 static_assert([](
auto&& v) {
return requires { v.set(
"name",
true); }; }(x));
284 static_assert([](
auto&& v) {
return requires { v.set(
"name", 42); }; }(x));
290 static_assert([](
auto&& v) {
return !
requires { v.set(
"name", foo_t{}); }; }(x));
291 static_assert([](
auto&& v) {
return !
requires { v.set(
"name",
std::nullopt); }; }(x));
298 BEAST_EXPECT(subject.isMember(
"foo") ==
decltype(subject)
::none);
302 MultiApiJson<1, 2> s1{};
305 BEAST_EXPECT(s1.isMember(
"One") ==
decltype(s1)
::all);
306 BEAST_EXPECT(s1.isMember(
"Two") ==
decltype(s1)
::none);
311 MultiApiJson<1, 2> s2{};
314 BEAST_EXPECT(s2.isMember(
"One") ==
decltype(s2)
::some);
315 BEAST_EXPECT(s2.isMember(
"Two") ==
decltype(s2)
::some);
320 MultiApiJson<1, 3> s3{};
323 BEAST_EXPECT(s3.isMember(
"One") ==
decltype(s3)
::some);
324 BEAST_EXPECT(s3.isMember(
"Two") ==
decltype(s3)
::none);
331 MultiApiJson<1, 3> s1{};
336 BEAST_EXPECT(not s1.valid(0));
337 BEAST_EXPECT(s1.index(0) == 0);
339 BEAST_EXPECT(s1.valid(1));
340 BEAST_EXPECT(s1.index(1) == 0);
342 BEAST_EXPECT(not s1.valid(4));
345 static_assert([](
auto&& v) {
358 [](Json::Value& v, std::integral_constant<unsigned, 1>) { return v[
"value"].asInt(); },
360 [](
auto,
auto) { return 0; }}) == 2);
362 static_assert([](
auto&& v) {
370 [](Json::Value& v) { return v[
"value"].asInt(); },
372 [](
auto...) { return 0; }}) == 2);
374 static_assert([](
auto&& v) {
387 [](Json::Value const& v, std::integral_constant<unsigned, 2>) { return v[
"value"].asInt(); },
389 [](
auto,
auto) { return 0; }}) == 3);
391 static_assert([](
auto&& v) {
399 [](Json::Value const& v) { return v[
"value"].asInt(); },
401 [](
auto...) { return 0; }}) == 3);
403 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value&,
unsigned) {}); }; }(s1));
409 [](Json::Value& v, unsigned) { return v[
"value"].asInt(); },
411 [](
auto,
auto) { return 0; }}) == 5);
413 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value&) {}); }; }(s1));
419 [](Json::Value& v) { return v[
"value"].asInt(); },
421 [](
auto...) { return 0; }}) == 5);
423 static_assert([](
auto&& v) {
424 return requires { v.visitor(v, 1, [](
Json::Value const&,
unsigned) {}); };
431 [](Json::Value const& v, unsigned) { return v[
"value"].asInt(); },
433 [](
auto,
auto) { return 0; }}) == 3);
442 [](Json::Value const& v) { return v[
"value"].asInt(); },
444 [](
auto...) { return 0; }}) == 3);
451 [](
Json::Value& v,
unsigned) { return v[
"value"].asInt(); }) == 2);
456 [](
Json::Value const& v,
unsigned) { return v[
"value"].asInt(); }) == 3);
461 [](
Json::Value const& v,
auto) { return v[
"value"].asInt(); }) == 5);
466 [](
Json::Value const& v) { return v[
"value"].asInt(); }) == 5);
471 [](
Json::Value& v,
long) { return v[
"value"].asInt(); }) == 5);
476 [](
Json::Value const& v,
long) { return v[
"value"].asInt(); }) == 2);
481 [](
Json::Value const& v,
auto) { return v[
"value"].asInt(); }) == 3);
486 [](
auto& v,
auto) { return v[
"value"].asInt(); }) == 3);
491 [](
auto const& v,
auto) { return v[
"value"].asInt(); }) == 3);
496 [](
auto& v) { return v[
"value"].asInt(); }) == 3);
501 [](
auto const& v) { return v[
"value"].asInt(); }) == 3);
508 [](
Json::Value& v,
auto ver,
auto a1,
auto a2) { return ver * a1 * a2 * v[
"value"].asInt(); },
510 7) == 2 * 5 * 7 * 3);
515 [](
Json::Value& v,
auto ver,
auto... args) { return ver * (1 * ... * args) * v[
"value"].asInt(); },
517 7) == 2 * 5 * 7 * 3);
520 static_assert([](
auto&& v) {
529 static_assert([](
auto&& v) {
538 static_assert([](
auto&& v) {
547 static_assert([](
auto&& v) {
557 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto) {}); }; }(s1));
559 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value&) {}); }; }(s1));
561 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value&,
auto...) {}); }; }(s1));
563 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value const&) {}); }; }(s1));
566 [](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value const&,
auto...) {}); }; }(s1));
568 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto...) {}); }; }(s1));
570 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto,
auto...) {}); }; }(s1));
572 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto,
auto,
auto...) {}); }; }(s1));
574 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto,
auto,
auto...) {},
""); }; }(s1));
577 [](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto,
auto,
auto,
auto...) {},
""); }; }(s1));
583 MultiApiJson<1, 3> s1{};
584 s1.val[0] = makeJson(
"value", 2);
585 s1.val[1] = makeJson(
"value", 3);
586 s1.val[2] = makeJson(
"value", 5);
589 static_assert([](
auto&& v) {
600 [](Json::Value& v, std::integral_constant<unsigned, 1>) { return v[
"value"].asInt(); },
602 [](
auto,
auto) { return 0; }}) == 2);
603 static_assert([](
auto&& v) {
614 [](Json::Value& v, std::integral_constant<unsigned, 1>) { return v[
"value"].asInt(); },
616 [](
auto,
auto) { return 0; }}) == 2);
618 static_assert([](
auto&& v) {
625 [](Json::Value& v) { return v[
"value"].asInt(); },
627 [](
auto...) { return 0; }}) == 2);
628 static_assert([](
auto&& v) {
635 [](Json::Value& v) { return v[
"value"].asInt(); },
637 [](
auto...) { return 0; }}) == 2);
639 static_assert([](
auto&& v) {
652 [](
auto,
auto) {
return 0; }}) == 3);
653 static_assert([](
auto&& v) {
666 [](
auto,
auto) {
return 0; }}) == 3);
668 static_assert([](
auto&& v) {
675 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
677 [](
auto...) {
return 0; }}) == 3);
678 static_assert([](
auto&& v) {
685 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
687 [](
auto...) {
return 0; }}) == 3);
689 static_assert([](
auto&& v) {
return requires { v.visit(1, [](
Json::Value&,
unsigned) {}); }; }(s1));
694 [](Json::Value& v, unsigned) { return v[
"value"].asInt(); },
697 [](
auto,
auto) { return 0; }}) == 5);
698 static_assert([](
auto&& v) {
return requires { v.visit()(1, [](
Json::Value&, unsigned) {}); }; }(s1));
703 [](Json::Value& v, unsigned) { return v[
"value"].asInt(); },
706 [](
auto,
auto) { return 0; }}) == 5);
708 static_assert([](
auto&& v) {
return requires { v.visit(1, [](
Json::Value&) {}); }; }(s1));
713 [](Json::Value& v) { return v[
"value"].asInt(); },
715 [](
auto...) { return 0; }}) == 5);
716 static_assert([](
auto&& v) {
return requires { v.visit()(1, [](
Json::Value&) {}); }; }(s1));
721 [](Json::Value& v) { return v[
"value"].asInt(); },
723 [](
auto...) { return 0; }}) == 5);
725 static_assert([](
auto&& v) {
726 return requires { v.visit(1, [](
Json::Value const&,
unsigned) {}); };
735 [](
auto,
auto) {
return 0; }}) == 3);
736 static_assert([](
auto&& v) {
737 return requires { v.visit()(1, [](
Json::Value const&, unsigned) {}); };
746 [](
auto,
auto) {
return 0; }}) == 3);
754 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
756 [](
auto...) {
return 0; }}) == 3);
763 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
765 [](
auto...) {
return 0; }}) == 3);
768 static_assert([](
auto&& v) {
771 static_assert([](
auto&& v) {
774 static_assert([](
auto&& v) {
777 static_assert([](
auto&& v) {
780 static_assert([](
auto&& v) {
783 static_assert([](
auto&& v) {
786 static_assert([](
auto&& v) {
789 static_assert([](
auto&& v) {
792 static_assert([](
auto&& v) {
795 static_assert([](
auto&& v) {
798 static_assert([](
auto&& v) {
801 static_assert([](
auto&& v) {
806 static_assert([](
auto&& v) {
809 static_assert([](
auto&& v) {
818 static_assert([](
auto&& v) {
821 static_assert([](
auto&& v) {