103 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | 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; | ||
|  |       } | ||
|  |    } | ||
|  | } |