X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Ftable-test.c;h=1f888d0d428f93b57c29b349bc7bc6776f742df1;hb=dbadbb6cd3cb9c845205b1dc3883a76dc36ac7fa;hp=b033720838e5d83964660057600b85051e82e4c5;hpb=dc199c55a6a07d9f5bed3a8c44c6de0edb19683c;p=libucw.git diff --git a/ucw/table-test.c b/ucw/table-test.c index b0337208..1f888d0d 100644 --- a/ucw/table-test.c +++ b/ucw/table-test.c @@ -6,22 +6,25 @@ #include #include +#include #include #include enum test_table_cols { - test_col0_str, test_col1_int, test_col2_uint, test_col3_bool, test_col4_double + TEST_COL0_STR, TEST_COL1_INT, TEST_COL2_UINT, TEST_COL3_BOOL, TEST_COL4_DOUBLE, TEST_COL5_SIZE, TEST_COL6_TIME }; -static uint test_column_order[] = { test_col3_bool, test_col4_double, test_col2_uint,test_col1_int, test_col0_str }; +static struct table_col_instance test_column_order[] = { TBL_COL(TEST_COL3_BOOL), TBL_COL(TEST_COL4_DOUBLE), TBL_COL(TEST_COL2_UINT), TBL_COL(TEST_COL1_INT), TBL_COL(TEST_COL0_STR) }; -static struct table test_tbl = { +static struct table_template test_tbl = { TBL_COLUMNS { - TBL_COL_STR(test, col0_str, 20), - TBL_COL_INT(test, col1_int, 8), - TBL_COL_UINT(test, col2_uint, 9), - TBL_COL_BOOL(test, col3_bool, 9), - TBL_COL_DOUBLE(test, col4_double, 11, 2), + [TEST_COL0_STR] = TBL_COL_STR("col0_str", 20), + [TEST_COL1_INT] = TBL_COL_INT("col1_int", 8), + [TEST_COL2_UINT] = TBL_COL_UINT("col2_uint", 9), + [TEST_COL3_BOOL] = TBL_COL_BOOL("col3_bool", 9), + [TEST_COL4_DOUBLE] = TBL_COL_DOUBLE_FMT("col4_double", 11, XTYPE_FMT_PRETTY), + [TEST_COL5_SIZE] = TBL_COL_SIZE("col5_size", 11), + [TEST_COL6_TIME] = TBL_COL_TIMESTAMP("col6_timestamp", 20), TBL_COL_END }, TBL_COL_ORDER(test_column_order), @@ -30,14 +33,14 @@ static struct table test_tbl = { }; enum test_default_order_cols { - test_default_order_col0_int, test_default_order_col1_int, test_default_order_col2_int + TEST_DEFAULT_ORDER_COL0_INT, TEST_DEFAULT_ORDER_COL1_INT, TEST_DEFAULT_ORDER_COL2_INT }; -static struct table test_default_order_tbl = { +static struct table_template test_default_order_tbl = { TBL_COLUMNS { - TBL_COL_INT(test_default_order, col0_int, 8), - TBL_COL_INT(test_default_order, col1_int, 9), - TBL_COL_INT(test_default_order, col2_int, 9), + [TEST_DEFAULT_ORDER_COL0_INT] = TBL_COL_INT("col0_int", 8), + [TEST_DEFAULT_ORDER_COL1_INT] = TBL_COL_INT("col1_int", 9), + [TEST_DEFAULT_ORDER_COL2_INT] = TBL_COL_INT("col2_int", 9), TBL_COL_END }, TBL_OUTPUT_HUMAN_READABLE, @@ -46,59 +49,67 @@ static struct table test_default_order_tbl = { static void do_default_order_test(struct fastbuf *out) { - table_init(&test_default_order_tbl, out); - table_start(&test_default_order_tbl); + struct table *tbl = table_init(&test_default_order_tbl); - table_set_int(&test_default_order_tbl, test_default_order_col0_int, 0); - table_set_int(&test_default_order_tbl, test_default_order_col1_int, 1); - table_set_int(&test_default_order_tbl, test_default_order_col2_int, 2); - table_end_row(&test_default_order_tbl); + table_start(tbl, out); - table_set_int(&test_default_order_tbl, test_default_order_col0_int, 10); - table_set_int(&test_default_order_tbl, test_default_order_col1_int, 11); - table_set_int(&test_default_order_tbl, test_default_order_col2_int, 12); - table_end_row(&test_default_order_tbl); + table_col_int(tbl, TEST_DEFAULT_ORDER_COL0_INT, 0); + table_col_int(tbl, TEST_DEFAULT_ORDER_COL1_INT, 1); + table_col_int(tbl, TEST_DEFAULT_ORDER_COL2_INT, 2); + table_end_row(tbl); - table_end(&test_default_order_tbl); - table_cleanup(&test_default_order_tbl); + table_col_int(tbl, TEST_DEFAULT_ORDER_COL0_INT, 10); + table_col_int(tbl, TEST_DEFAULT_ORDER_COL1_INT, 11); + table_col_int(tbl, TEST_DEFAULT_ORDER_COL2_INT, 12); + table_end_row(tbl); + + table_end(tbl); + table_cleanup(tbl); } /** - * tests: table_set_nt, table_set_uint, table_set_bool, table_set_double, table_set_printf + * tests: table_col_int, table_col_uint, table_col_bool, table_col_double, table_col_printf **/ static void do_print1(struct table *test_tbl) { - table_set_str(test_tbl, test_col0_str, "sdsdf"); - table_append_str(test_tbl, "aaaaa"); - table_set_int(test_tbl, test_col1_int, -10); - table_set_int(test_tbl, test_col1_int, 10000); - table_set_uint(test_tbl, test_col2_uint, 10); - table_set_printf(test_tbl, test_col2_uint, "XXX-%u", 22222); - table_set_bool(test_tbl, test_col3_bool, 1); - table_set_double(test_tbl, test_col4_double, 1.5); + table_col_str(test_tbl, TEST_COL0_STR, "sdsdf"); + table_col_int(test_tbl, TEST_COL1_INT, -10); + table_col_int(test_tbl, TEST_COL1_INT, 10000); + table_col_uint(test_tbl, TEST_COL2_UINT, 10); + table_col_printf(test_tbl, TEST_COL2_UINT, "XXX-%u", 22222); + table_col_bool(test_tbl, TEST_COL3_BOOL, 1); + table_col_double(test_tbl, TEST_COL4_DOUBLE, 1.5); + table_col_size(test_tbl, TEST_COL5_SIZE, (1024LLU*1024LLU*1024LLU*5LLU)); + table_col_timestamp(test_tbl, TEST_COL6_TIME, 1404305876); table_end_row(test_tbl); - table_set_str(test_tbl, test_col0_str, "test"); - table_append_str(test_tbl, "bbbbb"); - table_set_int(test_tbl, test_col1_int, -100); - table_set_uint(test_tbl, test_col2_uint, 100); - table_set_bool(test_tbl, test_col3_bool, 0); - table_set_double(test_tbl, test_col4_double, 1.5); + table_col_str(test_tbl, TEST_COL0_STR, "test"); + table_col_int(test_tbl, TEST_COL1_INT, -100); + table_col_uint(test_tbl, TEST_COL2_UINT, 100); + table_col_bool(test_tbl, TEST_COL3_BOOL, 0); + table_col_double(test_tbl, TEST_COL4_DOUBLE, 1.5); + table_col_size(test_tbl, TEST_COL5_SIZE, (1024LLU*1024LLU*1024LLU*2LLU)); + table_col_timestamp(test_tbl, TEST_COL6_TIME, 1404305909); table_end_row(test_tbl); } static char **cli_table_opts; -static int test_default_column_order; -static int test_invalid_option; -static int test_invalid_order; + +enum test_type_t { + TEST_DEFAULT_COLUMN_ORDER = 1, + TEST_INVALID_OPTION = 2, + TEST_INVALID_ORDER = 3 +}; + +static int test_to_perform = -1; static struct opt_section table_printer_opts = { OPT_ITEMS { OPT_HELP("Options:"), OPT_STRING_MULTIPLE('T', "table", cli_table_opts, OPT_REQUIRED_VALUE, "\tSets options for the table."), - OPT_BOOL('d', 0, test_default_column_order, 0, "\tRun the test that uses the default column order."), - OPT_BOOL('i', 0, test_invalid_option, 0, "\tTest the output for invalid option."), - OPT_BOOL('n', 0, test_invalid_order, 0, "\tTest the output for invalid names of columns for the 'cols' option."), + OPT_SWITCH('d', 0, test_to_perform, TEST_DEFAULT_COLUMN_ORDER, OPT_SINGLE, "\tRun the test that uses the default column order."), + OPT_SWITCH('i', 0, test_to_perform, TEST_INVALID_OPTION, OPT_SINGLE, "\tTest the output for invalid option."), + OPT_SWITCH('n', 0, test_to_perform, TEST_INVALID_ORDER, OPT_SINGLE, "\tTest the output for invalid names of columns for the 'cols' option."), OPT_END } }; @@ -108,10 +119,9 @@ static void process_command_line_opts(char *argv[], struct table *tbl) GARY_INIT(cli_table_opts, 0); opt_parse(&table_printer_opts, argv+1); - - for(uint i = 0; i < GARY_SIZE(cli_table_opts); i++) { - const char *rv = table_set_option(tbl, cli_table_opts[i]); - ASSERT_MSG(rv == NULL, "Tableprinter option parser returned error: '%s'.", rv); + const char *err = table_set_gary_options(tbl, cli_table_opts); + if(err) { + opt_failure("error while setting cmd line options: %s", err); } GARY_FREE(cli_table_opts); @@ -152,28 +162,30 @@ int main(int argc UNUSED, char **argv) struct fastbuf *out; out = bfdopen_shared(1, 4096); - table_init(&test_tbl, out); + struct table *tbl = table_init(&test_tbl); - process_command_line_opts(argv, &test_tbl); + process_command_line_opts(argv, tbl); - if(test_invalid_order == 1) { - const char *rv = table_set_option(&test_tbl, "cols:test_col0_str,test_col1_int,xxx"); + const char *rv = NULL; + switch(test_to_perform) { + case TEST_INVALID_ORDER: + rv = table_set_option(tbl, "cols:test_col0_str,test_col1_int,xxx"); if(rv) printf("Tableprinter option parser returned: '%s'.\n", rv); return 0; - } else if(test_default_column_order == 1) { + case TEST_DEFAULT_COLUMN_ORDER: do_default_order_test(out); bclose(out); return 0; - } else if(test_invalid_option == 1) { - test_option_parser(&test_tbl); + case TEST_INVALID_OPTION: + test_option_parser(tbl); bclose(out); return 0; - } + }; - table_start(&test_tbl); - do_print1(&test_tbl); - table_end(&test_tbl); - table_cleanup(&test_tbl); + table_start(tbl, out); + do_print1(tbl); + table_end(tbl); + table_cleanup(tbl); bclose(out);