summaryrefslogtreecommitdiffstats
path: root/ext/fts5/test/fts5af.test
diff options
context:
space:
mode:
Diffstat (limited to 'ext/fts5/test/fts5af.test')
-rw-r--r--ext/fts5/test/fts5af.test226
1 files changed, 226 insertions, 0 deletions
diff --git a/ext/fts5/test/fts5af.test b/ext/fts5/test/fts5af.test
new file mode 100644
index 0000000..3d79295
--- /dev/null
+++ b/ext/fts5/test/fts5af.test
@@ -0,0 +1,226 @@
+# 2014 June 17
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#*************************************************************************
+# This file implements regression tests for SQLite library. The
+# focus of this script is testing the FTS5 module.
+#
+# More specifically, the tests in this file focus on the built-in
+# snippet() function.
+#
+
+source [file join [file dirname [info script]] fts5_common.tcl]
+set testprefix fts5af
+
+# If SQLITE_ENABLE_FTS5 is defined, omit this file.
+ifcapable !fts5 {
+ finish_test
+ return
+}
+
+foreach_detail_mode $testprefix {
+
+do_execsql_test 1.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=%DETAIL%);
+}
+
+proc do_snippet_test {tn doc match res} {
+
+ uplevel #0 [list set v1 $doc]
+ uplevel #0 [list set v2 $match]
+
+ do_execsql_test $tn.1 {
+ DELETE FROM t1;
+ INSERT INTO t1 VALUES($v1, NULL);
+ SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2;
+ } [list $res]
+
+ do_execsql_test $tn.2 {
+ DELETE FROM t1;
+ INSERT INTO t1 VALUES(NULL, $v1);
+ SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2;
+ } [list $res]
+
+ do_execsql_test $tn.3 {
+ DELETE FROM t1;
+ INSERT INTO t1 VALUES($v1, NULL);
+ SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2
+ ORDER BY rank DESC;
+ } [list $res]
+
+
+}
+
+
+foreach {tn doc res} {
+
+ 1.1 {X o o o o o o} {[X] o o o o o o}
+ 1.2 {o X o o o o o} {o [X] o o o o o}
+ 1.3 {o o X o o o o} {o o [X] o o o o}
+ 1.4 {o o o X o o o} {o o o [X] o o o}
+ 1.5 {o o o o X o o} {o o o o [X] o o}
+ 1.6 {o o o o o X o} {o o o o o [X] o}
+ 1.7 {o o o o o o X} {o o o o o o [X]}
+
+ 2.1 {X o o o o o o o} {[X] o o o o o o...}
+ 2.2 {o X o o o o o o} {o [X] o o o o o...}
+ 2.3 {o o X o o o o o} {o o [X] o o o o...}
+ 2.4 {o o o X o o o o} {o o o [X] o o o...}
+ 2.5 {o o o o X o o o} {o o o o [X] o o...}
+ 2.6 {o o o o o X o o} {o o o o o [X] o...}
+ 2.7 {o o o o o o X o} {o o o o o o [X]...}
+ 2.8 {o o o o o o o X} {...o o o o o o [X]}
+
+ 2.9 {o o o o o o o X o} {...o o o o o [X] o}
+ 2.10 {o o o o o o o X o o} {...o o o o [X] o o}
+ 2.11 {o o o o o o o X o o o} {...o o o [X] o o o}
+ 2.12 {o o o o o o o X o o o o} {...o o o [X] o o o...}
+
+
+ 3.1 {X o o o o o o o o} {[X] o o o o o o...}
+ 3.2 {o X o o o o o o o} {o [X] o o o o o...}
+ 3.3 {o o X o o o o o o} {o o [X] o o o o...}
+ 3.4 {o o o X o o o o o} {o o o [X] o o o...}
+
+ 3.5 {o o o o o o o X o o o o} {...o o o [X] o o o...}
+ 3.6 {o o o o o o o o X o o o} {...o o o [X] o o o}
+ 3.7 {o o o o o o o o o X o o} {...o o o o [X] o o}
+ 3.8 {o o o o o o o o o o X o} {...o o o o o [X] o}
+ 3.9 {o o o o o o o o o o o X} {...o o o o o o [X]}
+
+ 4.1 {X o o o o o X o o} {[X] o o o o o [X]...}
+ 4.2 {o o o o o o o X o o o o o X o} {...[X] o o o o o [X]...}
+ 4.3 {o o o o o o o o X o o o o o X} {...[X] o o o o o [X]}
+
+ 5.1 {X o o o o X o o o} {[X] o o o o [X] o...}
+ 5.2 {o o o o o o o X o o o o X o o} {...[X] o o o o [X] o...}
+ 5.3 {o o o o o o o o X o o o o X o} {...[X] o o o o [X] o}
+ 5.4 {o o o o o o o o o X o o o o X} {...o [X] o o o o [X]}
+
+ 6.1 {X o o o X o o o} {[X] o o o [X] o o...}
+ 6.2 {o X o o o X o o o} {o [X] o o o [X] o...}
+ 6.3 {o o o o o o o X o o o X o o} {...o [X] o o o [X] o...}
+ 6.4 {o o o o o o o o X o o o X o} {...o [X] o o o [X] o}
+ 6.5 {o o o o o o o o o X o o o X} {...o o [X] o o o [X]}
+
+ 7.1 {X o o X o o o o o} {[X] o o [X] o o o...}
+ 7.2 {o X o o X o o o o} {o [X] o o [X] o o...}
+ 7.3 {o o o o o o o X o o X o o o} {...o [X] o o [X] o o...}
+ 7.4 {o o o o o o o o X o o X o o} {...o [X] o o [X] o o}
+ 7.5 {o o o o o o o o o X o o X o} {...o o [X] o o [X] o}
+ 7.6 {o o o o o o o o o o X o o X} {...o o o [X] o o [X]}
+
+ 8.1 {o o o o o o o o o X o o o o o o o o o o o o o o o o X X X o o o}
+ {...o o [X] [X] [X] o o...}
+ 8.2 {o o o o o o o. o o X o o o o o o o o o o o o o o o o X X X o o o}
+ {...o o [X] o o o o...}
+ 8.3 {o o o o X o o o o o o o o o o o o o o o o o o o o o X X X o o o}
+ {o o o o [X] o o...}
+} {
+ do_snippet_test 1.$tn $doc X $res
+}
+
+if {[detail_is_full]} {
+ foreach {tn doc res} {
+ 1.1 {X Y o o o o o} {[X Y] o o o o o}
+ 1.2 {o X Y o o o o} {o [X Y] o o o o}
+ 1.3 {o o X Y o o o} {o o [X Y] o o o}
+ 1.4 {o o o X Y o o} {o o o [X Y] o o}
+ 1.5 {o o o o X Y o} {o o o o [X Y] o}
+ 1.6 {o o o o o X Y} {o o o o o [X Y]}
+
+ 2.1 {X Y o o o o o o} {[X Y] o o o o o...}
+ 2.2 {o X Y o o o o o} {o [X Y] o o o o...}
+ 2.3 {o o X Y o o o o} {o o [X Y] o o o...}
+ 2.4 {o o o o o o o X Y o o o} {...o o [X Y] o o o}
+ 2.5 {o o o o o o o o X Y o o} {...o o o [X Y] o o}
+ 2.6 {o o o o o o o o o X Y o} {...o o o o [X Y] o}
+ 2.7 {o o o o o o o o o o X Y} {...o o o o o [X Y]}
+
+ 3.1 {X Y o o o o o o o} {[X Y] o o o o o...}
+ 3.2 {o X Y o o o o o o} {o [X Y] o o o o...}
+ 3.3 {o o X Y o o o o o} {o o [X Y] o o o...}
+ 3.4 {o o o o o o o X Y o o o o} {...o o [X Y] o o o...}
+ 3.5 {o o o o o o o o X Y o o o} {...o o [X Y] o o o}
+ 3.6 {o o o o o o o o o X Y o o} {...o o o [X Y] o o}
+ 3.7 {o o o o o o o o o o X Y o} {...o o o o [X Y] o}
+ 3.8 {o o o o o o o o o o o X Y} {...o o o o o [X Y]}
+ } {
+ do_snippet_test 2.$tn $doc "X + Y" $res
+ }
+}
+
+do_execsql_test 4.0 {
+ CREATE VIRTUAL TABLE x1 USING fts5(a, b);
+ INSERT INTO x1 VALUES('xyz', '1 2 3 4 5 6 7 8 9 10 11 12 13');
+ SELECT snippet(x1, 1, '[', ']', '...', 5) FROM x1('xyz');
+} {
+ {1 2 3 4 5...}
+}
+
+do_execsql_test 5.0 {
+ CREATE VIRTUAL TABLE p1 USING fts5(a, b, detail=%DETAIL%);
+ INSERT INTO p1 VALUES(
+ 'x a a a a a a a a a a',
+ 'a a a a a a a a a a a a a a a a a a a x'
+ );
+}
+do_execsql_test 5.1 {
+ SELECT snippet(p1, 0, '[', ']', '...', 6) FROM p1('x');
+} {{[x] a a a a a...}}
+
+do_execsql_test 5.2 {
+ SELECT snippet(p1, 0, '[', ']', NULL, 6) FROM p1('x');
+} {{[x] a a a a a}}
+do_execsql_test 5.3 {
+ SELECT snippet(p1, 0, NULL, ']', '...', 6) FROM p1('x');
+} {{x] a a a a a...}}
+do_execsql_test 5.4 {
+ SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x');
+} {{[x a a a a a...}}
+do_execsql_test 5.5 {
+ SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ""');
+} {{[x a a a a a...}}
+do_execsql_test 5.6 {
+ SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ' || x'DB');
+} {{[x a a a a a...}}
+
+} ;# foreach_detail_mode
+
+reset_db
+do_execsql_test 6.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(colA, colB);
+ INSERT INTO t1 VALUES('A B C', 'D E F');
+}
+
+do_execsql_test 6.1 {
+ SELECT colA, colB, snippet(t1,0,'[', ']','...',1) FROM t1 WHERE t1 MATCH 'B';
+} {{A B C} {D E F} ...[B]...}
+breakpoint
+do_execsql_test 6.2 {
+ SELECT colA, colB, snippet(t1, 1,'[',']','...',2) FROM t1 WHERE t1 MATCH 'B';
+} {{A B C} {D E F} {D E...}}
+do_execsql_test 6.3 {
+ SELECT colA, colB, snippet(t1, 1,'[',']','...',1) FROM t1 WHERE t1 MATCH 'B';
+} {{A B C} {D E F} {D...}}
+
+do_execsql_test 6.1 {
+ SELECT colA, colB, snippet(t1,0,'[', ']','...',1) FROM t1 WHERE t1 MATCH 'A';
+} {{A B C} {D E F} [A]...}
+breakpoint
+do_execsql_test 6.2 {
+ SELECT colA, colB, snippet(t1, 1,'[',']','...',2) FROM t1 WHERE t1 MATCH 'A';
+} {{A B C} {D E F} {D E...}}
+do_execsql_test 6.3 {
+ SELECT colA, colB, snippet(t1, 1,'[',']','...',1) FROM t1 WHERE t1 MATCH 'A';
+} {{A B C} {D E F} {D...}}
+
+
+
+finish_test