2025-01-22 16:18:30 +01:00

103 lines
2.3 KiB
Haxe
Executable File

package gc;
class TestBigStack
{
var refs:Array<TestBigStack>;
var self:TestBigStack;
public function new()
{
refs = [];
self = this;
}
function check()
{
if (self!=this)
throw("Bad self reference");
}
function checkRec()
{
if (self!=this)
throw("Bad self reference");
for(r in refs)
r.checkRec();
}
function runRec(depth:Int)
{
var d = depth-1;
if (d==0)
return this;
var b0 = new TestBigStack().runRec(d);
var b1 = new TestBigStack().runRec(d);
var b2 = new TestBigStack().runRec(d);
var b3 = new TestBigStack().runRec(d);
var b4 = new TestBigStack().runRec(d);
var b5 = new TestBigStack().runRec(d);
var b6 = new TestBigStack().runRec(d);
var b7 = new TestBigStack().runRec(d);
var b8 = new TestBigStack().runRec(d);
var b9 = new TestBigStack().runRec(d);
var b10 = new TestBigStack().runRec(d);
var b11 = new TestBigStack().runRec(d);
var b12 = new TestBigStack().runRec(d);
var b13 = new TestBigStack().runRec(d);
var b14 = new TestBigStack().runRec(d);
var b15 = new TestBigStack().runRec(d);
var b16 = new TestBigStack().runRec(d);
var b17 = new TestBigStack().runRec(d);
var b18 = new TestBigStack().runRec(d);
var b19 = new TestBigStack().runRec(d);
refs.push(b0);
b0.check();
b1.check();
b2.check();
b3.check();
b4.check();
b5.check();
b6.check();
b7.check();
b8.check();
b9.check();
b10.check();
b11.check();
b12.check();
b13.check();
b14.check();
b15.check();
b16.check();
b17.check();
b18.check();
b19.check();
return this;
}
function run(passes:Int, depth:Int)
{
for(p in 0...passes)
{
//if ( (p%1000)==0 )
// Sys.println('Pass $p...');
refs = [];
runRec(depth);
checkRec();
}
}
public static function test() : Bool
{
try {
var b = new TestBigStack();
b.run(5000,5);
return true;
}
catch(e:Dynamic)
{
return false;
}
}
}