1# 2016 March 21
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#*************************************************************************
11# This file implements regression tests for SQLite library.  The
12# focus of this script is testing the FTS5 module.
13#
14# Specifically, that the fts5 module is deterministic. At one point, when
15# segment ids were allocated using sqlite3_randomness(), this was not the
16# case.
17#
18
19source [file join [file dirname [info script]] fts5_common.tcl]
20set testprefix fts5aa
21return_if_no_fts5
22
23proc do_determin_test {tn} {
24  uplevel [list
25    do_execsql_test $tn {
26      SELECT (SELECT md5sum(id, block) FROM t1_data)==
27             (SELECT md5sum(id, block) FROM t2_data),
28             (SELECT md5sum(id, block) FROM t1_data)==
29             (SELECT md5sum(id, block) FROM t3_data)
30    } {1 1}
31  ]
32}
33
34foreach_detail_mode $::testprefix {
35  do_execsql_test 1.0 {
36    CREATE VIRTUAL TABLE t1 USING fts5(a, b, prefix="1 2", detail=%DETAIL%);
37    CREATE VIRTUAL TABLE t2 USING fts5(a, b, prefix="1 2", detail=%DETAIL%);
38    CREATE VIRTUAL TABLE t3 USING fts5(a, b, prefix="1 2", detail=%DETAIL%);
39  }
40
41  do_test 1.1 {
42    foreach t {t1 t2 t3} {
43      execsql [string map [list TBL $t] {
44        INSERT INTO TBL VALUES('a b c', 'd e f');
45        INSERT INTO TBL VALUES('c1 c2 c3', 'c1 c2 c3');
46        INSERT INTO TBL VALUES('xyzxyzxyz', 'xyzxyzxyz');
47      }]
48    }
49  } {}
50
51  do_determin_test 1.2
52
53  do_test 1.3 {
54    foreach t {t1 t2 t3} {
55      execsql [string map [list TBL $t] {
56        INSERT INTO TBL(TBL) VALUES('optimize');
57      }]
58    }
59  } {}
60
61  do_determin_test 1.4
62}
63
64
65finish_test
66