You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							67 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							67 lines
						
					
					
						
							1.6 KiB
						
					
					
				| #include "test_I.h" | |
|  | |
| int test_I_div (int iterations) | |
| { | |
| 	int error = 0; | |
| 	int i; | |
| 	// Check floor. | |
| 	for (i = iterations; i > 0; i--) { | |
| 		cl_I a = testrandom_I(); | |
| 		cl_I b = testrandom_I(); | |
| 		if (b != 0) { | |
| 			cl_I_div_t qr = floor2(a,b); | |
| 			const cl_I& q = qr.quotient; | |
| 			const cl_I& r = qr.remainder; | |
| 			ASSERT2(a == q*b+r, a,b); | |
| 			ASSERT2(b >= 0 ? (r >= 0 && r < b) : (r <= 0 && r > b), a,b); | |
| 		} | |
| 	} | |
| 	// Check ceiling. | |
| 	for (i = iterations; i > 0; i--) { | |
| 		cl_I a = testrandom_I(); | |
| 		cl_I b = testrandom_I(); | |
| 		if (b != 0) { | |
| 			cl_I_div_t qr = ceiling2(a,b); | |
| 			const cl_I& q = qr.quotient; | |
| 			const cl_I& r = qr.remainder; | |
| 			ASSERT2(a == q*b+r, a,b); | |
| 			ASSERT2(b >= 0 ? (r <= 0 && r > -b) : (r >= 0 && r < -b), a,b); | |
| 		} | |
| 	} | |
| 	// Check truncate. | |
| 	for (i = iterations; i > 0; i--) { | |
| 		cl_I a = testrandom_I(); | |
| 		cl_I b = testrandom_I(); | |
| 		if (b != 0) { | |
| 			cl_I_div_t qr = truncate2(a,b); | |
| 			const cl_I& q = qr.quotient; | |
| 			const cl_I& r = qr.remainder; | |
| 			ASSERT2(a == q*b+r, a,b); | |
| 			if (b >= 0) | |
| 				if (a >= 0) | |
| 					{ ASSERT2(r >= 0 && r < b, a,b); } | |
| 				else | |
| 					{ ASSERT2(r <= 0 && r > -b, a,b); } | |
| 			else | |
| 				if (a >= 0) | |
| 					{ ASSERT2(r >= 0 && r < -b, a,b); } | |
| 				else | |
| 					{ ASSERT2(r <= 0 && r > b, a,b); } | |
| 		} | |
| 	} | |
| 	// Check round. | |
| 	for (i = iterations; i > 0; i--) { | |
| 		cl_I a = testrandom_I(); | |
| 		cl_I b = testrandom_I(); | |
| 		if (b != 0) { | |
| 			cl_I_div_t qr = round2(a,b); | |
| 			const cl_I& q = qr.quotient; | |
| 			const cl_I& r = qr.remainder; | |
| 			ASSERT2(a == q*b+r, a,b); | |
| 			ASSERT2(2*abs(r) <= abs(b), a,b); | |
| 			if (2*abs(r) == abs(b)) | |
| 				ASSERT2(evenp(q), a,b); | |
| 		} | |
| 	} | |
| 	return error; | |
| }
 |