null+****@clear*****
null+****@clear*****
2010年 7月 26日 (月) 17:38:08 JST
Kouhei Sutou 2010-07-26 08:38:08 +0000 (Mon, 26 Jul 2010)
New Revision: a7cfbf100162671a14fb61a18126456ce44aa22e
Log:
add a test for grn_table_sort() for geo.
This test is still failed.
Modified files:
test/unit/core/test-table-patricia-trie-sort.c
Modified: test/unit/core/test-table-patricia-trie-sort.c (+91 -50)
===================================================================
--- test/unit/core/test-table-patricia-trie-sort.c 2010-07-26 07:57:11 +0000 (fee5aae)
+++ test/unit/core/test-table-patricia-trie-sort.c 2010-07-26 08:38:08 +0000 (04487ef)
@@ -39,8 +39,12 @@
cut_take_string(POINT(latitude_hours, latitude_minutes, latitude_seconds, \
longitude_hours, longitude_minutes, longitude_seconds))
-void data_near_int32(void);
-void test_near_int32(gpointer data);
+#define INSPECTED_POINT(latitude_hours, latitude_minutes, latitude_seconds, \
+ longitude_hours, longitude_minutes, longitude_seconds) \
+ inspect_point( \
+ COORDINATE(latitude_hours, latitude_minutes, latitude_seconds), \
+ COORDINATE(longitude_hours, longitude_minutes, longitude_seconds))
+
void data_near_geo_point(void);
void test_near_geo_point(gpointer data);
@@ -112,66 +116,54 @@ cut_teardown(void)
grn_ctx_fin(context);
g_free(context);
}
+
+ remove_tmp_directory();
}
static void
-create_int32_table(void)
+create_geo_table(const gchar *load_data)
{
const char *table_name = "Data";
- const char *column_name = "number";
+ const char *column_name = "location";
assert_send_commands(
cut_take_printf("table_create %s TABLE_NO_KEY", table_name));
assert_send_commands(
- cut_take_printf("column_create %s %s COLUMN_SCALAR Int32",
+ cut_take_printf("column_create %s %s COLUMN_SCALAR WGS84GeoPoint",
table_name, column_name));
- assert_send_commands("table_create Index TABLE_PAT_KEY Int32");
+ assert_send_commands("table_create Index TABLE_PAT_KEY WGS84GeoPoint");
assert_send_commands(
- cut_take_printf("column_create Index %s_%s "
- "COLUMN_INDEX|WITH_POSITION %s %s",
+ cut_take_printf("column_create Index %s_%s COLUMN_INDEX %s %s",
table_name, column_name,
table_name, column_name));
assert_send_commands(
cut_take_printf("load --table %s\n"
"[\n"
" [\"%s\"],\n"
- " [%d],"
- " [%d],"
- " [%d],"
- " [%d],"
- " [%d]"
+ "%s\n"
"]",
table_name,
column_name,
- 0x00000000,
- -0x00000004,
- 0x00000080,
- G_MININT,
- G_MAXINT));
+ load_data));
table = grn_ctx_get(context, table_name, strlen(table_name));
column = grn_obj_column(context, table, column_name, strlen(column_name));
}
-static GList *
-int_list_new(gint n, gint value, ...)
+static gchar *
+inspect_point (gint latitude, gint longitude)
{
- GList *list = NULL;
- va_list args;
- gint i;
-
- va_start(args, value);
- for (i = 0; i < n; i++) {
- list = g_list_prepend(list, GINT_TO_POINTER(value));
- value = va_arg(args, gint);
- }
- va_end(args);
-
- return g_list_reverse(list);
+ return g_strdup_printf("((%d, %d, %d), (%d, %d, %d))",
+ latitude / 1000 / 3600 % 3600,
+ latitude / 1000 / 60 % 60,
+ latitude / 1000 % 60,
+ longitude / 1000 / 3600 % 3600,
+ longitude / 1000 / 60 % 60,
+ longitude / 1000 % 60);
}
void
-data_near_int32(void)
+data_near_geo(void)
{
#define ADD_DATA(label, expected, base, offset, limit) \
gcut_add_datum(label, \
@@ -183,33 +175,80 @@ data_near_int32(void)
NULL)
ADD_DATA("no limit",
- int_list_new(5,
- 0x00000000, -0x00000004, 0x00000080,
- G_MAXINT, G_MININT),
- 0,
+ gcut_list_string_new(INSPECTED_POINT(1, 2, 3,
+ 4, 5, 6),
+ INSPECTED_POINT(1, 2, 3,
+ 7, 8, 9),
+ INSPECTED_POINT(7, 8, 9,
+ 4, 5, 6),
+ INSPECTED_POINT(-89, -59, -59,
+ 1, 2, 3),
+ INSPECTED_POINT(89, 59, 59,
+ -178, -58, -57),
+ INSPECTED_POINT(-88, -58, -57,
+ -178, -58, -57),
+ INSPECTED_POINT(88, 58, 58,
+ 178, 58, 58),
+ INSPECTED_POINT(89, 59, 59,
+ 179, 59, 59),
+ INSPECTED_POINT(1, 2, 3,
+ 179, 59, 59),
+ NULL),
+ TAKEN_POINT(0, 0, 0,
+ 0, 0, 0),
0, -1);
#undef ADD_DATA
}
void
-test_near_int32(gpointer data)
+test_near_geo(gpointer data)
{
grn_id id;
int offset, limit;
const GList *expected_keys;
GList *actual_keys = NULL;
grn_table_sort_key keys[2];
- grn_obj base, number;
-
- create_int32_table();
+ grn_obj base, base_string, location;
+
+ create_geo_table(cut_take_printf(" [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"],\n"
+ " [\"%s\"]",
+ TAKEN_POINT(1, 2, 3,
+ 4, 5, 6),
+ TAKEN_POINT(1, 2, 3,
+ 7, 8, 9),
+ TAKEN_POINT(7, 8, 9,
+ 4, 5, 6),
+ TAKEN_POINT(89, 59, 59,
+ 179, 59, 59),
+ TAKEN_POINT(89, 59, 59,
+ -178, -58, -58),
+ TAKEN_POINT(88, 58, 58,
+ 178, 58, 58),
+ TAKEN_POINT(-89, -59, -59,
+ 1, 2, 3),
+ TAKEN_POINT(1, 2, 3,
+ 179, 59, 59),
+ TAKEN_POINT(-88, -58, -57,
+ -178, -58, -57)));
result = grn_table_create(context, NULL, 0, NULL, GRN_TABLE_NO_KEY,
NULL, table);
grn_test_assert_context(context);
- GRN_INT32_INIT(&base, 0);
- GRN_INT32_SET(context, &base, gcut_data_get_int(data, "base"));
+ GRN_TEXT_INIT(&base_string, 0);
+ GRN_TEXT_SETS(context, &base_string, gcut_data_get_string(data, "base"));
+ GRN_WGS84_GEO_POINT_INIT(&base, 0);
+ grn_obj_cast(context, &base_string, &base, FALSE);
+ GRN_OBJ_FIN(context, &base_string);
+
offset = gcut_data_get_int(data, "offset");
limit = gcut_data_get_int(data, "limit");
keys[0].key = column;
@@ -225,20 +264,22 @@ test_near_int32(gpointer data)
NULL, 0, NULL, 0, 0, -1,
GRN_CURSOR_ASCENDING);
grn_test_assert_context(context);
- GRN_INT32_INIT(&number, 0);
+ GRN_WGS84_GEO_POINT_INIT(&location, 0);
while ((id = grn_table_cursor_next(context, cursor))) {
gint32 *key;
int key_size;
+ gint latitude, longitude;
key_size = grn_table_cursor_get_value(context, cursor, (void **)&key);
- GRN_BULK_REWIND(&number);
- grn_obj_get_value(context, column, *key, &number);
+ GRN_BULK_REWIND(&location);
+ grn_obj_get_value(context, column, *key, &location);
+ GRN_GEO_POINT_VALUE(&location, latitude, longitude);
actual_keys = g_list_append(actual_keys,
- GINT_TO_POINTER(GRN_INT32_VALUE(&number)));
+ inspect_point(latitude, longitude));
}
- GRN_OBJ_FIN(context, &number);
- gcut_take_list(actual_keys, NULL);
+ GRN_OBJ_FIN(context, &location);
+ gcut_take_list(actual_keys, g_free);
expected_keys = gcut_data_get_pointer(data, "expected");
- gcut_assert_equal_list_int(expected_keys, actual_keys);
+ gcut_assert_equal_list_string(expected_keys, actual_keys);
}