void test_suffix_search(gconstpointer data) { const grn_trie_test_data *test_data = data; const gchar key1[] = "セナ"; const gchar key2[] = "ナセナセ"; const gchar key3[] = "Groonga"; const gchar key4[] = "セナ + Ruby"; const gchar key5[] = "セナセナ"; trie_test_data_set_parameters(test_data); cut_assert_create_trie(); cut_assert_lookup_add(key1); cut_assert_lookup_add(key2); cut_assert_lookup_add(key3); cut_assert_lookup_add(key4); cut_assert_lookup_add(key5); cut_assert_create_hash(); grn_test_assert_equal_rc(test_data->expected_rc, grn_pat_suffix_search(context, trie, test_data->search_key, strlen(test_data->search_key), hash)); gcut_assert_equal_list_string(test_data->expected_strings, retrieve_all_keys()); }
void test_value(gconstpointer data) { const grn_trie_test_data *test_data = data; const gchar key1[] = "セナ"; const gchar key2[] = "ナセナセ"; const gchar key3[] = "Groonga"; const gchar key4[] = "セナ + Ruby"; const gchar key5[] = "セナセナ"; gchar value2[] = "VALUE2"; gchar value4_1[] = "Groonga"; gchar value4_2[] = "るびい"; gchar value5_1[] = "上書きされる値 - overridden value"; gchar value5_2[] = "上書きされた値 - override value"; trie_test_data_set_parameters(test_data); cut_assert_create_trie(); cut_assert_lookup_add(key1); cut_assert_lookup_add(key2); cut_assert_lookup_add(key3); cut_assert_lookup_add(key4); cut_assert_lookup_add(key5); cut_assert_open_cursor(); while (grn_pat_cursor_next(context, cursor) != GRN_ID_NIL) { void *key; gchar *null_terminated_key; int size; size = grn_pat_cursor_get_key(context, cursor, &key); null_terminated_key = g_string_free(g_string_new_len(key, size), FALSE); if (g_str_equal(null_terminated_key, key2)) { grn_pat_cursor_set_value(context, cursor, value2, GRN_OBJ_SET); } else if (g_str_equal(null_terminated_key, key4)) { grn_pat_cursor_set_value(context, cursor, value4_1, GRN_OBJ_INCR); grn_pat_cursor_set_value(context, cursor, value4_2, GRN_OBJ_INCR); } else if (g_str_equal(null_terminated_key, key5)) { grn_pat_cursor_set_value(context, cursor, value5_1, GRN_OBJ_SET); grn_pat_cursor_set_value(context, cursor, value5_2, GRN_OBJ_SET); } } cursor_free(); cut_assert_open_cursor(); gcut_assert_equal_list_string(test_data->expected_strings, retrieve_all_keys_and_values()); }
void test_add_and_delete(gconstpointer data) { const grn_test_data *test_data = data; guint i; const guint n_operations = 7500; if (test_data->set_parameters) test_data->set_parameters(); cut_assert_create_hash(); ids = g_array_new(TRUE, TRUE, sizeof(grn_id)); for (i = 0; i < n_operations; i++) { if (grn_test_hash_factory_get_flags(factory) & GRN_OBJ_KEY_VAR_SIZE) key_size = strlen(test_data->key); cut_assert_lookup_add(test_data->key); test_data->increment((grn_test_data *)test_data); g_array_append_val(ids, id); } cut_assert_equal_int(n_operations, GRN_HASH_SIZE(hash)); for (i = 0; i < ids->len; i++) { grn_id delete_id; delete_id = g_array_index(ids, grn_id, i); cut_set_message("i = %d; id = %d", i, delete_id); grn_test_assert(grn_hash_delete_by_id(context, hash, delete_id, NULL)); } cut_assert_equal_int(0, GRN_HASH_SIZE(hash)); }
void test_by_key_descending_max(void) { default_cursor_min = g_strdup("0"); default_cursor_min_size = strlen(default_cursor_min); default_cursor_max = g_strdup("9989"); default_cursor_max_size = strlen(default_cursor_max); default_cursor_flags |= GRN_CURSOR_DESCENDING; cut_assert_create_trie(); cut_assert_lookup_add("997"); cut_assert_lookup_add("999"); cut_assert_lookup_add("9998"); cut_assert_open_cursor(); gcut_assert_equal_list_string(gcut_take_new_list_string("997", NULL), retrieve_all_keys()); }
void test_delete(gconstpointer data) { const grn_trie_test_data *test_data = data; const gchar key1[] = "セナ"; const gchar key2[] = "ナセナセ"; const gchar key3[] = "Groonga"; const gchar key4[] = "セナ + Ruby"; const gchar key5[] = "セナセナ"; trie_test_data_set_parameters(test_data); cut_assert_create_trie(); cut_assert_lookup_add(key1); cut_assert_lookup_add(key2); cut_assert_lookup_add(key3); cut_assert_lookup_add(key4); cut_assert_lookup_add(key5); cut_assert_open_cursor(); while (grn_pat_cursor_next(context, cursor) != GRN_ID_NIL) { void *key; gchar *null_terminated_key; int size; size = grn_pat_cursor_get_key(context, cursor, &key); null_terminated_key = g_string_free(g_string_new_len(key, size), FALSE); if (g_str_equal(null_terminated_key, key1) || g_str_equal(null_terminated_key, key5)) { grn_pat_cursor_delete(context, cursor, NULL); } } cursor_free(); cut_assert_open_cursor(); gcut_assert_equal_list_string(test_data->expected_strings, retrieve_all_keys()); }
void test_lookup_add(gconstpointer data) { const grn_test_data *test_data = data; if (test_data->set_parameters) test_data->set_parameters(); cut_assert_create_hash(); if (grn_test_hash_factory_get_flags(factory) & GRN_OBJ_KEY_VAR_SIZE) key_size = strlen(test_data->key); cut_assert_lookup_add(test_data->key); }
void test_next_with_multi_entries(gconstpointer data) { const grn_trie_test_data *test_data = data; const gchar key1[] = "セナ"; const gchar key2[] = "ナセナセ"; const gchar key3[] = "Groonga"; const gchar key4[] = "セナ + Ruby"; const gchar key5[] = "セナセナ"; trie_test_data_set_parameters(test_data); cut_assert_create_trie(); cut_assert_lookup_add(key1); cut_assert_lookup_add(key2); cut_assert_lookup_add(key3); cut_assert_lookup_add(key4); cut_assert_lookup_add(key5); cut_assert_open_cursor(); gcut_assert_equal_list_string(test_data->expected_strings, retrieve_all_keys()); }
void test_lcp_search(gconstpointer data) { const grn_trie_test_data *test_data = data; gchar key[GRN_PAT_MAX_KEY_SIZE]; const gchar key1[] = "セナ"; const gchar key2[] = "ナセナセ"; const gchar key3[] = "Groonga"; const gchar key4[] = "セナ + Ruby"; const gchar key5[] = "セナセナ"; trie_test_data_set_parameters(test_data); cut_assert_create_trie(); cut_assert_lookup_add(key1); cut_assert_lookup_add(key2); cut_assert_lookup_add(key3); cut_assert_lookup_add(key4); cut_assert_lookup_add(key5); id = grn_pat_lcp_search(context, trie, test_data->search_key, strlen(test_data->search_key)); if (test_data->expected_key) { int size; const gchar *null_terminated_key; grn_test_assert_not_nil(id); size = grn_pat_get_key(context, trie, id, key, sizeof(key)); null_terminated_key = cut_take_strndup(key, size); cut_assert_equal_string(test_data->expected_key, null_terminated_key); } else { grn_test_assert_nil(id); } }
void test_next_with_one_entry(gconstpointer data) { const grn_trie_test_data *test_data = data; const gchar key[] = "セナ"; trie_test_data_set_parameters(test_data); cut_assert_create_trie(); cut_assert_lookup_add(key); cut_assert_open_cursor(); gcut_assert_equal_list_string(test_data->expected_strings, retrieve_all_keys()); }