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};
69 int productAllVersions = 1;
74 BEAST_EXPECT(index == s1.index(i));
75 BEAST_EXPECT(s1.valid(i));
76 s1.val[index] =
makeJson(
"value", primes[i]);
77 productAllVersions *= primes[i];
79 BEAST_EXPECT(!s1.valid(0));
86 forApiVersions<RPC::apiMinimumSupportedVersion, RPC::apiMinimumSupportedVersion + 1>(
92 if (BEAST_EXPECT(
json.isMember(
"value")))
94 *result *=
json[
"value"].asInt();
105 BEAST_EXPECT(s1.val[s1.index(version)] == json);
106 if (BEAST_EXPECT(json.isMember(
"value")))
108 BEAST_EXPECT(json[
"value"].asInt() == primes[version]);
119 if (BEAST_EXPECT(
json.isMember(
"value")))
121 *result *=
json[
"value"].asInt();
126 BEAST_EXPECT(result == productAllVersions);
129 static_assert([](
auto&& v) {
136 static_assert([](
auto&& v) {
143 static_assert([](
auto&& v) {
150 static_assert([](
auto&& v) {
158 static_assert([](
auto&& v) {
166 static_assert([](
auto&& v) {
170 [](
auto,
auto,
char const*) {},
176 static_assert([](
auto&& v) {
183 static_assert([](
auto&& v) {
190 static_assert([](
auto&& v) {
197 static_assert([](
auto&& v) {
204 static_assert([](
auto&& v) {
213 static_assert([](
auto&& v) {
217 []<
unsigned int Version>(
226 static_assert([](
auto&& v) {
233 static_assert([](
auto&& v) {
243 testcase(
"default copy construction / assignment");
247 BEAST_EXPECT(x.val.size() == subject.val.size());
248 BEAST_EXPECT(x.val[0] == subject.val[0]);
249 BEAST_EXPECT(x.val[1] == subject.val[1]);
250 BEAST_EXPECT(x.val[2] == subject.val[2]);
251 BEAST_EXPECT(x.val == subject.val);
252 BEAST_EXPECT(&x.val[0] != &subject.val[0]);
253 BEAST_EXPECT(&x.val[1] != &subject.val[1]);
254 BEAST_EXPECT(&x.val[2] != &subject.val[2]);
259 BEAST_EXPECT(y.
val == subject.val);
260 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
261 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
262 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
265 BEAST_EXPECT(y.
val == subject.val);
266 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
267 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
268 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
276 BEAST_EXPECT(x.val[0].isMember(
"name1"));
277 BEAST_EXPECT(x.val[1].isMember(
"name1"));
278 BEAST_EXPECT(x.val[0][
"name1"].isInt());
279 BEAST_EXPECT(x.val[1][
"name1"].isInt());
280 BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
281 BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
283 x.set(
"name2",
"bar");
284 BEAST_EXPECT(x.val[0].isMember(
"name2"));
285 BEAST_EXPECT(x.val[1].isMember(
"name2"));
286 BEAST_EXPECT(x.val[0][
"name2"].isString());
287 BEAST_EXPECT(x.val[1][
"name2"].isString());
288 BEAST_EXPECT(x.val[0][
"name2"].asString() ==
"bar");
289 BEAST_EXPECT(x.val[1][
"name2"].asString() ==
"bar");
292 static_assert([](
auto&& v) {
return requires { v.set(
"name",
Json::nullValue); }; }(x));
293 static_assert([](
auto&& v) {
return requires { v.set(
"name",
"value"); }; }(x));
294 static_assert([](
auto&& v) {
return requires { v.set(
"name",
true); }; }(x));
295 static_assert([](
auto&& v) {
return requires { v.set(
"name", 42); }; }(x));
301 static_assert([](
auto&& v) {
return !
requires { v.set(
"name", foo_t{}); }; }(x));
302 static_assert([](
auto&& v) {
return !
requires { v.set(
"name",
std::nullopt); }; }(x));
309 BEAST_EXPECT(subject.isMember(
"foo") ==
decltype(subject)
::none);
313 MultiApiJson<1, 2> s1{};
316 BEAST_EXPECT(s1.isMember(
"One") ==
decltype(s1)::all);
317 BEAST_EXPECT(s1.isMember(
"Two") ==
decltype(s1)
::none);
322 MultiApiJson<1, 2> s2{};
325 BEAST_EXPECT(s2.isMember(
"One") ==
decltype(s2)::some);
326 BEAST_EXPECT(s2.isMember(
"Two") ==
decltype(s2)::some);
331 MultiApiJson<1, 3> s3{};
334 BEAST_EXPECT(s3.isMember(
"One") ==
decltype(s3)::some);
335 BEAST_EXPECT(s3.isMember(
"Two") ==
decltype(s3)
::none);
342 MultiApiJson<1, 3> s1{};
347 BEAST_EXPECT(not s1.valid(0));
348 BEAST_EXPECT(s1.index(0) == 0);
350 BEAST_EXPECT(s1.valid(1));
351 BEAST_EXPECT(s1.index(1) == 0);
353 BEAST_EXPECT(not s1.valid(4));
356 static_assert([](
auto&& v) {
369 [](Json::Value& v, std::integral_constant<unsigned, 1>) {
370 return v[
"value"].asInt();
373 [](
auto,
auto) { return 0; }}) == 2);
375 static_assert([](
auto&& v) {
385 [](Json::Value& v) { return v[
"value"].asInt(); },
387 [](
auto...) { return 0; }}) == 2);
389 static_assert([](
auto&& v) {
402 [](Json::Value const& v, std::integral_constant<unsigned, 2>) {
403 return v[
"value"].asInt();
406 [](
auto,
auto) { return 0; }}) == 3);
408 static_assert([](
auto&& v) {
418 [](Json::Value const& v) { return v[
"value"].asInt(); },
420 [](
auto...) { return 0; }}) == 3);
422 static_assert([](
auto&& v) {
423 return requires { v.visitor(v, 1, [](
Json::Value&,
unsigned) {}); };
430 [](Json::Value& v, unsigned) { return v[
"value"].asInt(); },
432 [](
auto,
auto) { return 0; }}) == 5);
435 [](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value&) {}); }; }(s1));
441 [](Json::Value& v) { return v[
"value"].asInt(); },
443 [](
auto...) { return 0; }}) == 5);
445 static_assert([](
auto&& v) {
446 return requires { v.visitor(v, 1, [](
Json::Value const&,
unsigned) {}); };
453 [](Json::Value const& v, unsigned) { return v[
"value"].asInt(); },
455 [](
auto,
auto) { return 0; }}) == 3);
457 static_assert([](
auto&& v) {
458 return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
465 [](Json::Value const& v) { return v[
"value"].asInt(); },
467 [](
auto...) { return 0; }}) == 3);
474 [](
Json::Value& v,
unsigned) { return v[
"value"].asInt(); }) == 2);
479 [](
Json::Value const& v,
unsigned) { return v[
"value"].asInt(); }) == 3);
484 [](
Json::Value const& v,
auto) { return v[
"value"].asInt(); }) == 5);
489 [](
Json::Value const& v) { return v[
"value"].asInt(); }) == 5);
494 [](
Json::Value& v,
long) { return v[
"value"].asInt(); }) == 5);
499 [](
Json::Value const& v,
long) { return v[
"value"].asInt(); }) == 2);
504 [](
Json::Value const& v,
auto) { return v[
"value"].asInt(); }) == 3);
509 [](
auto& v,
auto) { return v[
"value"].asInt(); }) == 3);
514 [](
auto const& v,
auto) { return v[
"value"].asInt(); }) == 3);
519 [](
auto& v) { return v[
"value"].asInt(); }) == 3);
524 [](
auto const& v) { return v[
"value"].asInt(); }) == 3);
532 return ver * a1 * a2 * v[
"value"].asInt();
535 7) == 2 * 5 * 7 * 3);
541 return ver * (1 * ... * args) * v[
"value"].asInt();
544 7) == 2 * 5 * 7 * 3);
547 static_assert([](
auto&& v) {
556 static_assert([](
auto&& v) {
565 static_assert([](
auto&& v) {
574 static_assert([](
auto&& v) {
584 static_assert([](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto) {}); }; }(s1));
587 [](
auto&& v) {
return requires { v.visitor(v, 1, [](
Json::Value&) {}); }; }(s1));
589 static_assert([](
auto&& v) {
590 return requires { v.visitor(v, 1, [](
Json::Value&,
auto...) {}); };
593 static_assert([](
auto&& v) {
594 return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
597 static_assert([](
auto&& v) {
598 return requires { v.visitor(v, 1, [](
Json::Value const&,
auto...) {}); };
602 [](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto...) {}); }; }(s1));
605 [](
auto&& v) {
return requires { v.visitor(v, 1, [](
auto,
auto...) {}); }; }(s1));
607 static_assert([](
auto&& v) {
608 return requires { v.visitor(v, 1, [](
auto,
auto,
auto...) {}); };
611 static_assert([](
auto&& v) {
612 return requires { v.visitor(v, 1, [](
auto,
auto,
auto...) {},
""); };
615 static_assert([](
auto&& v) {
616 return requires { v.visitor(v, 1, [](
auto,
auto,
auto,
auto...) {},
""); };
623 MultiApiJson<1, 3> s1{};
624 s1.val[0] = makeJson(
"value", 2);
625 s1.val[1] = makeJson(
"value", 3);
626 s1.val[2] = makeJson(
"value", 5);
629 static_assert([](
auto&& v) {
640 [](Json::Value& v, std::integral_constant<unsigned, 1>) {
641 return v[
"value"].asInt();
644 [](
auto,
auto) { return 0; }}) == 2);
645 static_assert([](
auto&& v) {
656 [](Json::Value& v, std::integral_constant<unsigned, 1>) {
657 return v[
"value"].asInt();
660 [](
auto,
auto) { return 0; }}) == 2);
662 static_assert([](
auto&& v) {
671 [](Json::Value& v) { return v[
"value"].asInt(); },
673 [](
auto...) { return 0; }}) == 2);
674 static_assert([](
auto&& v) {
683 [](Json::Value& v) { return v[
"value"].asInt(); },
685 [](
auto...) { return 0; }}) == 2);
687 static_assert([](
auto&& v) {
699 return v[
"value"].
asInt();
702 [](
auto,
auto) {
return 0; }}) == 3);
703 static_assert([](
auto&& v) {
715 return v[
"value"].
asInt();
718 [](
auto,
auto) {
return 0; }}) == 3);
720 static_assert([](
auto&& v) {
729 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
731 [](
auto...) {
return 0; }}) == 3);
732 static_assert([](
auto&& v) {
741 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
743 [](
auto...) {
return 0; }}) == 3);
745 static_assert([](
auto&& v) {
746 return requires { v.visit(1, [](
Json::Value&,
unsigned) {}); };
752 [](Json::Value& v, unsigned) { return v[
"value"].asInt(); },
755 [](
auto,
auto) { return 0; }}) == 5);
756 static_assert([](
auto&& v) {
757 return requires { v.visit()(1, [](
Json::Value&, unsigned) {}); };
763 [](Json::Value& v, unsigned) { return v[
"value"].asInt(); },
766 [](
auto,
auto) { return 0; }}) == 5);
769 [](
auto&& v) {
return requires { v.visit(1, [](
Json::Value&) {}); }; }(s1));
774 [](Json::Value& v) { return v[
"value"].asInt(); },
776 [](
auto...) { return 0; }}) == 5);
778 [](
auto&& v) {
return requires { v.visit()(1, [](
Json::Value&) {}); }; }(s1));
783 [](Json::Value& v) { return v[
"value"].asInt(); },
785 [](
auto...) { return 0; }}) == 5);
787 static_assert([](
auto&& v) {
788 return requires { v.visit(1, [](
Json::Value const&,
unsigned) {}); };
797 [](
auto,
auto) {
return 0; }}) == 3);
798 static_assert([](
auto&& v) {
799 return requires { v.visit()(1, [](
Json::Value const&, unsigned) {}); };
808 [](
auto,
auto) {
return 0; }}) == 3);
810 static_assert([](
auto&& v) {
811 return requires { v.visit(1, [](
Json::Value const&) {}); };
817 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
819 [](
auto...) {
return 0; }}) == 3);
820 static_assert([](
auto&& v) {
821 return requires { v.visit()(1, [](
Json::Value const&) {}); };
827 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
829 [](
auto...) {
return 0; }}) == 3);
832 static_assert([](
auto&& v) {
836 static_assert([](
auto&& v) {
841 static_assert([](
auto&& v) {
844 static_assert([](
auto&& v) {
849 static_assert([](
auto&& v) {
853 static_assert([](
auto&& v) {
858 static_assert([](
auto&& v) {
861 static_assert([](
auto&& v) {
866 static_assert([](
auto&& v) {
871 static_assert([](
auto&& v) {
876 static_assert([](
auto&& v) {
881 static_assert([](
auto&& v) {
888 static_assert([](
auto&& v) {
893 static_assert([](
auto&& v) {
900 static_assert([](
auto&& v) {
903 static_assert([](
auto&& v) {
908 static_assert([](
auto&& v) {
911 static_assert([](
auto&& v) {