From 6b2349132b284808e4c6456114d7c2ff7a4876be Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 23 Jul 2023 15:43:35 +0200 Subject: [PATCH] add tests lognormal, and have them use special tolerances. --- test/makefile | 2 +- test/test | Bin 26568 -> 26608 bytes test/test.c | 114 +++++++++++++++++++++++++++++++++++++------------- 3 files changed, 85 insertions(+), 31 deletions(-) diff --git a/test/makefile b/test/makefile index 50cae10..6865ee0 100644 --- a/test/makefile +++ b/test/makefile @@ -37,7 +37,7 @@ run: $(SRC) $(OUTPUT) ./$(OUTPUT) verify: $(SRC) $(OUTPUT) - ./$(OUTPUT) | grep "NOT passed" || true + ./$(OUTPUT) | grep "NOT passed" -A 1 --group-separator='' || true time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo diff --git a/test/test b/test/test index e3f2968890748fde6f259d81e042eadd5d25640d..cd8449dd8cb760a957ec5fc9c00bc2876868c425 100755 GIT binary patch delta 6500 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 delta 6176 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 #include -#define N 1000 * 1000 -#define PERCENTAGE_TOLERANCE_UNIFORM 1.0/1000.0 -#define PERCENTAGE_TOLERANCE_NORMAL 5.0/1000.0 +#define PERCENTAGE_TOLERANCE 1.0/1000.0 +#define PERCENTAGE_TOLERANCE_LOGNORMAL 5.0/1000.0 #define MAX_NAME_LENGTH 500 // Structs @@ -28,16 +27,18 @@ void test_array_expectations(struct array_expectations e){ double delta_std = std - e.expected_std; - if(fabs(delta_mean) > e.tolerance){ + if(fabs(delta_mean)/fabs(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); + printf("Mean of %s: %f, vs expected mean: %f\n", e.name, mean, e.expected_mean); + printf("delta: %f, relative delta: %f\n", delta_mean, delta_mean/fabs(mean)); }else { printf("[x] Mean test for %s PASSED\n", e.name); } - if(fabs(delta_std) > e.tolerance){ + if(fabs(delta_std)/fabs(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); + printf("Std of %s: %f, vs expected std: %f\n", e.name, std, e.expected_std); + printf("delta: %f, relative delta: %f\n", delta_std, delta_std/fabs(std)); }else { printf("[x] Std test for %s PASSED\n", e.name); } @@ -48,29 +49,32 @@ void test_array_expectations(struct array_expectations e){ // Test unit uniform void test_unit_uniform(uint64_t* seed){ - double* unit_uniform_array = malloc(sizeof(double) * N); + int n = 1000 * 1000; + double* unit_uniform_array = malloc(sizeof(double) * n); - for(int i=0; i 0){ test_normal(mean, std, seed); } @@ -202,7 +237,25 @@ int main(){ test_normal(mean, std, seed); } } + */ + printf("Testing very small lognormals\n"); + for(int i=0; i<10; i++){ + double mean = sample_uniform(-1, 1, seed); + double std = sample_uniform(0, 1, seed); + if ( std > 0){ + test_lognormal(mean, std, seed); + } + } + printf("Testing small lognormals\n"); + for(int i=0; i<10; i++){ + double mean = sample_uniform(-1, 5, seed); + double std = sample_uniform(0, 5, seed); + if ( std > 0){ + test_lognormal(mean, std, seed); + } + } + /* printf("Testing beta distribution\n"); for(int i=0; i<100; i++){ double a = sample_uniform(0, 1000, seed); @@ -222,5 +275,6 @@ int main(){ } free(seed); + */ }