55 CHECK (1 == branch.selected());
56 CHECK (42 == branch.get<1>());
57 CHECK (
'*' == branch.get<0>());
60 auto visitor = [&](
auto& it){ val = it;};
61 branch.accept (visitor);
74 CHECK (
sizeof(
double)+
sizeof(
size_t) <=
sizeof(Branch));
75 CHECK (
sizeof(
double) == Branch::SIZ);
77 double phi{(1+sqrt(5))/2};
79 CHECK (1 == b1.selected());
80 CHECK (phi == b1.get<1>());
82 auto p =
reinterpret_cast<size_t*
> (&b1);
84 CHECK (phi == *
reinterpret_cast<double*
>(p+1));
88 CHECK (0 == b1.selected());
89 CHECK (42 == b1.get<0>());
91 CHECK (42 == *
reinterpret_cast<ushort*
>(p+1));
103 CHECK (
sizeof(
string)+
sizeof(
size_t) <=
sizeof(Branch));
106 auto render = [](
auto const& it) ->
string {
return util::toString(it); };
108 Branch b1{1,
"evil"};
109 CHECK ( 1 == b1.TOP );
110 CHECK ( 1 == b1.selected());
111 CHECK (
"evil" == b1.get<1>());
112 CHECK (
"evil" == b1.accept(render));
115 CHECK ( 0 == b2.selected());
116 CHECK (
'*' == b2.get<0>());
117 CHECK (
"*" == b2.accept(render));
120 CHECK (1 == b3.selected());
121 CHECK (
"evil" == b3.accept(render));
124 CHECK ( 0 == b3.selected());
125 CHECK (
"*" == b3.accept(render));
126 CHECK (
"*" == b2.accept(render));
127 CHECK (
"evil" == b1.accept(render));
130 CHECK ( 1 == b3.selected() );
131 CHECK ( 0 == b2.selected() );
132 CHECK (
"evil" == b3.accept(render));
133 CHECK (
"*" == b2.accept(render));
134 CHECK (
"" == b1.accept(render));
137 CHECK ( 0 == b3.selected());
138 CHECK ( 1 == b2.selected());
139 CHECK (
"*" == b3.accept(render));
140 CHECK (
"evil" == b2.accept(render));
141 CHECK (
"" == b1.accept(render));
155 CHECK (bb1.get<1>().getVal() == rr);
162 CHECK (bb1.get<0>() ==
"dummy");
163 CHECK (bb2.get<1>().getVal() == rr);
167 CHECK (bb1.get<1>().getVal() == rr);
172 CHECK (bb2.get<1>().getVal() == rr);
176 auto rr2 = bb2.get<1>().getVal();
178 CHECK (rr == dummy.
getVal());
A Sum Type (variant) to capture values from a branched evaluation.
A Sum Type to hold alternative results from a branched evaluation.
void verifyCopyAssignment()
void demonstrateStorage()
A Dummy object for tests.
static constexpr int DEFUNCT
Helpers typically used while writing tests.
unsigned short int ushort
Implementation namespace for support and library code.
Test runner and basic definitions for tests.
std::string toString(TY const &val) noexcept
get some string representation of any object, reliably.
Simplistic test class runner.
#define LAUNCHER(_TEST_CLASS_, _GROUPS_)
unittest helper code: test dummy objects to track instances.