contracts/lib/forge-std/src/StdAssertions.sol 22.8 K raw
1
// SPDX-License-Identifier: MIT
2
pragma solidity >=0.6.2 <0.9.0;
3
pragma experimental ABIEncoderV2;
4
5
import {Vm} from "./Vm.sol";
6
7
abstract contract StdAssertions {
8
    Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));
9
10
    event log(string);
11
    event logs(bytes);
12
13
    event log_address(address);
14
    event log_bytes32(bytes32);
15
    event log_int(int256);
16
    event log_uint(uint256);
17
    event log_bytes(bytes);
18
    event log_string(string);
19
20
    event log_named_address(string key, address val);
21
    event log_named_bytes32(string key, bytes32 val);
22
    event log_named_decimal_int(string key, int256 val, uint256 decimals);
23
    event log_named_decimal_uint(string key, uint256 val, uint256 decimals);
24
    event log_named_int(string key, int256 val);
25
    event log_named_uint(string key, uint256 val);
26
    event log_named_bytes(string key, bytes val);
27
    event log_named_string(string key, string val);
28
29
    event log_array(uint256[] val);
30
    event log_array(int256[] val);
31
    event log_array(address[] val);
32
    event log_named_array(string key, uint256[] val);
33
    event log_named_array(string key, int256[] val);
34
    event log_named_array(string key, address[] val);
35
36
    bool private _failed;
37
38
    function failed() public view returns (bool) {
39
        if (_failed) {
40
            return _failed;
41
        } else {
42
            return vm.load(address(vm), bytes32("failed")) != bytes32(0);
43
        }
44
    }
45
46
    function fail() internal virtual {
47
        vm.store(address(vm), bytes32("failed"), bytes32(uint256(1)));
48
        _failed = true;
49
    }
50
51
    function assertTrue(bool data) internal pure virtual {
52
        vm.assertTrue(data);
53
    }
54
55
    function assertTrue(bool data, string memory err) internal pure virtual {
56
        vm.assertTrue(data, err);
57
    }
58
59
    function assertFalse(bool data) internal pure virtual {
60
        vm.assertFalse(data);
61
    }
62
63
    function assertFalse(bool data, string memory err) internal pure virtual {
64
        vm.assertFalse(data, err);
65
    }
66
67
    function assertEq(bool left, bool right) internal pure virtual {
68
        vm.assertEq(left, right);
69
    }
70
71
    function assertEq(bool left, bool right, string memory err) internal pure virtual {
72
        vm.assertEq(left, right, err);
73
    }
74
75
    function assertEq(uint256 left, uint256 right) internal pure virtual {
76
        vm.assertEq(left, right);
77
    }
78
79
    function assertEq(uint256 left, uint256 right, string memory err) internal pure virtual {
80
        vm.assertEq(left, right, err);
81
    }
82
83
    function assertEqDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual {
84
        vm.assertEqDecimal(left, right, decimals);
85
    }
86
87
    function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual {
88
        vm.assertEqDecimal(left, right, decimals, err);
89
    }
90
91
    function assertEq(int256 left, int256 right) internal pure virtual {
92
        vm.assertEq(left, right);
93
    }
94
95
    function assertEq(int256 left, int256 right, string memory err) internal pure virtual {
96
        vm.assertEq(left, right, err);
97
    }
98
99
    function assertEqDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual {
100
        vm.assertEqDecimal(left, right, decimals);
101
    }
102
103
    function assertEqDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual {
104
        vm.assertEqDecimal(left, right, decimals, err);
105
    }
106
107
    function assertEq(address left, address right) internal pure virtual {
108
        vm.assertEq(left, right);
109
    }
110
111
    function assertEq(address left, address right, string memory err) internal pure virtual {
112
        vm.assertEq(left, right, err);
113
    }
114
115
    function assertEq(bytes32 left, bytes32 right) internal pure virtual {
116
        vm.assertEq(left, right);
117
    }
118
119
    function assertEq(bytes32 left, bytes32 right, string memory err) internal pure virtual {
120
        vm.assertEq(left, right, err);
121
    }
122
123
    function assertEq32(bytes32 left, bytes32 right) internal pure virtual {
124
        assertEq(left, right);
125
    }
126
127
    function assertEq32(bytes32 left, bytes32 right, string memory err) internal pure virtual {
128
        assertEq(left, right, err);
129
    }
130
131
    function assertEq(string memory left, string memory right) internal pure virtual {
132
        vm.assertEq(left, right);
133
    }
134
135
    function assertEq(string memory left, string memory right, string memory err) internal pure virtual {
136
        vm.assertEq(left, right, err);
137
    }
138
139
    function assertEq(bytes memory left, bytes memory right) internal pure virtual {
140
        vm.assertEq(left, right);
141
    }
142
143
    function assertEq(bytes memory left, bytes memory right, string memory err) internal pure virtual {
144
        vm.assertEq(left, right, err);
145
    }
146
147
    function assertEq(bool[] memory left, bool[] memory right) internal pure virtual {
148
        vm.assertEq(left, right);
149
    }
150
151
    function assertEq(bool[] memory left, bool[] memory right, string memory err) internal pure virtual {
152
        vm.assertEq(left, right, err);
153
    }
154
155
    function assertEq(uint256[] memory left, uint256[] memory right) internal pure virtual {
156
        vm.assertEq(left, right);
157
    }
158
159
    function assertEq(uint256[] memory left, uint256[] memory right, string memory err) internal pure virtual {
160
        vm.assertEq(left, right, err);
161
    }
162
163
    function assertEq(int256[] memory left, int256[] memory right) internal pure virtual {
164
        vm.assertEq(left, right);
165
    }
166
167
    function assertEq(int256[] memory left, int256[] memory right, string memory err) internal pure virtual {
168
        vm.assertEq(left, right, err);
169
    }
170
171
    function assertEq(address[] memory left, address[] memory right) internal pure virtual {
172
        vm.assertEq(left, right);
173
    }
174
175
    function assertEq(address[] memory left, address[] memory right, string memory err) internal pure virtual {
176
        vm.assertEq(left, right, err);
177
    }
178
179
    function assertEq(bytes32[] memory left, bytes32[] memory right) internal pure virtual {
180
        vm.assertEq(left, right);
181
    }
182
183
    function assertEq(bytes32[] memory left, bytes32[] memory right, string memory err) internal pure virtual {
184
        vm.assertEq(left, right, err);
185
    }
186
187
    function assertEq(string[] memory left, string[] memory right) internal pure virtual {
188
        vm.assertEq(left, right);
189
    }
190
191
    function assertEq(string[] memory left, string[] memory right, string memory err) internal pure virtual {
192
        vm.assertEq(left, right, err);
193
    }
194
195
    function assertEq(bytes[] memory left, bytes[] memory right) internal pure virtual {
196
        vm.assertEq(left, right);
197
    }
198
199
    function assertEq(bytes[] memory left, bytes[] memory right, string memory err) internal pure virtual {
200
        vm.assertEq(left, right, err);
201
    }
202
203
    // Legacy helper
204
    function assertEqUint(uint256 left, uint256 right) internal pure virtual {
205
        assertEq(left, right);
206
    }
207
208
    function assertNotEq(bool left, bool right) internal pure virtual {
209
        vm.assertNotEq(left, right);
210
    }
211
212
    function assertNotEq(bool left, bool right, string memory err) internal pure virtual {
213
        vm.assertNotEq(left, right, err);
214
    }
215
216
    function assertNotEq(uint256 left, uint256 right) internal pure virtual {
217
        vm.assertNotEq(left, right);
218
    }
219
220
    function assertNotEq(uint256 left, uint256 right, string memory err) internal pure virtual {
221
        vm.assertNotEq(left, right, err);
222
    }
223
224
    function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual {
225
        vm.assertNotEqDecimal(left, right, decimals);
226
    }
227
228
    function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string memory err)
229
        internal
230
        pure
231
        virtual
232
    {
233
        vm.assertNotEqDecimal(left, right, decimals, err);
234
    }
235
236
    function assertNotEq(int256 left, int256 right) internal pure virtual {
237
        vm.assertNotEq(left, right);
238
    }
239
240
    function assertNotEq(int256 left, int256 right, string memory err) internal pure virtual {
241
        vm.assertNotEq(left, right, err);
242
    }
243
244
    function assertNotEqDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual {
245
        vm.assertNotEqDecimal(left, right, decimals);
246
    }
247
248
    function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual {
249
        vm.assertNotEqDecimal(left, right, decimals, err);
250
    }
251
252
    function assertNotEq(address left, address right) internal pure virtual {
253
        vm.assertNotEq(left, right);
254
    }
255
256
    function assertNotEq(address left, address right, string memory err) internal pure virtual {
257
        vm.assertNotEq(left, right, err);
258
    }
259
260
    function assertNotEq(bytes32 left, bytes32 right) internal pure virtual {
261
        vm.assertNotEq(left, right);
262
    }
263
264
    function assertNotEq(bytes32 left, bytes32 right, string memory err) internal pure virtual {
265
        vm.assertNotEq(left, right, err);
266
    }
267
268
    function assertNotEq32(bytes32 left, bytes32 right) internal pure virtual {
269
        assertNotEq(left, right);
270
    }
271
272
    function assertNotEq32(bytes32 left, bytes32 right, string memory err) internal pure virtual {
273
        assertNotEq(left, right, err);
274
    }
275
276
    function assertNotEq(string memory left, string memory right) internal pure virtual {
277
        vm.assertNotEq(left, right);
278
    }
279
280
    function assertNotEq(string memory left, string memory right, string memory err) internal pure virtual {
281
        vm.assertNotEq(left, right, err);
282
    }
283
284
    function assertNotEq(bytes memory left, bytes memory right) internal pure virtual {
285
        vm.assertNotEq(left, right);
286
    }
287
288
    function assertNotEq(bytes memory left, bytes memory right, string memory err) internal pure virtual {
289
        vm.assertNotEq(left, right, err);
290
    }
291
292
    function assertNotEq(bool[] memory left, bool[] memory right) internal pure virtual {
293
        vm.assertNotEq(left, right);
294
    }
295
296
    function assertNotEq(bool[] memory left, bool[] memory right, string memory err) internal pure virtual {
297
        vm.assertNotEq(left, right, err);
298
    }
299
300
    function assertNotEq(uint256[] memory left, uint256[] memory right) internal pure virtual {
301
        vm.assertNotEq(left, right);
302
    }
303
304
    function assertNotEq(uint256[] memory left, uint256[] memory right, string memory err) internal pure virtual {
305
        vm.assertNotEq(left, right, err);
306
    }
307
308
    function assertNotEq(int256[] memory left, int256[] memory right) internal pure virtual {
309
        vm.assertNotEq(left, right);
310
    }
311
312
    function assertNotEq(int256[] memory left, int256[] memory right, string memory err) internal pure virtual {
313
        vm.assertNotEq(left, right, err);
314
    }
315
316
    function assertNotEq(address[] memory left, address[] memory right) internal pure virtual {
317
        vm.assertNotEq(left, right);
318
    }
319
320
    function assertNotEq(address[] memory left, address[] memory right, string memory err) internal pure virtual {
321
        vm.assertNotEq(left, right, err);
322
    }
323
324
    function assertNotEq(bytes32[] memory left, bytes32[] memory right) internal pure virtual {
325
        vm.assertNotEq(left, right);
326
    }
327
328
    function assertNotEq(bytes32[] memory left, bytes32[] memory right, string memory err) internal pure virtual {
329
        vm.assertNotEq(left, right, err);
330
    }
331
332
    function assertNotEq(string[] memory left, string[] memory right) internal pure virtual {
333
        vm.assertNotEq(left, right);
334
    }
335
336
    function assertNotEq(string[] memory left, string[] memory right, string memory err) internal pure virtual {
337
        vm.assertNotEq(left, right, err);
338
    }
339
340
    function assertNotEq(bytes[] memory left, bytes[] memory right) internal pure virtual {
341
        vm.assertNotEq(left, right);
342
    }
343
344
    function assertNotEq(bytes[] memory left, bytes[] memory right, string memory err) internal pure virtual {
345
        vm.assertNotEq(left, right, err);
346
    }
347
348
    function assertLt(uint256 left, uint256 right) internal pure virtual {
349
        vm.assertLt(left, right);
350
    }
351
352
    function assertLt(uint256 left, uint256 right, string memory err) internal pure virtual {
353
        vm.assertLt(left, right, err);
354
    }
355
356
    function assertLtDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual {
357
        vm.assertLtDecimal(left, right, decimals);
358
    }
359
360
    function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual {
361
        vm.assertLtDecimal(left, right, decimals, err);
362
    }
363
364
    function assertLt(int256 left, int256 right) internal pure virtual {
365
        vm.assertLt(left, right);
366
    }
367
368
    function assertLt(int256 left, int256 right, string memory err) internal pure virtual {
369
        vm.assertLt(left, right, err);
370
    }
371
372
    function assertLtDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual {
373
        vm.assertLtDecimal(left, right, decimals);
374
    }
375
376
    function assertLtDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual {
377
        vm.assertLtDecimal(left, right, decimals, err);
378
    }
379
380
    function assertGt(uint256 left, uint256 right) internal pure virtual {
381
        vm.assertGt(left, right);
382
    }
383
384
    function assertGt(uint256 left, uint256 right, string memory err) internal pure virtual {
385
        vm.assertGt(left, right, err);
386
    }
387
388
    function assertGtDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual {
389
        vm.assertGtDecimal(left, right, decimals);
390
    }
391
392
    function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual {
393
        vm.assertGtDecimal(left, right, decimals, err);
394
    }
395
396
    function assertGt(int256 left, int256 right) internal pure virtual {
397
        vm.assertGt(left, right);
398
    }
399
400
    function assertGt(int256 left, int256 right, string memory err) internal pure virtual {
401
        vm.assertGt(left, right, err);
402
    }
403
404
    function assertGtDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual {
405
        vm.assertGtDecimal(left, right, decimals);
406
    }
407
408
    function assertGtDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual {
409
        vm.assertGtDecimal(left, right, decimals, err);
410
    }
411
412
    function assertLe(uint256 left, uint256 right) internal pure virtual {
413
        vm.assertLe(left, right);
414
    }
415
416
    function assertLe(uint256 left, uint256 right, string memory err) internal pure virtual {
417
        vm.assertLe(left, right, err);
418
    }
419
420
    function assertLeDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual {
421
        vm.assertLeDecimal(left, right, decimals);
422
    }
423
424
    function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual {
425
        vm.assertLeDecimal(left, right, decimals, err);
426
    }
427
428
    function assertLe(int256 left, int256 right) internal pure virtual {
429
        vm.assertLe(left, right);
430
    }
431
432
    function assertLe(int256 left, int256 right, string memory err) internal pure virtual {
433
        vm.assertLe(left, right, err);
434
    }
435
436
    function assertLeDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual {
437
        vm.assertLeDecimal(left, right, decimals);
438
    }
439
440
    function assertLeDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual {
441
        vm.assertLeDecimal(left, right, decimals, err);
442
    }
443
444
    function assertGe(uint256 left, uint256 right) internal pure virtual {
445
        vm.assertGe(left, right);
446
    }
447
448
    function assertGe(uint256 left, uint256 right, string memory err) internal pure virtual {
449
        vm.assertGe(left, right, err);
450
    }
451
452
    function assertGeDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual {
453
        vm.assertGeDecimal(left, right, decimals);
454
    }
455
456
    function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual {
457
        vm.assertGeDecimal(left, right, decimals, err);
458
    }
459
460
    function assertGe(int256 left, int256 right) internal pure virtual {
461
        vm.assertGe(left, right);
462
    }
463
464
    function assertGe(int256 left, int256 right, string memory err) internal pure virtual {
465
        vm.assertGe(left, right, err);
466
    }
467
468
    function assertGeDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual {
469
        vm.assertGeDecimal(left, right, decimals);
470
    }
471
472
    function assertGeDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual {
473
        vm.assertGeDecimal(left, right, decimals, err);
474
    }
475
476
    function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta) internal pure virtual {
477
        vm.assertApproxEqAbs(left, right, maxDelta);
478
    }
479
480
    function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string memory err)
481
        internal
482
        pure
483
        virtual
484
    {
485
        vm.assertApproxEqAbs(left, right, maxDelta, err);
486
    }
487
488
    function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals)
489
        internal
490
        pure
491
        virtual
492
    {
493
        vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals);
494
    }
495
496
    function assertApproxEqAbsDecimal(
497
        uint256 left,
498
        uint256 right,
499
        uint256 maxDelta,
500
        uint256 decimals,
501
        string memory err
502
    ) internal pure virtual {
503
        vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals, err);
504
    }
505
506
    function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta) internal pure virtual {
507
        vm.assertApproxEqAbs(left, right, maxDelta);
508
    }
509
510
    function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string memory err) internal pure virtual {
511
        vm.assertApproxEqAbs(left, right, maxDelta, err);
512
    }
513
514
    function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals)
515
        internal
516
        pure
517
        virtual
518
    {
519
        vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals);
520
    }
521
522
    function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals, string memory err)
523
        internal
524
        pure
525
        virtual
526
    {
527
        vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals, err);
528
    }
529
530
    function assertApproxEqRel(
531
        uint256 left,
532
        uint256 right,
533
        uint256 maxPercentDelta // An 18 decimal fixed point number, where 1e18 == 100%
534
    ) internal pure virtual {
535
        vm.assertApproxEqRel(left, right, maxPercentDelta);
536
    }
537
538
    function assertApproxEqRel(
539
        uint256 left,
540
        uint256 right,
541
        uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100%
542
        string memory err
543
    ) internal pure virtual {
544
        vm.assertApproxEqRel(left, right, maxPercentDelta, err);
545
    }
546
547
    function assertApproxEqRelDecimal(
548
        uint256 left,
549
        uint256 right,
550
        uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100%
551
        uint256 decimals
552
    ) internal pure virtual {
553
        vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals);
554
    }
555
556
    function assertApproxEqRelDecimal(
557
        uint256 left,
558
        uint256 right,
559
        uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100%
560
        uint256 decimals,
561
        string memory err
562
    ) internal pure virtual {
563
        vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals, err);
564
    }
565
566
    function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta) internal pure virtual {
567
        vm.assertApproxEqRel(left, right, maxPercentDelta);
568
    }
569
570
    function assertApproxEqRel(
571
        int256 left,
572
        int256 right,
573
        uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100%
574
        string memory err
575
    ) internal pure virtual {
576
        vm.assertApproxEqRel(left, right, maxPercentDelta, err);
577
    }
578
579
    function assertApproxEqRelDecimal(
580
        int256 left,
581
        int256 right,
582
        uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100%
583
        uint256 decimals
584
    ) internal pure virtual {
585
        vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals);
586
    }
587
588
    function assertApproxEqRelDecimal(
589
        int256 left,
590
        int256 right,
591
        uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100%
592
        uint256 decimals,
593
        string memory err
594
    ) internal pure virtual {
595
        vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals, err);
596
    }
597
598
    // Inherited from DSTest, not used but kept for backwards-compatibility
599
    function checkEq0(bytes memory left, bytes memory right) internal pure returns (bool) {
600
        return keccak256(left) == keccak256(right);
601
    }
602
603
    function assertEq0(bytes memory left, bytes memory right) internal pure virtual {
604
        assertEq(left, right);
605
    }
606
607
    function assertEq0(bytes memory left, bytes memory right, string memory err) internal pure virtual {
608
        assertEq(left, right, err);
609
    }
610
611
    function assertNotEq0(bytes memory left, bytes memory right) internal pure virtual {
612
        assertNotEq(left, right);
613
    }
614
615
    function assertNotEq0(bytes memory left, bytes memory right, string memory err) internal pure virtual {
616
        assertNotEq(left, right, err);
617
    }
618
619
    function assertEqCall(address target, bytes memory callDataA, bytes memory callDataB) internal virtual {
620
        assertEqCall(target, callDataA, target, callDataB, true);
621
    }
622
623
    function assertEqCall(address targetA, bytes memory callDataA, address targetB, bytes memory callDataB)
624
        internal
625
        virtual
626
    {
627
        assertEqCall(targetA, callDataA, targetB, callDataB, true);
628
    }
629
630
    function assertEqCall(address target, bytes memory callDataA, bytes memory callDataB, bool strictRevertData)
631
        internal
632
        virtual
633
    {
634
        assertEqCall(target, callDataA, target, callDataB, strictRevertData);
635
    }
636
637
    function assertEqCall(
638
        address targetA,
639
        bytes memory callDataA,
640
        address targetB,
641
        bytes memory callDataB,
642
        bool strictRevertData
643
    ) internal virtual {
644
        (bool successA, bytes memory returnDataA) = address(targetA).call(callDataA);
645
        (bool successB, bytes memory returnDataB) = address(targetB).call(callDataB);
646
647
        if (successA && successB) {
648
            assertEq(returnDataA, returnDataB, "Call return data does not match");
649
        }
650
651
        if (!successA && !successB && strictRevertData) {
652
            assertEq(returnDataA, returnDataB, "Call revert data does not match");
653
        }
654
655
        if (!successA && successB) {
656
            emit log("Error: Calls were not equal");
657
            emit log_named_bytes("  Left call revert data", returnDataA);
658
            emit log_named_bytes(" Right call return data", returnDataB);
659
            revert("assertion failed");
660
        }
661
662
        if (successA && !successB) {
663
            emit log("Error: Calls were not equal");
664
            emit log_named_bytes("  Left call return data", returnDataA);
665
            emit log_named_bytes(" Right call revert data", returnDataB);
666
            revert("assertion failed");
667
        }
668
    }
669
}