#include "../squiggle.h" #include #include #include #include #define N 1000 * 1000 #define PERCENTAGE_TOLERANCE_UNIFORM 1.0/1000.0 #define PERCENTAGE_TOLERANCE_NORMAL 5.0/1000.0 #define MAX_NAME_LENGTH 500 // Structs struct array_expectations { double* array; int n; char* name; double expected_mean; double expected_std; double tolerance; }; void test_array_expectations(struct array_expectations e){ double mean = array_mean(e.array, e.n); double delta_mean = mean - e.expected_mean; double std = array_std(e.array, e.n); double delta_std = std - e.expected_std; if(fabs(delta_mean) > e.tolerance){ printf("[-] Mean test for %s NOT passed.\n", e.name); printf("Mean of %s: %f, vs expected mean: %f, delta: %f\n", e.name, mean, e.expected_mean, delta_mean); }else { printf("[x] Mean test for %s PASSED\n", e.name); } if(fabs(delta_std) > e.tolerance){ printf("[-] Std test for %s NOT passed.\n", e.name); printf("Std of %s: %f, vs expected std: %f, delta: %f\n", e.name, std, e.expected_std, delta_std); }else { printf("[x] Std test for %s PASSED\n", e.name); } printf("\n"); } // Test unit uniform void test_unit_uniform(uint64_t* seed){ double* unit_uniform_array = malloc(sizeof(double) * N); for(int i=0; i start){ test_uniform(start, end, seed); } } printf("Testing wide uniforms\n"); for(int i=0; i<100; i++){ double start = sample_uniform(-1000 * 1000, 1000 * 1000, seed); double end = sample_uniform(-1000 * 1000, 1000 * 1000, seed); if ( end > start){ test_uniform(start, end, seed); } } printf("Testing unit normal\n"); test_unit_normal(seed); printf("Testing small normals\n"); for(int i=0; i<100; i++){ double mean = sample_normal(-10, 10, seed); double std = sample_normal(0, 10, seed); if ( std > 0){ test_normal(mean, std, seed); } } printf("Testing larger normals\n"); for(int i=0; i<100; i++){ double mean = sample_uniform(-1000 * 1000, 1000 * 1000, seed); double std = sample_uniform(0, 1000 * 1000, seed); if ( std > 0){ test_normal(mean, std, seed); } } printf("Testing beta distribution\n"); for(int i=0; i<100; i++){ double a = sample_uniform(0, 1000, seed); double b = sample_uniform(0, 1000, seed); if ( (a > 0) && ( b >0)){ test_beta(a, b, seed); } } printf("Testing larger beta distributions\n"); for(int i=0; i<100; i++){ double a = sample_uniform(0, 1000 * 1000, seed); double b = sample_uniform(0, 1000 * 1000, seed); if ( (a > 0) && ( b >0)){ test_beta(a, b, seed); } } free(seed); }