null+****@clear*****
null+****@clear*****
2011年 11月 13日 (日) 20:31:50 JST
Kouhei Sutou 2011-11-13 11:31:50 +0000 (Sun, 13 Nov 2011)
New Revision: 77fc55a1a5d596830785c20d8ea6f5c59ed6aec9
Log:
[test][geo] add tests for geo_in_rectangle.
Added files:
test/unit/core/test-geo-in-rectangle-border.c
test/unit/fixtures/geo/Makefile.am
test/unit/fixtures/geo/data.grn
test/unit/fixtures/geo/ddl.grn
test/unit/fixtures/geo/generate-data.rb
Modified files:
configure.ac
test/unit/core/Makefile.am
test/unit/fixtures/Makefile.am
Modified: configure.ac (+1 -0)
===================================================================
--- configure.ac 2011-11-13 07:35:29 +0000 (377ff8f)
+++ configure.ac 2011-11-13 11:31:50 +0000 (3b782de)
@@ -214,6 +214,7 @@ AC_CONFIG_FILES([
test/unit/fixtures/stress/Makefile
test/unit/fixtures/performance/Makefile
test/unit/fixtures/plugins/Makefile
+ test/unit/fixtures/geo/Makefile
test/unit/fixtures/story/Makefile
test/unit/fixtures/story/taiyaki/Makefile
test/unit/fixtures/story/rurema/Makefile
Modified: test/unit/core/Makefile.am (+2 -0)
===================================================================
--- test/unit/core/Makefile.am 2011-11-13 07:35:29 +0000 (f1bfcf2)
+++ test/unit/core/Makefile.am 2011-11-13 11:31:50 +0000 (1b3ed0e)
@@ -61,6 +61,7 @@ noinst_LTLIBRARIES = \
test-command-truncate.la \
test-geo.la \
test-geo-in-rectangle.la \
+ test-geo-in-rectangle-border.la \
test-accessor.la \
test-object.la
endif
@@ -144,5 +145,6 @@ test_command_dump_la_SOURCES = test-command-dump.c
test_command_truncate_la_SOURCES = test-command-truncate.c
test_geo_la_SOURCES = test-geo.c
test_geo_in_rectangle_la_SOURCES = test-geo-in-rectangle.c
+test_geo_in_rectangle_border_la_SOURCES = test-geo-in-rectangle-border.c
test_accessor_la_SOURCES = test-accessor.c
test_object_la_SOURCES = test-object.c
Added: test/unit/core/test-geo-in-rectangle-border.c (+360 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/core/test-geo-in-rectangle-border.c 2011-11-13 11:31:50 +0000 (1cd3990)
@@ -0,0 +1,360 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2011 Kouhei Sutou <kou****@clear*****>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <gcutter.h>
+#include <glib/gstdio.h>
+
+#include "../lib/grn-assertions.h"
+
+#include <str.h>
+#include <geo.h>
+
+#define get(name) grn_ctx_get(context, name, strlen(name))
+
+void data_cursor(void);
+void test_cursor(gconstpointer data);
+
+static gchar *tmp_directory;
+
+static grn_ctx *context;
+static grn_obj *database, *points, *short_degree_column;
+static grn_obj *location_index_column, *result;
+
+void
+cut_startup(void)
+{
+ tmp_directory = g_build_filename(grn_test_get_tmp_dir(),
+ "geo-in-rectangle-border",
+ NULL);
+}
+
+void
+cut_shutdown(void)
+{
+ g_free(tmp_directory);
+}
+
+static void
+remove_tmp_directory(void)
+{
+ cut_remove_path(tmp_directory, NULL);
+}
+
+static void
+load_data(void)
+{
+ assert_send_commands(cut_get_fixture_data_string("ddl.grn", NULL));
+ assert_send_command(cut_get_fixture_data_string("data.grn", NULL));
+}
+
+void
+cut_setup(void)
+{
+ const gchar *database_path;
+
+ cut_set_fixture_data_dir(grn_test_get_base_dir(),
+ "fixtures",
+ "geo",
+ NULL);
+
+ remove_tmp_directory();
+ g_mkdir_with_parents(tmp_directory, 0700);
+
+ context = g_new0(grn_ctx, 1);
+ grn_ctx_init(context, 0);
+
+ database_path = cut_build_path(tmp_directory, "database.groonga", NULL);
+ database = grn_db_create(context, database_path, NULL);
+
+ load_data();
+
+ points = get("Points");
+ short_degree_column = get("Points.short_degree");
+ location_index_column = get("Locations.point");
+
+ result = grn_table_create(context,
+ NULL, 0,
+ NULL,
+ GRN_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC,
+ points, NULL);
+}
+
+void
+cut_teardown(void)
+{
+ grn_obj_unlink(context, result);
+ grn_obj_unlink(context, location_index_column);
+ grn_obj_unlink(context, short_degree_column);
+ grn_obj_unlink(context, points);
+ grn_obj_close(context, database);
+ grn_ctx_fin(context);
+ g_free(context);
+
+ remove_tmp_directory();
+}
+
+#define ADD_DATA(label, expected, top, left, bottom, right) \
+ gcut_add_datum(label, \
+ "expected", G_TYPE_POINTER, expected, gcut_list_string_free, \
+ "top", G_TYPE_INT, top, \
+ "left", G_TYPE_INT, left, \
+ "bottom", G_TYPE_INT, bottom, \
+ "right", G_TYPE_INT, right, \
+ NULL)
+
+static void
+data_cursor_all_bottom_left(void)
+{
+ ADD_DATA("all - bottom left - bottom left",
+ gcut_list_string_new(
+ "(03,03)", "(03,04)", "(03,05)", "(03,06)", "(03,07)", "(03,08)",
+ "(04,03)", "(04,04)", "(04,05)", "(04,06)", "(04,07)", "(04,08)",
+ "(05,03)", "(05,04)", "(05,05)", "(05,06)", "(05,07)", "(05,08)",
+ "(06,03)", "(06,04)", "(06,05)", "(06,06)", "(06,07)", "(06,08)",
+ "(07,03)", "(07,04)", "(07,05)", "(07,06)", "(07,07)", "(07,08)",
+ "(08,03)", "(08,04)", "(08,05)", "(08,06)", "(08,07)", "(08,08)",
+ NULL),
+ 8, 3,
+ 3, 8);
+
+ ADD_DATA("all - bottom left - top left",
+ gcut_list_string_new(
+ "(07,03)", "(07,04)", "(07,05)", "(07,06)", "(07,07)", "(07,08)",
+ "(08,03)", "(08,04)", "(08,05)", "(08,06)", "(08,07)", "(08,08)",
+ NULL),
+ 8, 3,
+ 7, 8);
+
+ ADD_DATA("all - bottom left - bottom right",
+ gcut_list_string_new("(03,07)", "(03,08)",
+ "(04,07)", "(04,08)",
+ "(05,07)", "(05,08)",
+ "(06,07)", "(06,08)",
+ "(07,07)", "(07,08)",
+ "(08,07)", "(08,08)",
+ NULL),
+ 8, 7,
+ 3, 8);
+}
+
+static void
+data_cursor_all_top_left(void)
+{
+ ADD_DATA("all - top left - top left",
+ gcut_list_string_new(
+ "(07,03)", "(07,04)", "(07,05)", "(07,06)", "(07,07)", "(07,08)",
+ "(08,03)", "(08,04)", "(08,05)", "(08,06)", "(08,07)", "(08,08)",
+ "(09,03)", "(09,04)", "(09,05)", "(09,06)", "(09,07)", "(09,08)",
+ "(10,03)", "(10,04)", "(10,05)", "(10,06)", "(10,07)", "(10,08)",
+ "(11,03)", "(11,04)", "(11,05)", "(11,06)", "(11,07)", "(11,08)",
+ "(12,03)", "(12,04)", "(12,05)", "(12,06)", "(12,07)", "(12,08)",
+ NULL),
+ 12, 3,
+ 7, 8);
+
+ ADD_DATA("all - top left - top right",
+ gcut_list_string_new("(07,07)", "(07,08)",
+ "(08,07)", "(08,08)",
+ "(09,07)", "(09,08)",
+ "(10,07)", "(10,08)",
+ "(11,07)", "(11,08)",
+ "(12,07)", "(12,08)",
+ NULL),
+ 12, 7,
+ 7, 8);
+}
+
+static void
+data_cursor_all_bottom_right(void)
+{
+ ADD_DATA("all - bottom right - bottom right",
+ gcut_list_string_new(
+ "(03,07)", "(03,08)", "(03,09)", "(03,10)", "(03,11)", "(03,12)",
+ "(04,07)", "(04,08)", "(04,09)", "(04,10)", "(04,11)", "(04,12)",
+ "(05,07)", "(05,08)", "(05,09)", "(05,10)", "(05,11)", "(05,12)",
+ "(06,07)", "(06,08)", "(06,09)", "(06,10)", "(06,11)", "(06,12)",
+ "(07,07)", "(07,08)", "(07,09)", "(07,10)", "(07,11)", "(07,12)",
+ "(08,07)", "(08,08)", "(08,09)", "(08,10)", "(08,11)", "(08,12)",
+ NULL),
+ 8, 7,
+ 3, 12);
+
+ ADD_DATA("all - bottom right - top right",
+ gcut_list_string_new(
+ "(07,07)", "(07,08)", "(07,09)", "(07,10)", "(07,11)", "(07,12)",
+ "(08,07)", "(08,08)", "(08,09)", "(08,10)", "(08,11)", "(08,12)",
+ NULL),
+ 8, 7,
+ 7, 12);
+}
+
+static void
+data_cursor_all_top_right(void)
+{
+ ADD_DATA("all - bottom right - top right",
+ gcut_list_string_new(
+ "(07,07)", "(07,08)", "(07,09)", "(07,10)", "(07,11)", "(07,12)",
+ "(08,07)", "(08,08)", "(08,09)", "(08,10)", "(08,11)", "(08,12)",
+ "(09,07)", "(09,08)", "(09,09)", "(09,10)", "(09,11)", "(09,12)",
+ "(10,07)", "(10,08)", "(10,09)", "(10,10)", "(10,11)", "(10,12)",
+ "(11,07)", "(11,08)", "(11,09)", "(11,10)", "(11,11)", "(11,12)",
+ "(12,07)", "(12,08)", "(12,09)", "(12,10)", "(12,11)", "(12,12)",
+ NULL),
+ 12, 7,
+ 7, 12);
+}
+
+static void
+data_cursor_all(void)
+{
+ ADD_DATA("all - minimum",
+ gcut_list_string_new("(07,07)", "(07,08)",
+ "(08,07)", "(08,08)",
+ NULL),
+ 8, 7,
+ 7, 8);
+
+ data_cursor_all_bottom_left();
+ data_cursor_all_top_left();
+ data_cursor_all_bottom_right();
+ data_cursor_all_top_right();
+}
+
+static void
+data_cursor_bottom(void)
+{
+ ADD_DATA("bottom - minimum",
+ gcut_list_string_new("(03,07)", "(03,08)",
+ "(04,07)", "(04,08)",
+ NULL),
+ 4, 7,
+ 3, 8);
+
+ ADD_DATA("bottom - left - left",
+ gcut_list_string_new(
+ "(03,03)", "(03,04)", "(03,05)", "(03,06)", "(03,07)", "(03,08)",
+ "(04,03)", "(04,04)", "(04,05)", "(04,06)", "(04,07)", "(04,08)",
+ NULL),
+ 4, 3,
+ 3, 8);
+
+ ADD_DATA("bottom - right - right",
+ gcut_list_string_new(
+ "(03,07)", "(03,08)", "(03,09)", "(03,10)", "(03,11)", "(03,12)",
+ "(04,07)", "(04,08)", "(04,09)", "(04,10)", "(04,11)", "(04,12)",
+ NULL),
+ 4, 7,
+ 3, 12);
+}
+
+static void
+data_cursor_top(void)
+{
+ ADD_DATA("top - minimum",
+ gcut_list_string_new("(11,07)", "(11,08)",
+ "(12,07)", "(12,08)",
+ NULL),
+ 12, 7,
+ 11, 8);
+
+ ADD_DATA("top - left - left",
+ gcut_list_string_new(
+ "(11,03)", "(11,04)", "(11,05)", "(11,06)", "(11,07)", "(11,08)",
+ "(12,03)", "(12,04)", "(12,05)", "(12,06)", "(12,07)", "(12,08)",
+ NULL),
+ 12, 3,
+ 11, 8);
+
+ ADD_DATA("bottom - right - right",
+ gcut_list_string_new(
+ "(11,07)", "(11,08)", "(11,09)", "(11,10)", "(11,11)", "(11,12)",
+ "(12,07)", "(12,08)", "(12,09)", "(12,10)", "(12,11)", "(12,12)",
+ NULL),
+ 12, 7,
+ 11, 12);
+}
+
+void
+data_cursor(void)
+{
+ data_cursor_all();
+ data_cursor_bottom();
+ data_cursor_top();
+}
+
+#undef ADD_DATA
+
+static void
+set_geo_point(grn_obj *geo_point,
+ gint relative_latitude, gint relative_longitude)
+{
+ gint latitude, longitude;
+ gint base_latitude = (45 * 60 * 60 + 0 * 60) * 1000;
+ gint base_longitude = (90 * 60 * 60 + 0 * 60) * 1000;
+
+ GRN_WGS84_GEO_POINT_INIT(geo_point, 0);
+ latitude = base_latitude + relative_latitude;
+ longitude = base_longitude + relative_longitude;
+ GRN_GEO_POINT_SET(context, geo_point, latitude, longitude);
+}
+
+void
+test_cursor(gconstpointer data)
+{
+ GList *expected, *records = NULL;
+ gint offset = 0;
+ gint limit = -1;
+ grn_obj top_left, bottom_right;
+ grn_obj *geo_cursor;
+ grn_posting *posting;
+ grn_obj short_degree;
+
+ set_geo_point(&top_left,
+ gcut_data_get_int(data, "top"),
+ gcut_data_get_int(data, "left"));
+ set_geo_point(&bottom_right,
+ gcut_data_get_int(data, "bottom"),
+ gcut_data_get_int(data, "right"));
+ geo_cursor = grn_geo_cursor_open_in_rectangle(context,
+ location_index_column,
+ &top_left,
+ &bottom_right,
+ offset, limit);
+ grn_obj_unlink(context, &top_left);
+ grn_obj_unlink(context, &bottom_right);
+
+ GRN_TEXT_INIT(&short_degree, 0);
+ while ((posting = grn_geo_cursor_next(context, geo_cursor))) {
+ grn_id point_id = posting->rid;
+
+ GRN_BULK_REWIND(&short_degree);
+ grn_obj_get_value(context, short_degree_column, point_id, &short_degree);
+ records = g_list_append(records,
+ g_strndup(GRN_TEXT_VALUE(&short_degree),
+ GRN_TEXT_LEN(&short_degree)));
+ }
+ grn_obj_unlink(context, &short_degree);
+ grn_obj_unlink(context, geo_cursor);
+
+ records = g_list_sort(records, (GCompareFunc)strcmp);
+ gcut_take_list(records, g_free);
+
+ expected = (GList *)gcut_data_get_pointer(data, "expected");
+ gcut_assert_equal_list_string(expected, records);
+}
+
Modified: test/unit/fixtures/Makefile.am (+1 -0)
===================================================================
--- test/unit/fixtures/Makefile.am 2011-11-13 07:35:29 +0000 (c7446a7)
+++ test/unit/fixtures/Makefile.am 2011-11-13 11:31:50 +0000 (3655b46)
@@ -3,6 +3,7 @@ SUBDIRS = \
performance \
inverted-index \
plugins \
+ geo \
story
if WITH_CUTTER
Added: test/unit/fixtures/geo/Makefile.am (+6 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/fixtures/geo/Makefile.am 2011-11-13 11:31:50 +0000 (8c38467)
@@ -0,0 +1,6 @@
+EXTRA_DIST = \
+ ddl.grn \
+ data.grn \
+ generate-data.rb
+
+
Added: test/unit/fixtures/geo/data.grn (+259 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/fixtures/geo/data.grn 2011-11-13 11:31:50 +0000 (2fd7a01)
@@ -0,0 +1,259 @@
+load --table Points
+[
+["_key", "short_key", "degree", "short_degree", "location"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 0),(90, 0, 0, 0))","(00,00)","162000000x324000000"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 0),(90, 0, 0, 1))","(00,01)","162000000x324000001"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 0),(90, 0, 0, 2))","(00,02)","162000000x324000002"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 0),(90, 0, 0, 3))","(00,03)","162000000x324000003"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 0),(90, 0, 0, 4))","(00,04)","162000000x324000004"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 0),(90, 0, 0, 5))","(00,05)","162000000x324000005"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 0),(90, 0, 0, 6))","(00,06)","162000000x324000006"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 0),(90, 0, 0, 7))","(00,07)","162000000x324000007"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 0),(90, 0, 0, 8))","(00,08)","162000000x324000008"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 0),(90, 0, 0, 9))","(00,09)","162000000x324000009"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 0),(90, 0, 0, 10))","(00,10)","162000000x324000010"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 0),(90, 0, 0, 11))","(00,11)","162000000x324000011"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 0),(90, 0, 0, 12))","(00,12)","162000000x324000012"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 0),(90, 0, 0, 13))","(00,13)","162000000x324000013"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 0),(90, 0, 0, 14))","(00,14)","162000000x324000014"],
+["0b00001001101001111110110010000000\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 0),(90, 0, 0, 15))","(00,15)","162000000x324000015"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 1),(90, 0, 0, 0))","(01,00)","162000001x324000000"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 1),(90, 0, 0, 1))","(01,01)","162000001x324000001"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 1),(90, 0, 0, 2))","(01,02)","162000001x324000002"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 1),(90, 0, 0, 3))","(01,03)","162000001x324000003"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 1),(90, 0, 0, 4))","(01,04)","162000001x324000004"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 1),(90, 0, 0, 5))","(01,05)","162000001x324000005"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 1),(90, 0, 0, 6))","(01,06)","162000001x324000006"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 1),(90, 0, 0, 7))","(01,07)","162000001x324000007"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 1),(90, 0, 0, 8))","(01,08)","162000001x324000008"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 1),(90, 0, 0, 9))","(01,09)","162000001x324000009"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 1),(90, 0, 0, 10))","(01,10)","162000001x324000010"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 1),(90, 0, 0, 11))","(01,11)","162000001x324000011"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 1),(90, 0, 0, 12))","(01,12)","162000001x324000012"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 1),(90, 0, 0, 13))","(01,13)","162000001x324000013"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 1),(90, 0, 0, 14))","(01,14)","162000001x324000014"],
+["0b00001001101001111110110010000001\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 1),(90, 0, 0, 15))","(01,15)","162000001x324000015"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 2),(90, 0, 0, 0))","(02,00)","162000002x324000000"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 2),(90, 0, 0, 1))","(02,01)","162000002x324000001"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 2),(90, 0, 0, 2))","(02,02)","162000002x324000002"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 2),(90, 0, 0, 3))","(02,03)","162000002x324000003"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 2),(90, 0, 0, 4))","(02,04)","162000002x324000004"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 2),(90, 0, 0, 5))","(02,05)","162000002x324000005"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 2),(90, 0, 0, 6))","(02,06)","162000002x324000006"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 2),(90, 0, 0, 7))","(02,07)","162000002x324000007"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 2),(90, 0, 0, 8))","(02,08)","162000002x324000008"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 2),(90, 0, 0, 9))","(02,09)","162000002x324000009"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 2),(90, 0, 0, 10))","(02,10)","162000002x324000010"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 2),(90, 0, 0, 11))","(02,11)","162000002x324000011"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 2),(90, 0, 0, 12))","(02,12)","162000002x324000012"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 2),(90, 0, 0, 13))","(02,13)","162000002x324000013"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 2),(90, 0, 0, 14))","(02,14)","162000002x324000014"],
+["0b00001001101001111110110010000010\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 2),(90, 0, 0, 15))","(02,15)","162000002x324000015"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 3),(90, 0, 0, 0))","(03,00)","162000003x324000000"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 3),(90, 0, 0, 1))","(03,01)","162000003x324000001"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 3),(90, 0, 0, 2))","(03,02)","162000003x324000002"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 3),(90, 0, 0, 3))","(03,03)","162000003x324000003"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 3),(90, 0, 0, 4))","(03,04)","162000003x324000004"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 3),(90, 0, 0, 5))","(03,05)","162000003x324000005"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 3),(90, 0, 0, 6))","(03,06)","162000003x324000006"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 3),(90, 0, 0, 7))","(03,07)","162000003x324000007"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 3),(90, 0, 0, 8))","(03,08)","162000003x324000008"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 3),(90, 0, 0, 9))","(03,09)","162000003x324000009"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 3),(90, 0, 0, 10))","(03,10)","162000003x324000010"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 3),(90, 0, 0, 11))","(03,11)","162000003x324000011"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 3),(90, 0, 0, 12))","(03,12)","162000003x324000012"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 3),(90, 0, 0, 13))","(03,13)","162000003x324000013"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 3),(90, 0, 0, 14))","(03,14)","162000003x324000014"],
+["0b00001001101001111110110010000011\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 3),(90, 0, 0, 15))","(03,15)","162000003x324000015"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 4),(90, 0, 0, 0))","(04,00)","162000004x324000000"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 4),(90, 0, 0, 1))","(04,01)","162000004x324000001"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 4),(90, 0, 0, 2))","(04,02)","162000004x324000002"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 4),(90, 0, 0, 3))","(04,03)","162000004x324000003"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 4),(90, 0, 0, 4))","(04,04)","162000004x324000004"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 4),(90, 0, 0, 5))","(04,05)","162000004x324000005"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 4),(90, 0, 0, 6))","(04,06)","162000004x324000006"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 4),(90, 0, 0, 7))","(04,07)","162000004x324000007"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 4),(90, 0, 0, 8))","(04,08)","162000004x324000008"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 4),(90, 0, 0, 9))","(04,09)","162000004x324000009"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 4),(90, 0, 0, 10))","(04,10)","162000004x324000010"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 4),(90, 0, 0, 11))","(04,11)","162000004x324000011"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 4),(90, 0, 0, 12))","(04,12)","162000004x324000012"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 4),(90, 0, 0, 13))","(04,13)","162000004x324000013"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 4),(90, 0, 0, 14))","(04,14)","162000004x324000014"],
+["0b00001001101001111110110010000100\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 4),(90, 0, 0, 15))","(04,15)","162000004x324000015"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 5),(90, 0, 0, 0))","(05,00)","162000005x324000000"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 5),(90, 0, 0, 1))","(05,01)","162000005x324000001"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 5),(90, 0, 0, 2))","(05,02)","162000005x324000002"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 5),(90, 0, 0, 3))","(05,03)","162000005x324000003"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 5),(90, 0, 0, 4))","(05,04)","162000005x324000004"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 5),(90, 0, 0, 5))","(05,05)","162000005x324000005"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 5),(90, 0, 0, 6))","(05,06)","162000005x324000006"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 5),(90, 0, 0, 7))","(05,07)","162000005x324000007"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 5),(90, 0, 0, 8))","(05,08)","162000005x324000008"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 5),(90, 0, 0, 9))","(05,09)","162000005x324000009"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 5),(90, 0, 0, 10))","(05,10)","162000005x324000010"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 5),(90, 0, 0, 11))","(05,11)","162000005x324000011"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 5),(90, 0, 0, 12))","(05,12)","162000005x324000012"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 5),(90, 0, 0, 13))","(05,13)","162000005x324000013"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 5),(90, 0, 0, 14))","(05,14)","162000005x324000014"],
+["0b00001001101001111110110010000101\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 5),(90, 0, 0, 15))","(05,15)","162000005x324000015"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 6),(90, 0, 0, 0))","(06,00)","162000006x324000000"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 6),(90, 0, 0, 1))","(06,01)","162000006x324000001"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 6),(90, 0, 0, 2))","(06,02)","162000006x324000002"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 6),(90, 0, 0, 3))","(06,03)","162000006x324000003"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 6),(90, 0, 0, 4))","(06,04)","162000006x324000004"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 6),(90, 0, 0, 5))","(06,05)","162000006x324000005"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 6),(90, 0, 0, 6))","(06,06)","162000006x324000006"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 6),(90, 0, 0, 7))","(06,07)","162000006x324000007"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 6),(90, 0, 0, 8))","(06,08)","162000006x324000008"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 6),(90, 0, 0, 9))","(06,09)","162000006x324000009"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 6),(90, 0, 0, 10))","(06,10)","162000006x324000010"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 6),(90, 0, 0, 11))","(06,11)","162000006x324000011"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 6),(90, 0, 0, 12))","(06,12)","162000006x324000012"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 6),(90, 0, 0, 13))","(06,13)","162000006x324000013"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 6),(90, 0, 0, 14))","(06,14)","162000006x324000014"],
+["0b00001001101001111110110010000110\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 6),(90, 0, 0, 15))","(06,15)","162000006x324000015"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 7),(90, 0, 0, 0))","(07,00)","162000007x324000000"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 7),(90, 0, 0, 1))","(07,01)","162000007x324000001"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 7),(90, 0, 0, 2))","(07,02)","162000007x324000002"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 7),(90, 0, 0, 3))","(07,03)","162000007x324000003"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 7),(90, 0, 0, 4))","(07,04)","162000007x324000004"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 7),(90, 0, 0, 5))","(07,05)","162000007x324000005"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 7),(90, 0, 0, 6))","(07,06)","162000007x324000006"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 7),(90, 0, 0, 7))","(07,07)","162000007x324000007"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 7),(90, 0, 0, 8))","(07,08)","162000007x324000008"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 7),(90, 0, 0, 9))","(07,09)","162000007x324000009"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 7),(90, 0, 0, 10))","(07,10)","162000007x324000010"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 7),(90, 0, 0, 11))","(07,11)","162000007x324000011"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 7),(90, 0, 0, 12))","(07,12)","162000007x324000012"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 7),(90, 0, 0, 13))","(07,13)","162000007x324000013"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 7),(90, 0, 0, 14))","(07,14)","162000007x324000014"],
+["0b00001001101001111110110010000111\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 7),(90, 0, 0, 15))","(07,15)","162000007x324000015"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 8),(90, 0, 0, 0))","(08,00)","162000008x324000000"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 8),(90, 0, 0, 1))","(08,01)","162000008x324000001"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 8),(90, 0, 0, 2))","(08,02)","162000008x324000002"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 8),(90, 0, 0, 3))","(08,03)","162000008x324000003"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 8),(90, 0, 0, 4))","(08,04)","162000008x324000004"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 8),(90, 0, 0, 5))","(08,05)","162000008x324000005"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 8),(90, 0, 0, 6))","(08,06)","162000008x324000006"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 8),(90, 0, 0, 7))","(08,07)","162000008x324000007"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 8),(90, 0, 0, 8))","(08,08)","162000008x324000008"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 8),(90, 0, 0, 9))","(08,09)","162000008x324000009"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 8),(90, 0, 0, 10))","(08,10)","162000008x324000010"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 8),(90, 0, 0, 11))","(08,11)","162000008x324000011"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 8),(90, 0, 0, 12))","(08,12)","162000008x324000012"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 8),(90, 0, 0, 13))","(08,13)","162000008x324000013"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 8),(90, 0, 0, 14))","(08,14)","162000008x324000014"],
+["0b00001001101001111110110010001000\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 8),(90, 0, 0, 15))","(08,15)","162000008x324000015"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 9),(90, 0, 0, 0))","(09,00)","162000009x324000000"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 9),(90, 0, 0, 1))","(09,01)","162000009x324000001"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 9),(90, 0, 0, 2))","(09,02)","162000009x324000002"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 9),(90, 0, 0, 3))","(09,03)","162000009x324000003"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 9),(90, 0, 0, 4))","(09,04)","162000009x324000004"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 9),(90, 0, 0, 5))","(09,05)","162000009x324000005"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 9),(90, 0, 0, 6))","(09,06)","162000009x324000006"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 9),(90, 0, 0, 7))","(09,07)","162000009x324000007"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 9),(90, 0, 0, 8))","(09,08)","162000009x324000008"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 9),(90, 0, 0, 9))","(09,09)","162000009x324000009"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 9),(90, 0, 0, 10))","(09,10)","162000009x324000010"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 9),(90, 0, 0, 11))","(09,11)","162000009x324000011"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 9),(90, 0, 0, 12))","(09,12)","162000009x324000012"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 9),(90, 0, 0, 13))","(09,13)","162000009x324000013"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 9),(90, 0, 0, 14))","(09,14)","162000009x324000014"],
+["0b00001001101001111110110010001001\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 9),(90, 0, 0, 15))","(09,15)","162000009x324000015"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 10),(90, 0, 0, 0))","(10,00)","162000010x324000000"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 10),(90, 0, 0, 1))","(10,01)","162000010x324000001"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 10),(90, 0, 0, 2))","(10,02)","162000010x324000002"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 10),(90, 0, 0, 3))","(10,03)","162000010x324000003"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 10),(90, 0, 0, 4))","(10,04)","162000010x324000004"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 10),(90, 0, 0, 5))","(10,05)","162000010x324000005"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 10),(90, 0, 0, 6))","(10,06)","162000010x324000006"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 10),(90, 0, 0, 7))","(10,07)","162000010x324000007"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 10),(90, 0, 0, 8))","(10,08)","162000010x324000008"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 10),(90, 0, 0, 9))","(10,09)","162000010x324000009"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 10),(90, 0, 0, 10))","(10,10)","162000010x324000010"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 10),(90, 0, 0, 11))","(10,11)","162000010x324000011"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 10),(90, 0, 0, 12))","(10,12)","162000010x324000012"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 10),(90, 0, 0, 13))","(10,13)","162000010x324000013"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 10),(90, 0, 0, 14))","(10,14)","162000010x324000014"],
+["0b00001001101001111110110010001010\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 10),(90, 0, 0, 15))","(10,15)","162000010x324000015"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 11),(90, 0, 0, 0))","(11,00)","162000011x324000000"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 11),(90, 0, 0, 1))","(11,01)","162000011x324000001"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 11),(90, 0, 0, 2))","(11,02)","162000011x324000002"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 11),(90, 0, 0, 3))","(11,03)","162000011x324000003"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 11),(90, 0, 0, 4))","(11,04)","162000011x324000004"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 11),(90, 0, 0, 5))","(11,05)","162000011x324000005"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 11),(90, 0, 0, 6))","(11,06)","162000011x324000006"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 11),(90, 0, 0, 7))","(11,07)","162000011x324000007"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 11),(90, 0, 0, 8))","(11,08)","162000011x324000008"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 11),(90, 0, 0, 9))","(11,09)","162000011x324000009"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 11),(90, 0, 0, 10))","(11,10)","162000011x324000010"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 11),(90, 0, 0, 11))","(11,11)","162000011x324000011"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 11),(90, 0, 0, 12))","(11,12)","162000011x324000012"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 11),(90, 0, 0, 13))","(11,13)","162000011x324000013"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 11),(90, 0, 0, 14))","(11,14)","162000011x324000014"],
+["0b00001001101001111110110010001011\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 11),(90, 0, 0, 15))","(11,15)","162000011x324000015"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 12),(90, 0, 0, 0))","(12,00)","162000012x324000000"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 12),(90, 0, 0, 1))","(12,01)","162000012x324000001"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 12),(90, 0, 0, 2))","(12,02)","162000012x324000002"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 12),(90, 0, 0, 3))","(12,03)","162000012x324000003"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 12),(90, 0, 0, 4))","(12,04)","162000012x324000004"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 12),(90, 0, 0, 5))","(12,05)","162000012x324000005"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 12),(90, 0, 0, 6))","(12,06)","162000012x324000006"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 12),(90, 0, 0, 7))","(12,07)","162000012x324000007"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 12),(90, 0, 0, 8))","(12,08)","162000012x324000008"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 12),(90, 0, 0, 9))","(12,09)","162000012x324000009"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 12),(90, 0, 0, 10))","(12,10)","162000012x324000010"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 12),(90, 0, 0, 11))","(12,11)","162000012x324000011"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 12),(90, 0, 0, 12))","(12,12)","162000012x324000012"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 12),(90, 0, 0, 13))","(12,13)","162000012x324000013"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 12),(90, 0, 0, 14))","(12,14)","162000012x324000014"],
+["0b00001001101001111110110010001100\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 12),(90, 0, 0, 15))","(12,15)","162000012x324000015"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 13),(90, 0, 0, 0))","(13,00)","162000013x324000000"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 13),(90, 0, 0, 1))","(13,01)","162000013x324000001"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 13),(90, 0, 0, 2))","(13,02)","162000013x324000002"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 13),(90, 0, 0, 3))","(13,03)","162000013x324000003"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 13),(90, 0, 0, 4))","(13,04)","162000013x324000004"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 13),(90, 0, 0, 5))","(13,05)","162000013x324000005"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 13),(90, 0, 0, 6))","(13,06)","162000013x324000006"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 13),(90, 0, 0, 7))","(13,07)","162000013x324000007"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 13),(90, 0, 0, 8))","(13,08)","162000013x324000008"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 13),(90, 0, 0, 9))","(13,09)","162000013x324000009"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 13),(90, 0, 0, 10))","(13,10)","162000013x324000010"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 13),(90, 0, 0, 11))","(13,11)","162000013x324000011"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 13),(90, 0, 0, 12))","(13,12)","162000013x324000012"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 13),(90, 0, 0, 13))","(13,13)","162000013x324000013"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 13),(90, 0, 0, 14))","(13,14)","162000013x324000014"],
+["0b00001001101001111110110010001101\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 13),(90, 0, 0, 15))","(13,15)","162000013x324000015"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 14),(90, 0, 0, 0))","(14,00)","162000014x324000000"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 14),(90, 0, 0, 1))","(14,01)","162000014x324000001"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 14),(90, 0, 0, 2))","(14,02)","162000014x324000002"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 14),(90, 0, 0, 3))","(14,03)","162000014x324000003"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 14),(90, 0, 0, 4))","(14,04)","162000014x324000004"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 14),(90, 0, 0, 5))","(14,05)","162000014x324000005"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 14),(90, 0, 0, 6))","(14,06)","162000014x324000006"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 14),(90, 0, 0, 7))","(14,07)","162000014x324000007"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 14),(90, 0, 0, 8))","(14,08)","162000014x324000008"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 14),(90, 0, 0, 9))","(14,09)","162000014x324000009"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 14),(90, 0, 0, 10))","(14,10)","162000014x324000010"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 14),(90, 0, 0, 11))","(14,11)","162000014x324000011"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 14),(90, 0, 0, 12))","(14,12)","162000014x324000012"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 14),(90, 0, 0, 13))","(14,13)","162000014x324000013"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 14),(90, 0, 0, 14))","(14,14)","162000014x324000014"],
+["0b00001001101001111110110010001110\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 14),(90, 0, 0, 15))","(14,15)","162000014x324000015"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000000","00000001","((45, 0, 0, 15),(90, 0, 0, 0))","(15,00)","162000015x324000000"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000001","00000001","((45, 0, 0, 15),(90, 0, 0, 1))","(15,01)","162000015x324000001"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000010","00000001","((45, 0, 0, 15),(90, 0, 0, 2))","(15,02)","162000015x324000002"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000011","00000001","((45, 0, 0, 15),(90, 0, 0, 3))","(15,03)","162000015x324000003"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000100","00000001","((45, 0, 0, 15),(90, 0, 0, 4))","(15,04)","162000015x324000004"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000101","00000001","((45, 0, 0, 15),(90, 0, 0, 5))","(15,05)","162000015x324000005"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000110","00000001","((45, 0, 0, 15),(90, 0, 0, 6))","(15,06)","162000015x324000006"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100000111","00000001","((45, 0, 0, 15),(90, 0, 0, 7))","(15,07)","162000015x324000007"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001000","00000001","((45, 0, 0, 15),(90, 0, 0, 8))","(15,08)","162000015x324000008"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001001","00000001","((45, 0, 0, 15),(90, 0, 0, 9))","(15,09)","162000015x324000009"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001010","00000001","((45, 0, 0, 15),(90, 0, 0, 10))","(15,10)","162000015x324000010"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001011","00000001","((45, 0, 0, 15),(90, 0, 0, 11))","(15,11)","162000015x324000011"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001100","00000001","((45, 0, 0, 15),(90, 0, 0, 12))","(15,12)","162000015x324000012"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001101","00000001","((45, 0, 0, 15),(90, 0, 0, 13))","(15,13)","162000015x324000013"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001110","00000001","((45, 0, 0, 15),(90, 0, 0, 14))","(15,14)","162000015x324000014"],
+["0b00001001101001111110110010001111\n0b00010011010011111101100100001111","00000001","((45, 0, 0, 15),(90, 0, 0, 15))","(15,15)","162000015x324000015"],
Added: test/unit/fixtures/geo/ddl.grn (+7 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/fixtures/geo/ddl.grn 2011-11-13 11:31:50 +0000 (f1f00ae)
@@ -0,0 +1,7 @@
+table_create Points TABLE_HASH_KEY ShortText
+column_create Points short_key COLUMN_SCALAR ShortText
+column_create Points degree COLUMN_SCALAR ShortText
+column_create Points short_degree COLUMN_SCALAR ShortText
+column_create Points location COLUMN_SCALAR WGS84GeoPoint
+table_create Locations TABLE_PAT_KEY WGS84GeoPoint
+column_create Locations point COLUMN_INDEX Points location
Added: test/unit/fixtures/geo/generate-data.rb (+67 -0) 100755
===================================================================
--- /dev/null
+++ test/unit/fixtures/geo/generate-data.rb 2011-11-13 11:31:50 +0000 (5b0e3a6)
@@ -0,0 +1,67 @@
+#!/usr/bin/env ruby
+
+seed_latitude = (45 * 60 * 60 + 0 * 60 + 0) * 1000
+seed_longitude = (90 * 60 * 60 + 0 * 60 + 0) * 1000
+
+n_places = 32
+common_n_places = 28
+
+rest_n_places = n_places - common_n_places
+
+seed_latitude_in_string = ("%0#{n_places}b" % seed_latitude)
+seed_longitude_in_string = ("%0#{n_places}b" % seed_longitude)
+
+base_latitude_in_string = seed_latitude_in_string[0, common_n_places]
+base_latitude_in_string += "0" * rest_n_places
+base_longitude_in_string = seed_longitude_in_string[0, common_n_places]
+base_longitude_in_string += "0" * rest_n_places
+
+base_latitude = base_latitude_in_string.to_i(2)
+base_longitude = base_longitude_in_string.to_i(2)
+
+points = []
+max_variable_value = rest_n_places ** 2
+max_variable_value.times do |i|
+ latitude = base_latitude + i
+ max_variable_value.times do |j|
+ longitude = base_longitude + j
+ points << [latitude, longitude]
+ end
+end
+
+def to_degree(point)
+ "(%d, %d, %d, %d)" % [(point / 1000 / 60 / 60),
+ (point / 1000 / 60) % 60,
+ (point / 1000) % 60,
+ (point % 1000)]
+end
+
+puts("load --table Points")
+puts("[")
+puts("[\"_key\", \"short_key\", \"degree\", \"short_degree\", \"location\"],")
+points.each do |latitude, longitude|
+ latitude_in_string = "%0#{n_places}b" % latitude
+ longitude_in_string = "%0#{n_places}b" % longitude
+ short_key = ""
+ rest_n_places.times do |i|
+ short_key << latitude_in_string[i]
+ short_key << longitude_in_string[i]
+ end
+ latitude_in_degree = to_degree(latitude)
+ longitude_in_degree = to_degree(longitude)
+ degree = "(#{latitude_in_degree},#{longitude_in_degree})"
+ short_degree_n_places = (Math.log10(max_variable_value) + 1).truncate
+ short_degree_format = "(%0#{short_degree_n_places}d," +
+ "%0#{short_degree_n_places}d)"
+ short_degree = short_degree_format % [latitude % max_variable_value,
+ longitude % max_variable_value]
+
+ print("[")
+ print("\"0b#{latitude_in_string}\\n")
+ print("0b#{longitude_in_string}\",")
+ print("\"#{short_key}\",")
+ print("\"#{degree}\",")
+ print("\"#{short_degree}\",")
+ print("\"#{latitude}x#{longitude}\"")
+ puts("],")
+end