]> git.seodisparate.com - EntityComponentMetaSystem/commitdiff
UnitTests: make counters atomic
authorStephen Seo <seo.disparate@gmail.com>
Mon, 15 Jul 2024 04:46:35 +0000 (13:46 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Mon, 15 Jul 2024 04:46:35 +0000 (13:46 +0900)
src/test/Main.cpp
src/test/test_helpers.h

index fb5875ab889b843438e7835606e8e7c9051ec2bd..64ac33156ad986ac417920b1dc57bcf48961792a 100644 (file)
@@ -1,7 +1,7 @@
 #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();
@@ -37,8 +37,8 @@ int main() {
     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;
 }
index 94aa31e836c69d05a68247ae5912dc302fb0152f..84b5713d0239c2875bc7c4211dfc5d316f69698f 100644 (file)
@@ -3,60 +3,61 @@
 
 #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';                                 \
@@ -65,9 +66,9 @@ extern int checks_passed;
 
 #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';                              \
@@ -75,9 +76,9 @@ extern int checks_passed;
   } 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';                               \
@@ -86,9 +87,9 @@ extern int checks_passed;
   } 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';                              \
@@ -96,9 +97,9 @@ extern int checks_passed;
   } 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';                               \
@@ -106,9 +107,9 @@ extern int checks_passed;
   } 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';                               \
@@ -117,9 +118,9 @@ extern int checks_passed;
 
 #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';                                  \