1#include <gtest/gtest.h>
5#include <box/options/cycles.structs.usrv.pb.hpp>
6#include <test_utils/type_assertions.hpp>
10TEST(OptionsCycles, Self) {
11 namespace ss = box::options::structs;
12 AssertFieldType<
decltype(ss::Self::self), utils::Box<ss::Self>>();
13 AssertFieldCount<ss::CycleEnd, 1>();
16TEST(OptionsCycles, MyMap) {
17 namespace ss = box::options::structs;
19 AssertFieldType<
decltype(ss::MyMap::self), utils::Box<::proto_structs::HashMap<std::string, std::string>>>();
21 AssertFieldCount<ss::MyMap, 1>();
24TEST(OptionsCycles, CycleLenIsThree) {
25 namespace ss = box::options::structs;
26 AssertFieldType<
decltype(ss::First::c), ss::Second>();
27 AssertFieldType<
decltype(ss::Second::c), ss::Third>();
28 AssertFieldType<
decltype(ss::Third::c), utils::Box<ss::First>>();
30 AssertFieldCount<ss::First, 1>();
31 AssertFieldCount<ss::Second, 1>();
32 AssertFieldCount<ss::Third, 1>();
35TEST(OptionsCycles, box) {
36 namespace ss = box::options::structs;
37 AssertFieldType<
decltype(ss::CycleStart::cycle), utils::Box<ss::CycleEnd>>();
38 AssertFieldType<
decltype(ss::CycleStart::not_boxed), std::vector<ss::CycleEnd>>();
39 AssertFieldType<
decltype(ss::CycleEnd::cycle), ss::CycleStart>();
41 AssertFieldCount<ss::CycleEnd, 1>();
42 AssertFieldCount<ss::CycleStart, 2>();
45TEST(OptionsCycles, Main) {
46 namespace ss = box::options::structs;
47 AssertFieldType<
decltype(ss::Main1::inner), ss::Main1::Inner>();
48 AssertFieldType<
decltype(ss::Main1::Inner::cycle), utils::Box<ss::ImBelowMain1>>();
49 AssertFieldType<
decltype(ss::IamAboveMain2::cycle), ss::Main2>();
50 AssertFieldType<
decltype(ss::Main2::inner), ss::Main2::Inner>();
51 AssertFieldType<
decltype(ss::Main2::Inner::cycle), utils::Box<ss::IamAboveMain2>>();
52 AssertFieldType<
decltype(ss::ImBelowMain1::cycle), ss::Main1>();
54 AssertFieldCount<ss::Main1, 1>();
55 AssertFieldCount<ss::Main1::Inner, 1>();
56 AssertFieldCount<ss::IamAboveMain2, 1>();
57 AssertFieldCount<ss::Main2, 1>();
58 AssertFieldCount<ss::Main2::Inner, 1>();
59 AssertFieldCount<ss::ImBelowMain1, 1>();
62TEST(OptionsCycles, NewCycle) {
63 namespace ss = box::options::structs;
64 AssertFieldType<
decltype(ss::NewCycle::inner), ss::NewCycle::Inner1>();
65 AssertFieldCount<ss::NewCycle, 1>();
66 AssertFieldType<
decltype(ss::NewCycle::Inner1::inner), ss::NewCycle::Inner1::InnerInner>();
67 AssertFieldType<
decltype(ss::NewCycle::Inner1::InnerInner::inner), ss::NewCycle::Inner2Below>();
68 AssertFieldType<
decltype(ss::NewCycle::Inner2Below::i), ss::NewCycle::Inner2Below::InnerInner>();
69 AssertFieldType<
decltype(ss::NewCycle::Inner2Below::InnerInner::inner), utils::Box<ss::NewCycle::Inner1>>();
71 AssertFieldCount<ss::NewCycle::Inner1, 1>();
72 AssertFieldCount<ss::NewCycle::Inner1::InnerInner, 1>();
73 AssertFieldCount<ss::NewCycle::Inner2Below, 1>();
74 AssertFieldCount<ss::NewCycle::Inner2Below::InnerInner, 1>();
77TEST(OptionsCycles, NewCycle2) {
78 namespace ss = box::options::structs;
79 AssertFieldType<
decltype(ss::NewCycle2::inner), ss::NewCycle2::Inner1>();
80 AssertFieldCount<ss::NewCycle2, 1>();
81 AssertFieldType<
decltype(ss::NewCycle2::Inner1::inner), ss::NewCycle2::Inner1::InnerInner>();
82 AssertFieldType<
decltype(ss::NewCycle2::Inner1::InnerInner::inner), ss::NewCycle2::Inner2Above>();
83 AssertFieldType<
decltype(ss::NewCycle2::Inner2Above::i), ss::NewCycle2::Inner2Above::InnerInner>();
84 AssertFieldType<
decltype(ss::NewCycle2::Inner2Above::InnerInner::inner), utils::Box<ss::NewCycle2::Inner1>>();
86 AssertFieldCount<ss::NewCycle2::Inner1, 1>();
87 AssertFieldCount<ss::NewCycle2::Inner1::InnerInner, 1>();
88 AssertFieldCount<ss::NewCycle2::Inner2Above, 1>();
89 AssertFieldCount<ss::NewCycle2::Inner2Above::InnerInner, 1>();
92TEST(OptionsCycles, OptionalSelf) {
93 namespace ss = box::options::structs;
96 AssertFieldCount<ss::OptionalSelf, 1>();
98 AssertFieldType<
decltype(ss::OptionalSelf::self), std::optional<utils::Box<ss::OptionalSelf>>>();
101TEST(OptionsCycles, OptionalDouble) {
102 namespace ss = box::options::structs;
103 AssertFieldCount<ss::OptionalDouble::First, 1>();
104 AssertFieldType<
decltype(ss::OptionalDouble::First::c), std::optional<utils::Box<ss::OptionalDouble::Second>>>();
105 AssertFieldCount<ss::OptionalDouble::Second, 1>();
106 AssertFieldType<
decltype(ss::OptionalDouble::Second::c), std::optional<ss::OptionalDouble::First>>();
109TEST(OptionsCycles, OptionalTriple) {
110 namespace ss = box::options::structs;
111 AssertFieldCount<ss::OptionalTriple::First, 1>();
112 AssertFieldType<
decltype(ss::OptionalTriple::First::c), std::optional<ss::OptionalTriple::Second>>();
113 AssertFieldCount<ss::OptionalTriple::Second, 1>();
114 AssertFieldType<
decltype(ss::OptionalTriple::Second::c), std::optional<ss::OptionalTriple::Third>>();
115 AssertFieldCount<ss::OptionalTriple::Third, 1>();
116 AssertFieldType<
decltype(ss::OptionalTriple::Third::c), std::optional<utils::Box<ss::OptionalTriple::First>>>();