change a_float to a_real
[liba.git] / test / regress_simple.h
blobf7fcdde35677fd64442d3184677591f929a42263
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 * 1103515245UL + 12345) % 2147483648UL;
15 return a_cast_s(long, rand_seed);
18 int main(int argc, char *argv[]) /* NOLINT(misc-definitions-in-headers) */
20 char *endptr;
21 long x_n, y_n;
22 a_real *x, *y;
23 a_size i, n = 100;
24 a_real a = A_REAL_C(0.7);
25 a_real b = 12;
26 a_regress_simple ctx;
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 x = a_new(a_real, A_NULL, n);
33 y = a_new(a_real, A_NULL, n);
34 x_n = a_cast_s(long, n) * 10;
35 y_n = a_cast_s(long, n) * 2;
37 srand_(a_cast_s(a_ulong, time(A_NULL)));
38 main_init(argc, argv, 1);
39 for (i = 0; i < n; ++i)
41 x[i] = a_cast_s(a_real, rand_() % x_n);
42 y[i] = a * x[i] + b + a_cast_s(a_real, rand_() % y_n) - a_cast_s(a_real, n);
45 a_regress_simple_init(&ctx, 0, 0);
46 a_regress_simple_ols(&ctx, n, x, y);
48 for (i = 0; i < n; ++i)
50 a_real u = a_cast_s(a_real, i * 10);
51 a_real v = a_regress_simple_eval(&ctx, u);
52 debug("%+.1" A_REAL_PRI "f,%+.1" A_REAL_PRI "f,%+.1" A_REAL_PRI "f,%+.1" A_REAL_PRI "f\n", u, v, x[i], y[i]);
55 a_regress_simple_zero(&ctx);
57 a_die(x);
58 a_die(y);
60 #if defined(__cplusplus) && (__cplusplus > 201100L)
61 A_BUILD_ASSERT(std::is_pod<a_regress_simple>::value);
62 #endif /* __cplusplus */
64 return 0;