#include "/inc/base.inc" #include "/inc/testarray.inc" #include "/inc/gc.inc" private float testfloat = 3.499965555966e-01; // Name, Flag, Function nosave mixed *tests = ({ ({ "0000587-1", TF_DONTCHECKERROR, (: strftime(__INT_MAX__); return 1; :) }), ({ "0000587-2", TF_DONTCHECKERROR, (: gmtime(__INT_MAX__); return 1; :) }), ({ "0000587-3", TF_DONTCHECKERROR, (: localtime(__INT_MAX__); return 1; :) }), ({ "0000587-4", TF_DONTCHECKERROR, (: ctime(__INT_MAX__); return 1; :) }), ({ "0000587-5", TF_DONTCHECKERROR, (: ctime(({__INT_MAX__,1})); return 1; :) }), ({ "0000537-1", 0, (: int a; { int b = 42; } int c; return c==0; :) }), ({ "0000537-2", 0, (: mapping m = ([ "": 1]); string key; foreach (key, int val: &m) { val++; } int tmp=-1; return m[""] == 2; :) }), ({ "0000537-3", 0, (: { int a; { int b = 42; } int c; return c==0; } :) }), ({ "0000537-4", 0, (: { mapping m = ([ "": 1]); string key; foreach (key, int val: &m) { val++; } int tmp=-1; return m[""] == 2; } :) }), ({ "0000528", 0, function int () { return to_int(sprintf("%d",__INT_MAX__)) == __INT_MAX__; } }), ({ "0000612", 0, (: return pointerp(funcall(#'tests, 42, (["Ignore me"]))); :) }), ({ "0000613", 0, (: int x = 1; return funcall(lambda(0,({ (: x :) }))); :) }), ({ "0000627", 0, function int () { save_object("/t-mantis"); restore_object("/t-mantis"); rm("/t-mantis.o"); return testfloat == 3.499965555966e-01; } }), ({ "0000630-1", 0, (: /* calc __INT_MAX__ + 1 */ string num = to_string(__INT_MAX__); int i = strlen(num); while(i && num[i-1]=='9') num[--i] = '0'; if(!i) num = "1"+num; else num[--i] += 1; return to_int(num) == __INT_MAX__; :) }), ({ "0000630-2", 0, (: /* calc 2*__INT_MAX__+1 */ string num = to_string(__INT_MAX__); int i = strlen(num); int carry = 1; while(i) { --i; if(num[i]<'5') { num[i] += num[i] - '0' + carry; carry = 0; } else { num[i] += num[i] - '0' - 10 + carry; carry = 1; } } if(carry) num = "1"+num; return to_int(num) == __INT_MAX__; :) }), ({ "0000630-3", 0, (: /* calc __INT_MIN__ - 1 */ string num = to_string(__INT_MIN__)[1..]; int i = strlen(num); while(i && num[i-1]=='9') num[--i] = '0'; if(!i) num = "1"+num; else num[--i] += 1; return to_int("-"+num) == __INT_MIN__; :) }), ({ "0000630-4", 0, (: /* calc 2*__INT_MIN__-1 */ string num = to_string(__INT_MIN__)[1..]; int i = strlen(num); int carry = 1; while(i) { --i; if(num[i]<'5') { num[i] += num[i] - '0' + carry; carry = 0; } else { num[i] += num[i] - '0' - 10 + carry; carry = 1; } } if(carry) num = "1"+num; return to_int("-"+num) == __INT_MIN__; :) }), ({ "0000631-1", 0, (: int i=1; return funcall( (: if(i) return funcall((: return i; :)); :)) == 1; :) }), ({ "0000631-2", 0, (: int i=1; return funcall( function int() : int j = 2 { if(i) return funcall((: return j; :)); }) == 2; :) }), ({ "0000631-3", 0, (: int i=1; return funcall( function int() { int j = 2; return funcall((: return i; :)); }) == 1; :) }), ({ "0000631-4", 0, (: int i=1; return funcall( function int () { return funcall( function int () : int j=i { return j; }); }); :) }), ({ "0000631-5", 0, (: int a = 1; return funcall( function int() : closure cl = (: a :) { return funcall(cl); }) == 1; :) }), ({ "0000631-6", 0, (: int a=1; return funcall( function int () : int b = a+1; int c = b+1 { return c; }) == 3; :) }), ({ "0000631-7", 0, /* #631 in conjunction with #537. */ (: closure c; { int a = 1; } c = function int () : int b { return b; }; return funcall(c) == 0; :) }), ({ "0000631-8", 0, /* #631 in conjunction with #537. */ (: closure c; c = function int () : int b = 2 { return b; }; { int d; return d == 0; } :) }), ({ "0000631-9", 0, /* Check, that the array is only freed once. */ (: closure c = function int() : string* a = ({ "" }) { return 0; }; return closurep(c); /* As long as it doesn't crash... */ :) }), ({ "0000631-10", 0, function int(int a, int b, int c) { return funcall(funcall(funcall( function : mixed i = 1; mixed j = function : mixed j = function { return i; } { return j; }; { return j; } ))) == 1; } }), ({ "0000631-11", 0, (: return funcall(function int() : closure c = function int() : int a = 1 { return 2; }; int b; { return b; }) == 0; :) }), }); void run_test() { msg("\nRunning Mantis test suite:\n" "--------------------------\n"); run_array(tests, (: if($1) shutdown(1); else start_gc(#'shutdown); return 0; :)); } string *epilog(int eflag) { run_test(); return 0; }