8000 Use for loop to achieve REQUIRE with no parens · unittest-cpp/unittest-cpp@06308ee · GitHub
[go: up one dir, main page]

Skip to content

Commit 06308ee

Browse files
committed
Use for loop to achieve REQUIRE with no parens
I changed the definition of the REQUIRE macro to use for loops and some comma operator shenanigans to allow things like: REQUIRE { CHECK(...); CHECK_EQUAL(..., ...); } or REQUIRE CHECK(...); I updated the tests and they all passed on my machine. My only concern is that some compilers might complain about the unreachable code in the (throw UnitTest::AssertException(), true) expression.
1 parent e7b56d4 commit 06308ee

File tree

2 files changed

+45
-48
lines changed

2 files changed

+45
-48
lines changed

UnitTest++/RequireMacros.h

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,14 @@
1010
#endif
1111

1212
#ifndef UNITTEST_NO_EXCEPTIONS
13-
#define REQUIRE(test) \
14-
UNITTEST_MULTILINE_MACRO_BEGIN \
15-
int const failuresBeforeTest = UnitTest::CurrentTest::Results()->GetFailureCount(); \
16-
test; \
17-
int const failuresAfterTest = UnitTest::CurrentTest::Results()->GetFailureCount(); \
18-
if(failuresAfterTest > failuresBeforeTest) \
19-
{ \
20-
UT_THROW(UnitTest::AssertException()); \
21-
} \
22-
UNITTEST_MULTILINE_MACRO_END
23-
#endif
13+
#define REQUIRE \
14+
for (int failuresBeforeTest = UnitTest::CurrentTest::Results()->GetFailureCount(), newFailures = 0, run = 0; \
15+
(run == 0) || ((newFailures != 0) && (throw UnitTest::AssertException(), true)); \
16+
newFailures = UnitTest::CurrentTest::Results()->GetFailureCount() - failuresBeforeTest, run = 1)
2417
#endif
2518

2619
#ifdef UNITTEST_NO_EXCEPTIONS
27-
#define REQUIRE(test) test;
20+
#define REQUIRE
2821
#endif
22+
23+
#endif

tests/TestRequireMacros.cpp

Lines changed: 38 additions & 36 deletions
catch (const UnitTest::AssertException&)
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ TEST(RequireCheckSucceedsOnTrue)
2121

2222
try
2323
{
24-
REQUIRE(CHECK(true));
24+
REQUIRE CHECK(true);
2525
}
2626
catch(const UnitTest::AssertException&)
2727
{
@@ -46,7 +46,7 @@ TEST(RequiredCheckFailsOnFalse)
4646

4747
try
4848
{
49-
REQUIRE(CHECK(false));
49+
REQUIRE CHECK(false);
5050
}
5151
5252
{
@@ -71,10 +71,11 @@ TEST(RequireMacroSupportsMultipleChecks)
7171
ScopedCurrentTest scopedResults(testResults);
7272

7373
try{
74-
REQUIRE({
74+
REQUIRE
75+
{
7576
CHECK(true);
7677
CHECK_EQUAL(1,1);
77-
});
78+
}
7879
}
7980
catch (const UnitTest::AssertException&)
8081
{
@@ -99,10 +100,11 @@ TEST(RequireMacroSupportsMultipleChecksWithFailingChecks)
99100
ScopedCurrentTest scopedResults(testResults);
100101

101102
try{
102-
REQUIRE({
103+
REQUIRE
104+
{
103105
CHECK(true);
104106
CHECK_EQUAL(1,2);
105-
});
107+
}
106108
}
107109
catch (const UnitTest::AssertException&)
108110
{
@@ -125,7 +127,7 @@ TEST(FailureReportsCorrectTestName)
125127

126128
try
127129
{
128-
REQUIRE(CHECK(false));
130+
REQUIRE CHECK(false);
129131
}
130132
catch (const UnitTest::AssertException&)
131133
{
@@ -145,7 +147,7 @@ TEST(RequiredCheckFailureIncludesCheckContents)
145147

146148
try
147149
{
148-
REQUIRE(CHECK(yaddayadda));
150+
REQUIRE CHECK(yaddayadda);
149151
}
150152
catch (const UnitTest::AssertException&)
151153
{
@@ -166,7 +168,7 @@ TEST(RequiredCheckEqualSucceedsOnEqual)
166168

167169
try
168170
{
169-
REQUIRE(CHECK_EQUAL(1,1));
171+
REQUIRE CHECK_EQUAL(1,1);
170172
}
171173
catch (const UnitTest::AssertException&)
172174
{
@@ -191,7 +193,7 @@ TEST(RequiredCheckEqualFailsOnNotEqual)
191193

192194
try
193195
{
194-
REQUIRE(CHECK_EQUAL(1, 2));
196+
REQUIRE CHECK_EQUAL(1, 2);
195197
}
196198
catch (const UnitTest::AssertException&)
197199
{
@@ -216,7 +218,7 @@ TEST(RequiredCheckEqualFailureContainsCorrectDetails)
216218

217219
try
218220
{
219-
line = __LINE__; REQUIRE(CHECK_EQUAL(1, 123));
221+
line = __LINE__; REQUIRE CHECK_EQUAL(1, 123);
220222
}
221223
catch (const UnitTest::AssertException&)
222224
{
@@ -245,7 +247,7 @@ TEST(RequiredCheckEqualDoesNotHaveSideEffectsWhenPassing)
245247

246248
try
247249
{
248-
REQUIRE(CHECK_EQUAL(1, FunctionWithSideEffects()));
250+
REQUIRE CHECK_EQUAL(1, FunctionWithSideEffects());
249251
}
250252
catch (const UnitTest::AssertException&)
251253
{
@@ -263,7 +265,7 @@ TEST(RequiredCheckEqualDoesNotHaveSideEffectsWhenFailing)
263265

264266
try
265267
{
266-
REQUIRE(CHECK_EQUAL(2, FunctionWithSideEffects()));
268+
REQUIRE CHECK_EQUAL(2, FunctionWithSideEffects());
267269
}
268270
catch (const UnitTest::AssertException&)
269271
{
@@ -284,7 +286,7 @@ TEST(RequiredCheckCloseSucceedsOnEqual)
284286

285287
try
286288
{
287-
REQUIRE(CHECK_CLOSE(1.0f, 1.001f, 0.01f));
289+
REQUIRE CHECK_CLOSE(1.0f, 1.001f, 0.01f);
288290
}
289291
catch (const UnitTest::AssertException&)
290292
{
@@ -309,7 +311,7 @@ TEST(RequiredCheckCloseFailsOnNotEqual)
309311

310312
try
311313
{
312-
REQUIRE(CHECK_CLOSE (1.0f, 1.1f, 0.01f));
314+
REQUIRE CHECK_CLOSE (1.0f, 1.1f, 0.01f);
313315
}
314316
catch (const UnitTest::AssertException&)
315317
{
@@ -334,7 +336,7 @@ TEST(RequiredCheckCloseFailureContainsCorrectDetails)
334336

335337
try
336338
{
337-
line = __LINE__; REQUIRE(CHECK_CLOSE(1.0f, 1.1f, 0.01f));
339+
line = __LINE__; REQUIRE CHECK_CLOSE(1.0f, 1.1f, 0.01f);
338340
CHECK(false);
339341
}
340342
catch (const UnitTest::AssertException&)
@@ -357,7 +359,7 @@ TEST(RequiredCheckCloseDoesNotHaveSideEffectsWhenPassing)
357359

358360
try
359361
{
360-
REQUIRE(CHECK_CLOSE (1, FunctionWithSideEffects(), 0.1f));
362+
REQUIRE CHECK_CLOSE (1, FunctionWithSideEffects(), 0.1f);
361363
}
362364
catch (const UnitTest::AssertException&)
363365
{
@@ -375,7 +377,7 @@ TEST(RequiredCheckCloseDoesNotHaveSideEffectsWhenFailing)
375377

376378
try
377379
{
378-
REQUIRE(CHECK_CLOSE(2, FunctionWithSideEffects(), 0.1f));
380+
REQUIRE CHECK_CLOSE(2, FunctionWithSideEffects(), 0.1f);
379381
}
380382
catch (const UnitTest::AssertException&)
381383
{
@@ -396,7 +398,7 @@ TEST(RequiredCheckArrayCloseSucceedsOnEqual)
396398

397399
try
398400
{
399-
REQUIRE(CHECK_ARRAY_CLOSE (data, data, 4, 0.01f));
401+
REQUIRE CHECK_ARRAY_CLOSE (data, data, 4, 0.01f);
400402
}
401403
catch (const UnitTest::AssertException&)
402404
{
@@ -424,7 +426,7 @@ TEST(RequiredCheckArrayCloseFailsOnNotEqual)
424426

425427
try
426428
{
427-
REQUIRE(CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f));
429+
REQUIRE CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f);
428430
}
429431
catch (const UnitTest::AssertException&)
430432
{
@@ -450,7 +452,7 @@ TEST(RequiredCheckArrayCloseFailureIncludesCheckExpectedAndActual)
450452

451453
try
452454
{
453-
REQUIRE(CHECK_ARRAY_CLOSE(data1, data2, 4, 0.01f));
455+
REQUIRE CHECK_ARRAY_CLOSE(data1, data2, 4, 0.01f);
454456
}
455457
catch (const UnitTest::AssertException&)
456458
{
@@ -475,7 +477,7 @@ TEST(RequiredCheckArrayCloseFailureContainsCorrectDetails)
475477

476478
try
477479
{
478-
line = __LINE__; REQUIRE(CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f));
480+
line = __LINE__; REQUIRE CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f);
479481
}
480482
catch (const UnitTest::AssertException&)
481483
{
@@ -500,7 +502,7 @@ TEST(RequiredCheckArrayCloseFailureIncludesTolerance)
500502

501503
try
502504
{
503-
REQUIRE(CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f));
505+
REQUIRE CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f);
504506
}
505507
catch (const UnitTest::AssertException&)
506508
{
@@ -523,7 +525,7 @@ TEST(RequiredCheckArrayEqualSuceedsOnEqual)
523525

524526
try
525527
{
526-
REQUIRE(CHECK_ARRAY_EQUAL (data, data, 4));
528+
REQUIRE CHECK_ARRAY_EQUAL (data, data, 4);
527529
}
528530
catch (const UnitTest::AssertException&)
529531
{
@@ -551,7 +553,7 @@ TEST(RequiredCheckArrayEqualFailsOnNotEqual)
551553

552554
try
553555
{
554-
REQUIRE(CHECK_ARRAY_EQUAL (data1, data2, 4));
556+
REQUIRE CHECK_ARRAY_EQUAL (data1, data2, 4);
555557
}
556558
catch (const UnitTest::AssertException&)
557559
{
@@ -577,7 +579,7 @@ TEST(RequiredCheckArrayEqualFailureIncludesCheckExpectedAndActual)
577579

578580
try
579581
{
580-
REQUIRE(CHECK_ARRAY_EQUAL (data1, data2, 4));
582+
REQUIRE CHECK_ARRAY_EQUAL (data1, data2, 4);
581583
}
582584
catch (const UnitTest::AssertException&)
583585
{
@@ -601,7 +603,7 @@ TEST(RequiredCheckArrayEqualFailureContainsCorrectInfo)
601603

602604
try
603605
{
604-
line = __LINE__; REQUIRE(CHECK_ARRAY_EQUAL (data1, data2, 4));
606+
line = __LINE__; REQUIRE CHECK_ARRAY_EQUAL (data1, data2, 4);
605607
}
606608
catch (const UnitTest::AssertException&)
607609
{
@@ -631,7 +633,7 @@ TEST(RequiredCheckArrayCloseDoesNotHaveSideEffectsWhenPassing)
631633

632634
try
633635
{
634-
REQUIRE(CHECK_ARRAY_CLOSE (data, FunctionWithSideEffects2(), 4, 0.01f));
636+
REQUIRE CHECK_ARRAY_CLOSE (data, FunctionWithSideEffects2(), 4, 0.01f);
635637
}
636638
catch (const UnitTest::AssertException&)
637639
{
@@ -651,7 +653,7 @@ TEST(RequiredCheckArrayCloseDoesNotHaveSideEffectsWhenFailing)
651653

652654
try
653655
{
654-
REQUIRE(CHECK_ARRAY_CLOSE (data, FunctionWithSideEffects2(), 4, 0.01f));
656+
REQUIRE CHECK_ARRAY_CLOSE (data, FunctionWithSideEffects2(), 4, 0.01f);
655657
}
656658
catch (const UnitTest::AssertException&)
657659
{
@@ -674,7 +676,7 @@ TEST(RequiredCheckArray2DCloseSucceedsOnEqual)
674676

675677
try
676678
{
677-
REQUIRE(CHECK_ARRAY2D_CLOSE(data, data, 2, 2, 0.01f));
679+
REQUIRE CHECK_ARRAY2D_CLOSE(data, data, 2, 2, 0.01f);
678680
}
679681
catch (const UnitTest::AssertException&)
680682
{
@@ -702,7 +704,7 @@ TEST(RequiredCheckArray2DCloseFailsOnNotEqual)
702704

703705
try
704706
{
705-
REQUIRE(CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f));
707+
REQUIRE CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f);
706708
}
707709
catch (const UnitTest::AssertException&)
708710
{
@@ -728,7 +730,7 @@ TEST(RequiredCheckArray2DCloseFailureIncludesCheckExpectedAndActual)
728730

729731
try
730732
{
731-
REQUIRE(CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f));
733+
REQUIRE CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f);
732734
}
733735
catch (const UnitTest::AssertException&)
734736
{
@@ -753,7 +755,7 @@ TEST(RequiredCheckArray2DCloseFailureContainsCorrectDetails)
753755

754756
try
755757
{
756-
line = __LINE__; REQUIRE(CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f));
758+
line = __LINE__; REQUIRE CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f);
757759
}
758760
catch (const UnitTest::AssertException&)
759761
{
@@ -778,7 +780,7 @@ TEST(RequiredCheckArray2DCloseFailureIncludesTolerance)
778780

779781
try
780782
{
781-
REQUIRE(CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f));
783+
REQUIRE CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f);
782784
}
783785
catch (const UnitTest::AssertException&)
784786
{
@@ -808,7 +810,7 @@ TEST(RequiredCheckArray2DCloseDoesNotHaveSideEffectsWhenPassing)
808810

809811
try
810812
{
811-
REQUIRE(CHECK_ARRAY2D_CLOSE (data, FunctionWithSideEffects3(), 2, 2, 0.01f));
813+
REQUIRE CHECK_ARRAY2D_CLOSE (data, FunctionWithSideEffects3(), 2, 2, 0.01f);
812814
}
813815
catch (const UnitTest::AssertException&)
814816
{
@@ -828,7 +830,7 @@ TEST(RequiredCheckArray2DCloseDoesNotHaveSideEffectsWhenFailing)
828830

829831
try
830832
{
831-
REQUIRE(CHECK_ARRAY2D_CLOSE (data, FunctionWithSideEffects3(), 2, 2, 0.01f));
833+
REQUIRE CHECK_ARRAY2D_CLOSE (data, FunctionWithSideEffects3(), 2, 2, 0.01f);
832834
}
833835
catch (const UnitTest::AssertException&)
834836
{

0 commit comments

Comments
 (0)
0