null+****@clear*****
null+****@clear*****
2010年 7月 1日 (木) 07:40:52 JST
Kouhei Sutou 2010-06-30 22:40:52 +0000 (Wed, 30 Jun 2010)
New Revision: 8f889f21c8bc6ae3d8738d3842bd60f6ea5ed486
Log:
add a test for broken reference drilldown.
Added files:
test/unit/fixtures/story/taiyaki/areas.grn
test/unit/fixtures/story/taiyaki/categories.grn
Modified files:
test/unit/fixtures/story/taiyaki/ddl.grn
test/unit/fixtures/story/taiyaki/shops.grn
test/unit/story/taiyaki/test-geo.c
Added: test/unit/fixtures/story/taiyaki/areas.grn (+26 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/fixtures/story/taiyaki/areas.grn 2010-06-30 22:40:52 +0000 (4d56418)
@@ -0,0 +1,26 @@
+load --table Areas
+[
+{"_key":"area0001",name:"東京都千代田区"},
+{"_key":"area0002",name:"東京都中央区"},
+{"_key":"area0003",name:"東京都港区"},
+{"_key":"area0004",name:"東京都新宿区"},
+{"_key":"area0005",name:"東京都文京区"},
+{"_key":"area0006",name:"東京都台東区"},
+{"_key":"area0007",name:"東京都墨田区"},
+{"_key":"area0008",name:"東京都江東区"},
+{"_key":"area0009",name:"東京都品川区"},
+{"_key":"area0010",name:"東京都目黒区"},
+{"_key":"area0011",name:"東京都大田区"},
+{"_key":"area0012",name:"東京都世田谷区"},
+{"_key":"area0013",name:"東京都渋谷区"},
+{"_key":"area0014",name:"東京都中野区"},
+{"_key":"area0015",name:"東京都杉並区"},
+{"_key":"area0016",name:"東京都豊島区"},
+{"_key":"area0017",name:"東京都北区"},
+{"_key":"area0018",name:"東京都千代田区"},
+{"_key":"area0019",name:"東京都荒川区"},
+{"_key":"area0020",name:"東京都板橋区"},
+{"_key":"area0021",name:"東京都練馬区"},
+{"_key":"area0022",name:"東京都足立区"},
+{"_key":"area0023",name:"東京都江戸川区"},
+]
Added: test/unit/fixtures/story/taiyaki/categories.grn (+6 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/fixtures/story/taiyaki/categories.grn 2010-06-30 22:40:52 +0000 (2afbb29)
@@ -0,0 +1,6 @@
+load --table Categories
+[
+{"_key":"category0001",name:"和食"},
+{"_key":"category0002",name:"中華"},
+{"_key":"category0003",name:"おやつ"}
+]
Modified: test/unit/fixtures/story/taiyaki/ddl.grn (+8 -0)
===================================================================
--- test/unit/fixtures/story/taiyaki/ddl.grn 2010-06-30 11:21:27 +0000 (721d915)
+++ test/unit/fixtures/story/taiyaki/ddl.grn 2010-06-30 22:40:52 +0000 (dac8522)
@@ -3,12 +3,20 @@ table_create Bigram TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer To
table_create Tags TABLE_PAT_KEY ShortText
column_create Tags name COLUMN_SCALAR ShortText
+table_create Categories TABLE_HASH_KEY ShortText
+column_create Categories name COLUMN_SCALAR ShortText
+
+table_create Areas TABLE_HASH_KEY ShortText
+column_create Areas name COLUMN_SCALAR ShortText
+
table_create Shops TABLE_HASH_KEY ShortText
column_create Shops name COLUMN_SCALAR ShortText
column_create Shops tags COLUMN_VECTOR Tags
column_create Shops location COLUMN_SCALAR WGS84GeoPoint
column_create Shops latitude COLUMN_SCALAR Int32
column_create Shops longitude COLUMN_SCALAR Int32
+column_create Shops categories COLUMN_VECTOR Categories
+column_create Shops area COLUMN_SCALAR Areas
column_create Tags index COLUMN_INDEX Shops tags
column_create Bigram name COLUMN_INDEX|WITH_POSITION|WITH_SECTION Shops name
Modified: test/unit/fixtures/story/taiyaki/shops.grn (+11 -11)
===================================================================
--- test/unit/fixtures/story/taiyaki/shops.grn 2010-06-30 11:21:27 +0000 (68a5e66)
+++ test/unit/fixtures/story/taiyaki/shops.grn 2010-06-30 22:40:52 +0000 (d8c0aa8)
@@ -1,6 +1,6 @@
load --table Shops
[
-{"_key":"nezu-no-taiyaki",name:"根津のたいやき","latitude":130322053,"longitude":504985073,"location":"130322053x504985073",tags:["たいやき","天然"]},
+{"_key":"nezu-no-taiyaki",name:"根津のたいやき","latitude":130322053,"longitude":504985073,"location":"130322053x504985073",tags:["たいやき","天然"],area:"area0005"},
{"_key":"taiyaki-kataoka",name:"たい焼 カタオカ","latitude":130285021,"longitude":504715091,"location":"130285021x504715091",tags:["たいやき"]},
{"_key":"soba-taiyaki-ku",name:"そばたいやき空","latitude":130117012,"longitude":504390088,"location":"130117012x504390088",tags:["たいやき"]},
{"_key":"kuruma",name:"車","latitude":130335016,"longitude":504662007,"location":"130335016x504662007",tags:["たいやき"]},
@@ -13,27 +13,27 @@ load --table Shops
{"_key":"miyoshi",name:"みよし","latitude":129885039,"longitude":503653023,"location":"129885039x503653023",tags:["たいやき"]},
{"_key":"juju-ya",name:"寿々屋 菓子","latitude":129809022,"longitude":504597055,"location":"129809022x504597055",tags:["たいやき"]},
{"_key":"tatsumi-ya",name:"たい焼き \/ たつみや","latitude":130015001,"longitude":504266057,"location":"130015001x504266057",tags:["たいやき"]},
-{"_key":"tetsuji",name:"たい焼き鉄次 大丸東京店","latitude":130089012,"longitude":505045070,"location":"130089012x505045070",tags:["たいやき"]},
+{"_key":"tetsuji",name:"たい焼き鉄次 大丸東京店","latitude":130089012,"longitude":505045070,"location":"130089012x505045070",tags:["たいやき"],categories:["category0003","category0001"]},
{"_key":"gazuma-ya",name:"吾妻屋","latitude":130208017,"longitude":504315098,"location":"130208017x504315098",tags:["たいやき"]},
-{"_key":"honma-mon",name:"ほんま門","latitude":130347036,"longitude":504325073,"location":"130347036x504325073",tags:["たこやき"]},
+{"_key":"honma-mon",name:"ほんま門","latitude":130347036,"longitude":504325073,"location":"130347036x504325073",tags:["たこやき"],area:"area0014"},
{"_key":"naniwa-ya",name:"浪花家","latitude":130380061,"longitude":505202034,"location":"130380061x505202034",tags:["たいやき","天然"]},
{"_key":"kuro-dai",name:"代官山たい焼き黒鯛","latitude":129903045,"longitude":504648034,"location":"129903045x504648034",tags:["たいやき"]},
{"_key":"daruma",name:"たいやき神田達磨 八重洲店","latitude":130094061,"longitude":505025099,"location":"130094061x505025099",tags:["たいやき"]},
-{"_key":"yanagi-ya",name:"柳屋 たい焼き","latitude":130133052,"longitude":505120058,"location":"130133052x505120058",tags:["たいやき","天然"]},
+{"_key":"yanagi-ya",name:"柳屋 たい焼き","latitude":130133052,"longitude":505120058,"location":"130133052x505120058",tags:["たいやき","天然"],area:"area0002"},
{"_key":"sharaku",name:"たい焼き写楽","latitude":130329069,"longitude":505188046,"location":"130329069x505188046",tags:["たいやき","天然"]},
{"_key":"takane",name:"たかね 和菓子","latitude":130226001,"longitude":503769013,"location":"130226001x503769013",tags:["たいやき","天然","和菓子"]},
{"_key":"chiyoda",name:"たい焼き ちよだ","latitude":129866001,"longitude":504328017,"location":"129866001x504328017",tags:["たいやき"]},
{"_key":"da-ka-po",name:"ダ・カーポ","latitude":129786048,"longitude":504792049,"location":"129786048x504792049",tags:["たいやき","カレー"]},
-{"_key":"matsushima-ya",name:"松島屋","latitude":129845056,"longitude":504853081,"location":"129845056x504853081",tags:["和菓子"]},
-{"_key":"kazuya",name:"銀座 かずや","latitude":130055008,"longitude":504968095,"location":"130055008x504968095",tags:["和菓子"]},
-{"_key":"furuya-kogane-an",name:"ふるや古賀音庵 和菓子","latitude":130086003,"longitude":504480071,"location":"130086003x504480071",tags:["和菓子"]},
-{"_key":"hachi-no-ie",name:"蜂の家 自由が丘本店","latitude":129680021,"longitude":504441006,"location":"129680021x504441006",tags:["和菓子"]},
+{"_key":"matsushima-ya",name:"松島屋","latitude":129845056,"longitude":504853081,"location":"129845056x504853081",tags:["和菓子"],categories:["和食"]},
+{"_key":"kazuya",name:"銀座 かずや","latitude":130055008,"longitude":504968095,"location":"130055008x504968095",tags:["和菓子"],categories:["和食"]},
+{"_key":"furuya-kogane-an",name:"ふるや古賀音庵 和菓子","latitude":130086003,"longitude":504480071,"location":"130086003x504480071",tags:["和菓子"],categories:["和食"]},
+{"_key":"hachi-no-ie",name:"蜂の家 自由が丘本店","latitude":129680021,"longitude":504441006,"location":"129680021x504441006",tags:["和菓子"],categories:["和食"]},
{"_key":"azuki-chan",name:"薄皮たい焼き あづきちゃん","latitude":129855010,"longitude":504452003,"location":"129855010x504452003",tags:["たいやき"]},
{"_key":"kuriko-an",name:"横浜 くりこ庵 浅草店","latitude":130280013,"longitude":505208029,"location":"130280013x505208029",tags:["たいやき"]},
{"_key":"yume-no-aru-machi-no-taiyaki-ya-san",name:"夢ある街のたいやき屋さん戸越銀座店","latitude":129721099,"longitude":504685024,"location":"129721099x504685024",tags:["たいやき"]},
{"_key":"naze-ya",name:"何故屋","latitude":129690039,"longitude":504418033,"location":"129690039x504418033",tags:["たいやき"]},
-{"_key":"sanoki-ya",name:"築地 さのきや","latitude":130019020,"longitude":505027021,"location":"130019020x505027021",tags:["たいやき","マグロ"]},
-{"_key":"shigeta",name:"しげ田","latitude":130046026,"longitude":505082073,"location":"130046026x505082073",tags:["たいやき","和菓子"]},
+{"_key":"sanoki-ya",name:"築地 さのきや","latitude":130019020,"longitude":505027021,"location":"130019020x505027021",tags:["たいやき","マグロ"],categories:"",area:"area0002"},
+{"_key":"shigeta",name:"しげ田","latitude":130046026,"longitude":505082073,"location":"130046026x505082073",tags:["たいやき","和菓子"],area:"area0002"},
{"_key":"nishimi-ya",name:"にしみや 甘味処","latitude":130038025,"longitude":505066028,"location":"130038025x505066028",tags:["たいやき","おでん"]},
-{"_key":"hiiragi",name:"たいやきひいらぎ","latitude":129917001,"longitude":504675017,"location":"129917001x504675017",tags:["たいやき"]}
+{"_key":"hiiragi",name:"たいやきひいらぎ","latitude":129917001,"longitude":504675017,"location":"129917001x504675017",tags:["たいやき"],area:"area0013"}
]
Modified: test/unit/story/taiyaki/test-geo.c (+90 -13)
===================================================================
--- test/unit/story/taiyaki/test-geo.c 2010-06-30 11:21:27 +0000 (68ba609)
+++ test/unit/story/taiyaki/test-geo.c 2010-06-30 22:40:52 +0000 (979d3ab)
@@ -25,6 +25,7 @@ void test_in_circle(void);
void test_filter_by_tag_and_sort_by_distance_from_tokyo_tocho(void);
void test_but_white(void);
void test_drilldown(void);
+void test_drilldown_with_broken_reference(void);
void test_weight_match(void);
static gchar *tmp_directory;
@@ -74,6 +75,8 @@ cut_setup(void)
database = grn_db_create(context, database_path, NULL);
assert_send_commands(cut_get_fixture_data_string("ddl.grn", NULL));
+ assert_send_command(cut_get_fixture_data_string("areas.grn", NULL));
+ assert_send_command(cut_get_fixture_data_string("categories.grn", NULL));
assert_send_command(cut_get_fixture_data_string("shops.grn", NULL));
}
@@ -223,16 +226,31 @@ test_drilldown(void)
"[\"根津のたいやき\",7812],"
"[\"尾長屋 錦糸町店\",8314],"
"[\"横浜 くりこ庵 浅草店\",8394],"
- "[\"たいやきひいらぎ\",9242]],"
+ "[\"たいやきひいらぎ\",9242]],\n"
"[[6],"
- "[[\"_key\",\"ShortText\"],[\"_nsubrecs\",\"Int32\"]],"
- "[\"たいやき\",13],"
- "[\"天然\",3],"
- "[\"白\",1],"
- "[\"マグロ\",1],"
- "[\"和菓子\",1],"
- "[\"おでん\",1]"
- "]]",
+ "[[\"_key\",\"ShortText\"],"
+ "[\"name\",\"ShortText\"],"
+ "[\"_nsubrecs\",\"Int32\"]],"
+ "[\"おでん\",\"\",1],"
+ "[\"たいやき\",\"\",13],"
+ "[\"マグロ\",\"\",1],"
+ "[\"和菓子\",\"\",1],"
+ "[\"天然\",\"\",3],"
+ "[\"白\",\"\",1]],\n"
+ "[[2],"
+ "[[\"_key\",\"ShortText\"],"
+ "[\"name\",\"ShortText\"],"
+ "[\"_nsubrecs\",\"Int32\"]],"
+ "[\"category0001\",\"和食\",1],"
+ "[\"category0003\",\"おやつ\",1]],\n"
+ "[[3],"
+ "[[\"_key\",\"ShortText\"],"
+ "[\"name\",\"ShortText\"],"
+ "[\"_nsubrecs\",\"Int32\"]],"
+ "[\"area0002\",\"東京都中央区\",3],"
+ "[\"area0005\",\"東京都文京区\",1],"
+ "[\"area0013\",\"東京都渋谷区\",1]]"
+ "]",
send_command(
cut_take_printf(
"select Shops "
@@ -240,9 +258,68 @@ test_drilldown(void)
"--output_columns 'name, _score' "
"--filter 'geo_in_circle(location, \"%s\", %d) && tags @ \"たいやき\"' "
"--scorer '_score=geo_distance(location, \"%s\")' "
- "--drilldown_output_columns '_key, _nsubrecs' "
- "--drilldown_sortby '-_nsubrecs' "
- "--drilldown 'tags' ",
+ "--drilldown 'tags categories area' "
+ "--drilldown_output_columns '_key, name, _nsubrecs' "
+ "--drilldown_sortby '_key'",
+ grn_test_location_string(yurakucho_latitude, yurakucho_longitude),
+ distance,
+ grn_test_location_string(yurakucho_latitude, yurakucho_longitude))));
+}
+
+void
+test_drilldown_with_broken_reference(void)
+{
+ gdouble yurakucho_latitude = 35.67487;
+ gdouble yurakucho_longitude = 139.76352;
+ gint distance = 10 * 1000;
+
+ assert_send_commands("delete Areas area0002");
+ assert_send_commands("delete Areas area0005");
+ cut_assert_equal_string(
+ "[[[13],"
+ "[[\"name\",\"ShortText\"],[\"_score\",\"Int32\"]],"
+ "[\"たいやき神田達磨 八重洲店\",1079],"
+ "[\"たい焼き鉄次 大丸東京店\",1390],"
+ "[\"築地 さのきや\",1723],"
+ "[\"にしみや 甘味処\",2000],"
+ "[\"しげ田\",2272],"
+ "[\"柳屋 たい焼き\",3686],"
+ "[\"根津のたいやき\",7812],"
+ "[\"尾長屋 錦糸町店\",8314],"
+ "[\"横浜 くりこ庵 浅草店\",8394],"
+ "[\"たいやきひいらぎ\",9242]],\n"
+ "[[6],"
+ "[[\"_key\",\"ShortText\"],"
+ "[\"name\",\"ShortText\"],"
+ "[\"_nsubrecs\",\"Int32\"]],"
+ "[\"おでん\",\"\",1],"
+ "[\"たいやき\",\"\",13],"
+ "[\"マグロ\",\"\",1],"
+ "[\"和菓子\",\"\",1],"
+ "[\"天然\",\"\",3],"
+ "[\"白\",\"\",1]],\n"
+ "[[2],"
+ "[[\"_key\",\"ShortText\"],"
+ "[\"name\",\"ShortText\"],"
+ "[\"_nsubrecs\",\"Int32\"]],"
+ "[\"category0001\",\"和食\",1],"
+ "[\"category0003\",\"おやつ\",1]],\n"
+ "[[1],"
+ "[[\"_key\",\"ShortText\"],"
+ "[\"name\",\"ShortText\"],"
+ "[\"_nsubrecs\",\"Int32\"]],"
+ "[\"area00013\",\"東京都渋谷区\",1]]"
+ "]",
+ send_command(
+ cut_take_printf(
+ "select Shops "
+ "--sortby '+_score, +name' "
+ "--output_columns 'name, _score' "
+ "--filter 'geo_in_circle(location, \"%s\", %d) && tags @ \"たいやき\"' "
+ "--scorer '_score=geo_distance(location, \"%s\")' "
+ "--drilldown 'tags categories area' "
+ "--drilldown_output_columns '_key, name, _nsubrecs' "
+ "--drilldown_sortby '_key'",
grn_test_location_string(yurakucho_latitude, yurakucho_longitude),
distance,
grn_test_location_string(yurakucho_latitude, yurakucho_longitude))));
@@ -267,7 +344,7 @@ test_weight_match(void)
"[\"たいやきひいらぎ\",1759],"
"[\"尾長屋 錦糸町店\",1687],"
"[\"横浜 くりこ庵 浅草店\",1607],"
- "[\"たい焼き写楽\",651]],"
+ "[\"たい焼き写楽\",651]],\n"
"[[6],"
"[[\"_key\",\"ShortText\"],[\"_nsubrecs\",\"Int32\"]],"
"[\"たいやき\",13],"