]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: cast to intmax_t instead of printing to a temp buffer
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 29 Jun 2025 20:57:08 +0000 (22:57 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 1 Jul 2025 15:51:49 +0000 (17:51 +0200)
We can do this for int types, i.e. the variants where we expect a
success/error code. The macros which do generating comparison operations
also support floats so we shouldn't use intmax_t there.

The code is shorter and calling printf once is certainly more efficient.

src/shared/tests.h

index 8ae09fc4ebbaa6c4ebe6c16444081c03d1a5348a..7641b446b0adb09eafddf7cbc25cbdd08bf9c77f 100644 (file)
@@ -203,11 +203,9 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
                 typeof(expr) _result = (expr);                                                                          \
                 if (_result < 0)                                                                                        \
                         log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(_result));     \
-                if (_result != 0) {                                                                                     \
-                        char _sexpr[DECIMAL_STR_MAX(typeof(expr))];                                                     \
-                        xsprintf(_sexpr, DECIMAL_STR_FMT(_result), _result);                                            \
-                        log_test_failed("Expected \"%s\" to be zero, but it is %s.", #expr, _sexpr);                    \
-                }                                                                                                       \
+                if (_result != 0)                                                                                       \
+                        log_test_failed("Expected \"%s\" to be zero, but it is %"PRIiMAX".",                            \
+                                        #expr, (intmax_t) _result);                                                     \
          })
 #endif
 
@@ -220,13 +218,9 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
                 typeof(expr2) _expr2 = (expr2);                                                                         \
                 if (_expr1 < 0)                                                                                         \
                         log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr1, STRERROR(_expr1));     \
-                if (_expr1 != _expr2) {                                                                                 \
-                        char _sexpr1[DECIMAL_STR_MAX(typeof(expr1))];                                                   \
-                        char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))];                                                   \
-                        xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1);                                             \
-                        xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2);                                             \
-                        log_test_failed("Expected \"%s == %s\", got %s != %s", #expr1, #expr2, _sexpr1, _sexpr2);       \
-                }                                                                                                       \
+                if (_expr1 != _expr2)                                                                                   \
+                        log_test_failed("Expected \"%s == %s\", got %"PRIiMAX" != %"PRIiMAX,                            \
+                                        #expr1, #expr2, (intmax_t) _expr1, (intmax_t) _expr2);                          \
         })
 #endif
 
@@ -249,11 +243,9 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
                 typeof(expr) _result = (expr);                                                                          \
                 if (_result < 0)                                                                                        \
                         log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(errno));       \
-                if (_result != 0) {                                                                                     \
-                        char _sexpr[DECIMAL_STR_MAX(typeof(expr))];                                                     \
-                        xsprintf(_sexpr, DECIMAL_STR_FMT(_result), _result);                                            \
-                        log_test_failed("Expected \"%s\" to be zero, but it is %s.", #expr, _sexpr);                    \
-                }                                                                                                       \
+                if (_result != 0)                                                                                       \
+                        log_test_failed("Expected \"%s\" to be zero, but it is %"PRIiMAX".",                            \
+                                        #expr, (intmax_t) _result);                                                     \
         })
 #endif
 
@@ -266,13 +258,9 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
                 typeof(expr2) _expr2 = (expr2);                                                                         \
                 if (_expr1 < 0)                                                                                         \
                         log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr1, STRERROR(errno));      \
-                if (_expr1 != _expr2) {                                                                                 \
-                        char _sexpr1[DECIMAL_STR_MAX(typeof(expr1))];                                                   \
-                        char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))];                                                   \
-                        xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1);                                             \
-                        xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2);                                             \
-                        log_test_failed("Expected \"%s == %s\", but %s != %s", #expr1, #expr2, _sexpr1, _sexpr2);       \
-                }                                                                                                       \
+                if (_expr1 != _expr2)                                                                                   \
+                        log_test_failed("Expected \"%s == %s\", but %"PRIiMAX" != %"PRIiMAX,                            \
+                                        #expr1, #expr2, (intmax_t) _expr1, (intmax_t) _expr2);                          \
         })
 #endif