added a small test case for gc
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		| @ -13,7 +13,7 @@ LDFLAGS_COMMON=-L$(abs_builddir)/../lib  -L$(libdir) | |||||||
| ## for more information. | ## for more information. | ||||||
| LIBADD_COMMON = ../lib/libhawk.la $(LIBM) | LIBADD_COMMON = ../lib/libhawk.la $(LIBM) | ||||||
|  |  | ||||||
| check_SCRIPTS = h-001.hawk h-002.hawk h-003.hawk h-009.hawk | check_SCRIPTS = h-001.hawk h-002.hawk h-003.hawk h-004.hawk h-009.hawk | ||||||
| ##noinst_SCRIPTS = $(check_SCRIPTS) | ##noinst_SCRIPTS = $(check_SCRIPTS) | ||||||
| EXTRA_DIST = $(check_SCRIPTS) tap.inc \ | EXTRA_DIST = $(check_SCRIPTS) tap.inc \ | ||||||
| 	journal-toc.hawk journal-toc.in journal-toc.out journal-toc-html.out \ | 	journal-toc.hawk journal-toc.in journal-toc.out journal-toc-html.out \ | ||||||
|  | |||||||
| @ -578,7 +578,7 @@ CPPFLAGS_COMMON = \ | |||||||
| CFLAGS_COMMON =  | CFLAGS_COMMON =  | ||||||
| LDFLAGS_COMMON = -L$(abs_builddir)/../lib  -L$(libdir) | LDFLAGS_COMMON = -L$(abs_builddir)/../lib  -L$(libdir) | ||||||
| LIBADD_COMMON = ../lib/libhawk.la $(LIBM) | LIBADD_COMMON = ../lib/libhawk.la $(LIBM) | ||||||
| check_SCRIPTS = h-001.hawk h-002.hawk h-003.hawk h-009.hawk | check_SCRIPTS = h-001.hawk h-002.hawk h-003.hawk h-004.hawk h-009.hawk | ||||||
| EXTRA_DIST = $(check_SCRIPTS) tap.inc \ | EXTRA_DIST = $(check_SCRIPTS) tap.inc \ | ||||||
| 	journal-toc.hawk journal-toc.in journal-toc.out journal-toc-html.out \ | 	journal-toc.hawk journal-toc.in journal-toc.out journal-toc-html.out \ | ||||||
| 	bibtex-to-html.hawk bibtex-to-html.out | 	bibtex-to-html.hawk bibtex-to-html.out | ||||||
|  | |||||||
| @ -420,7 +420,7 @@ function do_cite(s, k,n,labels,t) | |||||||
| function do_line( n,name,s) | function do_line( n,name,s) | ||||||
| { | { | ||||||
|     s = protect_SGML_characters($0) |     s = protect_SGML_characters($0) | ||||||
|      |  | ||||||
|     if (match(s,STRING_PATTERN)) # remember name from @String{name = "value"} |     if (match(s,STRING_PATTERN)) # remember name from @String{name = "value"} | ||||||
|     { |     { | ||||||
| 	name = substr(s,RSTART + STRING_OFFSET,RLENGTH - STRING_OFFSET) | 	name = substr(s,RSTART + STRING_OFFSET,RLENGTH - STRING_OFFSET) | ||||||
| @ -520,7 +520,7 @@ function protect_SGML_characters(s) | |||||||
|     gsub(/</,"\\<",s) |     gsub(/</,"\\<",s) | ||||||
|     gsub(/>/,"\\>",s) |     gsub(/>/,"\\>",s) | ||||||
|  |  | ||||||
|     ## [24-May-2016] with the change from HTML 3.2 to 4.0, we can use " again!	 |     ## [24-May-2016] with the change from HTML 3.2 to 4.0, we can use " again! | ||||||
|     ## gsub(/\"/,"\\"",s)	# this was " in earlier HTML |     ## gsub(/\"/,"\\"",s)	# this was " in earlier HTML | ||||||
| 				# versions, including the HTML 3.2 | 				# versions, including the HTML 3.2 | ||||||
| 				# draft, but was stupidly eliminated in | 				# draft, but was stupidly eliminated in | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								t/h-001.hawk
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								t/h-001.hawk
									
									
									
									
									
								
							| @ -136,7 +136,7 @@ function main() | |||||||
|  |  | ||||||
| 		x = 20; | 		x = 20; | ||||||
| 		y = 90; | 		y = 90; | ||||||
| 		r = call_by_ref_1(x, y, z);	 | 		r = call_by_ref_1(x, y, z); | ||||||
| 		tap_ensure (r, 1800, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (r, 1800, @SCRIPTNAME, @SCRIPTLINE); | ||||||
| 		tap_ensure (x, 20, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (x, 20, @SCRIPTNAME, @SCRIPTLINE); | ||||||
| 		tap_ensure (y, 90, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (y, 90, @SCRIPTNAME, @SCRIPTLINE); | ||||||
| @ -179,7 +179,7 @@ function main() | |||||||
| 	{ | 	{ | ||||||
| 		@local a; | 		@local a; | ||||||
| 		a[1] = hawk::array(); | 		a[1] = hawk::array(); | ||||||
| 		a[1][2]=20;  | 		a[1][2]=20; | ||||||
| 		tap_ensure (a[1][2], 20, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (a[1][2], 20, @SCRIPTNAME, @SCRIPTLINE); | ||||||
| 		a[1][2]++; | 		a[1][2]++; | ||||||
| 		tap_ensure (a[1][2], 21, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (a[1][2], 21, @SCRIPTNAME, @SCRIPTLINE); | ||||||
| @ -217,22 +217,22 @@ function main() | |||||||
| 	{ | 	{ | ||||||
| 		@local a, i; | 		@local a, i; | ||||||
|  |  | ||||||
| 		a = hawk::array();  | 		a = hawk::array(); | ||||||
| 		tap_ensure (length(a), 0, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (length(a), 0, @SCRIPTNAME, @SCRIPTLINE); | ||||||
| 		 |  | ||||||
| 		for (i = 0; i < 10; i++) a[i*i]=i;  | 		for (i = 0; i < 10; i++) a[i*i]=i; | ||||||
| 		tap_ensure (length(a), 10, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (length(a), 10, @SCRIPTNAME, @SCRIPTLINE); | ||||||
|  |  | ||||||
| 		delete a[0]; | 		delete a[0]; | ||||||
| 		tap_ensure (length(a), 9, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (length(a), 9, @SCRIPTNAME, @SCRIPTLINE); | ||||||
|  |  | ||||||
| 		delete a[81];  | 		delete a[81]; | ||||||
| 		tap_ensure (length(a), 8, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (length(a), 8, @SCRIPTNAME, @SCRIPTLINE); | ||||||
|  |  | ||||||
| 		delete a[36];  | 		delete a[36]; | ||||||
| 		tap_ensure (length(a), 7, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (length(a), 7, @SCRIPTNAME, @SCRIPTLINE); | ||||||
|  |  | ||||||
| 		for (i = 0; i < 10; i++) delete a[i*i];  | 		for (i = 0; i < 10; i++) delete a[i*i]; | ||||||
| 		tap_ensure (length(a), 0, @SCRIPTNAME, @SCRIPTLINE); | 		tap_ensure (length(a), 0, @SCRIPTNAME, @SCRIPTLINE); | ||||||
|  |  | ||||||
| 		delete a; | 		delete a; | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								t/h-003.hawk
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								t/h-003.hawk
									
									
									
									
									
								
							| @ -6,7 +6,7 @@ | |||||||
| function are_files_identical(a, b) | function are_files_identical(a, b) | ||||||
| { | { | ||||||
| 	@local f1, f2, x, y, diff; | 	@local f1, f2, x, y, diff; | ||||||
| 	 |  | ||||||
| 	f1 = sys::open(a, sys::O_RDONLY); | 	f1 = sys::open(a, sys::O_RDONLY); | ||||||
| 	if (f1 <= -1) | 	if (f1 <= -1) | ||||||
| 	{ | 	{ | ||||||
| @ -25,7 +25,7 @@ function are_files_identical(a, b) | |||||||
| 	diff = 0; | 	diff = 0; | ||||||
| 	while (sys::read(f1, x, 1) > 0) | 	while (sys::read(f1, x, 1) > 0) | ||||||
| 	{ | 	{ | ||||||
| 		if (sys::read(f2, y, 1) <= 0 || x !== y)  | 		if (sys::read(f2, y, 1) <= 0 || x !== y) | ||||||
| 		{ | 		{ | ||||||
| 			diff = 1; | 			diff = 1; | ||||||
| 			break; | 			break; | ||||||
| @ -58,12 +58,12 @@ function run_test (x, more_opts, in_name, set_out_name, out_name) | |||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		cmd=sprintf("%s %s -f %s/%s.hawk --modlibdirs=%s %s > %s", ARGV[0], more_opts, TDIR, x, hawk::modlibdirs(), inf, outf); | 		cmd=sprintf("%s %s -f %s/%s.hawk --modlibdirs=%s %s > %s", ARGV[0], more_opts, TDIR, x, hawk::modlibdirs(), inf, outf); | ||||||
| 	}	 | 	} | ||||||
| ##print cmd; | ##print cmd; | ||||||
| 	system (cmd); | 	system (cmd); | ||||||
| 		 |  | ||||||
| 	same = are_files_identical(expf, outf); | 	same = are_files_identical(expf, outf); | ||||||
| 	if (same <= 0)  | 	if (same <= 0) | ||||||
| 	{ | 	{ | ||||||
| 		## don't delete the output file for review. | 		## don't delete the output file for review. | ||||||
| 		tap_fail (sprintf("%s[%d] %s - %s and %s differ", @SCRIPTNAME, @SCRIPTLINE, x, expf, outf)); | 		tap_fail (sprintf("%s[%d] %s - %s and %s differ", @SCRIPTNAME, @SCRIPTLINE, x, expf, outf)); | ||||||
|  | |||||||
							
								
								
									
										37
									
								
								t/h-004.hawk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								t/h-004.hawk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | @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 (); | ||||||
|  | } | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user