create regress_simple for Rust
[liba.git] / test / regress_simple.h
blob0603710e82db0b31559ae33f8cdb9bc397c81964
1 #define MAIN(x) regress_simple##x
2 #include "test.h"
3 #include "a/regress_simple.h"
4 #include <time.h>
6 #define RAND_MAX_ 2147483647
7 static unsigned long rand_seed = 1;
8 static void srand_(unsigned long seed)
10 rand_seed = seed;
12 static long rand_(void)
14 rand_seed = (rand_seed * 1103515245 + 12345) % 2147483648;
15 return a_cast_s(long, rand_seed);
18 int main(int argc, char *argv[]) // NOLINT(misc-definitions-in-headers)
20 srand_(a_cast_s(a_ulong, time(A_NULL)));
21 main_init(argc, argv, 1);
23 a_float a = A_FLOAT_C(0.7);
24 a_float b = 12;
25 a_size n = 100;
26 char *endptr;
28 if (argc > 2) { a = strtonum(argv[2], &endptr); }
29 if (argc > 3) { b = strtonum(argv[3], &endptr); }
30 if (argc > 4) { n = strtoul(argv[4], &endptr, 0); }
32 a_float *x = a_new(a_float, A_NULL, n);
33 a_float *y = a_new(a_float, A_NULL, n);
34 long x_n = a_cast_s(long, n) * 10;
35 long y_n = a_cast_s(long, n) * 2;
37 for (a_size i = 0; i < n; ++i)
39 x[i] = a_cast_s(a_float, rand_() % x_n);
40 y[i] = a * x[i] + b + a_cast_s(a_float, rand_() % y_n) - a_cast_s(a_float, n);
43 a_regress_simple ctx;
44 a_regress_simple_init(&ctx, 0, 0);
45 a_regress_simple_ols(&ctx, n, x, y);
47 for (unsigned int i = 0; i < n; ++i)
49 a_float u = a_cast_s(a_float, i * 10);
50 a_float v = a_regress_simple_eval(&ctx, u);
51 debug(A_FLOAT_PRI("+.1", "f,") A_FLOAT_PRI("+.1", "f,")
52 A_FLOAT_PRI("+.1", "f,") A_FLOAT_PRI("+.1", "f\n"),
53 u, v, x[i], y[i]);
56 a_regress_simple_zero(&ctx);
58 a_die(x);
59 a_die(y);
61 #if defined(__cplusplus) && (__cplusplus > 201100L)
62 A_BUILD_ASSERT(std::is_pod<a_regress_simple>::value);
63 #endif /* __cplusplus */
65 return 0;