null+****@clear*****
null+****@clear*****
2011年 9月 12日 (月) 23:44:24 JST
Kouhei Sutou 2011-09-12 14:44:24 +0000 (Mon, 12 Sep 2011)
New Revision: e72b9554d37c5769f7f9ff4b73e939fd0e979cb1
Log:
[test][geo] setup test data.
Modified files:
test/unit/core/test-geo.c
Modified: test/unit/core/test-geo.c (+148 -32)
===================================================================
--- test/unit/core/test-geo.c 2011-09-12 09:24:15 +0000 (fba12c8)
+++ test/unit/core/test-geo.c 2011-09-12 14:44:24 +0000 (639fe97)
@@ -28,7 +28,8 @@
void test_in_circle(void);
void test_in_rectangle(void);
-void test_distance(void);
+void data_distance(void);
+void test_distance(gconstpointer data);
void test_distance2(void);
void test_distance3(void);
@@ -37,8 +38,16 @@ static gchar *tmp_directory;
static grn_ctx *context;
static grn_obj *database;
-static grn_obj *nedu_no_taiyaki, *takane, *sazare, *yanagi_ya, *hiiragi;
-static grn_obj *tokyo, *shinjuku;
+#define DEFINE_GEO_POINT(name) \
+ static grn_obj *name, *name ## _tokyo, *name ## _wgs84, *name ## _text
+DEFINE_GEO_POINT(nedu_no_taiyaki);
+DEFINE_GEO_POINT(takane);
+DEFINE_GEO_POINT(sazare);
+DEFINE_GEO_POINT(yanagi_ya);
+DEFINE_GEO_POINT(hiiragi);
+DEFINE_GEO_POINT(tokyo);
+DEFINE_GEO_POINT(shinjuku);
+#undef DEFINE_GEO_POINT
void
cut_startup(void)
@@ -61,6 +70,18 @@ remove_tmp_directory(void)
}
static grn_obj *
+tokyo_geo_point_open(int latitude, int longitude)
+{
+ grn_obj *point;
+
+ point = grn_obj_open(context, GRN_BULK, 0, GRN_DB_TOKYO_GEO_POINT);
+ /* TODO: latitude and longitude are wgs84 format. They
+ * should be converted to tokyo from wgs84. */
+ GRN_GEO_POINT_SET(context, point, latitude, longitude);
+ return point;
+}
+
+static grn_obj *
wgs84_geo_point_open(int latitude, int longitude)
{
grn_obj *point;
@@ -70,17 +91,34 @@ wgs84_geo_point_open(int latitude, int longitude)
return point;
}
+static grn_obj *
+text_geo_point_open(int latitude, int longitude)
+{
+ grn_obj *point;
+
+ point = grn_obj_open(context, GRN_BULK, 0, GRN_DB_SHORT_TEXT);
+ GRN_TEXT_PUTS(context, point, cut_take_printf("%d,%d", latitude, longitude));
+ return point;
+}
+
static void
setup_values(void)
{
- nedu_no_taiyaki = wgs84_geo_point_open(130322053, 504985073);
- takane = wgs84_geo_point_open(130226001, 503769013);
- sazare = wgs84_geo_point_open(130306053, 504530043);
- yanagi_ya = wgs84_geo_point_open(130133052, 505120058);
- hiiragi = wgs84_geo_point_open(129917001, 504675017);
+#define SETUP_GEO_POINT(name, latitude, longitude) \
+ name ## _tokyo = tokyo_geo_point_open(latitude, longitude); \
+ name ## _wgs84 = wgs84_geo_point_open(latitude, longitude); \
+ name ## _text = text_geo_point_open(latitude, longitude)
+
+ SETUP_GEO_POINT(nedu_no_taiyaki, 130322053, 504985073);
+ SETUP_GEO_POINT(takane, 130226001, 503769013);
+ SETUP_GEO_POINT(sazare, 130306053, 504530043);
+ SETUP_GEO_POINT(yanagi_ya, 130133052, 505120058);
+ SETUP_GEO_POINT(hiiragi, 129917001, 504675017);
+
+ SETUP_GEO_POINT(tokyo, 130101399, 505020000);
+ SETUP_GEO_POINT(shinjuku, 130158300, 504604000);
- tokyo = wgs84_geo_point_open(130101399, 505020000);
- shinjuku = wgs84_geo_point_open(130158300, 504604000);
+#undef SETUP_GEO_POINT
}
void
@@ -103,13 +141,21 @@ cut_setup(void)
static void
teardown_values(void)
{
- grn_obj_unlink(context, nedu_no_taiyaki);
- grn_obj_unlink(context, takane);
- grn_obj_unlink(context, sazare);
- grn_obj_unlink(context, yanagi_ya);
- grn_obj_unlink(context, hiiragi);
- grn_obj_unlink(context, tokyo);
- grn_obj_unlink(context, shinjuku);
+#define UNLINK_GEO_POINT(name) \
+ grn_obj_unlink(context, name ## _tokyo); \
+ grn_obj_unlink(context, name ## _wgs84); \
+ grn_obj_unlink(context, name ## _text)
+
+ UNLINK_GEO_POINT(nedu_no_taiyaki);
+ UNLINK_GEO_POINT(takane);
+ UNLINK_GEO_POINT(sazare);
+ UNLINK_GEO_POINT(yanagi_ya);
+ UNLINK_GEO_POINT(hiiragi);
+
+ UNLINK_GEO_POINT(tokyo);
+ UNLINK_GEO_POINT(shinjuku);
+
+#undef UNLINK_GEO_POINT
}
void
@@ -128,31 +174,97 @@ void
test_in_circle(void)
{
cut_assert_true(grn_geo_in_circle(context,
- hiiragi,
- shinjuku,
- tokyo));
+ hiiragi_wgs84,
+ shinjuku_wgs84,
+ tokyo_wgs84));
cut_assert_false(grn_geo_in_circle(context,
- takane,
- shinjuku,
- tokyo));
+ takane_wgs84,
+ shinjuku_wgs84,
+ tokyo_wgs84));
}
void
test_in_rectangle(void)
{
cut_assert_true(grn_geo_in_rectangle(context,
- shinjuku,
- sazare,
- hiiragi));
+ shinjuku_wgs84,
+ sazare_wgs84,
+ hiiragi_wgs84));
cut_assert_false(grn_geo_in_rectangle(context,
- tokyo,
- sazare,
- hiiragi));
+ tokyo_wgs84,
+ sazare_wgs84,
+ hiiragi_wgs84));
+}
+
+static void
+assign_shinjuku_and_takane(gconstpointer data)
+{
+ switch (gcut_data_get_int(data, "shinjuku-geographic-coordinate-system")) {
+ case GRN_DB_TOKYO_GEO_POINT:
+ shinjuku = shinjuku_tokyo;
+ break;
+ case GRN_DB_WGS84_GEO_POINT:
+ shinjuku = shinjuku_wgs84;
+ break;
+ default:
+ shinjuku = shinjuku_text;
+ break;
+ }
+
+ switch (gcut_data_get_int(data, "takane-geographic-coordinate-system")) {
+ case GRN_DB_TOKYO_GEO_POINT:
+ takane = takane_tokyo;
+ break;
+ case GRN_DB_WGS84_GEO_POINT:
+ takane = takane_wgs84;
+ break;
+ default:
+ takane = takane_text;
+ break;
+ }
+}
+
+void
+data_distance(void)
+{
+#define ADD_DATUM(label, shinjuku, takane) \
+ gcut_add_datum(label, \
+ "shinjuku-geographic-coordinate-system", \
+ G_TYPE_INT, shinjuku, \
+ "takane-geographic-coordinate-system", \
+ G_TYPE_INT, takane, \
+ NULL)
+
+/*
+ ADD_DATUM("tokyo - tokyo",
+ shinjuku_tokyo, takane_tokyo);
+ ADD_DATUM("tokyo - wgs84",
+ shinjuku_tokyo, takane_wgs84);
+ ADD_DATUM("tokyo - text",
+ shinjuku_tokyo, takane_text);
+ ADD_DATUM("wgs84 - tokyo",
+ shinjuku_wgs84, takane_tokyo);
+*/
+ ADD_DATUM("wgs84 - wgs84",
+ GRN_DB_WGS84_GEO_POINT, GRN_DB_WGS84_GEO_POINT);
+/*
+ ADD_DATUM("wgs84 - text",
+ shinjuku_wgs84, takane_text);
+ ADD_DATUM("text - tokyo",
+ shinjuku_text, takane_tokyo);
+ ADD_DATUM("text - wgs84",
+ shinjuku_text, takane_wgs84);
+ ADD_DATUM("text - text",
+ shinjuku_text, takane_text);
+*/
+
+#undef ADD_DATUM
}
void
-test_distance(void)
+test_distance(gconstpointer data)
{
+ assign_shinjuku_and_takane(data);
cut_assert_equal_double(20881.0, 10,
grn_geo_distance(context, shinjuku, takane));
}
@@ -161,12 +273,16 @@ void
test_distance2(void)
{
cut_assert_equal_double(20881.0, 10,
- grn_geo_distance2(context, shinjuku, takane));
+ grn_geo_distance2(context,
+ shinjuku_wgs84,
+ takane_wgs84));
}
void
test_distance3(void)
{
cut_assert_equal_double(20973.0, 10,
- grn_geo_distance3(context, shinjuku, takane));
+ grn_geo_distance3(context,
+ shinjuku_wgs84,
+ takane_wgs84));
}