summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsanine-a <sanine.not@pm.me>2022-12-14 14:41:43 -0600
committersanine-a <sanine.not@pm.me>2022-12-14 14:41:43 -0600
commitdb7c08e8ccaa7a7faf44a5a7def5db03c24f7934 (patch)
tree0d4b5406a3703bcb62692798a9171276bba30b71
parentebf24e6f40f1c6cd322ee16fd1ad004b845bbc5c (diff)
add macro counter
-rw-r--r--lily-test.h168
-rw-r--r--tests/macro-tests.c150
-rw-r--r--tests/tests.h1
3 files changed, 318 insertions, 1 deletions
diff --git a/lily-test.h b/lily-test.h
index d04b9c2..54f214a 100644
--- a/lily-test.h
+++ b/lily-test.h
@@ -45,7 +45,7 @@
#ifndef LILY_TEST_H
#define LILY_TEST_H
-#define LILY_VERSION_MAJOR 1
+#define LILY_VERSION_MAJOR 2
#define LILY_VERSION_MINOR 0
#define LILY_VERSION_PATCH 0
@@ -64,4 +64,170 @@
#define LILY_LOCATION ((__FILE__ ":" STR(__LINE__)) + SOURCE_PATH_SIZE)
#endif
+
+/* counter macros */
+#define LILY_HEX_(x) 0x##x
+#define LILY_HEX(x) LILY_HEX_(x)
+#define LILY_COUNTER_POS_0 0
+#define LILY_COUNTER_POS_1 0
+#define LILY_COUNTER_POS_2 0
+#define LILY_COUNTER__(a, b, c) 0x##a##b##c
+#define LILY_COUNTER_(a, b, c) LILY_COUNTER__(a, b, c)
+#define LILY_COUNTER LILY_COUNTER_(LILY_COUNTER_POS_2, LILY_COUNTER_POS_1, LILY_COUNTER_POS_0)
+
+/* ifdef LILY_TEST_H */
+#else
+
+/* counter incrementing */
+/* this counter can count up to 4096, but it should be pretty trivial to extend it more or less arbitrarily far */
+#ifdef LILY_COUNTER_INCREMENT
+# if LILY_HEX(LILY_COUNTER_POS_0) == 0
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 1
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 1
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 2
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 2
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 3
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 3
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 4
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 4
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 5
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 5
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 6
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 6
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 7
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 7
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 8
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 8
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 9
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 9
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 a
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 10
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 b
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 11
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 c
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 12
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 d
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 13
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 e
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 14
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 f
+# elif LILY_HEX(LILY_COUNTER_POS_0) == 15
+# undef LILY_COUNTER_POS_0
+# define LILY_COUNTER_POS_0 0
+# if LILY_HEX(LILY_COUNTER_POS_1) == 0
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 1
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 1
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 2
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 2
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 3
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 3
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 4
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 4
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 5
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 5
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 6
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 6
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 7
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 7
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 8
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 8
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 9
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 9
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 a
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 10
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 b
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 11
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 c
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 12
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 d
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 13
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 e
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 14
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 f
+# elif LILY_HEX(LILY_COUNTER_POS_1) == 15
+# undef LILY_COUNTER_POS_1
+# define LILY_COUNTER_POS_1 0
+# if LILY_HEX(LILY_COUNTER_POS_2) == 0
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 1
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 1
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 2
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 2
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 3
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 3
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 4
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 4
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 5
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 5
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 6
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 6
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 7
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 7
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 8
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 8
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 9
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 9
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 a
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 10
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 b
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 11
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 c
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 12
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 d
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 13
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 e
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 14
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 f
+# elif LILY_HEX(LILY_COUNTER_POS_2) == 15
+# undef LILY_COUNTER_POS_2
+# define LILY_COUNTER_POS_2 0
+# endif
+# endif
+# endif
+#endif
+
#endif
diff --git a/tests/macro-tests.c b/tests/macro-tests.c
index 71e9189..b5f0ac5 100644
--- a/tests/macro-tests.c
+++ b/tests/macro-tests.c
@@ -10,3 +10,153 @@ const char * test_LILY_LOCATION()
}
return 0;
}
+
+
+const char * test_LILY_COUNTER()
+{
+ if (LILY_COUNTER != 0) {
+ return "LILY_COUNTER is not 0!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 1) {
+ return "LILY_COUNTER is not 1!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 2) {
+ return "LILY_COUNTER is not 2!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 3) {
+ return "LILY_COUNTER is not 3!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 4) {
+ return "LILY_COUNTER is not 4!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 5) {
+ return "LILY_COUNTER is not 5!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 6) {
+ return "LILY_COUNTER is not 6!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 7) {
+ return "LILY_COUNTER is not 7!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 8) {
+ return "LILY_COUNTER is not 8!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 9) {
+ return "LILY_COUNTER is not 9!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 10) {
+ return "LILY_COUNTER is not 10!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 11) {
+ return "LILY_COUNTER is not 11!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 12) {
+ return "LILY_COUNTER is not 12!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 13) {
+ return "LILY_COUNTER is not 13!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 14) {
+ return "LILY_COUNTER is not 14!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 15) {
+ return "LILY_COUNTER is not 15!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 16) {
+ return "LILY_COUNTER is not 16!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 17) {
+ return "LILY_COUNTER is not 17!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 18) {
+ return "LILY_COUNTER is not 18!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 19) {
+ return "LILY_COUNTER is not 19!";
+ }
+
+ #define LILY_COUNTER_INCREMENT
+ #include "lily-test.h"
+
+ if (LILY_COUNTER != 20) {
+ return "LILY_COUNTER is not 20!";
+ }
+
+ return 0;
+}
diff --git a/tests/tests.h b/tests/tests.h
index f1ea9c1..86c9b88 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -9,6 +9,7 @@ int validate_message(const char* received, const char* expected,
// test cases
#define TESTS \
X(test_LILY_LOCATION) \
+ X(test_LILY_COUNTER) \
#define X(test) const char * test();
TESTS