From cf4feeb3c297f0ea1f72a2747dc65662dd18175f Mon Sep 17 00:00:00 2001
From: Mitya Selivanov <0x7fffff@guattari.ru>
Date: Sun, 7 Aug 2022 02:15:13 +0400
Subject: [msvc] test

---
 source/kit_test/test.h | 53 ++++++++++++++++++++++++++++----------------------
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/source/kit_test/test.h b/source/kit_test/test.h
index 52a7b99..37abb9f 100644
--- a/source/kit_test/test.h
+++ b/source/kit_test/test.h
@@ -43,34 +43,41 @@ struct kit_tests_list {
 
 extern struct kit_tests_list kit_tests_list;
 
-#ifdef _MSC_VER
-#  ifdef __cplusplus
-#    define KIT_EXTERN_C_ extern "C"
-#  else
-#    define KIT_EXTERN_C_
-#  endif
+#define KIT_TEST_CONCAT4_(a, b, c, d) a##b##c##d
+#define KIT_TEST_CONCAT3_(a, b, c) KIT_TEST_CONCAT4_(a, b, _, c)
 
-#  pragma section(".CRT$XCU", read)
-#  define KIT_TEST_ON_START_2_(f, p)                         \
-    KIT_EXTERN_C_ static void f(void);                       \
-    __declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f; \
-    __pragma(comment(linker, "/include:" p #f "_"))          \
-        KIT_EXTERN_C_ static void                            \
-        f(void)
-#  ifdef _WIN64
-#    define KIT_TEST_ON_START_(f) KIT_TEST_ON_START_2_(f, "")
+#ifdef __cplusplus
+#  define KIT_TEST_ON_START_(f)                              \
+    static void f(void);                                     \
+    static int  KIT_TEST_CONCAT3_(_kit_test_init_, __LINE__, \
+                                  f) = (f(), 0);             \
+    static void f(void)
+#else
+#  ifdef _MSC_VER
+#    ifdef __cplusplus
+#      define KIT_EXTERN_C_ extern "C"
+#    else
+#      define KIT_EXTERN_C_
+#    endif
+
+#    pragma section(".CRT$XCU", read)
+#    define KIT_TEST_ON_START_2_(f, p)                               \
+      static void f(void);                                           \
+      __declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f;       \
+      __pragma(comment(linker, "/include:" p #f "_")) static void f( \
+          void)
+#    ifdef _WIN64
+#      define KIT_TEST_ON_START_(f) KIT_TEST_ON_START_2_(f, "")
+#    else
+#      define KIT_TEST_ON_START_(f) KIT_TEST_ON_START_2_(f, "_")
+#    endif
 #  else
-#    define KIT_TEST_ON_START_(f) KIT_TEST_ON_START_2_(f, "_")
+#    define KIT_TEST_ON_START_(f)                       \
+      static void f(void) __attribute__((constructor)); \
+      static void f(void)
 #  endif
-#else
-#  define KIT_TEST_ON_START_(f)                       \
-    static void f(void) __attribute__((constructor)); \
-    static void f(void)
 #endif
 
-#define KIT_TEST_CONCAT4_(a, b, c, d) a##b##c##d
-#define KIT_TEST_CONCAT3_(a, b, c) KIT_TEST_CONCAT4_(a, b, _, c)
-
 #define KIT_TEST(name)                                               \
   static void KIT_TEST_CONCAT3_(                                     \
       kit_test_run_, __LINE__, KIT_TEST_FILE)(int, kit_test_report); \
-- 
cgit v1.2.3