]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add unittests for finding the third quartile of a set.
authorGeorge Kadianakis <desnacked@riseup.net>
Thu, 24 Jul 2014 11:31:49 +0000 (14:31 +0300)
committerNick Mathewson <nickm@torproject.org>
Tue, 9 Sep 2014 16:28:15 +0000 (12:28 -0400)
src/common/container.h
src/or/dirserv.c
src/test/test_containers.c

index 26ac85120d745a56263b9ac24b4b27552ce3d787..c3756c83a6b7f136193160d32c3251b19b594087 100644 (file)
@@ -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
 
index 1139dc1713139f2fac9f9ab9af8e46eebad27a7b..a5ad742b96143ed066dbd1cd1c3fc2fb6f19e5dc 100644 (file)
@@ -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);
   }
 
index a9f5e727f4a0b4a237b2ccefe9c88169375f7f4c..d7b7b3cfeecdb3474a5df484feaa3bb6c43a9e1f 100644 (file)
@@ -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:
   ;
 }