null+****@clear*****
null+****@clear*****
2011年 11月 18日 (金) 20:25:11 JST
Susumu Yata 2011-11-18 11:25:11 +0000 (Fri, 18 Nov 2011)
New Revision: 39dd5466de065a2600ad50446672e3a049d71c44
Log:
updated a test that compares grn_pat and grn_dat.
Modified files:
test/unit/core/dat/test-dat-pat.cpp
Modified: test/unit/core/dat/test-dat-pat.cpp (+181 -4)
===================================================================
--- test/unit/core/dat/test-dat-pat.cpp 2011-11-18 11:14:44 +0000 (9e6300e)
+++ test/unit/core/dat/test-dat-pat.cpp 2011-11-18 11:25:11 +0000 (826f5e5)
@@ -23,6 +23,8 @@
#include <cppcutter.h>
#include <grn-assertions.h>
+#include <dat.h>
+#include <pat.h>
#include <algorithm>
#include <cstdio>
@@ -32,6 +34,8 @@
#include <string>
#include <vector>
+#include <iostream>
+
namespace
{
void create_key(std::string *key, std::size_t min_length, std::size_t max_length)
@@ -81,11 +85,22 @@ namespace test_dat_pat
}
}
+ void generate_pat_path(const char *filename, char *path)
+ {
+ std::sprintf(path, "%s/%s.pat", base_dir, filename);
+ }
+
+ void generate_dat_path(const char *filename, char *path)
+ {
+ std::sprintf(path, "%s/%s.dat", base_dir, filename);
+ }
+
grn_pat *create_pat(const char *filename, const std::vector<std::string> &keys)
{
char pat_path[PATH_MAX];
- std::sprintf(pat_path, "%s/%s.pat", base_dir, filename);
- grn_pat * const pat = grn_pat_create(&ctx, NULL, 1024, 0, GRN_OBJ_KEY_VAR_SIZE);
+ generate_pat_path(filename, pat_path);
+ grn_pat * const pat = grn_pat_create(&ctx, pat_path,
+ 1024, 0, GRN_OBJ_KEY_VAR_SIZE);
cut_assert_not_null(pat);
for (std::size_t i = 0; i < keys.size(); ++i) {
@@ -97,8 +112,9 @@ namespace test_dat_pat
grn_dat *create_dat(const char *filename, const std::vector<std::string> &keys)
{
char dat_path[PATH_MAX];
- std::sprintf(dat_path, "%s/%s.dat", base_dir, filename);
- grn_dat * const dat = grn_dat_create(&ctx, NULL, 1024, 0, GRN_OBJ_KEY_VAR_SIZE);
+ generate_dat_path(filename, dat_path);
+ grn_dat * const dat = grn_dat_create(&ctx, dat_path,
+ 1024, 0, GRN_OBJ_KEY_VAR_SIZE);
cut_assert_not_null(dat);
for (std::size_t i = 0; i < keys.size(); ++i) {
@@ -107,6 +123,73 @@ namespace test_dat_pat
return dat;
}
+ void test_open(void)
+ {
+ const char * const filename = "test_open";
+
+ char pat_path[PATH_MAX];
+ char dat_path[PATH_MAX];
+
+ generate_pat_path(filename, pat_path);
+ generate_dat_path(filename, dat_path);
+
+ cut_assert_not_exist_path(pat_path);
+ cut_assert_not_exist_path(dat_path);
+
+ grn_pat *pat = grn_pat_open(&ctx, pat_path);
+ grn_dat *dat = grn_dat_open(&ctx, dat_path);
+
+ cut_assert_null(pat);
+ cut_assert_null(dat);
+
+ std::vector<std::string> keys;
+ create_keys(&keys, 1000, 3, 5);
+ pat = create_pat(filename, keys);
+ dat = create_dat(filename, keys);
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
+
+ cut_assert_exist_path(pat_path);
+ cut_assert_exist_path(dat_path);
+
+ pat = grn_pat_open(&ctx, pat_path);
+ dat = grn_dat_open(&ctx, dat_path);
+
+ cut_assert_not_null(pat);
+ cut_assert_not_null(dat);
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
+ }
+
+ void test_remove(void)
+ {
+ const char * const filename = "test_remove";
+
+ std::vector<std::string> keys;
+ grn_pat * const pat = create_pat(filename, keys);
+ grn_dat * const dat = create_dat(filename, keys);
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
+
+ char pat_path[PATH_MAX];
+ char dat_path[PATH_MAX];
+
+ generate_pat_path(filename, pat_path);
+ generate_dat_path(filename, dat_path);
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_remove(&ctx, pat_path));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_remove(&ctx, dat_path));
+
+ cut_assert_not_exist_path(pat_path);
+ cut_assert_not_exist_path(dat_path);
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_remove(&ctx, pat_path));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_remove(&ctx, dat_path));
+ }
+
void test_get(void)
{
const char * const filename = "test_get";
@@ -156,6 +239,72 @@ namespace test_dat_pat
key.length(), NULL, &dat_added);
cppcut_assert_equal(pat_id, dat_id);
cppcut_assert_equal(pat_added, dat_added);
+
+ cppcut_assert_equal(grn_pat_size(&ctx, pat), grn_dat_size(&ctx, dat));
+ cppcut_assert_equal(grn_pat_curr_id(&ctx, pat), grn_dat_curr_id(&ctx, dat));
+ }
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
+ }
+
+ void test_delete_by_id(void)
+ {
+ const char * const filename = "test_delete_by_id";
+
+ std::vector<std::string> keys;
+ create_keys(&keys, 1000, 3, 5);
+ grn_pat * const pat = create_pat(filename, keys);
+ grn_dat * const dat = create_dat(filename, keys);
+
+ for (std::size_t i = 0; i < keys.size(); i += 2) {
+ const grn_id key_id = static_cast<grn_id>(i + 1);
+ cppcut_assert_equal(GRN_SUCCESS,
+ grn_pat_delete_by_id(&ctx, pat, key_id, NULL));
+ cppcut_assert_equal(GRN_SUCCESS,
+ grn_dat_delete_by_id(&ctx, dat, key_id, NULL));
+ }
+
+ cut_omit("Not fixed yet.");
+
+ for (std::size_t i = 0; i < keys.size(); ++i) {
+ const grn_id key_id = static_cast<grn_id>(i + 1);
+ const grn_rc rc = (key_id & 1) ? GRN_SUCCESS : GRN_INVALID_ARGUMENT;
+ cppcut_assert_equal(rc, grn_pat_delete_by_id(&ctx, pat, key_id, NULL));
+ cppcut_assert_equal(rc, grn_dat_delete_by_id(&ctx, dat, key_id, NULL));
+ }
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
+ }
+
+ void test_delete(void)
+ {
+ const char * const filename = "test_delete";
+
+ std::vector<std::string> keys;
+ create_keys(&keys, 1000, 3, 5);
+ grn_pat * const pat = create_pat(filename, keys);
+ grn_dat * const dat = create_dat(filename, keys);
+
+ for (std::size_t i = 0; i < keys.size(); i += 2) {
+ const char * const ptr = keys[i].c_str();
+ const uint32_t length = static_cast<uint32_t>(keys[i].length());
+ const grn_id key_id = static_cast<grn_id>(i + 1);
+ cppcut_assert_equal(GRN_SUCCESS,
+ grn_pat_delete(&ctx, pat, ptr, length, NULL));
+ cppcut_assert_equal(GRN_SUCCESS,
+ grn_dat_delete(&ctx, dat, ptr, length, NULL));
+ }
+
+ cut_omit("Not fixed yet.");
+
+ for (std::size_t i = 0; i < keys.size(); ++i) {
+ const char * const ptr = keys[i].c_str();
+ const uint32_t length = static_cast<uint32_t>(keys[i].length());
+ const grn_rc rc = (i & 1) ? GRN_INVALID_ARGUMENT : GRN_SUCCESS;
+ cppcut_assert_equal(rc, grn_pat_delete(&ctx, pat, ptr, length, NULL));
+ cppcut_assert_equal(rc, grn_dat_delete(&ctx, dat, ptr, length, NULL));
}
cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
@@ -387,4 +536,32 @@ namespace test_dat_pat
cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
}
+
+ void test_truncate(void)
+ {
+ const char * const filename = "test_truncate";
+
+ std::vector<std::string> keys;
+ create_keys(&keys, 1000, 3, 5);
+ grn_pat * const pat = create_pat(filename, keys);
+ grn_dat * const dat = create_dat(filename, keys);
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_truncate(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_truncate(&ctx, dat));
+
+ cppcut_assert_equal(static_cast<unsigned int>(0), grn_pat_size(&ctx, pat));
+ cppcut_assert_equal(static_cast<unsigned int>(0), grn_dat_size(&ctx, dat));
+
+ for (std::size_t i = 0; i < keys.size(); ++i) {
+ const char * const ptr = keys[i].c_str();
+ const uint32_t length = static_cast<uint32_t>(keys[i].length());
+ cppcut_assert_equal(static_cast<grn_id>(GRN_ID_NIL),
+ grn_pat_get(&ctx, pat, ptr, length, NULL));
+ cppcut_assert_equal(static_cast<grn_id>(GRN_ID_NIL),
+ grn_dat_get(&ctx, dat, ptr, length, NULL));
+ }
+
+ cppcut_assert_equal(GRN_SUCCESS, grn_pat_close(&ctx, pat));
+ cppcut_assert_equal(GRN_SUCCESS, grn_dat_close(&ctx, dat));
+ }
}