From 01bfdd2ae5d368937690d4b8eb79f6c82d29c488 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Sat, 10 Nov 2012 20:57:54 +0000 Subject: [PATCH] Dump old tests, test suite will take over .. It isn't activly used, just killing space and looking fugly. If required for reference, see older revisions. --- test/ast-macros.h | 163 ------------------------------------- test/ast-test.c | 201 ---------------------------------------------- test/ir-test.c | 150 ---------------------------------- 3 files changed, 514 deletions(-) delete mode 100644 test/ast-macros.h delete mode 100644 test/ast-test.c delete mode 100644 test/ir-test.c diff --git a/test/ast-macros.h b/test/ast-macros.h deleted file mode 100644 index 580cd7a..0000000 --- a/test/ast-macros.h +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef TEST_AST_MACROS_HDR -#define TEST_AST_MACROS_HDR - -#define TESTVARS() \ -ast_block *curblock; \ -lex_ctx ctx - -#define TESTINIT() \ -ctx.file = NULL; \ -ctx.line = 1; - -#define DEFVAR(name) \ -ast_value *name - -#define VAR(type, name) \ -name = ast_value_new(ctx, #name, type) - -#define VARnamed(type, name, varname) \ -name = ast_value_new(ctx, #varname, type) - -#define MKGLOBAL(name) \ -assert(globals_add(name) >= 0) - -#define FIELD(type, name) \ -name = ast_value_new(ctx, #name, TYPE_FIELD); \ -do { \ - ast_value *field_##name = ast_value_new(ctx, #name, type); \ - name->expression.next = (ast_expression*)field_##name; \ - MKFIELD(name); \ -} while (0) - -#define MKFIELD(name) \ -assert(fields_add(name) >= 0) - -#define MKCONSTFLOAT(name, value) \ -do { \ - name->isconst = true; \ - name->constval.vfloat = value; \ - MKGLOBAL(name); \ -} while(0) - -#define MKCONSTSTRING(name, value) \ -do { \ - name->isconst = true; \ - name->constval.vstring = util_strdup(value); \ - MKGLOBAL(name); \ -} while(0) - -#define MKCONSTVECTOR(name, valx, valy, valz) \ -do { \ - name->isconst = true; \ - name->constval.vvec.x = (valx); \ - name->constval.vvec.y = (valy); \ - name->constval.vvec.z = (valz); \ - MKGLOBAL(name); \ -} while(0) - -#define STATE(a) \ -do { \ - ast_expression *exp = (ast_expression*)(a); \ - assert(ast_block_exprs_add(curblock, exp)); \ -} while(0) - -#define ASSIGN(op, a, b) \ -(ast_expression*)ast_store_new(ctx, INSTR_##op, (ast_expression*)(a), (ast_expression*)(b)) - -#define BIN(op, a, b) \ -(ast_expression*)ast_binary_new(ctx, INSTR_##op, (ast_expression*)(a), (ast_expression*)(b)) - -#define ENTFIELD(a, b) \ -(ast_expression*)ast_entfield_new(ctx, (ast_expression*)(a), (ast_expression*)(b)) - -#define VECMEM(vec, mem) \ -(ast_expression*)ast_member_new(ctx, (ast_expression*)(vec), (mem)) - -#define CALL(what) \ -do { \ - ast_call *call = ast_call_new(ctx, (ast_expression*)what); \ - -#define CALLPARAM(x) \ - assert(ast_call_params_add(call, (ast_expression*)x)); - -#define ENDCALL() \ - STATE(call); \ -} while(0) - -#define ENDCALLWITH(as, where) \ - { \ - ast_expression *as = (ast_expression*)call; \ - where; \ - } \ -} while(0) - -#define WHILE(cond) \ -do { \ - ast_expression *wh_cond = (ast_expression*)(cond); \ - ast_block *wh_body = ast_block_new(ctx); \ - ast_block *oldcur = curblock; \ - ast_loop *loop; \ - curblock = wh_body; - -#define ENDWHILE() \ - curblock = oldcur; \ - loop = ast_loop_new(ctx, NULL, (ast_expression*)wh_cond, \ - NULL, NULL, (ast_expression*)wh_body); \ - assert(loop); \ - STATE(loop); \ -} while(0) - -#define BUILTIN(name, outtype, number) \ -do { \ - ast_function *func_##name; \ - ast_value *thisfuncval; \ - ast_function *thisfunc; \ - DEFVAR(return_##name); \ - VARnamed(TYPE_FUNCTION, name, name); \ - VARnamed(outtype, return_##name, "#returntype"); \ - name->expression.next = (ast_expression*)return_##name; \ - MKGLOBAL(name); \ - func_##name = ast_function_new(ctx, #name, name); \ - thisfunc = func_##name; \ - (void)thisfunc; \ - thisfuncval = name; \ - (void)thisfuncval; \ - assert(functions_add(func_##name) >= 0); \ - func_##name->builtin = number; - -#define ENDBUILTIN() } while(0) - -#define PARAM(ptype, name) \ -do { \ - DEFVAR(parm); \ - VARnamed(ptype, parm, name); \ - assert(ast_value_params_add(thisfuncval, parm)); \ -} while(0) - -#define FUNCTION(name, outtype) \ -do { \ - ast_function *thisfunc; \ - ast_function *func_##name; \ - ast_block *my_funcblock; \ - DEFVAR(var_##name); \ - DEFVAR(return_##name); \ - VARnamed(TYPE_FUNCTION, var_##name, name); \ - VARnamed(outtype, return_##name, "#returntype"); \ - var_##name->expression.next = (ast_expression*)return_##name; \ - MKGLOBAL(var_##name); \ - func_##name = ast_function_new(ctx, #name, var_##name); \ - thisfunc = func_##name; \ - (void)thisfunc; \ - assert(functions_add(func_##name) >= 0); \ - my_funcblock = ast_block_new(ctx); \ - assert(my_funcblock); \ - assert(ast_function_blocks_add(func_##name, my_funcblock)); \ - curblock = my_funcblock; - -#define MKLOCAL(var) \ - assert(ast_block_locals_add(curblock, var)) - -#define ENDFUNCTION(name) \ -} while(0) - -#endif diff --git a/test/ast-test.c b/test/ast-test.c deleted file mode 100644 index c173919..0000000 --- a/test/ast-test.c +++ /dev/null @@ -1,201 +0,0 @@ -#include "gmqcc.h" -#include "ast.h" - -/* NOTE: it's a test - I'll abort() on epic-failure */ - -#ifdef assert -# undef assert -#endif -/* (note: 'do {} while(0)' forces the need for a semicolon after assert() */ -#define assert(x) do { if ( !(x) ) { printf("Assertion failed: %s\n", #x); abort(); } } while(0) - -VECTOR_MAKE(ast_value*, globals); -VECTOR_MAKE(ast_value*, fields); -VECTOR_MAKE(ast_function*, functions); - -uint32_t opts_flags[1 + (COUNT_FLAGS / 32)]; -uint32_t opts_warn [1 + (COUNT_WARNINGS / 32)]; - -uint32_t opts_O = 1; -const char *opts_output = "progs.dat"; -int opts_standard = COMPILER_GMQCC; -bool opts_debug = false; -bool opts_memchk = false; -bool opts_werror = false; - -#include "ast-macros.h" - -int main() -{ - size_t i; - - ir_builder *ir; - - TESTVARS(); - - DEFVAR(vi); - DEFVAR(vx); - DEFVAR(f0); - DEFVAR(f1); - DEFVAR(f5); - DEFVAR(cv3x4x5); - DEFVAR(cv1x1x1); - DEFVAR(sHello); - DEFVAR(sNL); - DEFVAR(print); - DEFVAR(ftos); - DEFVAR(spawn); - - DEFVAR(mema); - DEFVAR(memb); - DEFVAR(memv); - DEFVAR(pawn); - - /* opts_debug = true; */ - -BUILTIN(print, TYPE_VOID, -1); -PARAM(TYPE_STRING, text); -ENDBUILTIN(); - -BUILTIN(ftos, TYPE_STRING, -2); -PARAM(TYPE_FLOAT, value); -ENDBUILTIN(); - -BUILTIN(spawn, TYPE_ENTITY, -3); -ENDBUILTIN(); - - TESTINIT(); -VAR(TYPE_FLOAT, f0); -VAR(TYPE_FLOAT, f1); -VAR(TYPE_FLOAT, f5); -VAR(TYPE_STRING, sHello); -VAR(TYPE_STRING, sNL); -VAR(TYPE_VECTOR, cv3x4x5); -VAR(TYPE_VECTOR, cv1x1x1); - -FIELD(TYPE_FLOAT, mema); -FIELD(TYPE_FLOAT, memb); -FIELD(TYPE_VECTOR, memv); - -MKCONSTFLOAT(f0, 0.0); -MKCONSTFLOAT(f1, 1.0); -MKCONSTFLOAT(f5, 5.0); -MKCONSTSTRING(sHello, "Hello, World\n"); -MKCONSTSTRING(sNL, "\n"); -MKCONSTVECTOR(cv3x4x5, 3, 4, 5); -MKCONSTVECTOR(cv1x1x1, 1, 1, 1); - -FUNCTION(foo, TYPE_VOID); -ENDFUNCTION(foo); - -#define PRINTNL() do { CALL(print) CALLPARAM(sNL) ENDCALL(); } while(0) - -FUNCTION(main, TYPE_VOID); - - VAR(TYPE_FLOAT, vi); - VAR(TYPE_FLOAT, vx); - VAR(TYPE_ENTITY, pawn); - - MKLOCAL(vi); - MKLOCAL(vx); - MKLOCAL(pawn); - - STATE(ASSIGN(STORE_F, vi, f0)); - WHILE(BIN(LT, vi, f5)); - STATE(ASSIGN(STORE_F, vx, BIN(MUL_F, vi, f5))); - STATE(ASSIGN(STORE_F, vi, BIN(ADD_F, vi, f1))); - ENDWHILE(); - - CALL(print) - CALLPARAM(sHello) - ENDCALL(); - - CALL(spawn) - ENDCALLWITH(newent, STATE(ASSIGN(STORE_ENT, pawn, newent))); - - STATE(ASSIGN(STOREP_F, ENTFIELD(pawn, mema), f5)); - STATE(ASSIGN(STOREP_F, ENTFIELD(pawn, memb), f1)); - STATE(ASSIGN(STOREP_V, ENTFIELD(pawn, memv), cv3x4x5)); - CALL(ftos) - CALLPARAM(ENTFIELD(pawn, mema)) - ENDCALLWITH(output, - CALL(print) - CALLPARAM(output) - CALLPARAM(sNL) - ENDCALL(); - ); - CALL(ftos) - CALLPARAM(ENTFIELD(pawn, memb)) - ENDCALLWITH(output, - CALL(print) - CALLPARAM(output) - CALLPARAM(sNL) - ENDCALL(); - ); - CALL(ftos) - CALLPARAM(ENTFIELD(pawn, VECMEM(memv, 2))) - ENDCALLWITH(output, - CALL(print) - CALLPARAM(output) - CALLPARAM(sNL) - ENDCALL(); - ); - -ENDFUNCTION(main); - - ir = ir_builder_new("ast_test"); - assert(ir); - - /* gen fields */ - for (i = 0; i < fields_elements; ++i) { - if (!ast_global_codegen(fields_data[i], ir)) { - assert(!"failed to generate field"); - } - } - /* gen globals */ - for (i = 0; i < globals_elements; ++i) { - if (!ast_global_codegen(globals_data[i], ir)) { - assert(!"failed to generate global"); - } - } - - /* gen functions */ - for (i = 0; i < functions_elements; ++i) { - if (!ast_function_codegen(functions_data[i], ir)) { - assert(!"failed to generate function"); - } - if (!ir_function_finalize(functions_data[i]->ir_func)) - assert(!"finalize on function failed..."); - } - - - /* dump */ - ir_builder_dump(ir, printf); - - /* Now create a file */ - if (!ir_builder_generate(ir, "test_ast.dat")) - printf("*** failed to generate code\n"); - - /* ir cleanup */ - ir_builder_delete(ir); - - /* cleanup */ - /* Functions must be deleted FIRST since their expressions - * reference global variables. - */ - for (i = 0; i < functions_elements; ++i) { - ast_function_delete(functions_data[i]); - } - if (functions_data) - mem_d(functions_data); - - /* We must delete not only globals, but also the functions' - * ast_values (their type and name), that's why we added them to the globals vector. - */ - for (i = 0; i < globals_elements; ++i) { - ast_value_delete(globals_data[i]); - } - if (globals_data) - mem_d(globals_data); - return 0; -} diff --git a/test/ir-test.c b/test/ir-test.c deleted file mode 100644 index 38fa764..0000000 --- a/test/ir-test.c +++ /dev/null @@ -1,150 +0,0 @@ -#include "gmqcc.h" -#include "ir.h" - -#ifdef assert -# undef assert -#endif -/* (note: 'do {} while(0)' forces the need for a semicolon after assert() */ -#define assert(x) do { if ( !(x) ) { printf("Assertion failed: %s\n", #x); abort(); } } while(0) - -int main() -{ - int lf; - - ir_builder *b = ir_builder_new("test"); - ir_value *va = ir_builder_create_global(b, "a", TYPE_FLOAT); - ir_value *v3 = ir_builder_create_global(b, "const_f_3", TYPE_FLOAT); - ir_value *vb = ir_builder_create_global(b, "b", TYPE_FLOAT); - ir_value *vc = ir_builder_create_global(b, "c", TYPE_FLOAT); - ir_value *vd = ir_builder_create_global(b, "d", TYPE_FLOAT); - - ir_value *life1 = ir_builder_create_global(b, "life1", TYPE_FLOAT); - ir_value *life2 = ir_builder_create_global(b, "life2", TYPE_FLOAT); - ir_value *life3 = ir_builder_create_global(b, "life3", TYPE_FLOAT); - - ir_function *fmain = NULL; - ir_value *la = NULL; - ir_block *bmain = NULL; - ir_block *blt = NULL; - ir_block *bge = NULL; - ir_block *bend = NULL; - ir_value *sum = NULL; - ir_value *prd = NULL; - ir_value *less = NULL; - ir_value *x1 = NULL; - ir_value *vig = NULL; - ir_value *x2 = NULL; - ir_instr *retphi = NULL; - ir_value *retval = NULL; - - assert(ir_value_set_float(v3, 3.0f) ); - assert(ir_value_set_float(vb, 4.0f) ); - assert(ir_value_set_float(vc, 10.0f) ); - assert(ir_value_set_float(vd, 20.0f) ); - - fmain = ir_builder_create_function(b, "main"); - assert(fmain); - - la = ir_function_create_local(fmain, "loc1", TYPE_FLOAT); - assert(la); - - assert( bmain = ir_function_create_block(fmain, "top") ); - assert( blt = ir_function_create_block(fmain, "less") ); - assert( bge = ir_function_create_block(fmain, "greaterequal") ); - assert( bend = ir_function_create_block(fmain, "end") ); - - assert(ir_block_create_store_op(bmain, INSTR_STORE_F, va, v3)); - assert( sum = ir_block_create_add(bmain, "%sum", va, vb) ); - assert( prd = ir_block_create_mul(bmain, "%mul", sum, vc) ); - assert( less = ir_block_create_binop(bmain, "%less", INSTR_LT, prd, vd) ); - - assert(ir_block_create_if(bmain, less, blt, bge)); - - x1 = ir_block_create_binop(blt, "%x1", INSTR_ADD_F, sum, v3); - assert(x1); - assert(ir_block_create_goto(blt, bend)); - - vig = ir_block_create_binop(bge, "%ignore", INSTR_ADD_F, va, vb); - assert(vig); - assert(ir_block_create_store_op(bge, INSTR_STORE_F, la, vig)); - x2 = ir_block_create_binop(bge, "%x2", INSTR_ADD_F, sum, v3); - assert(x2); - assert(ir_block_create_goto(bge, bend)); - - retphi = ir_block_create_phi(bend, "%retval", TYPE_FLOAT); - assert(retphi); - assert(ir_phi_add(retphi, blt, x1)); - assert(ir_phi_add(retphi, bge, x2)); - retval = ir_phi_value(retphi); - assert(retval); - assert(ir_block_create_return(bend, retval)); - - /* - printf("%i should be 1\n", ir_value_life_merge(va, 31)); - printf("%i should be 1\n", ir_value_life_merge(va, 33)); - printf("%i should be 0\n", ir_value_life_merge(va, 33)); - printf("%i should be 1\n", ir_value_life_merge(va, 1)); - printf("%i should be 1\n", ir_value_life_merge(va, 2)); - printf("%i should be 1\n", ir_value_life_merge(va, 20)); - printf("%i should be 1\n", ir_value_life_merge(va, 21)); - printf("%i should be 1\n", ir_value_life_merge(va, 8)); - printf("%i should be 1\n", ir_value_life_merge(va, 9)); - printf("%i should be 1\n", ir_value_life_merge(va, 3)); - printf("%i should be 0\n", ir_value_life_merge(va, 9)); - printf("%i should be 1\n", ir_value_life_merge(va, 17)); - printf("%i should be 1\n", ir_value_life_merge(va, 18)); - printf("%i should be 1\n", ir_value_life_merge(va, 19)); - printf("%i should be 0\n", ir_value_life_merge(va, 19)); - ir_value_dump_life(va, printf); - printf("%i should be 1\n", ir_value_life_merge(va, 10)); - printf("%i should be 1\n", ir_value_life_merge(va, 9)); - printf("%i should be 0\n", ir_value_life_merge(va, 10)); - printf("%i should be 0\n", ir_value_life_merge(va, 10)); - ir_value_dump_life(va, printf); - */ - - ir_builder_dump(b, printf); - assert(ir_function_finalize(fmain)); - ir_builder_dump(b, printf); - - ir_value_dump_life(sum, printf); - ir_value_dump_life(prd, printf); - ir_value_dump_life(less, printf); - ir_value_dump_life(x1, printf); - ir_value_dump_life(x2, printf); - ir_value_dump_life(retval, printf); - ir_value_dump_life(vig, printf); - ir_value_dump_life(la, printf); - - ir_value_life_merge_into(retval, vig); - ir_value_dump_life(retval, printf); - ir_value_life_merge(x1, 12); - ir_value_life_merge(x1, 13); - ir_value_life_merge(x1, 14); - ir_value_life_merge_into(retval, x1); - ir_value_dump_life(retval, printf); - ir_value_life_merge(x1, 20); - ir_value_life_merge(x1, 21); - ir_value_life_merge(x1, 22); - ir_value_life_merge_into(retval, x1); - ir_value_dump_life(retval, printf); - ir_value_life_merge(x2, 1); - ir_value_life_merge(x2, 2); - ir_value_life_merge_into(retval, x2); - ir_value_dump_life(retval, printf); - for (lf = 4; lf <= 15; ++lf) - ir_value_life_merge(life1, lf); - ir_value_life_merge_into(retval, life1); - ir_value_dump_life(retval, printf); - for (lf = 17; lf <= 18; ++lf) - ir_value_life_merge(life2, lf); - ir_value_life_merge_into(retval, life2); - ir_value_dump_life(retval, printf); - for (lf = 2; lf <= 29; ++lf) - ir_value_life_merge(life3, lf); - ir_value_life_merge_into(retval, life3); - ir_value_dump_life(retval, printf); - - ir_builder_delete(b); - return 0; -} -- 2.39.2