123 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2014-07-23
 | |
| #
 | |
| # The author disclaims copyright to this source code.  In place of
 | |
| # a legal notice, here is a blessing:
 | |
| #
 | |
| #    May you do good and not evil.
 | |
| #    May you find forgiveness for yourself and forgive others.
 | |
| #    May you share freely, never taking more than you give.
 | |
| #
 | |
| #***********************************************************************
 | |
| #
 | |
| # This file implements tests for hexadecimal literals
 | |
| 
 | |
| 
 | |
| set testdir [file dirname $argv0]
 | |
| source $testdir/tester.tcl
 | |
| 
 | |
| proc hexlit1 {tnum val ans} {
 | |
|   do_execsql_test hexlit-$tnum "SELECT $val" $ans
 | |
| }
 | |
| 
 | |
| hexlit1 100 0x0 0
 | |
| hexlit1 101 0x0000000000000000000000000000000000000000000001 1
 | |
| hexlit1 102 0x2 2
 | |
| hexlit1 103 0x4 4
 | |
| hexlit1 104 0x8 8
 | |
| hexlit1 105 0x00000000000000000000000000000000000000000000010 16
 | |
| hexlit1 103 0x20 32
 | |
| hexlit1 106 0x40 64
 | |
| hexlit1 107 0x80 128
 | |
| hexlit1 108 0x100 256
 | |
| hexlit1 109 0x200 512
 | |
| hexlit1 110 0X400 1024
 | |
| hexlit1 111 0x800 2048
 | |
| hexlit1 112 0x1000 4096
 | |
| hexlit1 113 0x2000 8192
 | |
| hexlit1 114 0x4000 16384
 | |
| hexlit1 115 0x8000 32768
 | |
| hexlit1 116 0x10000 65536
 | |
| hexlit1 117 0x20000 131072
 | |
| hexlit1 118 0x40000 262144
 | |
| hexlit1 119 0x80000 524288
 | |
| hexlit1 120 0x100000 1048576
 | |
| hexlit1 121 0x200000 2097152
 | |
| hexlit1 122 0x400000 4194304
 | |
| hexlit1 123 0x800000 8388608
 | |
| hexlit1 124 0x1000000 16777216
 | |
| hexlit1 125 0x2000000 33554432
 | |
| hexlit1 126 0x4000000 67108864
 | |
| hexlit1 127 0x8000000 134217728
 | |
| hexlit1 128 0x10000000 268435456
 | |
| hexlit1 129 0x20000000 536870912
 | |
| hexlit1 130 0x40000000 1073741824
 | |
| hexlit1 131 0x80000000 2147483648
 | |
| hexlit1 132 0x100000000 4294967296
 | |
| hexlit1 133 0x200000000 8589934592
 | |
| hexlit1 134 0x400000000 17179869184
 | |
| hexlit1 135 0x800000000 34359738368
 | |
| hexlit1 136 0x1000000000 68719476736
 | |
| hexlit1 137 0x2000000000 137438953472
 | |
| hexlit1 138 0x4000000000 274877906944
 | |
| hexlit1 139 0x8000000000 549755813888
 | |
| hexlit1 140 0x10000000000 1099511627776
 | |
| hexlit1 141 0x20000000000 2199023255552
 | |
| hexlit1 142 0x40000000000 4398046511104
 | |
| hexlit1 143 0x80000000000 8796093022208
 | |
| hexlit1 144 0x100000000000 17592186044416
 | |
| hexlit1 145 0x200000000000 35184372088832
 | |
| hexlit1 146 0x400000000000 70368744177664
 | |
| hexlit1 147 0x800000000000 140737488355328
 | |
| hexlit1 148 0x1000000000000 281474976710656
 | |
| hexlit1 149 0x2000000000000 562949953421312
 | |
| hexlit1 150 0x4000000000000 1125899906842624
 | |
| hexlit1 151 0x8000000000000 2251799813685248
 | |
| hexlit1 152 0x10000000000000 4503599627370496
 | |
| hexlit1 153 0x20000000000000 9007199254740992
 | |
| hexlit1 154 0x40000000000000 18014398509481984
 | |
| hexlit1 155 0x80000000000000 36028797018963968
 | |
| hexlit1 156 0x100000000000000 72057594037927936
 | |
| hexlit1 157 0x200000000000000 144115188075855872
 | |
| hexlit1 158 0x400000000000000 288230376151711744
 | |
| hexlit1 159 0x800000000000000 576460752303423488
 | |
| hexlit1 160 0X1000000000000000 1152921504606846976
 | |
| hexlit1 161 0x2000000000000000 2305843009213693952
 | |
| hexlit1 162 0X4000000000000000 4611686018427387904
 | |
| hexlit1 163 0x8000000000000000 -9223372036854775808
 | |
| hexlit1 164 0XFFFFFFFFFFFFFFFF -1
 | |
| 
 | |
| for {set n 1} {$n < 0x10} {incr n} {
 | |
|   hexlit1 200.$n.1 0X[format %03X $n] $n
 | |
|   hexlit1 200.$n.2 0x[format %03X $n] $n
 | |
|   hexlit1 200.$n.3 0X[format %03x $n] $n
 | |
|   hexlit1 200.$n.4 0x[format %03x $n] $n
 | |
| }
 | |
| 
 | |
| # String literals that look like hex do not get cast or coerced.
 | |
| #
 | |
| do_execsql_test hexlit-300 {
 | |
|   CREATE TABLE t1(x INT, y REAL);
 | |
|   INSERT INTO t1 VALUES('1234','4567'),('0x1234','0x4567');
 | |
|   SELECT typeof(x), x, typeof(y), y, '#' FROM t1 ORDER BY rowid;
 | |
| } {integer 1234 real 4567.0 # text 0x1234 text 0x4567 #}
 | |
| do_execsql_test hexlit-301 {
 | |
|   SELECT CAST('0x1234' AS INTEGER);
 | |
| } {0}
 | |
| 
 | |
| # Oversized hex literals are rejected
 | |
| #
 | |
| do_catchsql_test hexlist-400 {
 | |
|   SELECT 0x10000000000000000;
 | |
| } {1 {hex literal too big: 0x10000000000000000}}
 | |
| do_catchsql_test hexlist-401 {
 | |
|   SELECT DISTINCT 0x10000000000000000;
 | |
| } {1 {hex literal too big: 0x10000000000000000}}
 | |
| do_catchsql_test hexlist-410 {
 | |
|   DROP TABLE IF EXISTS t1;
 | |
|   CREATE TABLE t1(x);
 | |
|   INSERT INTO t1 VALUES(1+0x10000000000000000);
 | |
| } {1 {hex literal too big: 0x10000000000000000}}
 | |
| 
 | |
| 
 | |
| finish_test
 | 
