null+****@clear*****
null+****@clear*****
2011年 11月 7日 (月) 14:36:45 JST
Kouhei Sutou 2011-11-07 05:36:45 +0000 (Mon, 07 Nov 2011) New Revision: 8806de29fb954de523c3762db9f61d22aa7cb015 Log: [test][truncate] add tests for truncating anonymous tables. refs #892 Modified files: test/unit/core/test-table.c Modified: test/unit/core/test-table.c (+54 -14) =================================================================== --- test/unit/core/test-table.c 2011-11-07 02:34:00 +0000 (7e6e9e8) +++ test/unit/core/test-table.c 2011-11-07 05:36:45 +0000 (7ce86c0) @@ -37,13 +37,14 @@ void data_create_with_valid_name(void); void test_create_with_valid_name(gpointer data); void data_create_with_invalid_name(void); void test_create_with_invalid_name(gpointer data); -void test_array_truncate(void); +void data_truncate_anonymous(void); +void test_truncate_anonymous(gconstpointer data); static gchar *tmp_directory; static grn_logger_info *logger; static grn_ctx *context; -static grn_obj *database; +static grn_obj *database, *table; void cut_startup(void) @@ -80,14 +81,21 @@ cut_setup(void) database = grn_db_create(context, cut_build_path(tmp_directory, "table.db", NULL), NULL); + + table = NULL; } void cut_teardown(void) { + if (table) { + grn_obj_unlink(context, table); + } + grn_obj_close(context, database); grn_ctx_fin(context); g_free(context); + teardown_grn_logger(logger); cut_remove_path(tmp_directory, NULL); } @@ -459,20 +467,52 @@ test_create_with_invalid_name(gpointer data) } void -test_array_truncate(void) +data_truncate_anonymous(void) { - grn_obj *table; - gchar value[] = "sample value"; - gchar *value_type_name = "value_type"; - grn_obj *value_type; +#define ADD_DATA(label, flags) \ + gcut_add_datum(label, \ + "flags", G_TYPE_INT, flags, \ + NULL) - value_type = grn_type_create(context, - value_type_name, strlen(value_type_name), - 0, sizeof(value)); - table = grn_table_create(context, NULL, 0, NULL, - GRN_OBJ_TABLE_NO_KEY, - NULL, value_type); - grn_test_assert_not_nil(grn_table_add(context, table, NULL, 0, NULL)); + ADD_DATA("array", GRN_OBJ_TABLE_NO_KEY); + ADD_DATA("hash", GRN_OBJ_TABLE_HASH_KEY); + ADD_DATA("patricia trie", GRN_OBJ_TABLE_PAT_KEY); + +#undef ADD_DATA +} + +void +test_truncate_anonymous(gconstpointer data) +{ + grn_obj_flags flags; + const gchar *key; + grn_obj *key_type; + unsigned key_size; + grn_bool array_p; + int added; + + flags = gcut_data_get_int(data, "flags"); + array_p = ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_NO_KEY); + + if (array_p) { + key = NULL; + key_size = 0; + key_type = NULL; + } else { + key = "groonga"; + key_size = strlen(key); + key_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT); + } + table = grn_table_create(context, + NULL, 0, NULL, + flags, + key_type, NULL); + if (key_type) { + grn_obj_unlink(context, key_type); + } + + grn_test_assert_not_nil(grn_table_add(context, table, key, key_size, &added)); + cut_assert_true(added); cut_assert_equal_uint(1, grn_table_size(context, table)); grn_test_assert(grn_table_truncate(context, table));