Annotation of embedaddon/sqlite3/test/utf16align.test, revision 1.1.1.1

1.1       misho       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.2 2008/11/07 03:29:34 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: # ticket #3482
                     85: #
                     86: db close
                     87: sqlite3 db :memory:
                     88: do_test utf16align-2.1 {
                     89:   db eval {
                     90:     PRAGMA encoding=UTF16be;
                     91:     SELECT hex(ltrim(x'6efcda'));
                     92:   }
                     93: } {6EFC}
                     94: 
                     95: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>