Snapshot of upstream SQLite 3.46.1
[sqlcipher.git] / ext / fts5 / test / fts5determin.test
blobc9094edfa19cea9958fa1b5ab88dc4819e08f2fd
1 # 2016 March 21
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #*************************************************************************
11 # This file implements regression tests for SQLite library.  The
12 # focus of this script is testing the FTS5 module.
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.
19 source [file join [file dirname [info script]] fts5_common.tcl]
20 set testprefix fts5aa
21 return_if_no_fts5 
23 proc 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   ]
34 foreach_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   }
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   } {}
51   do_determin_test 1.2
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   } {}
61   do_determin_test 1.4
65 finish_test