3 #include "storage_number.h"
6 #include "web_buffer.h"
8 int unit_test_storage()
12 calculated_number c, a = 0, d, f;
13 int i, j, g, r = 0, l;
15 for(g = -1; g <= 1 ; g++) {
20 for(j = 0; j < 9 ;j++) {
23 for(i = 0; i < 21 ;i++, c *= 10) {
24 s = pack_storage_number(c);
25 d = unpack_storage_number(s);
29 l = print_calculated_number(buffer, d);
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);
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);
45 int unit_test(long delay, long shift)
47 static int repeat = 0;
51 snprintf(name, 100, "unittest-%d-%ld-%ld", repeat, delay, shift);
53 debug_flags = 0xffffffff;
54 memory_mode = NETDATA_MEMORY_MODE_RAM;
62 RRD_STATS *st = rrd_stats_create("netdata", name, name, "netdata", "Unit Testing", "a value", 1, 1, CHART_TYPE_LINE);
65 RRD_DIMENSION *rdabs = NULL;
66 RRD_DIMENSION *rdinc = NULL;
67 RRD_DIMENSION *rdabst = NULL;
68 RRD_DIMENSION *rdabsi = NULL;
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);
75 long increment = 1000;
76 collected_number i = 0;
78 unsigned long c, dimensions = 0;
80 for(rd = st->dimensions ; rd ; rd = rd->next) dimensions++;
82 for(c = 0; c < 20 ;c++) {
85 fprintf(stderr, "\n\nLOOP = %lu, DELAY = %ld, VALUE = " COLLECTED_NUMBER_FORMAT "\n", c, delay, i);
87 rrd_stats_next_usec(st, delay);
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);
95 gettimeofday(&st->last_collected_time, NULL);
96 st->last_collected_time.tv_usec = shift;
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;
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);
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);
114 for(rd = st->dimensions ; rd ; rd = rd->next) {
115 fprintf(stderr, "\t %s " STORAGE_NUMBER_FORMAT " -> ", rd->id, rd->values[c]);
119 + (increment * (1000000 - shift) / 1000000)
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;
128 if(v == rd->values[c]) fprintf(stderr, "passed.\n");
130 fprintf(stderr, "ERROR! (expected " STORAGE_NUMBER_FORMAT ")\n", v);
137 fprintf(stderr, "\n\nUNIT TEST(%ld, %ld) FAILED\n\n", delay, shift);