gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/hexlit.test (about)

     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
    87  hexlit1 164 0XFFFFFFFFFFFFFFFF -1
    88  
    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  }
    95  
    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}
   106  
   107  # Oversized hex literals are rejected
   108  #
   109  do_catchsql_test hexlist-400 {
   110    SELECT 0x10000000000000000;
   111  } {1 {hex literal too big: 0x10000000000000000}}
   112  do_catchsql_test hexlist-401 {
   113    SELECT DISTINCT 0x10000000000000000;
   114  } {1 {hex literal too big: 0x10000000000000000}}
   115  do_catchsql_test hexlist-402 {
   116    SELECT DISTINCT -0x08000000000000000;
   117  } {1 {hex literal too big: -0x08000000000000000}}
   118  do_catchsql_test hexlist-410 {
   119    DROP TABLE IF EXISTS t1;
   120    CREATE TABLE t1(x);
   121    INSERT INTO t1 VALUES(1+0x10000000000000000);
   122  } {1 {hex literal too big: 0x10000000000000000}}
   123  
   124  
   125  finish_test