X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Frt%2Frust_test_helpers.c;h=320cd3dbd851a4e638f5c008da30c4de74413c46;hb=46dcffd05b46e62c27629f4231fc794e94e614a8;hp=f7895d694c8246923e15c57a8839c0811ff62ff6;hpb=fab9dd6c801b6aa13f97095e501e40016ee5bcec;p=rust.git 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 #include +#include // 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; +}