diff options
author | George Kadianakis <desnacked@riseup.net> | 2014-07-24 14:31:49 +0300 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2014-09-09 12:28:15 -0400 |
commit | 01800ea1e4e0312c8b204541a8e43d7aad67ad61 (patch) | |
tree | 83d81a65e11e78644055a0a39cdbd77ebe02bfd9 /src | |
parent | 8e3939519999f73fadad1a8b8cff75aad0667312 (diff) | |
download | tor-01800ea1e4e0312c8b204541a8e43d7aad67ad61.tar.gz tor-01800ea1e4e0312c8b204541a8e43d7aad67ad61.zip |
Add unittests for finding the third quartile of a set.
Diffstat (limited to 'src')
-rw-r--r-- | src/common/container.h | 6 | ||||
-rw-r--r-- | src/or/dirserv.c | 3 | ||||
-rw-r--r-- | src/test/test_containers.c | 23 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/common/container.h b/src/common/container.h index 26ac85120d..c3756c83a6 100644 --- a/src/common/container.h +++ b/src/common/container.h @@ -689,5 +689,11 @@ median_int32(int32_t *array, int n_elements) return find_nth_int32(array, n_elements, (n_elements-1)/2); } +static INLINE uint32_t +third_quartile_uint32(uint32_t *array, int n_elements) +{ + return find_nth_uint32(array, n_elements, (n_elements*3)/4); +} + #endif diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 1139dc1713..a5ad742b96 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -1420,7 +1420,8 @@ dirserv_compute_performance_thresholds(routerlist_t *rl, /* (Now bandwidths is sorted.) */ if (fast_bandwidth_kb < ROUTER_REQUIRED_MIN_BANDWIDTH/(2 * 1000)) fast_bandwidth_kb = bandwidths_kb[n_active/4]; - guard_bandwidth_including_exits_kb = bandwidths_kb[n_active*3/4]; + guard_bandwidth_including_exits_kb = + third_quartile_uint32(bandwidths_kb, n_active); guard_tk = find_nth_long(tks, n_active, n_active/8); } diff --git a/src/test/test_containers.c b/src/test/test_containers.c index a9f5e727f4..d7b7b3cfee 100644 --- a/src/test/test_containers.c +++ b/src/test/test_containers.c @@ -835,6 +835,7 @@ static void test_container_order_functions(void) { int lst[25], n = 0; + unsigned int lst2[25]; // int a=12,b=24,c=25,d=60,e=77; #define median() median_int(lst, n) @@ -856,6 +857,28 @@ test_container_order_functions(void) test_eq(25, median()); /* 12,12,24,25,60,77,77 */ #undef median +#define third_quartile() third_quartile_uint32(lst2, n) + + n = 0; + lst2[n++] = 1; + test_eq(1, third_quartile()); /* ~1~ */ + lst2[n++] = 2; + test_eq(2, third_quartile()); /* 1, ~2~ */ + lst2[n++] = 3; + lst2[n++] = 4; + lst2[n++] = 5; + test_eq(4, third_quartile()); /* 1, 2, 3, ~4~, 5 */ + lst2[n++] = 6; + lst2[n++] = 7; + lst2[n++] = 8; + lst2[n++] = 9; + test_eq(7, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */ + lst2[n++] = 10; + lst2[n++] = 11; + test_eq(9, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */ + +#undef third_quartile + done: ; } |