blob: 42b3147a5c9f945f9da817fbeae325a721b9b181 [file] [log] [blame]
ncihnegnc5458f22019-01-28 05:08:18 -08001#include <doctest/doctest.h>
onqtam4a655632016-05-26 14:20:52 +03002
onqtam7cc0e962017-04-17 23:30:36 +03003#include "header.h"
4
onqtamabf39d22017-10-28 21:30:45 +03005DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
onqtam12d55982017-04-16 22:35:27 +03006#include <stdexcept>
onqtamabf39d22017-10-28 21:30:45 +03007DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
onqtam12d55982017-04-16 22:35:27 +03008
onqtam4a655632016-05-26 14:20:52 +03009TEST_CASE("normal macros") {
10 int a = 5;
11 int b = 5;
12
onqtam7cc0e962017-04-17 23:30:36 +030013 CHECK(throw_if(true, std::runtime_error("whops!")) == 42);
onqtam4a655632016-05-26 14:20:52 +030014
15 CHECK_FALSE(!(a == b));
16
17 REQUIRE(a == b);
onqtamcc6a6d62016-09-19 17:30:15 +030018
19 CHECK_EQ(a, b);
20
onqtam7cc0e962017-04-17 23:30:36 +030021 CHECK(doctest::Approx(0.1000001) == 0.1000002);
22 CHECK(doctest::Approx(0.502) == 0.501);
onqtamaf07cbb2017-04-19 19:40:43 +030023}
onqtam4a655632016-05-26 14:20:52 +030024
onqtamaf07cbb2017-04-19 19:40:43 +030025TEST_CASE("expressions should be evaluated only once") {
26 int a = 5;
27 REQUIRE(++a == 6);
28 REQUIRE_EQ(++a, 7);
Elias Kosunen3de57e32016-12-20 18:57:03 +020029}
30
onqtam4a655632016-05-26 14:20:52 +030031TEST_CASE("exceptions-related macros") {
onqtamaf07cbb2017-04-19 19:40:43 +030032 CHECK_THROWS(throw_if(true, 0));
33 CHECK_THROWS(throw_if(false, 0)); // fails
onqtam7cc0e962017-04-17 23:30:36 +030034 CHECK_THROWS_AS(throw_if(true, 0), int);
onqtamaf07cbb2017-04-19 19:40:43 +030035 CHECK_THROWS_AS(throw_if(true, 0), char); // fails
36 CHECK_THROWS_AS(throw_if(false, 0), int); // fails
onqtam4a655632016-05-26 14:20:52 +030037
onqtam0e6236a2018-11-30 16:49:58 +020038 CHECK_THROWS_WITH(throw_if(true, "whops!"), "whops! no match!"); // fails
39
onqtamaf07cbb2017-04-19 19:40:43 +030040 CHECK_NOTHROW(throw_if(true, 0)); // fails
41 CHECK_NOTHROW(throw_if(false, 0));
Elias Kosunen3de57e32016-12-20 18:57:03 +020042}
43
44TEST_CASE("exceptions-related macros for std::exception") {
onqtam7cc0e962017-04-17 23:30:36 +030045 CHECK_THROWS(throw_if(false, 0));
onqtamfd9560c2017-07-14 15:19:21 +030046 CHECK_THROWS_AS(throw_if(false, std::runtime_error("whops!")), std::exception);
onqtam8cf90412018-11-30 17:05:01 +020047 CHECK_THROWS_AS(throw_if(true, std::runtime_error("whops!")), const std::exception&);
onqtam7cc0e962017-04-17 23:30:36 +030048 CHECK_THROWS_AS(throw_if(true, std::runtime_error("whops!")), int);
Elias Kosunen3de57e32016-12-20 18:57:03 +020049
onqtam0e6236a2018-11-30 16:49:58 +020050 CHECK_THROWS_WITH(throw_if(false, ""), "whops!");
51
onqtam7cc0e962017-04-17 23:30:36 +030052 REQUIRE_NOTHROW(throw_if(true, std::runtime_error("whops!")));
onqtam4a655632016-05-26 14:20:52 +030053}
onqtamaf07cbb2017-04-19 19:40:43 +030054
55// =================================================================================================
56// == TESTING (ALMOST) ALL ASSERTS THAT THEY ACT ACCORDINGLY - not interesting examples...
57// =================================================================================================
58
59TEST_CASE("WARN level of asserts don't fail the test case") {
60 WARN(0);
61 WARN_FALSE(1);
62 WARN_THROWS(throw_if(false, 0));
onqtamacbcd122019-03-02 21:24:18 +020063 WARN_THROWS_WITH(throw_if(true, ""), "whops!");
64 WARN_THROWS_WITH(throw_if(false, ""), "whops!");
onqtamaf07cbb2017-04-19 19:40:43 +030065 WARN_THROWS_AS(throw_if(false, 0), bool);
66 WARN_THROWS_AS(throw_if(true, 0), bool);
67 WARN_NOTHROW(throw_if(true, 0));
onqtamc4948432018-12-01 18:47:12 +020068
onqtamaf07cbb2017-04-19 19:40:43 +030069 WARN_EQ(1, 0);
70 WARN_UNARY(0);
71 WARN_UNARY_FALSE(1);
onqtamaf07cbb2017-04-19 19:40:43 +030072}
73
74TEST_CASE("CHECK level of asserts fail the test case but don't abort it") {
75 CHECK(0);
76 CHECK_FALSE(1);
77 CHECK_THROWS(throw_if(false, 0));
78 CHECK_THROWS_AS(throw_if(false, 0), bool);
79 CHECK_THROWS_AS(throw_if(true, 0), bool);
onqtam0e6236a2018-11-30 16:49:58 +020080 CHECK_THROWS_WITH(throw_if(true, 0), "unrecognized");
onqtamaf07cbb2017-04-19 19:40:43 +030081 CHECK_NOTHROW(throw_if(true, 0));
onqtamc4948432018-12-01 18:47:12 +020082
onqtamaf07cbb2017-04-19 19:40:43 +030083 CHECK_EQ(1, 0);
84 CHECK_UNARY(0);
85 CHECK_UNARY_FALSE(1);
onqtamaf07cbb2017-04-19 19:40:43 +030086
87 MESSAGE("reached!");
88}
89
90TEST_CASE("REQUIRE level of asserts fail and abort the test case - 1") {
91 REQUIRE(0);
92 MESSAGE("should not be reached!");
93}
94TEST_CASE("REQUIRE level of asserts fail and abort the test case - 2") {
95 REQUIRE_FALSE(1);
96 MESSAGE("should not be reached!");
97}
98TEST_CASE("REQUIRE level of asserts fail and abort the test case - 3") {
99 REQUIRE_THROWS(throw_if(false, 0));
100 MESSAGE("should not be reached!");
101}
102TEST_CASE("REQUIRE level of asserts fail and abort the test case - 4") {
103 REQUIRE_THROWS_AS(throw_if(false, 0), bool);
104 MESSAGE("should not be reached!");
105}
106TEST_CASE("REQUIRE level of asserts fail and abort the test case - 5") {
107 REQUIRE_THROWS_AS(throw_if(true, 0), bool);
108 MESSAGE("should not be reached!");
109}
onqtamacbcd122019-03-02 21:24:18 +0200110TEST_CASE("REQUIRE level of asserts fail and abort the test case - 4") {
111 REQUIRE_THROWS_WITH(throw_if(false, ""), "whops!");
112 MESSAGE("should not be reached!");
113}
114TEST_CASE("REQUIRE level of asserts fail and abort the test case - 5") {
115 REQUIRE_THROWS_WITH(throw_if(true, ""), "whops!");
116 MESSAGE("should not be reached!");
117}
onqtamaf07cbb2017-04-19 19:40:43 +0300118TEST_CASE("REQUIRE level of asserts fail and abort the test case - 6") {
119 REQUIRE_NOTHROW(throw_if(true, 0));
120 MESSAGE("should not be reached!");
121}
122TEST_CASE("REQUIRE level of asserts fail and abort the test case - 7") {
123 REQUIRE_EQ(1, 0);
124 MESSAGE("should not be reached!");
125}
126TEST_CASE("REQUIRE level of asserts fail and abort the test case - 8") {
127 REQUIRE_UNARY(0);
128 MESSAGE("should not be reached!");
129}
130TEST_CASE("REQUIRE level of asserts fail and abort the test case - 9") {
131 REQUIRE_UNARY_FALSE(1);
132 MESSAGE("should not be reached!");
133}
onqtamaf07cbb2017-04-19 19:40:43 +0300134
135TEST_CASE("all binary assertions") {
136 WARN_EQ(1, 1);
137 CHECK_EQ(1, 1);
138 REQUIRE_EQ(1, 1);
139 WARN_NE(1, 0);
140 CHECK_NE(1, 0);
141 REQUIRE_NE(1, 0);
142 WARN_GT(1, 0);
143 CHECK_GT(1, 0);
144 REQUIRE_GT(1, 0);
145 WARN_LT(0, 1);
146 CHECK_LT(0, 1);
147 REQUIRE_LT(0, 1);
148 WARN_GE(1, 1);
149 CHECK_GE(1, 1);
150 REQUIRE_GE(1, 1);
151 WARN_LE(1, 1);
152 CHECK_LE(1, 1);
153 REQUIRE_LE(1, 1);
154 WARN_UNARY(1);
155 CHECK_UNARY(1);
156 REQUIRE_UNARY(1);
157 WARN_UNARY_FALSE(0);
158 CHECK_UNARY_FALSE(0);
159 REQUIRE_UNARY_FALSE(0);
onqtamaf07cbb2017-04-19 19:40:43 +0300160}
161
162static void someAssertsInFunction() {
163 int a = 5;
164 int b = 5;
165 CHECK(a == b);
166 CHECK_FALSE(a != b);
167 CHECK_THROWS(throw_if(true, 0));
168 CHECK_THROWS_AS(throw_if(true, 0), int);
onqtam0e6236a2018-11-30 16:49:58 +0200169 CHECK_THROWS_WITH(throw_if(true, false), "unknown exception");
onqtamaf07cbb2017-04-19 19:40:43 +0300170 CHECK_NOTHROW(throw_if(false, 0));
171
172 CHECK_EQ(a, b);
173 CHECK_UNARY(a == b);
174 CHECK_UNARY_FALSE(a != b);
onqtamaf07cbb2017-04-19 19:40:43 +0300175}
176
177TEST_CASE("some asserts used in a function called by a test case") {
178 someAssertsInFunction();
179}