Blame | Last modification | View Log | RSS feed
/*Tests of SPP's macro handling abilities.source: macro.tstversion: February 17, 1989*//*PART IWeird and wonderful tests of macro expansion.see page 93 of Draft C Standard of January, 1988.*/#define x 3#define f(a) f(x * (a))#undef x#define x 2#define g f#define z z[0]#define h g(~#define m(a) a(w)#define w 0,1#define t(a) amacro_tst(){/* subtest 1f(y+1); should expand to:f(2 * (y+1));*/f(y+1);/* subtest 2f(f(z)); should expand to:f(2 * (f(2 * (z[0]))));*/f(f(z));/* subtest 3t(t(g)(0) + t)(1); should expand to:f(2 * (0)) + t(1);*/t(t(g)(0) + t)(1);/* subtest 4g(x+(3,4)-w) | h 5) & m (f)^m(m);should result in:f(2 * (2+(3,4)-0,1)) | f(2 * (~ 5)) & f(2 * (0,1))^m(0,1);*/g(x+(3,4)-w) | h 5) & m (f)^m(m);}/*PART 2Tests of string concatenation and token pasting.*/#define str(s) # s#define xstr(s) str(s)#define debug(s,t) printf("x" # s "= %d, x" # t "= %s", x ## s, x ## t)stringize(){/*#define str(s) # s#define xstr(s) str(s)#define debug(s,t) printf("x" # s "= %d, x" # t "= %s", x ## s, x ## t)debug(1, 2);should result in:printf("x1= %d, x2= %s", x1, x2);*/debug(1, 2);/*fputs(str(strncmp("abc\0d", "abc", '\4') == 0) str(: @\n), s);should result in:fputs("strncmp(\"abc\\0d\", \"abc\", '\\4') == 0: @\n", s);*/fputs(str(strncmp("abc\0d", "abc", '\4') == 0) str(: @\n), s);}/*PART 3Tests of detecting duplicate definitionsThese examples do not follow the standard yet.Please do not report these as bugs to me.*/#define OBJ_LIKE (1-1)#define OBJ_LIKE /* a */ (1-1) /* b */#define FTN_LIKE(a) ( a )#define FTN_LIKE( a ) ( /* a */ \a /* b*/ )#define OBJ_LIKE (0)#define OBJ_LIKE (1 - 1)#define FTN_LIKE(b) ( a )#define FTN_LIKE(b) (b)/* PART 4Bug regression test:Test for white space in argument list in macros.Test for more than six arguments.Test for recursive definition of keywords*/#define char (signed) charchar c;#pragma this can be anything#pragma ##who cares##??/* Test of defined keyword. */#if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)#define TINY_OR_SMALL_OR_MEDIUM#endif/*Test line number handling.Note: #error will terminate the processing of this test file.*/#define FILE_NAME "d:\sherlock\sl.h"#define LINE2 1000#define FILE2 "changed_file"#include FILE_NAME#line LINE2 FILE2#define a( b , c , d , e , f , g , h ) b c d e f g hline_number_test(){int b;a(b, = , 1, + , 2, - , 3);SL_DISABLE();}