]> arthur.barton.de Git - netdata.git/blob - src/unit_test.c
splitted netdata to multiple source files
[netdata.git] / src / unit_test.c
1 #include <stdio.h>
2
3 #include "storage_number.h"
4 #include "rrd.h"
5 #include "log.h"
6 #include "web_buffer.h"
7
8 int unit_test_storage()
9 {
10         char buffer[100];
11         storage_number s;
12         calculated_number c, a = 0, d, f;
13         int i, j, g, r = 0, l;
14
15         for(g = -1; g <= 1 ; g++) {
16                 a = 0;
17
18                 if(!g) continue;
19
20                 for(j = 0; j < 9 ;j++) {
21                         a += 0.0000001;
22                         c = a * g;
23                         for(i = 0; i < 21 ;i++, c *= 10) {
24                                 s = pack_storage_number(c);
25                                 d = unpack_storage_number(s);
26
27                                 f = d / c;
28
29                                 l = print_calculated_number(buffer, d);
30
31                                 if(f < 0.99999 || f > 1.00001) {
32                                         fprintf(stderr, "\nERROR\n" CALCULATED_NUMBER_FORMAT " original\n" CALCULATED_NUMBER_FORMAT " unpacked, (stored as 0x%08X)\n%s printed as %d bytes\n", c, d, s, buffer, l);
33                                         r++;
34                                 }
35                                 else {
36                                         fprintf(stderr, "\nOK\n" CALCULATED_NUMBER_FORMAT " original\n" CALCULATED_NUMBER_FORMAT " unpacked, (stored as 0x%08X)\n%s printed as %d bytes\n", c, d, s, buffer, l);
37                                 }
38                         }
39                 }
40         }
41
42         return r;
43 }
44
45 int unit_test(long delay, long shift)
46 {
47         static int repeat = 0;
48         repeat++;
49
50         char name[101];
51         snprintf(name, 100, "unittest-%d-%ld-%ld", repeat, delay, shift);
52
53         debug_flags = 0xffffffff;
54         memory_mode = NETDATA_MEMORY_MODE_RAM;
55         update_every = 1;
56
57         int do_abs = 1;
58         int do_inc = 1;
59         int do_abst = 1;
60         int do_absi = 1;
61
62         RRD_STATS *st = rrd_stats_create("netdata", name, name, "netdata", "Unit Testing", "a value", 1, 1, CHART_TYPE_LINE);
63         st->debug = 1;
64
65         RRD_DIMENSION *rdabs = NULL;
66         RRD_DIMENSION *rdinc = NULL;
67         RRD_DIMENSION *rdabst = NULL;
68         RRD_DIMENSION *rdabsi = NULL;
69
70         if(do_abs) rdabs = rrd_stats_dimension_add(st, "absolute", "absolute", 1, 1, RRD_DIMENSION_ABSOLUTE);
71         if(do_inc) rdinc = rrd_stats_dimension_add(st, "incremental", "incremental", 1, 1 * update_every, RRD_DIMENSION_INCREMENTAL);
72         if(do_abst) rdabst = rrd_stats_dimension_add(st, "percentage-of-absolute-row", "percentage-of-absolute-row", 1, 1, RRD_DIMENSION_PCENT_OVER_ROW_TOTAL);
73         if(do_absi) rdabsi = rrd_stats_dimension_add(st, "percentage-of-incremental-row", "percentage-of-incremental-row", 1, 1, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL);
74
75         long increment = 1000;
76         collected_number i = 0;
77
78         unsigned long c, dimensions = 0;
79         RRD_DIMENSION *rd;
80         for(rd = st->dimensions ; rd ; rd = rd->next) dimensions++;
81
82         for(c = 0; c < 20 ;c++) {
83                 i += increment;
84
85                 fprintf(stderr, "\n\nLOOP = %lu, DELAY = %ld, VALUE = " COLLECTED_NUMBER_FORMAT "\n", c, delay, i);
86                 if(c) {
87                         rrd_stats_next_usec(st, delay);
88                 }
89                 if(do_abs) rrd_stats_dimension_set(st, "absolute", i);
90                 if(do_inc) rrd_stats_dimension_set(st, "incremental", i);
91                 if(do_abst) rrd_stats_dimension_set(st, "percentage-of-absolute-row", i);
92                 if(do_absi) rrd_stats_dimension_set(st, "percentage-of-incremental-row", i);
93
94                 if(!c) {
95                         gettimeofday(&st->last_collected_time, NULL);
96                         st->last_collected_time.tv_usec = shift;
97                 }
98
99                 // prevent it from deleting the dimensions
100                 for(rd = st->dimensions ; rd ; rd = rd->next) rd->last_collected_time.tv_sec = st->last_collected_time.tv_sec;
101
102                 rrd_stats_done(st);
103         }
104
105         unsigned long oincrement = increment;
106         increment = increment * st->update_every * 1000000 / delay;
107         fprintf(stderr, "\n\nORIGINAL INCREMENT: %lu, INCREMENT %lu, DELAY %lu, SHIFT %lu\n", oincrement * 10, increment * 10, delay, shift);
108
109         int ret = 0;
110         storage_number v;
111         for(c = 0 ; c < st->counter ; c++) {
112                 fprintf(stderr, "\nPOSITION: c = %lu, VALUE %lu\n", c, (oincrement + c * increment + increment * (1000000 - shift) / 1000000 )* 10);
113
114                 for(rd = st->dimensions ; rd ; rd = rd->next) {
115                         fprintf(stderr, "\t %s " STORAGE_NUMBER_FORMAT "   ->   ", rd->id, rd->values[c]);
116
117                         if(rd == rdabs) v = 
118                                 (         oincrement 
119                                         + (increment * (1000000 - shift) / 1000000)
120                                         + c * increment
121                                 ) * 10;
122
123                         else if(rd == rdinc) v = (c?(increment):(increment * (1000000 - shift) / 1000000)) * 10;
124                         else if(rd == rdabst) v = oincrement / dimensions;
125                         else if(rd == rdabsi) v = oincrement / dimensions;
126                         else v = 0;
127
128                         if(v == rd->values[c]) fprintf(stderr, "passed.\n");
129                         else {
130                                 fprintf(stderr, "ERROR! (expected " STORAGE_NUMBER_FORMAT ")\n", v);
131                                 ret = 1;
132                         }
133                 }
134         }
135
136         if(ret)
137                 fprintf(stderr, "\n\nUNIT TEST(%ld, %ld) FAILED\n\n", delay, shift);
138
139         return ret;
140 }
141