[Groonga-commit] groonga/groonga [master] [test][geo] setup test data.

Back to archive index

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));
 }




Groonga-commit メーリングリストの案内
Back to archive index