49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| fun repeat(n f) {
 | |
| 	while (> n 0) {
 | |
| 		f;
 | |
| 		set n (- n 1);
 | |
| 	};
 | |
| };
 | |
| 
 | |
| fun test-non-local-ret-1(k) {
 | |
| 	repeat 10 (fun() {
 | |
| 		set k (+ k 2);
 | |
| 		if (= k 28) { revert k };
 | |
| 	});
 | |
| 
 | |
| 	return k;
 | |
| };
 | |
| 
 | |
| set a (test-non-local-ret-1 20);
 | |
| if (~= a 28) { printf "ERROR: a must be 28\n" } \
 | |
| else { printf "OK %d\n" a };
 | |
| 
 | |
| set a (test-non-local-ret-1 21);
 | |
| if (~= a 41) { printf "ERROR: a must be 41\n" } \
 | |
| else { printf "OK %d\n" a };
 | |
| 
 | |
| fun dd() { return (- 99999999999999991111111111111111111111111111111111111111.111111111 999999999999999999999999999999.999999999999) }
 | |
| 
 | |
| fun ee() { return (+ 1111111111111111111111111111111111111111111111111 999999999999999999999999999999999999999999) }
 | |
| 
 | |
| fun ff() { return 999 };
 | |
| 
 | |
| ## test a normal block return with a fixed point decimal
 | |
| set a (dd);
 | |
| if (~= a 99999999999999991111111110111111111111111111111111111111.111111111001) { printf "ERROR: a must be 99999999999999991111111110111111111111111111111111111111.111111111001\n" } \
 | |
| else  { printf "OK %f\n" a };
 | |
| 
 | |
| ## test a normal block return with a large integer
 | |
| set a (ee);
 | |
| if (~= a 1111112111111111111111111111111111111111111111110) { printf "ERROR: a must be 1111112111111111111111111111111111111111111111110\n" } \
 | |
| else  { printf "OK %d\n" a };
 | |
| 
 | |
| ## test a normal block return
 | |
| set a (ff);
 | |
| if (~= a 999) { printf "ERROR: a must be 999\n" } \
 | |
| else  { printf "OK %d\n" a };
 | |
| 
 | |
| ## return from top-level
 | |
| return 10;
 | |
| printf "ERROR: this line must not be printed\n";
 |