38 lines
		
	
	
		
			811 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			811 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								@pragma entry main
							 | 
						||
| 
								 | 
							
								@pragma implicit off
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@include "tap.inc";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function run_gc_test ()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									@local i, a, b, ts, pr, cpr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tap_ensure (hawk::GC_NUM_GENS, 3, @SCRIPTNAME, @SCRIPTLINE);
							 | 
						||
| 
								 | 
							
									hawk::gc_set_threshold(0, 30);
							 | 
						||
| 
								 | 
							
									ts = hawk::gc_get_threshold(0);
							 | 
						||
| 
								 | 
							
									tap_ensure (ts, 30, @SCRIPTNAME, @SCRIPTLINE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									pr = hawk::gc_get_pressure(0);
							 | 
						||
| 
								 | 
							
									for (i = 0; i < 50; i++)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										a[1] = 999; ## there is only 1 allocation that's concerting GC in the current implementation
							 | 
						||
| 
								 | 
							
										b = a;
							 | 
						||
| 
								 | 
							
										b = @nil;
							 | 
						||
| 
								 | 
							
										a = @nil;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										cpr =  hawk::gc_get_pressure(0);
							 | 
						||
| 
								 | 
							
										if (pr + i + 1 <= ts)
							 | 
						||
| 
								 | 
							
											tap_ensure (cpr, pr + i + 1, @SCRIPTNAME, @SCRIPTLINE);
							 | 
						||
| 
								 | 
							
										else ## gc kicks in when the pressure reaches the threshold, the pressure drops...
							 | 
						||
| 
								 | 
							
											tap_ensure (cpr, (pr + i + 1) - ts, @SCRIPTNAME, @SCRIPTLINE);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function main()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									run_gc_test();
							 | 
						||
| 
								 | 
							
									tap_end ();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |