37 lines
		
	
	
		
			890 B
		
	
	
	
		
			HCL
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			890 B
		
	
	
	
		
			HCL
		
	
	
	
	
	
|  | ## test big integer operations
 | ||
|  | ## hcl --log /dev/null,warn+ test-bi.hcl
 | ||
|  | 
 | ||
|  | (sys.srandom (sys.time)) | ||
|  | (set count 0) | ||
|  | (while true | ||
|  | 	(printf "%O\r" count) | ||
|  | 	(set count (+ count 1)) | ||
|  | 
 | ||
|  | 	(set limit (rem (sys.random) 30)) | ||
|  | 	(set dividend (sys.random)) | ||
|  | 	(set i 1) | ||
|  | 	(while (< i limit) | ||
|  | 		(set dividend (bit-or (bit-shift dividend 30) (sys.random))) | ||
|  | 		(set i (+ i 1)) | ||
|  | 	) | ||
|  | 
 | ||
|  | 	(set limit (rem (sys.random) 30)) | ||
|  | 	(set divisor (sys.random)) | ||
|  | 	(set i 1) | ||
|  | 	(while (< i limit) | ||
|  | 		(set divisor (bit-or (bit-shift divisor 30) (sys.random))) | ||
|  | 		(set i (+ i 1)) | ||
|  | 	) | ||
|  | 
 | ||
|  | 	(set quotient (/ dividend divisor)) | ||
|  | 	(set remainder (rem dividend divisor)) | ||
|  | 	(set derived_dividend (+ (* quotient divisor) remainder)) | ||
|  | 
 | ||
|  | 	(if (/= dividend derived_dividend) | ||
|  | 		(printf ">> dividend %O\n>> divisor %O\n>> quotient %O\n>> remainder %O\n>> derived_dividend %O\n" | ||
|  | 			dividend divisor quotient remainder derived_dividend) | ||
|  | 		(break) | ||
|  | 	) | ||
|  | ) | ||
|  | (printf "\n") |