blob: 10c44f18d99e6299ba53eda1ddb9d12e1132d65a [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
onqtam5856bb92019-09-22 16:33:47 +030039 CHECK_THROWS_WITH_AS(throw_if(true, "whops!"), "whops! no match!", bool); // fails
40 CHECK_THROWS_WITH_AS(throw_if(true, "whops!"), "whops!", int); // fails
onqtam0e6236a2018-11-30 16:49:58 +020041
onqtamaf07cbb2017-04-19 19:40:43 +030042 CHECK_NOTHROW(throw_if(true, 0)); // fails
43 CHECK_NOTHROW(throw_if(false, 0));
Elias Kosunen3de57e32016-12-20 18:57:03 +020044}
45
46TEST_CASE("exceptions-related macros for std::exception") {
onqtam7cc0e962017-04-17 23:30:36 +030047 CHECK_THROWS(throw_if(false, 0));
onqtamfd9560c2017-07-14 15:19:21 +030048 CHECK_THROWS_AS(throw_if(false, std::runtime_error("whops!")), std::exception);
onqtam8cf90412018-11-30 17:05:01 +020049 CHECK_THROWS_AS(throw_if(true, std::runtime_error("whops!")), const std::exception&);
onqtam7cc0e962017-04-17 23:30:36 +030050 CHECK_THROWS_AS(throw_if(true, std::runtime_error("whops!")), int);
Elias Kosunen3de57e32016-12-20 18:57:03 +020051
onqtam0e6236a2018-11-30 16:49:58 +020052 CHECK_THROWS_WITH(throw_if(false, ""), "whops!");
53
onqtam7cc0e962017-04-17 23:30:36 +030054 REQUIRE_NOTHROW(throw_if(true, std::runtime_error("whops!")));
onqtam4a655632016-05-26 14:20:52 +030055}
onqtamaf07cbb2017-04-19 19:40:43 +030056
57// =================================================================================================
58// == TESTING (ALMOST) ALL ASSERTS THAT THEY ACT ACCORDINGLY - not interesting examples...
59// =================================================================================================
60
61TEST_CASE("WARN level of asserts don't fail the test case") {
62 WARN(0);
63 WARN_FALSE(1);
64 WARN_THROWS(throw_if(false, 0));
onqtamacbcd122019-03-02 21:24:18 +020065 WARN_THROWS_WITH(throw_if(true, ""), "whops!");
66 WARN_THROWS_WITH(throw_if(false, ""), "whops!");
onqtamaf07cbb2017-04-19 19:40:43 +030067 WARN_THROWS_AS(throw_if(false, 0), bool);
68 WARN_THROWS_AS(throw_if(true, 0), bool);
onqtam5856bb92019-09-22 16:33:47 +030069 WARN_THROWS_WITH_AS(throw_if(false, ""), "whops!", int);
70 WARN_THROWS_WITH_AS(throw_if(true, ""), "whops!", int);
onqtamaf07cbb2017-04-19 19:40:43 +030071 WARN_NOTHROW(throw_if(true, 0));
onqtamc4948432018-12-01 18:47:12 +020072
onqtamaf07cbb2017-04-19 19:40:43 +030073 WARN_EQ(1, 0);
74 WARN_UNARY(0);
75 WARN_UNARY_FALSE(1);
onqtamaf07cbb2017-04-19 19:40:43 +030076}
77
78TEST_CASE("CHECK level of asserts fail the test case but don't abort it") {
79 CHECK(0);
80 CHECK_FALSE(1);
81 CHECK_THROWS(throw_if(false, 0));
82 CHECK_THROWS_AS(throw_if(false, 0), bool);
83 CHECK_THROWS_AS(throw_if(true, 0), bool);
onqtam0e6236a2018-11-30 16:49:58 +020084 CHECK_THROWS_WITH(throw_if(true, 0), "unrecognized");
onqtam5856bb92019-09-22 16:33:47 +030085 CHECK_THROWS_WITH_AS(throw_if(true, 0), "unrecognized", int);
onqtamaf07cbb2017-04-19 19:40:43 +030086 CHECK_NOTHROW(throw_if(true, 0));
onqtamc4948432018-12-01 18:47:12 +020087
onqtamaf07cbb2017-04-19 19:40:43 +030088 CHECK_EQ(1, 0);
89 CHECK_UNARY(0);
90 CHECK_UNARY_FALSE(1);
onqtamaf07cbb2017-04-19 19:40:43 +030091
92 MESSAGE("reached!");
93}
94
95TEST_CASE("REQUIRE level of asserts fail and abort the test case - 1") {
96 REQUIRE(0);
97 MESSAGE("should not be reached!");
98}
99TEST_CASE("REQUIRE level of asserts fail and abort the test case - 2") {
100 REQUIRE_FALSE(1);
101 MESSAGE("should not be reached!");
102}
103TEST_CASE("REQUIRE level of asserts fail and abort the test case - 3") {
104 REQUIRE_THROWS(throw_if(false, 0));
105 MESSAGE("should not be reached!");
106}
107TEST_CASE("REQUIRE level of asserts fail and abort the test case - 4") {
108 REQUIRE_THROWS_AS(throw_if(false, 0), bool);
109 MESSAGE("should not be reached!");
110}
111TEST_CASE("REQUIRE level of asserts fail and abort the test case - 5") {
112 REQUIRE_THROWS_AS(throw_if(true, 0), bool);
113 MESSAGE("should not be reached!");
114}
onqtam5856bb92019-09-22 16:33:47 +0300115TEST_CASE("REQUIRE level of asserts fail and abort the test case - 6") {
onqtamacbcd122019-03-02 21:24:18 +0200116 REQUIRE_THROWS_WITH(throw_if(false, ""), "whops!");
117 MESSAGE("should not be reached!");
118}
onqtam5856bb92019-09-22 16:33:47 +0300119TEST_CASE("REQUIRE level of asserts fail and abort the test case - 7") {
onqtamacbcd122019-03-02 21:24:18 +0200120 REQUIRE_THROWS_WITH(throw_if(true, ""), "whops!");
121 MESSAGE("should not be reached!");
122}
onqtamaf07cbb2017-04-19 19:40:43 +0300123TEST_CASE("REQUIRE level of asserts fail and abort the test case - 8") {
onqtam5856bb92019-09-22 16:33:47 +0300124 REQUIRE_THROWS_WITH_AS(throw_if(false, ""), "whops!", bool);
onqtamaf07cbb2017-04-19 19:40:43 +0300125 MESSAGE("should not be reached!");
126}
127TEST_CASE("REQUIRE level of asserts fail and abort the test case - 9") {
onqtam5856bb92019-09-22 16:33:47 +0300128 REQUIRE_THROWS_WITH_AS(throw_if(true, ""), "whops!", bool);
129 MESSAGE("should not be reached!");
130}
131TEST_CASE("REQUIRE level of asserts fail and abort the test case - 10") {
132 REQUIRE_NOTHROW(throw_if(true, 0));
133 MESSAGE("should not be reached!");
134}
135TEST_CASE("REQUIRE level of asserts fail and abort the test case - 11") {
136 REQUIRE_EQ(1, 0);
137 MESSAGE("should not be reached!");
138}
139TEST_CASE("REQUIRE level of asserts fail and abort the test case - 12") {
140 REQUIRE_UNARY(0);
141 MESSAGE("should not be reached!");
142}
143TEST_CASE("REQUIRE level of asserts fail and abort the test case - 13") {
onqtamaf07cbb2017-04-19 19:40:43 +0300144 REQUIRE_UNARY_FALSE(1);
145 MESSAGE("should not be reached!");
146}
onqtamaf07cbb2017-04-19 19:40:43 +0300147
148TEST_CASE("all binary assertions") {
149 WARN_EQ(1, 1);
150 CHECK_EQ(1, 1);
151 REQUIRE_EQ(1, 1);
152 WARN_NE(1, 0);
153 CHECK_NE(1, 0);
154 REQUIRE_NE(1, 0);
155 WARN_GT(1, 0);
156 CHECK_GT(1, 0);
157 REQUIRE_GT(1, 0);
158 WARN_LT(0, 1);
159 CHECK_LT(0, 1);
160 REQUIRE_LT(0, 1);
161 WARN_GE(1, 1);
162 CHECK_GE(1, 1);
163 REQUIRE_GE(1, 1);
164 WARN_LE(1, 1);
165 CHECK_LE(1, 1);
166 REQUIRE_LE(1, 1);
167 WARN_UNARY(1);
168 CHECK_UNARY(1);
169 REQUIRE_UNARY(1);
170 WARN_UNARY_FALSE(0);
171 CHECK_UNARY_FALSE(0);
172 REQUIRE_UNARY_FALSE(0);
onqtamaf07cbb2017-04-19 19:40:43 +0300173}
174
175static void someAssertsInFunction() {
176 int a = 5;
177 int b = 5;
178 CHECK(a == b);
179 CHECK_FALSE(a != b);
180 CHECK_THROWS(throw_if(true, 0));
181 CHECK_THROWS_AS(throw_if(true, 0), int);
onqtam0e6236a2018-11-30 16:49:58 +0200182 CHECK_THROWS_WITH(throw_if(true, false), "unknown exception");
onqtam5856bb92019-09-22 16:33:47 +0300183 CHECK_THROWS_WITH_AS(throw_if(true, false), "unknown exception", int);
onqtamaf07cbb2017-04-19 19:40:43 +0300184 CHECK_NOTHROW(throw_if(false, 0));
185
186 CHECK_EQ(a, b);
187 CHECK_UNARY(a == b);
188 CHECK_UNARY_FALSE(a != b);
onqtamaf07cbb2017-04-19 19:40:43 +0300189}
190
191TEST_CASE("some asserts used in a function called by a test case") {
192 someAssertsInFunction();
193}