diff options
Diffstat (limited to 'src/rt/rust_test_helpers.c')
| -rw-r--r-- | src/rt/rust_test_helpers.c | 16 |
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; +} |
