diff options
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/utf16align.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/utf16align.test | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/utf16align.test b/libraries/sqlite/unix/sqlite-3.5.1/test/utf16align.test new file mode 100644 index 0000000..fb41b77 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/utf16align.test | |||
@@ -0,0 +1,84 @@ | |||
1 | # 2006 February 16 | ||
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 | # | ||
12 | # This file contains code to verify that the SQLITE_UTF16_ALIGNED | ||
13 | # flag passed into the sqlite3_create_collation() function insures | ||
14 | # that all strings passed to that function are aligned on an even | ||
15 | # byte boundary. | ||
16 | # | ||
17 | # $Id: utf16align.test,v 1.1 2006/02/16 18:16:38 drh Exp $ | ||
18 | |||
19 | set testdir [file dirname $argv0] | ||
20 | source $testdir/tester.tcl | ||
21 | |||
22 | # Skip this entire test if we do not support UTF16 | ||
23 | # | ||
24 | ifcapable !utf16 { | ||
25 | finish_test | ||
26 | return | ||
27 | } | ||
28 | |||
29 | # Create a database with a UTF16 encoding. Put in lots of string | ||
30 | # data of varying lengths. | ||
31 | # | ||
32 | do_test utf16align-1.0 { | ||
33 | set unaligned_string_counter 0 | ||
34 | add_alignment_test_collations [sqlite3_connection_pointer db] | ||
35 | execsql { | ||
36 | PRAGMA encoding=UTF16; | ||
37 | CREATE TABLE t1( | ||
38 | id INTEGER PRIMARY KEY, | ||
39 | spacer TEXT, | ||
40 | a TEXT COLLATE utf16_aligned, | ||
41 | b TEXT COLLATE utf16_unaligned | ||
42 | ); | ||
43 | INSERT INTO t1(a) VALUES("abc"); | ||
44 | INSERT INTO t1(a) VALUES("defghi"); | ||
45 | INSERT INTO t1(a) VALUES("jklmnopqrstuv"); | ||
46 | INSERT INTO t1(a) VALUES("wxyz0123456789-"); | ||
47 | UPDATE t1 SET b=a||'-'||a; | ||
48 | INSERT INTO t1(a,b) SELECT a||b, b||a FROM t1; | ||
49 | INSERT INTO t1(a,b) SELECT a||b, b||a FROM t1; | ||
50 | INSERT INTO t1(a,b) SELECT a||b, b||a FROM t1; | ||
51 | INSERT INTO t1(a,b) VALUES('one','two'); | ||
52 | INSERT INTO t1(a,b) SELECT a, b FROM t1; | ||
53 | UPDATE t1 SET spacer = CASE WHEN rowid&1 THEN 'x' ELSE 'xx' END; | ||
54 | SELECT count(*) FROM t1; | ||
55 | } | ||
56 | } 66 | ||
57 | do_test utf16align-1.1 { | ||
58 | set unaligned_string_counter | ||
59 | } 0 | ||
60 | |||
61 | # Creating an index that uses the unaligned collation. We should see | ||
62 | # some unaligned strings passed to the collating function. | ||
63 | # | ||
64 | do_test utf16align-1.2 { | ||
65 | execsql { | ||
66 | CREATE INDEX t1i1 ON t1(spacer, b); | ||
67 | } | ||
68 | # puts $unaligned_string_counter | ||
69 | expr {$unaligned_string_counter>0} | ||
70 | } 1 | ||
71 | |||
72 | # Create another index that uses the aligned collation. This time | ||
73 | # there should be no unaligned accesses | ||
74 | # | ||
75 | do_test utf16align-1.3 { | ||
76 | set unaligned_string_counter 0 | ||
77 | execsql { | ||
78 | CREATE INDEX t1i2 ON t1(spacer, a); | ||
79 | } | ||
80 | expr {$unaligned_string_counter>0} | ||
81 | } 0 | ||
82 | integrity_check utf16align-1.4 | ||
83 | |||
84 | finish_test | ||