]>
git.proxmox.com Git - rustc.git/blob - vendor/merge/tests/derive.rs
1 // SPDX-FileCopyrightText: 2020 Robin Krahl <robin.krahl@ireas.org>
2 // SPDX-License-Identifier: Apache-2.0 or MIT
4 #![cfg(feature = "derive")]
8 fn test
<T
: std
::fmt
::Debug
+ Merge
+ PartialEq
>(expected
: T
, mut left
: T
, right
: T
) {
10 assert_eq
!(expected
, left
);
14 fn test_one_option_field() {
15 #[derive(Debug, Merge, PartialEq)]
17 field1
: Option
<usize>,
21 pub fn new(field1
: Option
<usize>) -> S
{
26 test(S
::new(Some(1)), S
::new(Some(1)), S
::new(Some(2)));
27 test(S
::new(Some(1)), S
::new(Some(1)), S
::new(None
));
28 test(S
::new(Some(2)), S
::new(None
), S
::new(Some(2)));
29 test(S
::new(None
), S
::new(None
), S
::new(None
));
33 fn test_two_option_fields() {
34 #[derive(Debug, Merge, PartialEq)]
36 field1
: Option
<usize>,
37 field2
: Option
<usize>,
41 pub fn new(field1
: Option
<usize>, field2
: Option
<usize>) -> S
{
46 // left.field1 == Some(1)
47 // right.field1 == Some(2)
49 S
::new(Some(1), Some(1)),
50 S
::new(Some(1), Some(1)),
51 S
::new(Some(2), Some(2)),
54 S
::new(Some(1), Some(1)),
55 S
::new(Some(1), Some(1)),
56 S
::new(Some(2), None
),
59 S
::new(Some(1), Some(2)),
60 S
::new(Some(1), None
),
61 S
::new(Some(2), Some(2)),
64 S
::new(Some(1), None
),
65 S
::new(Some(1), None
),
66 S
::new(Some(2), None
),
69 // left.field1 == Some(1)
70 // right.field1 == None
72 S
::new(Some(1), Some(1)),
73 S
::new(Some(1), Some(1)),
74 S
::new(None
, Some(2)),
77 S
::new(Some(1), Some(1)),
78 S
::new(Some(1), Some(1)),
82 S
::new(Some(1), Some(2)),
83 S
::new(Some(1), None
),
84 S
::new(None
, Some(2)),
87 S
::new(Some(1), None
),
88 S
::new(Some(1), None
),
92 // left.field1 == None
93 // right.field1 == Some(2)
95 S
::new(Some(2), Some(1)),
96 S
::new(None
, Some(1)),
97 S
::new(Some(2), Some(2)),
100 S
::new(Some(2), Some(1)),
101 S
::new(None
, Some(1)),
102 S
::new(Some(2), None
),
105 S
::new(Some(2), Some(2)),
107 S
::new(Some(2), Some(2)),
110 S
::new(Some(2), None
),
112 S
::new(Some(2), None
),
115 // left.field1 == None
116 // right.field1 == None
118 S
::new(None
, Some(1)),
119 S
::new(None
, Some(1)),
120 S
::new(None
, Some(2)),
123 S
::new(None
, Some(1)),
124 S
::new(None
, Some(1)),
128 S
::new(None
, Some(2)),
130 S
::new(None
, Some(2)),
132 test(S
::new(None
, None
), S
::new(None
, None
), S
::new(None
, None
));
136 fn test_skip_valid() {
137 #[derive(Debug, Merge, PartialEq)]
139 field1
: Option
<usize>,
141 field2
: Option
<usize>,
145 pub fn new(field1
: Option
<usize>, field2
: Option
<usize>) -> S
{
150 // left.field1 == Some(1)
151 // right.field1 == Some(2)
153 S
::new(Some(1), Some(1)),
154 S
::new(Some(1), Some(1)),
155 S
::new(Some(2), Some(2)),
158 S
::new(Some(1), Some(1)),
159 S
::new(Some(1), Some(1)),
160 S
::new(Some(2), None
),
163 S
::new(Some(1), None
),
164 S
::new(Some(1), None
),
165 S
::new(Some(2), Some(2)),
168 S
::new(Some(1), None
),
169 S
::new(Some(1), None
),
170 S
::new(Some(2), None
),
173 // left.field1 == Some(1)
174 // right.field1 == None
176 S
::new(Some(1), Some(1)),
177 S
::new(Some(1), Some(1)),
178 S
::new(None
, Some(2)),
181 S
::new(Some(1), Some(1)),
182 S
::new(Some(1), Some(1)),
186 S
::new(Some(1), None
),
187 S
::new(Some(1), None
),
188 S
::new(None
, Some(2)),
191 S
::new(Some(1), None
),
192 S
::new(Some(1), None
),
196 // left.field1 == None
197 // right.field1 == Some(2)
199 S
::new(Some(2), Some(1)),
200 S
::new(None
, Some(1)),
201 S
::new(Some(2), Some(2)),
204 S
::new(Some(2), Some(1)),
205 S
::new(None
, Some(1)),
206 S
::new(Some(2), None
),
209 S
::new(Some(2), None
),
211 S
::new(Some(2), Some(2)),
214 S
::new(Some(2), None
),
216 S
::new(Some(2), None
),
219 // left.field1 == None
220 // right.field1 == None
222 S
::new(None
, Some(1)),
223 S
::new(None
, Some(1)),
224 S
::new(None
, Some(2)),
227 S
::new(None
, Some(1)),
228 S
::new(None
, Some(1)),
234 S
::new(None
, Some(2)),
236 test(S
::new(None
, None
), S
::new(None
, None
), S
::new(None
, None
));
240 fn test_skip_invalid() {
241 #[derive(Debug, Merge, PartialEq)]
243 field1
: Option
<usize>,
249 pub fn new(field1
: Option
<usize>, field2
: usize) -> S
{
254 // left.field1 == Some(1)
255 // right.field1 == Some(2)
256 test(S
::new(Some(1), 1), S
::new(Some(1), 1), S
::new(Some(2), 2));
257 test(S
::new(Some(1), 1), S
::new(Some(1), 1), S
::new(Some(2), 0));
258 test(S
::new(Some(1), 0), S
::new(Some(1), 0), S
::new(Some(2), 2));
259 test(S
::new(Some(1), 0), S
::new(Some(1), 0), S
::new(Some(2), 0));
261 // left.field1 == Some(1)
262 // right.field1 == None
263 test(S
::new(Some(1), 1), S
::new(Some(1), 1), S
::new(None
, 2));
264 test(S
::new(Some(1), 1), S
::new(Some(1), 1), S
::new(None
, 0));
265 test(S
::new(Some(1), 0), S
::new(Some(1), 0), S
::new(None
, 2));
266 test(S
::new(Some(1), 0), S
::new(Some(1), 0), S
::new(None
, 0));
268 // left.field1 == None
269 // right.field1 == Some(2)
270 test(S
::new(Some(2), 1), S
::new(None
, 1), S
::new(Some(2), 2));
271 test(S
::new(Some(2), 1), S
::new(None
, 1), S
::new(Some(2), 0));
272 test(S
::new(Some(2), 0), S
::new(None
, 0), S
::new(Some(2), 2));
273 test(S
::new(Some(2), 0), S
::new(None
, 0), S
::new(Some(2), 0));
275 // left.field1 == None
276 // right.field1 == None
277 test(S
::new(None
, 1), S
::new(None
, 1), S
::new(None
, 2));
278 test(S
::new(None
, 1), S
::new(None
, 1), S
::new(None
, 0));
279 test(S
::new(None
, 0), S
::new(None
, 0), S
::new(None
, 2));
280 test(S
::new(None
, 0), S
::new(None
, 0), S
::new(None
, 0));
284 fn test_strategy_usize_add() {
285 #[derive(Debug, Merge, PartialEq)]
287 #[merge(strategy = add)]
292 pub fn new(field1
: usize) -> S
{
297 fn add(left
: &mut usize, right
: usize) {
298 *left
= *left
+ right
;
301 test(S
::new(0), S
::new(0), S
::new(0));
302 test(S
::new(1), S
::new(1), S
::new(0));
303 test(S
::new(1), S
::new(0), S
::new(1));
304 test(S
::new(2), S
::new(1), S
::new(1));
308 fn test_strategy_vec_append() {
309 #[derive(Debug, Merge, PartialEq)]
311 #[merge(strategy = append)]
316 pub fn new(field1
: Vec
<usize>) -> S
{
321 fn append(left
: &mut Vec
<usize>, mut right
: Vec
<usize>) {
322 left
.append(&mut right
);
326 S
::new(vec
![0, 1, 2, 3]),
331 S
::new(vec
![0, 1, 2, 3]),
332 S
::new(vec
![0, 1, 2, 3]),
336 S
::new(vec
![0, 1, 2, 3]),
338 S
::new(vec
![0, 1, 2, 3]),
343 fn test_unnamed_fields() {
344 #[derive(Debug, Merge, PartialEq)]
345 struct S(Option
<usize>, Option
<usize>);
348 pub fn new(field1
: Option
<usize>, field2
: Option
<usize>) -> S
{
353 // left.field1 == Some(1)
354 // right.field1 == Some(2)
356 S
::new(Some(1), Some(1)),
357 S
::new(Some(1), Some(1)),
358 S
::new(Some(2), Some(2)),
361 S
::new(Some(1), Some(1)),
362 S
::new(Some(1), Some(1)),
363 S
::new(Some(2), None
),
366 S
::new(Some(1), Some(2)),
367 S
::new(Some(1), None
),
368 S
::new(Some(2), Some(2)),
371 S
::new(Some(1), None
),
372 S
::new(Some(1), None
),
373 S
::new(Some(2), None
),
376 // left.field1 == Some(1)
377 // right.field1 == None
379 S
::new(Some(1), Some(1)),
380 S
::new(Some(1), Some(1)),
381 S
::new(None
, Some(2)),
384 S
::new(Some(1), Some(1)),
385 S
::new(Some(1), Some(1)),
389 S
::new(Some(1), Some(2)),
390 S
::new(Some(1), None
),
391 S
::new(None
, Some(2)),
394 S
::new(Some(1), None
),
395 S
::new(Some(1), None
),
399 // left.field1 == None
400 // right.field1 == Some(2)
402 S
::new(Some(2), Some(1)),
403 S
::new(None
, Some(1)),
404 S
::new(Some(2), Some(2)),
407 S
::new(Some(2), Some(1)),
408 S
::new(None
, Some(1)),
409 S
::new(Some(2), None
),
412 S
::new(Some(2), Some(2)),
414 S
::new(Some(2), Some(2)),
417 S
::new(Some(2), None
),
419 S
::new(Some(2), None
),
422 // left.field1 == None
423 // right.field1 == None
425 S
::new(None
, Some(1)),
426 S
::new(None
, Some(1)),
427 S
::new(None
, Some(2)),
430 S
::new(None
, Some(1)),
431 S
::new(None
, Some(1)),
435 S
::new(None
, Some(2)),
437 S
::new(None
, Some(2)),
439 test(S
::new(None
, None
), S
::new(None
, None
), S
::new(None
, None
));
443 fn test_unnamed_fields_skip() {
444 #[derive(Debug, Merge, PartialEq)]
445 struct S(Option
<usize>, #[merge(skip)] Option<usize>);
448 pub fn new(field1
: Option
<usize>, field2
: Option
<usize>) -> S
{
453 // left.field1 == Some(1)
454 // right.field1 == Some(2)
456 S
::new(Some(1), Some(1)),
457 S
::new(Some(1), Some(1)),
458 S
::new(Some(2), Some(2)),
461 S
::new(Some(1), Some(1)),
462 S
::new(Some(1), Some(1)),
463 S
::new(Some(2), None
),
466 S
::new(Some(1), None
),
467 S
::new(Some(1), None
),
468 S
::new(Some(2), Some(2)),
471 S
::new(Some(1), None
),
472 S
::new(Some(1), None
),
473 S
::new(Some(2), None
),
476 // left.field1 == Some(1)
477 // right.field1 == None
479 S
::new(Some(1), Some(1)),
480 S
::new(Some(1), Some(1)),
481 S
::new(None
, Some(2)),
484 S
::new(Some(1), Some(1)),
485 S
::new(Some(1), Some(1)),
489 S
::new(Some(1), None
),
490 S
::new(Some(1), None
),
491 S
::new(None
, Some(2)),
494 S
::new(Some(1), None
),
495 S
::new(Some(1), None
),
499 // left.field1 == None
500 // right.field1 == Some(2)
502 S
::new(Some(2), Some(1)),
503 S
::new(None
, Some(1)),
504 S
::new(Some(2), Some(2)),
507 S
::new(Some(2), Some(1)),
508 S
::new(None
, Some(1)),
509 S
::new(Some(2), None
),
512 S
::new(Some(2), None
),
514 S
::new(Some(2), Some(2)),
517 S
::new(Some(2), None
),
519 S
::new(Some(2), None
),
522 // left.field1 == None
523 // right.field1 == None
525 S
::new(None
, Some(1)),
526 S
::new(None
, Some(1)),
527 S
::new(None
, Some(2)),
530 S
::new(None
, Some(1)),
531 S
::new(None
, Some(1)),
537 S
::new(None
, Some(2)),
539 test(S
::new(None
, None
), S
::new(None
, None
), S
::new(None
, None
));