@@ -152,3 +152,53 @@ TEST_CASE("MemberTypeOf", "[reflection]")
152
152
static_assert (std::same_as<Reflection::MemberTypeOf<3 , TestStruct>, std::string>);
153
153
static_assert (std::same_as<Reflection::MemberTypeOf<4 , TestStruct>, Person>);
154
154
}
155
+
156
+ struct Record
157
+ {
158
+ int id;
159
+ std::string name;
160
+ int age;
161
+ };
162
+
163
+ TEST_CASE (" Compare.simple" , " [reflection]" )
164
+ {
165
+ auto const r1 = Record { .id = 1 , .name = " John Doe" , .age = 42 };
166
+ auto const r2 = Record { .id = 1 , .name = " John Doe" , .age = 42 };
167
+ auto const r3 = Record { .id = 2 , .name = " Jane Doe" , .age = 43 };
168
+
169
+ std::string diff;
170
+ auto differenceCallback = [&](std::string_view name, auto const & lhs, auto const & rhs) {
171
+ diff += std::format (" {}: {} != {}\n " , name, lhs, rhs);
172
+ };
173
+
174
+ Reflection::CollectDifferences (r1, r2, differenceCallback);
175
+ CHECK (diff.empty ());
176
+ Reflection::CollectDifferences (r1, r3, differenceCallback);
177
+ CHECK (diff == " id: 1 != 2\n name: John Doe != Jane Doe\n age: 42 != 43\n " );
178
+ }
179
+
180
+ struct Table
181
+ {
182
+ Record first;
183
+ Record second;
184
+ };
185
+
186
+ TEST_CASE (" Compare.nested" , " [reflection]" )
187
+ {
188
+ auto const t1 = Table { .first = { .id = 1 , .name = " John Doe" , .age = 42 },
189
+ .second = { .id = 2 , .name = " Jane Doe" , .age = 43 } };
190
+ auto const t2 = Table { .first = { .id = 1 , .name = " John Doe" , .age = 42 },
191
+ .second = { .id = 2 , .name = " Jane Doe" , .age = 43 } };
192
+ auto const t3 = Table { .first = { .id = 1 , .name = " John Doe" , .age = 42 },
193
+ .second = { .id = 3 , .name = " Jane Doe" , .age = 43 } };
194
+
195
+ std::string diff;
196
+ auto differenceCallback = [&](std::string_view name, auto const & lhs, auto const & rhs) {
197
+ diff += std::format (" {}: {} != {}\n " , name, lhs, rhs);
198
+ };
199
+
200
+ Reflection::CollectDifferences (t1, t2, differenceCallback);
201
+ CHECK (diff.empty ());
202
+ Reflection::CollectDifferences (t1, t3, differenceCallback);
203
+ CHECK (diff == " id: 2 != 3\n " );
204
+ }
0 commit comments