]> mj.ucw.cz Git - libucw.git/blob - ucw/table-test-2.c
tableprinter: table_init now makes a copy of its argument
[libucw.git] / ucw / table-test-2.c
1 /*
2  *      Unit tests of table printer
3  *
4  *      (c) 2014 Robert Kessl <robert.kessl@economia.cz>
5  */
6
7 #include <ucw/lib.h>
8 #include <ucw/table.h>
9 #include <ucw/table-types.h>
10 #include <ucw/opt.h>
11 #include <stdio.h>
12
13 enum test_table_cols {
14   TEST_COL0_SIZE, TEST_COL1_TS
15 };
16
17 static struct table test_tbl = {
18   TBL_COLUMNS {
19     [TEST_COL0_SIZE] = TBL_COL_SIZE_FMT("size", 15, UNIT_BYTE),
20     [TEST_COL1_TS] = TBL_COL_TIMESTAMP("ts", 20),
21     TBL_COL_END
22   },
23   TBL_OUTPUT_HUMAN_READABLE,
24 };
25
26 static void do_test(void)
27 {
28   struct fastbuf *out;
29   out = bfdopen_shared(1, 4096);
30   struct table *tbl = table_init(&test_tbl);
31   table_start(tbl, out);
32
33   u64 test_time = 1403685533;
34   s64 test_size = 4LU*(1024LU * 1024LU * 1024LU);
35
36   table_col_size(tbl, TEST_COL0_SIZE, test_size);
37   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
38   table_end_row(tbl);
39
40   tbl->column_order[TEST_COL0_SIZE].output_type = UNIT_KILOBYTE;
41   table_col_size(tbl, TEST_COL0_SIZE, test_size);
42   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
43   table_end_row(tbl);
44
45   tbl->column_order[TEST_COL0_SIZE].output_type = UNIT_MEGABYTE;
46   table_col_size(tbl, TEST_COL0_SIZE, test_size);
47   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
48   table_end_row(tbl);
49
50   tbl->column_order[TEST_COL0_SIZE].output_type = UNIT_GIGABYTE;
51   tbl->column_order[TEST_COL1_TS].output_type = TIMESTAMP_DATETIME;
52   table_col_size(tbl, TEST_COL0_SIZE, test_size);
53   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
54   table_end_row(tbl);
55
56   test_size = test_size * 1024LU;
57   tbl->column_order[TEST_COL0_SIZE].output_type = UNIT_TERABYTE;
58   tbl->column_order[TEST_COL1_TS].output_type = TIMESTAMP_DATETIME;
59   table_col_size(tbl, TEST_COL0_SIZE, test_size);
60   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
61   table_end_row(tbl);
62
63   table_end(tbl);
64   table_cleanup(tbl);
65
66   bclose(out);
67 }
68
69
70
71 static struct table test_tbl2 = {
72   TBL_COLUMNS {
73     [TEST_COL0_SIZE] = TBL_COL_SIZE_FMT("size", 15, UNIT_BYTE),
74     [TEST_COL1_TS] = TBL_COL_TIMESTAMP("ts", 20),
75     TBL_COL_END
76   },
77   TBL_OUTPUT_HUMAN_READABLE,
78 };
79
80 static void do_test2(void)
81 {
82   struct fastbuf *out;
83   out = bfdopen_shared(1, 4096);
84   struct table *tbl = table_init(&test_tbl2);
85   table_set_col_order_by_name(tbl, "");
86   const char *err = table_set_option_value(tbl, "cols", "size[kb],size[mb],size[gb],size[tb],ts[datetime],ts[timestamp]");
87   if(err) {
88     opt_failure("err in table_set_option_value: '%s'.", err);
89     abort();
90   }
91   table_start(tbl, out);
92
93   u64 test_time = 1403685533;
94   s64 test_size = 4LU*(1024LU * 1024LU * 1024LU);
95
96   table_col_size(tbl, TEST_COL0_SIZE, test_size);
97   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
98   table_end_row(tbl);
99
100   table_col_size(tbl, TEST_COL0_SIZE, test_size);
101   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
102   table_end_row(tbl);
103
104   test_size = test_size * 1024LU;
105
106   table_col_size(tbl, TEST_COL0_SIZE, test_size);
107   table_col_timestamp(tbl, TEST_COL1_TS, test_time);
108   table_end_row(tbl);
109
110   table_end(tbl);
111   table_cleanup(tbl);
112
113   bclose(out);
114 }
115
116 int main(int argc UNUSED, char **argv UNUSED)
117 {
118   do_test();
119   do_test2();
120
121   return 0;
122 }
123