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 #***********************************************************************
12 # Tests focusing on the fts5 tokenizers
15 source [file join [file dirname [info script]] fts5_common.tcl]
17 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
23 proc fts3_unicode_path {file} {
24 file join .. [file dirname [info script]] .. .. fts3 unicode $file
27 source [fts3_unicode_path parseunicode.tcl]
28 set testprefix fts5unicode3
30 set CF [fts3_unicode_path CaseFolding.txt]
31 set UD [fts3_unicode_path UnicodeData.txt]
33 tl_load_casefolding_txt $CF
34 foreach x [an_load_unicodedata_text $UD] {
38 foreach {y} [rd_load_unicodedata_text $UD] {
39 foreach {code ascii f} $y {}
43 binary scan $ascii c int
45 set aDiacritic($code,$f) $int
46 if {$f==0} { set aDiacritic($code,1) $int }
49 proc tcl_fold {i {bRemoveDiacritic 0}} {
50 global tl_lookup_table
52 set f [expr $bRemoveDiacritic==2]
54 if {[info exists tl_lookup_table($i)]} {
55 set i $tl_lookup_table($i)
57 if {$bRemoveDiacritic && [info exists aDiacritic($i,$f)]} {
58 set i $aDiacritic($i,$f)
62 db func tcl_fold tcl_fold
64 proc tcl_isalnum {i} {
66 expr {![info exists aNotAlnum($i)]}
68 db func tcl_isalnum tcl_isalnum
71 do_catchsql_test 1.0.1 {
72 SELECT fts5_isalnum(1, 2, 3);
73 } {1 {wrong number of arguments to function fts5_isalnum}}
74 do_catchsql_test 1.0.2 {
76 } {1 {wrong number of arguments to function fts5_fold}}
77 do_catchsql_test 1.0.3 {
78 SELECT fts5_fold(1,2,3);
79 } {1 {wrong number of arguments to function fts5_fold}}
85 SELECT i+1 FROM ii WHERE i<100000
87 SELECT count(*), min(i) FROM ii WHERE fts5_fold(i)!=CAST(tcl_fold(i) AS int);
90 do_execsql_test 1.2.1 {
94 SELECT i+1 FROM ii WHERE i<100000
96 SELECT count(*), min(i) FROM ii
97 WHERE fts5_fold(i,1)!=CAST(tcl_fold(i,1) AS int);
100 do_execsql_test 1.2.2 {
104 SELECT i+1 FROM ii WHERE i<100000
106 SELECT count(*), min(i) FROM ii
107 WHERE fts5_fold(i,2)!=CAST(tcl_fold(i,2) AS int);
110 do_execsql_test 1.3 {
114 SELECT i+1 FROM ii WHERE i<100000
116 SELECT count(*), min(i) FROM ii
117 WHERE fts5_isalnum(i)!=CAST(tcl_isalnum(i) AS int);
121 set str {CREATE VIRTUAL TABLE f3 USING fts5(a, tokenize=}
122 append str {"unicode61 separators '}
123 for {set i 700} {$i<900} {incr i} {
124 append str [format %c $i]
130 set str {CREATE VIRTUAL TABLE f5 USING fts5(a, tokenize=}
131 append str {"unicode61 tokenchars '}
132 for {set i 700} {$i<900} {incr i} {
133 append str [format %c $i]