add solver framework
[sddekit.git] / test_hist.c
blob791382daca35cebdf344768f8e9201895a419fe3
1 /* Apache 2.0 INS-AMU 2015 */
3 #include <stdlib.h>
4 #include <string.h>
6 #include "sk_test.h"
7 #include "sk_hist.h"
9 void hist_t_fill(int n, double *t, int *indices, double *buf)
11 memcpy(buf, t, n*sizeof(double));
12 indices[0] = indices[0]; /* avoid unused warning */
14 #define ND 3
16 int test_hist()
18 int i, vi[ND], nb;
19 double dt, vd[ND], x[43];
20 struct sk_hist *h;
22 /* set up */
23 dt = 0.1;
24 vi[0] = 42;
25 vi[1] = 42;
26 vi[2] = 31;
27 vd[0] = 5.5 * dt;
28 vd[1] = 4.5 * dt;
29 vd[2] = 33.3 * dt;
30 h = malloc (sizeof(struct sk_hist));
32 sk_hist_init(h, ND, vi, vd, 0.0, dt);
33 sk_test_true(h->nd==ND);
34 sk_test_true(h->t==0.0);
35 sk_test_true(h->dt==dt);
36 sk_test_true(h->nu==2);
37 sk_test_true(h->lim[0]==0);
38 sk_test_true(h->lim[1]==36);
39 sk_test_true(h->lim[2]==8 + 36);
40 sk_test_true(h->len[0]==36);
41 sk_test_true(h->len[1]==8);
42 sk_test_true(h->pos[0]==0);
43 sk_test_true(h->pos[1]==0);
44 sk_test_true(h->uvi[0]==31);
45 sk_test_true(h->uvi[1]==42);
46 sk_test_true(h->maxvi==42);
47 sk_test_true(h->vi2i[31]==0);
48 sk_test_true(h->vi2i[42]==1);
49 sk_test_true(h->maxd[1]==vd[0]);
50 sk_test_true(h->maxd[0]==vd[2]);
51 sk_test_true(h->vi[0]==42);
52 sk_test_true(h->vi[1]==42);
53 sk_test_true(h->vi[2]==31);
54 sk_test_true(h->del[0]==vd[0]);
55 sk_test_true(h->del[1]==vd[1]);
56 sk_test_true(h->del[2]==vd[2]);
57 sk_test_true(h->buf!=NULL);
59 sk_hist_fill(h, &hist_t_fill);
60 for (i=0; i<35; i++)
61 sk_test_true(h->buf[i]==-i*dt);
62 sk_test_true(h->buf[35]==dt);
63 for (i=0; i<7; i++)
64 sk_test_true(h->buf[36+i]==-i*dt);
65 sk_test_true(h->buf[36+7]==dt);
67 sk_hist_get(h, dt/3, x);
68 sk_test_tol(x[0], -vd[0]+dt/3, 1e-15);
69 sk_test_tol(x[1], -vd[1]+dt/3, 1e-15);
71 x[31] = 1.5;
72 x[42] = 1.0;
73 sk_hist_set(h, dt/2.0, x);
74 sk_test_tol(h->buf[35], 3.0, 1e-15);
75 sk_test_tol(h->buf[36 + 7], 2.0, 1e-15);
77 nb = sizeof(struct sk_hist);
78 nb += sizeof(int) * (3+2+2+2+3+42);
79 nb += sizeof(double) * (44+2+3);
80 sk_test_true(nb == sk_hist_nbytes(h));
82 sk_hist_free(h);
83 free(h);
85 return 0;