drh | fce4da1 | 2014-07-23 01:56:32 +0000 | [diff] [blame] | 1 | # 2014-07-23 |
| 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 implements tests for hexadecimal literals |
| 13 | |
| 14 | |
| 15 | set testdir [file dirname $argv0] |
| 16 | source $testdir/tester.tcl |
| 17 | |
| 18 | proc hexlit1 {tnum val ans} { |
| 19 | do_execsql_test hexlit-$tnum "SELECT $val" $ans |
| 20 | } |
| 21 | |
| 22 | hexlit1 100 0x0 0 |
| 23 | hexlit1 101 0x0000000000000000000000000000000000000000000001 1 |
| 24 | hexlit1 102 0x2 2 |
| 25 | hexlit1 103 0x4 4 |
| 26 | hexlit1 104 0x8 8 |
| 27 | hexlit1 105 0x00000000000000000000000000000000000000000000010 16 |
| 28 | hexlit1 103 0x20 32 |
| 29 | hexlit1 106 0x40 64 |
| 30 | hexlit1 107 0x80 128 |
| 31 | hexlit1 108 0x100 256 |
| 32 | hexlit1 109 0x200 512 |
| 33 | hexlit1 110 0X400 1024 |
| 34 | hexlit1 111 0x800 2048 |
| 35 | hexlit1 112 0x1000 4096 |
| 36 | hexlit1 113 0x2000 8192 |
| 37 | hexlit1 114 0x4000 16384 |
| 38 | hexlit1 115 0x8000 32768 |
| 39 | hexlit1 116 0x10000 65536 |
| 40 | hexlit1 117 0x20000 131072 |
| 41 | hexlit1 118 0x40000 262144 |
| 42 | hexlit1 119 0x80000 524288 |
| 43 | hexlit1 120 0x100000 1048576 |
| 44 | hexlit1 121 0x200000 2097152 |
| 45 | hexlit1 122 0x400000 4194304 |
| 46 | hexlit1 123 0x800000 8388608 |
| 47 | hexlit1 124 0x1000000 16777216 |
| 48 | hexlit1 125 0x2000000 33554432 |
| 49 | hexlit1 126 0x4000000 67108864 |
| 50 | hexlit1 127 0x8000000 134217728 |
| 51 | hexlit1 128 0x10000000 268435456 |
| 52 | hexlit1 129 0x20000000 536870912 |
| 53 | hexlit1 130 0x40000000 1073741824 |
| 54 | hexlit1 131 0x80000000 2147483648 |
| 55 | hexlit1 132 0x100000000 4294967296 |
| 56 | hexlit1 133 0x200000000 8589934592 |
| 57 | hexlit1 134 0x400000000 17179869184 |
| 58 | hexlit1 135 0x800000000 34359738368 |
| 59 | hexlit1 136 0x1000000000 68719476736 |
| 60 | hexlit1 137 0x2000000000 137438953472 |
| 61 | hexlit1 138 0x4000000000 274877906944 |
| 62 | hexlit1 139 0x8000000000 549755813888 |
| 63 | hexlit1 140 0x10000000000 1099511627776 |
| 64 | hexlit1 141 0x20000000000 2199023255552 |
| 65 | hexlit1 142 0x40000000000 4398046511104 |
| 66 | hexlit1 143 0x80000000000 8796093022208 |
| 67 | hexlit1 144 0x100000000000 17592186044416 |
| 68 | hexlit1 145 0x200000000000 35184372088832 |
| 69 | hexlit1 146 0x400000000000 70368744177664 |
| 70 | hexlit1 147 0x800000000000 140737488355328 |
| 71 | hexlit1 148 0x1000000000000 281474976710656 |
| 72 | hexlit1 149 0x2000000000000 562949953421312 |
| 73 | hexlit1 150 0x4000000000000 1125899906842624 |
| 74 | hexlit1 151 0x8000000000000 2251799813685248 |
| 75 | hexlit1 152 0x10000000000000 4503599627370496 |
| 76 | hexlit1 153 0x20000000000000 9007199254740992 |
| 77 | hexlit1 154 0x40000000000000 18014398509481984 |
| 78 | hexlit1 155 0x80000000000000 36028797018963968 |
| 79 | hexlit1 156 0x100000000000000 72057594037927936 |
| 80 | hexlit1 157 0x200000000000000 144115188075855872 |
| 81 | hexlit1 158 0x400000000000000 288230376151711744 |
| 82 | hexlit1 159 0x800000000000000 576460752303423488 |
| 83 | hexlit1 160 0X1000000000000000 1152921504606846976 |
| 84 | hexlit1 161 0x2000000000000000 2305843009213693952 |
| 85 | hexlit1 162 0X4000000000000000 4611686018427387904 |
| 86 | hexlit1 163 0x8000000000000000 -9223372036854775808 |
mistachkin | 3b9fab1 | 2014-07-23 19:04:25 +0000 | [diff] [blame] | 87 | hexlit1 164 0XFFFFFFFFFFFFFFFF -1 |
drh | fce4da1 | 2014-07-23 01:56:32 +0000 | [diff] [blame] | 88 | |
mistachkin | 3b9fab1 | 2014-07-23 19:04:25 +0000 | [diff] [blame] | 89 | for {set n 1} {$n < 0x10} {incr n} { |
| 90 | hexlit1 200.$n.1 0X[format %03X $n] $n |
| 91 | hexlit1 200.$n.2 0x[format %03X $n] $n |
| 92 | hexlit1 200.$n.3 0X[format %03x $n] $n |
| 93 | hexlit1 200.$n.4 0x[format %03x $n] $n |
| 94 | } |
drh | fce4da1 | 2014-07-23 01:56:32 +0000 | [diff] [blame] | 95 | |
drh | 9296c18 | 2014-07-23 13:40:49 +0000 | [diff] [blame] | 96 | # String literals that look like hex do not get cast or coerced. |
| 97 | # |
| 98 | do_execsql_test hexlit-300 { |
| 99 | CREATE TABLE t1(x INT, y REAL); |
| 100 | INSERT INTO t1 VALUES('1234','4567'),('0x1234','0x4567'); |
| 101 | SELECT typeof(x), x, typeof(y), y, '#' FROM t1 ORDER BY rowid; |
| 102 | } {integer 1234 real 4567.0 # text 0x1234 text 0x4567 #} |
| 103 | do_execsql_test hexlit-301 { |
| 104 | SELECT CAST('0x1234' AS INTEGER); |
| 105 | } {0} |
drh | fce4da1 | 2014-07-23 01:56:32 +0000 | [diff] [blame] | 106 | |
drh | 9296c18 | 2014-07-23 13:40:49 +0000 | [diff] [blame] | 107 | # Oversized hex literals are rejected |
| 108 | # |
| 109 | do_catchsql_test hexlist-400 { |
| 110 | SELECT 0x10000000000000000; |
| 111 | } {1 {hex literal too big: 0x10000000000000000}} |
drh | fce4da1 | 2014-07-23 01:56:32 +0000 | [diff] [blame] | 112 | |
drh | fce4da1 | 2014-07-23 01:56:32 +0000 | [diff] [blame] | 113 | |
| 114 | finish_test |