about summary refs log tree commit diff
path: root/src/rt/rust_test_helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_test_helpers.c')
-rw-r--r--src/rt/rust_test_helpers.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/rt/rust_test_helpers.c b/src/rt/rust_test_helpers.c
index f7895d694c8..320cd3dbd85 100644
--- a/src/rt/rust_test_helpers.c
+++ b/src/rt/rust_test_helpers.c
@@ -12,6 +12,7 @@
 
 #include <stdint.h>
 #include <assert.h>
+#include <stdarg.h>
 
 // These functions are used in the unit tests for C ABI calls.
 
@@ -222,3 +223,18 @@ uint64_t get_z(struct S s) {
 uint64_t get_c_many_params(void *a, void *b, void *c, void *d, struct quad f) {
     return f.c;
 }
+
+// Calculates the average of `(x + y) / n` where x: i64, y: f64. There must be exactly n pairs
+// passed as variadic arguments.
+double rust_interesting_average(uint64_t n, ...) {
+    va_list pairs;
+    double sum = 0.0;
+    int i;
+    va_start(pairs, n);
+    for(i = 0; i < n; i += 1) {
+        sum += (double)va_arg(pairs, int64_t);
+        sum += va_arg(pairs, double);
+    }
+    va_end(pairs);
+    return sum / n;
+}