#include "test.inc" /* This is ugly - please ignore this code! */ /* To compile: * embryo_cc ./test.sma -o test.amx * * To test run: * embryo ./test.amx */ public global1 = 99; public global2 = 77; main() { printf("Testing switch and case statements...\n"); new var; for (var = 1; var < 5; var++) { switch (var) { case 0: printf("It's 0\n"); case 1: printf("It's 1\n"); case 2: printf("It's 2\n"); case 3: printf("It's 3\n"); case 4: printf("It's 4\n"); case 5: printf("It's 5\n"); case 6: printf("It's 6\n"); case 7: printf("It's 7\n"); default: printf("It's something else\n"); } } printf("\n\n"); printf("Testing for loops...\n"); for (var = 0; var < 10; var++) { printf("Var = %i\n", var); } printf("\n\n"); printf("Testing recursion...\n"); var = recurse(3); printf("var = %i\n", var); printf("\n\n"); printf("Testing while loops...\n"); var = 7; while (var > 1) { printf("var = %i\n", var); var--; } printf("\n\n"); printf("Testing Float Math...\n"); new Float:a; new Float:b; new Float:c; c = 10.5; printf("c = %f (should be 10.5)\n", c); a = 5.0; b = 2.345; c = a + b; printf("a = %f (should be 5.0)\n", a); printf("b = %f (should be 2.345)\n", b); printf("a + b = %f (should be 7.345)\n", c); a = 2.5; b = 3.5; c = a * b; printf("a = %f (should be 2.5)\n", a); printf("b = %f (should be 3.5)\n", b); printf("a 8 b = %f (should be 8.75)\n", c); a = 5.5; b = 1.5; c = a / b; printf("a = %f (should be 5.5)\n", a); printf("b = %f (should be 1.5)\n", b); printf("a / b = %f (should be 3.666666667)\n", c); printf("The printf() call is a native exported function. This should work\n"); printf("Calling testfn()...\n"); new ret; ret = testfn(12345, "A Test String", 7); printf("Done. Return value of testfn() was %i\n", ret); printf("Test varargs...\n"); vargs(1, 2, "hello", "there", 8, 77, 5.0, 7.77); printf("\n\n"); printf("native_rec(1, 77)\n"); native_rec(1, "Smelly", 77); printf("native_rec() done\n"); printf("atoi(\"7\") = %i\n", atoi("7")); return 7; } public rec1(arg1, str[], arg2) { printf("arg1=%i str=%s arg2=%i\n", arg1, str, arg2); return native_rec(arg1 + 1, str, arg2); } vargs(a, b, ...) { printf("ARGS...\n"); printf(" a = %i\n", a); printf(" b = %i\n", b); for (new i = 2; i < numargs(); i++) { new val; new Float:fval; new str[100]; printf(" GET ARG... %i\n", i); if (i < 4) { for (new j = 0; j < (sizeof(str) - 1); j++) { str[j] = getarg(i, j); if (str[j] == 0) break; } printf(" ARG: %s [max %i]\n", str, sizeof(str)); } else if (i < 6) { val = getarg(i); printf(" ARG: %i\n", val); } else if (i < 8) { fval = getfarg(i); printf(" FARG: %f\n", fval); } } printf("ARGS DONE.\n"); } recurse(val) { printf("Recurse: val = %i\n", val); if (val >= 10) return val; return recurse(val + 1); } tester(arg1=0, str[]="", arg2=0) { if (arg1 == 7) printf("arg1 == 7!!!\n"); printf(" TESTER: arg1=%i str='%s' arg2=%i\n", arg1, str, arg2); } public testfn(arg1, str[], arg2) { new a = 10; new Float:b = 20.0; printf("arg1=%i str='%s' arg2=%i\n", arg1, str, arg2); printf("float test %i %f\n", a, b); tester(77, "blahdieblah", 1024); if (arg1 == 7) printf("arg1 == 7!!!\n"); return 5; }