]> git.ozlabs.org Git - ccan/blobdiff - ccan/cppmagic/test/run.c
cppmagic: Tweak testcase to work on older clang versions
[ccan] / ccan / cppmagic / test / run.c
index 0f8917d6a4afa5d8e620504a197fd7ae14cec7b8..7c0aa7f6af0092e0f07b54dd9587058e3fae33a9 100644 (file)
@@ -15,9 +15,19 @@ static inline void check1(const char *orig, const char *expand,
 #define CHECK1(orig, match) \
        check1(#orig, CPPMAGIC_STRINGIFY(orig), match)
 
+#define TESTRECURSE()  R CPPMAGIC_DEFER1(_TESTRECURSE) ()()
+#define _TESTRECURSE() TESTRECURSE
+
+#define TESTMAP1(x)    <<x>>
+
+#define TESTMAP2(x)            [[ x
+#define TESTMAP3(x)            x ]]
+
+#define TEST2MAP(x, y) x ** y
+
 int main(void)
 {
-       plan_tests(24);
+       plan_tests(42);
 
        CHECK1(CPPMAGIC_NOTHING(), "");
        CHECK1(CPPMAGIC_GLUE2(a, b), "ab");
@@ -51,6 +61,32 @@ int main(void)
        CHECK1(CPPMAGIC_IFELSE(1)(abc)(def), "abc");
        CHECK1(CPPMAGIC_IFELSE(not zero)(abc)(def), "abc");
 
+       CHECK1(TESTRECURSE(), "R R _TESTRECURSE ()()");
+       CHECK1(CPPMAGIC_EVAL1(TESTRECURSE()), "R R R _TESTRECURSE ()()");
+       CHECK1(CPPMAGIC_EVAL2(TESTRECURSE()), "R R R R R _TESTRECURSE ()()");
+
+       CHECK1(CPPMAGIC_MAP(TESTMAP1), "");
+       CHECK1(CPPMAGIC_MAP(TESTMAP1, a), "<<a>>");
+       CHECK1(CPPMAGIC_MAP(TESTMAP1, a, b), "<<a>> , <<b>>");
+       CHECK1(CPPMAGIC_MAP(TESTMAP1, a, b, c), "<<a>> , <<b>> , <<c>>");
+
+       CHECK1(CPPMAGIC_2MAP(TEST2MAP), "");
+       CHECK1(CPPMAGIC_2MAP(TEST2MAP, a, 1), "a ** 1");
+       CHECK1(CPPMAGIC_2MAP(TEST2MAP, a, 1, b, 2), "a ** 1 , b ** 2");
+       
+       CHECK1(CPPMAGIC_JOIN(;), "");
+       CHECK1(CPPMAGIC_JOIN(;, a), "a");
+       CHECK1(CPPMAGIC_JOIN(;, a, b), "a ; b");
+       CHECK1(CPPMAGIC_JOIN(;, a, b, c), "a ; b ; c");
+
+       /* Check chaining of MAPs */
+       CHECK1(CPPMAGIC_MAP(TESTMAP2, CPPMAGIC_MAP(TESTMAP3)), "");
+       CHECK1(CPPMAGIC_MAP(TESTMAP2, CPPMAGIC_MAP(TESTMAP3, a)), "[[ a ]]");
+       CHECK1(CPPMAGIC_MAP(TESTMAP2, CPPMAGIC_MAP(TESTMAP3, a, b)),
+              "[[ a ]] , [[ b ]]");
+       CHECK1(CPPMAGIC_MAP(TESTMAP2, CPPMAGIC_MAP(TESTMAP3, a, b, c)),
+              "[[ a ]] , [[ b ]] , [[ c ]]");
+                                                  
        /* This exits depending on whether all tests passed */
        return exit_status();
 }