harec

[hare] Hare compiler, written in C11 for POSIX OSs
Log | Files | Refs | README | LICENSE

36-defines.ha (1213B)


      1 use rt;
      2 
      3 fn import() void = {
      4 	assert(rt::compile("
      5 		use a = rt;
      6 		def b = a::TESTDEFINE;
      7 	", "TESTDEFINE=1": rt::define) as rt::exited != rt::EXIT_SUCCESS);
      8 };
      9 
     10 fn mandatory() void = {
     11 	assert(rt::compile("
     12 		def TESTDEFINE = TESTDEFINE;
     13 	", "TESTDEFINE=1": rt::define) as rt::exited == rt::EXIT_SUCCESS);
     14 	assert(rt::compile("
     15 		def TESTDEFINE = TESTDEFINE;
     16 	") as rt::exited != rt::EXIT_SUCCESS);
     17 };
     18 
     19 fn optional() void = {
     20 	assert(rt::compile("
     21 		def TESTDEFINE = 1;
     22 		fn main() void = {
     23 			static assert(TESTDEFINE == 2);
     24 		};
     25 	", "TESTDEFINE=2": rt::define) as rt::exited == rt::EXIT_SUCCESS);
     26 	assert(rt::compile("
     27 		def TESTDEFINE = 1;
     28 		fn main() void =  {
     29 			static assert(TESTDEFINE == 1);
     30 		};
     31 	") as rt::exited == rt::EXIT_SUCCESS);
     32 };
     33 
     34 fn compatibility() void = {
     35 	assert(rt::compile("
     36 		def TESTDEFINE: int = 0;
     37 	", "TESTDEFINE:int=1": rt::define) as rt::exited == rt::EXIT_SUCCESS);
     38 	assert(rt::compile("
     39 		def TESTDEFINE: int = 0;
     40 	", "TESTDEFINE:uint=1": rt::define) as rt::exited != rt::EXIT_SUCCESS);
     41 	assert(rt::compile("
     42 		const TEST = 1;
     43 	", "TEST=0": rt::define) as rt::exited != rt::EXIT_SUCCESS);
     44 };
     45 
     46 export fn main() void = {
     47 	import();
     48 	mandatory();
     49 	optional();
     50 	compatibility();
     51 };