Annotation of embedaddon/sqlite3/test/utf16align.test, revision 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>