@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 ();
}

