add random tests for inverse trigonometric functions
This commit is contained in:
		@ -377,3 +377,100 @@ TEST_CASE("tan random"){
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_CASE("atan random"){
 | 
			
		||||
	std::default_random_engine gen;
 | 
			
		||||
	std::uniform_int_distribution<int> distrib(0, 99);
 | 
			
		||||
	std::uniform_int_distribution<int> exp_distrib(-1, 0); //restrict range for now
 | 
			
		||||
	std::uniform_int_distribution<int> sign_distrib(0, 1);
 | 
			
		||||
	for (int j = 0; j < NUM_RAND_TRIG_TESTS; j++){
 | 
			
		||||
		for (int i = 0; i < DEC80_NUM_LSU; i++){
 | 
			
		||||
			AccDecn.lsu[i] = distrib(gen);
 | 
			
		||||
		}
 | 
			
		||||
		int exp = exp_distrib(gen);
 | 
			
		||||
		int sign = sign_distrib(gen);
 | 
			
		||||
		set_exponent(&AccDecn, exp, sign);
 | 
			
		||||
		remove_leading_zeros(&AccDecn);
 | 
			
		||||
		int lsu0 = AccDecn.lsu[0];
 | 
			
		||||
		exp = get_exponent(&AccDecn);
 | 
			
		||||
		CAPTURE(lsu0);
 | 
			
		||||
		CAPTURE(exp);
 | 
			
		||||
		CAPTURE(sign);
 | 
			
		||||
		if (exp <= -6){
 | 
			
		||||
			//extremely small
 | 
			
		||||
			atan_test(10000);
 | 
			
		||||
		} else if (exp < -1 || (exp == -1 && lsu0 == 0)){
 | 
			
		||||
			//very small
 | 
			
		||||
			atan_test(100);
 | 
			
		||||
		} else if ((exp == -1 && lsu0 < 10) || (exp == 0 && lsu0 == 0)){
 | 
			
		||||
			//small
 | 
			
		||||
			atan_test(3);
 | 
			
		||||
		} else {
 | 
			
		||||
			atan_test(0.02);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_CASE("asin random"){
 | 
			
		||||
	std::default_random_engine gen;
 | 
			
		||||
	std::uniform_int_distribution<int> distrib(0, 99);
 | 
			
		||||
	std::uniform_int_distribution<int> exp_distrib(-2, -1); //restrict range for now
 | 
			
		||||
	std::uniform_int_distribution<int> sign_distrib(0, 1);
 | 
			
		||||
	for (int j = 0; j < NUM_RAND_TRIG_TESTS; j++){
 | 
			
		||||
		for (int i = 0; i < DEC80_NUM_LSU; i++){
 | 
			
		||||
			AccDecn.lsu[i] = distrib(gen);
 | 
			
		||||
		}
 | 
			
		||||
		int exp = exp_distrib(gen);
 | 
			
		||||
		int sign = sign_distrib(gen);
 | 
			
		||||
		set_exponent(&AccDecn, exp, sign);
 | 
			
		||||
		remove_leading_zeros(&AccDecn);
 | 
			
		||||
		int lsu0 = AccDecn.lsu[0];
 | 
			
		||||
		exp = get_exponent(&AccDecn);
 | 
			
		||||
		CAPTURE(lsu0);
 | 
			
		||||
		CAPTURE(exp);
 | 
			
		||||
		CAPTURE(sign);
 | 
			
		||||
		if (exp <= -7) {
 | 
			
		||||
			//extremely small
 | 
			
		||||
			asin_test(50000);
 | 
			
		||||
		} else if (exp < -5) {
 | 
			
		||||
			//very very small
 | 
			
		||||
			asin_test(1000);
 | 
			
		||||
		} else if (exp < -1 || (exp == -1 && lsu0 == 0)){
 | 
			
		||||
			//very small
 | 
			
		||||
			asin_test(100);
 | 
			
		||||
		} else if ((exp == -1 && lsu0 < 10) || (exp == 0 && lsu0 == 0)){
 | 
			
		||||
			//small
 | 
			
		||||
			asin_test(0.5);
 | 
			
		||||
		} else {
 | 
			
		||||
			asin_test(0.02);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_CASE("acos random"){
 | 
			
		||||
	std::default_random_engine gen;
 | 
			
		||||
	std::uniform_int_distribution<int> distrib(0, 99);
 | 
			
		||||
	std::uniform_int_distribution<int> exp_distrib(-2, -1); //restrict range for now
 | 
			
		||||
	std::uniform_int_distribution<int> sign_distrib(0, 1);
 | 
			
		||||
	for (int j = 0; j < NUM_RAND_TRIG_TESTS; j++){
 | 
			
		||||
		for (int i = 0; i < DEC80_NUM_LSU; i++){
 | 
			
		||||
			AccDecn.lsu[i] = distrib(gen);
 | 
			
		||||
		}
 | 
			
		||||
		int exp = exp_distrib(gen);
 | 
			
		||||
		int sign = sign_distrib(gen);
 | 
			
		||||
		set_exponent(&AccDecn, exp, sign);
 | 
			
		||||
		remove_leading_zeros(&AccDecn);
 | 
			
		||||
		int lsu0 = AccDecn.lsu[0];
 | 
			
		||||
		exp = get_exponent(&AccDecn);
 | 
			
		||||
		CAPTURE(lsu0);
 | 
			
		||||
		CAPTURE(exp);
 | 
			
		||||
		CAPTURE(sign);
 | 
			
		||||
		if ((exp == -1 && lsu0 == 99)){
 | 
			
		||||
			//near 1
 | 
			
		||||
			acos_test(10);
 | 
			
		||||
		} else {
 | 
			
		||||
			acos_test(0.02);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user