#include "test_helpers.h"
-int checks_checked = 0;
-int checks_passed = 0;
+std::atomic_int64_t checks_checked = std::atomic_int64_t(0);
+std::atomic_int64_t checks_passed = std::atomic_int64_t(0);
int main() {
TEST_EC_Bitset();
TEST_ECThreadPool_QueryCount();
TEST_ECThreadPool_easyStartAndWait();
- std::cout << "checks_checked: " << checks_checked << '\n'
- << "checks_passed: " << checks_passed << std::endl;
+ std::cout << "checks_checked: " << checks_checked.load() << '\n'
+ << "checks_passed: " << checks_passed.load() << std::endl;
- return checks_checked == checks_passed ? 0 : 1;
+ return checks_checked.load() == checks_passed.load() ? 0 : 1;
}
#include <cstring>
#include <iostream>
+#include <atomic>
-extern int checks_checked;
-extern int checks_passed;
+extern std::atomic_int64_t checks_checked;
+extern std::atomic_int64_t checks_passed;
// Macros for unit testing.
#define CHECK_TRUE(x) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if (!(x)) { \
std::cout << "CHECK_TRUE at line " << __LINE__ << " failed: " << #x \
<< '\n'; \
} else { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} \
} while (false);
#define ASSERT_TRUE(x) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if (!(x)) { \
std::cout << "CHECK_TRUE at line " << __LINE__ << " failed: " << #x \
<< '\n'; \
return; \
} else { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} \
} while (false);
#define CHECK_FALSE(x) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if (x) { \
std::cout << "CHECK_FALSE at line " << __LINE__ << " failed: " << #x \
<< '\n'; \
} else { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} \
} while (false);
#define ASSERT_FALSE(x) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if (x) { \
std::cout << "CHECK_FALSE at line " << __LINE__ << " failed: " << #x \
<< '\n'; \
return; \
} else { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} \
} while (false);
#define CHECK_FLOAT(var, value) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if ((var) > (value) - 0.0001F && (var) < (value) + 0.0001F) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "CHECK_FLOAT at line " << __LINE__ << " failed: " << #var \
<< " != " << #value << '\n'; \
#define CHECK_EQ(var, value) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if ((var) == (value)) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "CHECK_EQ at line " << __LINE__ << " failed: " << #var \
<< " != " << #value << '\n'; \
} while (false);
#define ASSERT_EQ(var, value) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if ((var) == (value)) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "ASSERT_EQ at line " << __LINE__ << " failed: " << #var \
<< " != " << #value << '\n'; \
} while (false);
#define CHECK_NE(var, value) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if ((var) != (value)) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "CHECK_NE at line " << __LINE__ << " failed: " << #var \
<< " == " << #value << '\n'; \
} while (false);
#define CHECK_GE(var, value) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if ((var) >= (value)) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "CHECK_GE at line " << __LINE__ << " failed: " << #var \
<< " < " << #value << '\n'; \
} while (false);
#define CHECK_LE(var, value) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if ((var) <= (value)) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "CHECK_LE at line " << __LINE__ << " failed: " << #var \
<< " > " << #value << '\n'; \
#define CHECK_STREQ(str_a, str_b) \
do { \
- ++checks_checked; \
+ checks_checked.fetch_add(1); \
if (std::strcmp((str_a), (str_b)) == 0) { \
- ++checks_passed; \
+ checks_passed.fetch_add(1); \
} else { \
std::cout << "CHECK_STREQ at line " << __LINE__ << "failed: " << #str_a \
<< " != " << #str_b << '\n'; \