47 static_assert(
sizeof(subject) ==
sizeof(subject.val));
48 static_assert(subject.size == subject.val.size());
52 BEAST_EXPECT(subject.val.size() == 3);
57 subject.val[0] = obj1;
58 subject.val[1] = obj2;
61 testcase(
"forApiVersions, forAllApiVersions");
64 static int const primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23,
65 29, 31, 37, 41, 43, 47, 53, 59, 61,
66 67, 71, 73, 79, 83, 89, 97};
75 int productAllVersions = 1;
81 BEAST_EXPECT(index == s1.index(i));
82 BEAST_EXPECT(s1.valid(i));
83 s1.val[index] =
makeJson(
"value", primes[i]);
84 productAllVersions *= primes[i];
86 BEAST_EXPECT(!s1.valid(0));
102 unsigned int version,
107 if (BEAST_EXPECT(
json.isMember(
"value")))
109 *result *=
json[
"value"].asInt();
121 BEAST_EXPECT(s1.val[s1.index(version)] == json);
122 if (BEAST_EXPECT(json.isMember(
"value")))
124 BEAST_EXPECT(json[
"value"].asInt() == primes[version]);
133 unsigned int version,
138 if (BEAST_EXPECT(
json.isMember(
"value")))
140 *result *=
json[
"value"].asInt();
145 BEAST_EXPECT(result == productAllVersions);
148 static_assert([](
auto&& v) {
155 static_assert([](
auto&& v) {
162 static_assert([](
auto&& v) {
169 static_assert([](
auto&& v) {
177 static_assert([](
auto&& v) {
185 static_assert([](
auto&& v) {
189 [](
auto,
auto,
char const*) {},
195 static_assert([](
auto&& v) {
202 static_assert([](
auto&& v) {
209 static_assert([](
auto&& v) {
216 static_assert([](
auto&& v) {
223 static_assert([](
auto&& v) {
232 static_assert([](
auto&& v) {
236 []<
unsigned int Version>(
245 static_assert([](
auto&& v) {
252 static_assert([](
auto&& v) {
262 testcase(
"default copy construction / assignment");
266 BEAST_EXPECT(x.val.size() == subject.val.size());
267 BEAST_EXPECT(x.val[0] == subject.val[0]);
268 BEAST_EXPECT(x.val[1] == subject.val[1]);
269 BEAST_EXPECT(x.val[2] == subject.val[2]);
270 BEAST_EXPECT(x.val == subject.val);
271 BEAST_EXPECT(&x.val[0] != &subject.val[0]);
272 BEAST_EXPECT(&x.val[1] != &subject.val[1]);
273 BEAST_EXPECT(&x.val[2] != &subject.val[2]);
278 BEAST_EXPECT(y.
val == subject.val);
279 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
280 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
281 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
284 BEAST_EXPECT(y.
val == subject.val);
285 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
286 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
287 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
295 BEAST_EXPECT(x.val[0].isMember(
"name1"));
296 BEAST_EXPECT(x.val[1].isMember(
"name1"));
297 BEAST_EXPECT(x.val[0][
"name1"].isInt());
298 BEAST_EXPECT(x.val[1][
"name1"].isInt());
299 BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
300 BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
302 x.set(
"name2",
"bar");
303 BEAST_EXPECT(x.val[0].isMember(
"name2"));
304 BEAST_EXPECT(x.val[1].isMember(
"name2"));
305 BEAST_EXPECT(x.val[0][
"name2"].isString());
306 BEAST_EXPECT(x.val[1][
"name2"].isString());
307 BEAST_EXPECT(x.val[0][
"name2"].asString() ==
"bar");
308 BEAST_EXPECT(x.val[1][
"name2"].asString() ==
"bar");
311 static_assert([](
auto&& v) {
314 static_assert([](
auto&& v) {
315 return requires { v.set(
"name",
"value"); };
318 [](
auto&& v) {
return requires { v.set(
"name",
true); }; }(x));
320 [](
auto&& v) {
return requires { v.set(
"name", 42); }; }(x));
326 static_assert([](
auto&& v) {
327 return !
requires { v.set(
"name", foo_t{}); };
329 static_assert([](
auto&& v) {
338 BEAST_EXPECT(subject.isMember(
"foo") ==
decltype(subject)
::none);
342 MultiApiJson<1, 2> s1{};
345 BEAST_EXPECT(s1.isMember(
"One") ==
decltype(s1)
::all);
346 BEAST_EXPECT(s1.isMember(
"Two") ==
decltype(s1)
::none);
351 MultiApiJson<1, 2> s2{};
354 BEAST_EXPECT(s2.isMember(
"One") ==
decltype(s2)
::some);
355 BEAST_EXPECT(s2.isMember(
"Two") ==
decltype(s2)
::some);
360 MultiApiJson<1, 3> s3{};
363 BEAST_EXPECT(s3.isMember(
"One") ==
decltype(s3)
::some);
364 BEAST_EXPECT(s3.isMember(
"Two") ==
decltype(s3)
::none);
371 MultiApiJson<1, 3> s1{};
376 BEAST_EXPECT(not s1.valid(0));
377 BEAST_EXPECT(s1.index(0) == 0);
379 BEAST_EXPECT(s1.valid(1));
380 BEAST_EXPECT(s1.index(1) == 0);
382 BEAST_EXPECT(not s1.valid(4));
385 static_assert([](
auto&& v) {
400 std::integral_constant<unsigned, 1>) {
401 return v[
"value"].asInt();
404 [](
auto,
auto) { return 0; }}) == 2);
406 static_assert([](
auto&& v) {
419 [](Json::Value& v) { return v[
"value"].asInt(); },
421 [](
auto...) { return 0; }}) == 2);
423 static_assert([](
auto&& v) {
437 [](Json::Value const& v,
438 std::integral_constant<unsigned, 2>) {
439 return v[
"value"].asInt();
442 [](
auto,
auto) { return 0; }}) == 3);
444 static_assert([](
auto&& v) {
457 [](Json::Value const& v) { return v[
"value"].asInt(); },
459 [](
auto...) { return 0; }}) == 3);
461 static_assert([](
auto&& v) {
471 [](Json::Value& v, unsigned) {
472 return v[
"value"].asInt();
475 [](
auto,
auto) { return 0; }}) == 5);
477 static_assert([](
auto&& v) {
478 return requires { v.visitor(v, 1, [](
Json::Value&) {}); };
485 [](Json::Value& v) { return v[
"value"].asInt(); },
487 [](
auto...) { return 0; }}) == 5);
489 static_assert([](
auto&& v) {
491 v.visitor(v, 1, [](
Json::Value const&,
unsigned) {});
499 [](Json::Value const& v, unsigned) {
500 return v[
"value"].asInt();
503 [](
auto,
auto) { return 0; }}) == 3);
505 static_assert([](
auto&& v) {
506 return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
513 [](Json::Value const& v) { return v[
"value"].asInt(); },
515 [](
auto...) { return 0; }}) == 3);
523 return v[
"value"].asInt();
530 return v[
"value"].asInt();
537 return v[
"value"].asInt();
543 [](
Json::Value const& v) { return v[
"value"].asInt(); }) ==
549 [](
Json::Value& v,
long) { return v[
"value"].asInt(); }) ==
556 return v[
"value"].asInt();
563 return v[
"value"].asInt();
569 [](
auto& v,
auto) { return v[
"value"].asInt(); }) == 3);
574 [](
auto const& v,
auto) { return v[
"value"].asInt(); }) ==
580 [](
auto& v) { return v[
"value"].asInt(); }) == 3);
585 [](
auto const& v) { return v[
"value"].asInt(); }) == 3);
593 return ver * a1 * a2 * v[
"value"].asInt();
596 7) == 2 * 5 * 7 * 3);
602 return ver * (1 * ... * args) * v[
"value"].asInt();
605 7) == 2 * 5 * 7 * 3);
608 static_assert([](
auto&& v) {
617 static_assert([](
auto&& v) {
626 static_assert([](
auto&& v) {
635 static_assert([](
auto&& v) {
645 static_assert([](
auto&& v) {
646 return requires { v.visitor(v, 1, [](
auto) {}); };
649 static_assert([](
auto&& v) {
650 return requires { v.visitor(v, 1, [](
Json::Value&) {}); };
653 static_assert([](
auto&& v) {
659 static_assert([](
auto&& v) {
660 return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
663 static_assert([](
auto&& v) {
665 v.visitor(v, 1, [](
Json::Value const&,
auto...) {});
669 static_assert([](
auto&& v) {
670 return requires { v.visitor(v, 1, [](
auto...) {}); };
673 static_assert([](
auto&& v) {
674 return requires { v.visitor(v, 1, [](
auto,
auto...) {}); };
677 static_assert([](
auto&& v) {
679 v.visitor(v, 1, [](
auto,
auto,
auto...) {});
683 static_assert([](
auto&& v) {
685 v.visitor(v, 1, [](
auto,
auto,
auto...) {},
"");
689 static_assert([](
auto&& v) {
691 v.visitor(v, 1, [](
auto,
auto,
auto,
auto...) {},
"");
699 MultiApiJson<1, 3> s1{};
700 s1.val[0] = makeJson(
"value", 2);
701 s1.val[1] = makeJson(
"value", 3);
702 s1.val[2] = makeJson(
"value", 5);
705 static_assert([](
auto&& v) {
718 std::integral_constant<unsigned, 1>) {
719 return v[
"value"].asInt();
722 [](
auto,
auto) { return 0; }}) == 2);
723 static_assert([](
auto&& v) {
736 std::integral_constant<unsigned, 1>) {
737 return v[
"value"].asInt();
740 [](
auto,
auto) { return 0; }}) == 2);
742 static_assert([](
auto&& v) {
753 [](Json::Value& v) { return v[
"value"].asInt(); },
755 [](
auto...) { return 0; }}) == 2);
756 static_assert([](
auto&& v) {
767 [](Json::Value& v) { return v[
"value"].asInt(); },
769 [](
auto...) { return 0; }}) == 2);
771 static_assert([](
auto&& v) {
785 return v[
"value"].
asInt();
788 [](
auto,
auto) {
return 0; }}) == 3);
789 static_assert([](
auto&& v) {
803 return v[
"value"].
asInt();
806 [](
auto,
auto) {
return 0; }}) == 3);
808 static_assert([](
auto&& v) {
819 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
821 [](
auto...) {
return 0; }}) == 3);
822 static_assert([](
auto&& v) {
833 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
835 [](
auto...) {
return 0; }}) == 3);
837 static_assert([](
auto&& v) {
838 return requires { v.visit(1, [](
Json::Value&,
unsigned) {}); };
844 [](Json::Value& v, unsigned) {
845 return v[
"value"].asInt();
849 [](
auto,
auto) { return 0; }}) == 5);
850 static_assert([](
auto&& v) {
859 [](Json::Value& v, unsigned) {
860 return v[
"value"].asInt();
864 [](
auto,
auto) { return 0; }}) == 5);
866 static_assert([](
auto&& v) {
867 return requires { v.visit(1, [](
Json::Value&) {}); };
873 [](Json::Value& v) { return v[
"value"].asInt(); },
875 [](
auto...) { return 0; }}) == 5);
876 static_assert([](
auto&& v) {
877 return requires { v.visit()(1, [](
Json::Value&) {}); };
883 [](Json::Value& v) { return v[
"value"].asInt(); },
885 [](
auto...) { return 0; }}) == 5);
887 static_assert([](
auto&& v) {
897 return v[
"value"].
asInt();
901 [](
auto,
auto) {
return 0; }}) == 3);
902 static_assert([](
auto&& v) {
912 return v[
"value"].
asInt();
916 [](
auto,
auto) {
return 0; }}) == 3);
918 static_assert([](
auto&& v) {
919 return requires { v.visit(1, [](
Json::Value const&) {}); };
925 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
927 [](
auto...) {
return 0; }}) == 3);
928 static_assert([](
auto&& v) {
929 return requires { v.visit()(1, [](
Json::Value const&) {}); };
935 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
937 [](
auto...) {
return 0; }}) == 3);
940 static_assert([](
auto&& v) {
945 static_assert([](
auto&& v) {
951 static_assert([](
auto&& v) {
956 static_assert([](
auto&& v) {
962 static_assert([](
auto&& v) {
968 static_assert([](
auto&& v) {
974 static_assert([](
auto&& v) {
980 static_assert([](
auto&& v) {
986 static_assert([](
auto&& v) {
992 static_assert([](
auto&& v) {
998 static_assert([](
auto&& v) {
1004 static_assert([](
auto&& v) {
1012 static_assert([](
auto&& v) {
1018 static_assert([](
auto&& v) {
1026 static_assert([](
auto&& v) {
1031 static_assert([](
auto&& v) {
1038 static_assert([](
auto&& v) {
1043 static_assert([](
auto&& v) {