1# 2010 Sept 29 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 focus of 12# this file is testing the SQLite routines used for converting between the 13# various suported unicode encodings (UTF-8, UTF-16, UTF-16le and 14# UTF-16be). 15# 16# $Id: enc4.test,v 1.0 2010/09/29 08:29:32 shaneh Exp $ 17 18set testdir [file dirname $argv0] 19source $testdir/tester.tcl 20 21# If UTF16 support is disabled, ignore the tests in this file 22# 23ifcapable {!utf16} { 24 finish_test 25 return 26} 27 28db close 29 30# The three unicode encodings understood by SQLite. 31set encodings [list UTF-8 UTF-16le UTF-16be] 32 33# initial value to use in SELECT 34set inits [list 1 1.0 1. 1e0] 35 36# vals 37set vals [list\ 38"922337203685477580792233720368547758079223372036854775807"\ 39"100000000000000000000000000000000000000000000000000000000"\ 40"1.0000000000000000000000000000000000000000000000000000000"\ 41] 42 43set i 1 44foreach enc $encodings { 45 46 forcedelete test.db 47 sqlite3 db test.db 48 db eval "PRAGMA encoding = \"$enc\"" 49 50 do_test enc4-$i.1 { 51 db eval {PRAGMA encoding} 52 } $enc 53 54 set j 1 55 foreach init $inits { 56 57 do_test enc4-$i.$j.2 { 58 set S [sqlite3_prepare_v2 db "SELECT $init+?" -1 dummy] 59 sqlite3_expired $S 60 } {0} 61 62 set k 1 63 foreach val $vals { 64 for {set x 1} {$x<16} {incr x} { 65 set part [expr $init + [string range $val 0 [expr $x-1]]] 66 67 do_realnum_test enc4-$i.$j.$k.3.$x { 68 sqlite3_reset $S 69 sqlite3_bind_text $S 1 $val $x 70 sqlite3_step $S 71 sqlite3_column_text $S 0 72 } [list $part] 73 74 do_realnum_test enc4-$i.$j.$k.4.$x { 75 sqlite3_reset $S 76 sqlite3_bind_text16 $S 1 [encoding convertto unicode $val] [expr $x*2] 77 sqlite3_step $S 78 sqlite3_column_text $S 0 79 } [list $part] 80 } 81 82 incr k 83 } 84 85 do_test enc4-$i.$j.5 { 86 sqlite3_finalize $S 87 } {SQLITE_OK} 88 89 incr j 90 } 91 92 db close 93 incr i 94} 95 96forcedelete test.db 97sqlite3 db test.db 98 99do_test enc4-4.1 { 100 db eval "select 1+1." 101} {2.0} 102 103do_test enc4-4.2.1 { 104 set S [sqlite3_prepare_v2 db "SELECT 1+1." -1 dummy] 105 sqlite3_step $S 106 sqlite3_column_text $S 0 107} {2.0} 108 109do_test enc4-4.2.2 { 110 sqlite3_finalize $S 111} {SQLITE_OK} 112 113do_test enc4-4.3.1 { 114 set S [sqlite3_prepare_v2 db "SELECT 1+?" -1 dummy] 115 sqlite3_bind_text $S 1 "1." 2 116 sqlite3_step $S 117 sqlite3_column_text $S 0 118} {2.0} 119 120do_test enc4-4.3.2 { 121 sqlite3_finalize $S 122} {SQLITE_OK} 123 124do_test enc4-4.4.1 { 125 set S [sqlite3_prepare_v2 db "SELECT 1+?" -1 dummy] 126 sqlite3_bind_text $S 1 "1.0" 2 127 sqlite3_step $S 128 sqlite3_column_text $S 0 129} {2.0} 130 131do_test enc4-4.4.2 { 132 sqlite3_finalize $S 133} {SQLITE_OK} 134 135db close 136 137finish_test 138