66 static_assert(
sizeof(subject) ==
sizeof(subject.val));
67 static_assert(subject.size == subject.val.size());
71 BEAST_EXPECT(subject.val.size() == 3);
76 subject.val[0] = obj1;
77 subject.val[1] = obj2;
80 testcase(
"forApiVersions, forAllApiVersions");
83 static int const primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23,
84 29, 31, 37, 41, 43, 47, 53, 59, 61,
85 67, 71, 73, 79, 83, 89, 97};
94 int productAllVersions = 1;
100 BEAST_EXPECT(index == s1.index(i));
101 BEAST_EXPECT(s1.valid(i));
102 s1.val[index] =
makeJson(
"value", primes[i]);
103 productAllVersions *= primes[i];
105 BEAST_EXPECT(!s1.valid(0));
121 unsigned int version,
126 if (BEAST_EXPECT(
json.isMember(
"value")))
128 *result *=
json[
"value"].asInt();
140 BEAST_EXPECT(s1.val[s1.index(version)] == json);
141 if (BEAST_EXPECT(json.isMember(
"value")))
143 BEAST_EXPECT(json[
"value"].asInt() == primes[version]);
152 unsigned int version,
157 if (BEAST_EXPECT(
json.isMember(
"value")))
159 *result *=
json[
"value"].asInt();
164 BEAST_EXPECT(result == productAllVersions);
167 static_assert([](
auto&& v) {
174 static_assert([](
auto&& v) {
181 static_assert([](
auto&& v) {
188 static_assert([](
auto&& v) {
196 static_assert([](
auto&& v) {
204 static_assert([](
auto&& v) {
208 [](
auto,
auto,
char const*) {},
214 static_assert([](
auto&& v) {
221 static_assert([](
auto&& v) {
228 static_assert([](
auto&& v) {
235 static_assert([](
auto&& v) {
242 static_assert([](
auto&& v) {
251 static_assert([](
auto&& v) {
255 []<
unsigned int Version>(
264 static_assert([](
auto&& v) {
271 static_assert([](
auto&& v) {
281 testcase(
"default copy construction / assignment");
285 BEAST_EXPECT(x.val.size() == subject.val.size());
286 BEAST_EXPECT(x.val[0] == subject.val[0]);
287 BEAST_EXPECT(x.val[1] == subject.val[1]);
288 BEAST_EXPECT(x.val[2] == subject.val[2]);
289 BEAST_EXPECT(x.val == subject.val);
290 BEAST_EXPECT(&x.val[0] != &subject.val[0]);
291 BEAST_EXPECT(&x.val[1] != &subject.val[1]);
292 BEAST_EXPECT(&x.val[2] != &subject.val[2]);
297 BEAST_EXPECT(y.
val == subject.val);
298 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
299 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
300 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
303 BEAST_EXPECT(y.
val == subject.val);
304 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
305 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
306 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
314 BEAST_EXPECT(x.val[0].isMember(
"name1"));
315 BEAST_EXPECT(x.val[1].isMember(
"name1"));
316 BEAST_EXPECT(x.val[0][
"name1"].isInt());
317 BEAST_EXPECT(x.val[1][
"name1"].isInt());
318 BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
319 BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
321 x.set(
"name2",
"bar");
322 BEAST_EXPECT(x.val[0].isMember(
"name2"));
323 BEAST_EXPECT(x.val[1].isMember(
"name2"));
324 BEAST_EXPECT(x.val[0][
"name2"].isString());
325 BEAST_EXPECT(x.val[1][
"name2"].isString());
326 BEAST_EXPECT(x.val[0][
"name2"].asString() ==
"bar");
327 BEAST_EXPECT(x.val[1][
"name2"].asString() ==
"bar");
330 static_assert([](
auto&& v) {
333 static_assert([](
auto&& v) {
334 return requires { v.set(
"name",
"value"); };
337 [](
auto&& v) {
return requires { v.set(
"name",
true); }; }(x));
339 [](
auto&& v) {
return requires { v.set(
"name", 42); }; }(x));
345 static_assert([](
auto&& v) {
346 return !
requires { v.set(
"name", foo_t{}); };
348 static_assert([](
auto&& v) {
357 BEAST_EXPECT(subject.isMember(
"foo") ==
decltype(subject)
::none);
361 MultiApiJson<1, 2> s1{};
364 BEAST_EXPECT(s1.isMember(
"One") ==
decltype(s1)
::all);
365 BEAST_EXPECT(s1.isMember(
"Two") ==
decltype(s1)
::none);
370 MultiApiJson<1, 2> s2{};
373 BEAST_EXPECT(s2.isMember(
"One") ==
decltype(s2)
::some);
374 BEAST_EXPECT(s2.isMember(
"Two") ==
decltype(s2)
::some);
379 MultiApiJson<1, 3> s3{};
382 BEAST_EXPECT(s3.isMember(
"One") ==
decltype(s3)
::some);
383 BEAST_EXPECT(s3.isMember(
"Two") ==
decltype(s3)
::none);
390 MultiApiJson<1, 3> s1{};
395 BEAST_EXPECT(not s1.valid(0));
396 BEAST_EXPECT(s1.index(0) == 0);
398 BEAST_EXPECT(s1.valid(1));
399 BEAST_EXPECT(s1.index(1) == 0);
401 BEAST_EXPECT(not s1.valid(4));
404 static_assert([](
auto&& v) {
419 std::integral_constant<unsigned, 1>) {
420 return v[
"value"].asInt();
423 [](
auto,
auto) { return 0; }}) == 2);
425 static_assert([](
auto&& v) {
438 [](Json::Value& v) { return v[
"value"].asInt(); },
440 [](
auto...) { return 0; }}) == 2);
442 static_assert([](
auto&& v) {
456 [](Json::Value const& v,
457 std::integral_constant<unsigned, 2>) {
458 return v[
"value"].asInt();
461 [](
auto,
auto) { return 0; }}) == 3);
463 static_assert([](
auto&& v) {
476 [](Json::Value const& v) { return v[
"value"].asInt(); },
478 [](
auto...) { return 0; }}) == 3);
480 static_assert([](
auto&& v) {
490 [](Json::Value& v, unsigned) {
491 return v[
"value"].asInt();
494 [](
auto,
auto) { return 0; }}) == 5);
496 static_assert([](
auto&& v) {
497 return requires { v.visitor(v, 1, [](
Json::Value&) {}); };
504 [](Json::Value& v) { return v[
"value"].asInt(); },
506 [](
auto...) { return 0; }}) == 5);
508 static_assert([](
auto&& v) {
510 v.visitor(v, 1, [](
Json::Value const&,
unsigned) {});
518 [](Json::Value const& v, unsigned) {
519 return v[
"value"].asInt();
522 [](
auto,
auto) { return 0; }}) == 3);
524 static_assert([](
auto&& v) {
525 return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
532 [](Json::Value const& v) { return v[
"value"].asInt(); },
534 [](
auto...) { return 0; }}) == 3);
542 return v[
"value"].asInt();
549 return v[
"value"].asInt();
556 return v[
"value"].asInt();
562 [](
Json::Value const& v) { return v[
"value"].asInt(); }) ==
568 [](
Json::Value& v,
long) { return v[
"value"].asInt(); }) ==
575 return v[
"value"].asInt();
582 return v[
"value"].asInt();
588 [](
auto& v,
auto) { return v[
"value"].asInt(); }) == 3);
593 [](
auto const& v,
auto) { return v[
"value"].asInt(); }) ==
599 [](
auto& v) { return v[
"value"].asInt(); }) == 3);
604 [](
auto const& v) { return v[
"value"].asInt(); }) == 3);
612 return ver * a1 * a2 * v[
"value"].asInt();
615 7) == 2 * 5 * 7 * 3);
621 return ver * (1 * ... * args) * v[
"value"].asInt();
624 7) == 2 * 5 * 7 * 3);
627 static_assert([](
auto&& v) {
636 static_assert([](
auto&& v) {
645 static_assert([](
auto&& v) {
654 static_assert([](
auto&& v) {
664 static_assert([](
auto&& v) {
665 return requires { v.visitor(v, 1, [](
auto) {}); };
668 static_assert([](
auto&& v) {
669 return requires { v.visitor(v, 1, [](
Json::Value&) {}); };
672 static_assert([](
auto&& v) {
678 static_assert([](
auto&& v) {
679 return requires { v.visitor(v, 1, [](
Json::Value const&) {}); };
682 static_assert([](
auto&& v) {
684 v.visitor(v, 1, [](
Json::Value const&,
auto...) {});
688 static_assert([](
auto&& v) {
689 return requires { v.visitor(v, 1, [](
auto...) {}); };
692 static_assert([](
auto&& v) {
693 return requires { v.visitor(v, 1, [](
auto,
auto...) {}); };
696 static_assert([](
auto&& v) {
698 v.visitor(v, 1, [](
auto,
auto,
auto...) {});
702 static_assert([](
auto&& v) {
704 v.visitor(v, 1, [](
auto,
auto,
auto...) {},
"");
708 static_assert([](
auto&& v) {
710 v.visitor(v, 1, [](
auto,
auto,
auto,
auto...) {},
"");
718 MultiApiJson<1, 3> s1{};
719 s1.val[0] = makeJson(
"value", 2);
720 s1.val[1] = makeJson(
"value", 3);
721 s1.val[2] = makeJson(
"value", 5);
724 static_assert([](
auto&& v) {
737 std::integral_constant<unsigned, 1>) {
738 return v[
"value"].asInt();
741 [](
auto,
auto) { return 0; }}) == 2);
742 static_assert([](
auto&& v) {
755 std::integral_constant<unsigned, 1>) {
756 return v[
"value"].asInt();
759 [](
auto,
auto) { return 0; }}) == 2);
761 static_assert([](
auto&& v) {
772 [](Json::Value& v) { return v[
"value"].asInt(); },
774 [](
auto...) { return 0; }}) == 2);
775 static_assert([](
auto&& v) {
786 [](Json::Value& v) { return v[
"value"].asInt(); },
788 [](
auto...) { return 0; }}) == 2);
790 static_assert([](
auto&& v) {
804 return v[
"value"].
asInt();
807 [](
auto,
auto) {
return 0; }}) == 3);
808 static_assert([](
auto&& v) {
822 return v[
"value"].
asInt();
825 [](
auto,
auto) {
return 0; }}) == 3);
827 static_assert([](
auto&& v) {
838 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
840 [](
auto...) {
return 0; }}) == 3);
841 static_assert([](
auto&& v) {
852 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
854 [](
auto...) {
return 0; }}) == 3);
856 static_assert([](
auto&& v) {
857 return requires { v.visit(1, [](
Json::Value&,
unsigned) {}); };
863 [](Json::Value& v, unsigned) {
864 return v[
"value"].asInt();
868 [](
auto,
auto) { return 0; }}) == 5);
869 static_assert([](
auto&& v) {
878 [](Json::Value& v, unsigned) {
879 return v[
"value"].asInt();
883 [](
auto,
auto) { return 0; }}) == 5);
885 static_assert([](
auto&& v) {
886 return requires { v.visit(1, [](
Json::Value&) {}); };
892 [](Json::Value& v) { return v[
"value"].asInt(); },
894 [](
auto...) { return 0; }}) == 5);
895 static_assert([](
auto&& v) {
896 return requires { v.visit()(1, [](
Json::Value&) {}); };
902 [](Json::Value& v) { return v[
"value"].asInt(); },
904 [](
auto...) { return 0; }}) == 5);
906 static_assert([](
auto&& v) {
916 return v[
"value"].
asInt();
920 [](
auto,
auto) {
return 0; }}) == 3);
921 static_assert([](
auto&& v) {
931 return v[
"value"].
asInt();
935 [](
auto,
auto) {
return 0; }}) == 3);
937 static_assert([](
auto&& v) {
938 return requires { v.visit(1, [](
Json::Value const&) {}); };
944 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
946 [](
auto...) {
return 0; }}) == 3);
947 static_assert([](
auto&& v) {
948 return requires { v.visit()(1, [](
Json::Value const&) {}); };
954 [](
Json::Value const& v) {
return v[
"value"].asInt(); },
956 [](
auto...) {
return 0; }}) == 3);
959 static_assert([](
auto&& v) {
964 static_assert([](
auto&& v) {
970 static_assert([](
auto&& v) {
975 static_assert([](
auto&& v) {
981 static_assert([](
auto&& v) {
987 static_assert([](
auto&& v) {
993 static_assert([](
auto&& v) {
999 static_assert([](
auto&& v) {
1005 static_assert([](
auto&& v) {
1011 static_assert([](
auto&& v) {
1017 static_assert([](
auto&& v) {
1023 static_assert([](
auto&& v) {
1031 static_assert([](
auto&& v) {
1037 static_assert([](
auto&& v) {
1045 static_assert([](
auto&& v) {
1050 static_assert([](
auto&& v) {
1057 static_assert([](
auto&& v) {
1062 static_assert([](
auto&& v) {