gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/boundary4.tcl (about) 1 puts {# 2008 December 11 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 # This file implements regression tests for SQLite library. 12 # 13 # This file is automatically generated from a separate TCL script. 14 # This file seeks to exercise integer boundary values. 15 # 16 # $Id: boundary4.tcl,v 1.3 2009/01/02 15:45:48 shane Exp $ 17 18 set testdir [file dirname $argv0] 19 source $testdir/tester.tcl 20 21 # Many of the boundary tests depend on a working 64-bit implementation. 22 if {![working_64bit_int]} { finish_test; return } 23 ifcapable !altertable { finish_test; return } 24 } 25 26 expr srand(0) 27 28 # Generate interesting boundary numbers 29 # 30 foreach x { 31 0x7f 32 0x7fff 33 0x7fffff 34 0x7fffffff 35 0x7fffffffff 36 0x7fffffffffff 37 0x7fffffffffffff 38 0x7fffffffffffffff 39 } { 40 set x [expr {wide($x)}] 41 set boundarynum($x) 1 42 set boundarynum([expr {$x+1}]) 1 43 set boundarynum([expr {-($x+1)}]) 1 44 set boundarynum([expr {-($x+2)}]) 1 45 set boundarynum([expr {$x+$x+1}]) 1 46 set boundarynum([expr {$x+$x+2}]) 1 47 } 48 set x [expr {wide(127)}] 49 for {set i 127} {$i<=9} {incr i} { 50 set boundarynum($x) 1 51 set boundarynum([expr {$x+1}]) 1 52 set x [expr {wide($x*128 + 127)}] 53 } 54 55 # Scramble the $inlist into a random order. 56 # 57 proc scramble {inlist} { 58 set y {} 59 foreach x $inlist { 60 lappend y [list [expr {rand()}] $x] 61 } 62 set y [lsort $y] 63 set outlist {} 64 foreach x $y { 65 lappend outlist [lindex $x 1] 66 } 67 return $outlist 68 } 69 70 # A simple selection sort. Not trying to be efficient. 71 # 72 proc sort {inlist} { 73 set outlist {} 74 set mn [lindex $inlist 0] 75 foreach x $inlist { 76 if {$x<$mn} {set mn $x} 77 } 78 set outlist $mn 79 set mx $mn 80 while {1} { 81 set valid 0 82 foreach x $inlist { 83 if {$x>$mx && (!$valid || $mn>$x)} { 84 set mn $x 85 set valid 1 86 } 87 } 88 if {!$valid} break 89 lappend outlist $mn 90 set mx $mn 91 } 92 return $outlist 93 } 94 95 # Reverse the order of a list 96 # 97 proc reverse {inlist} { 98 set i [llength $inlist] 99 set outlist {} 100 for {incr i -1} {$i>=0} {incr i -1} { 101 lappend outlist [lindex $inlist $i] 102 } 103 return $outlist 104 } 105 106 set nums1 [scramble [array names boundarynum]] 107 set nums2 [scramble [array names boundarynum]] 108 109 set tname boundary4 110 puts "do_test $tname-1.1 \173" 111 puts " db eval \173" 112 puts " CREATE TABLE t1(a,x);" 113 set a 0 114 set all_rowid {} 115 set all_a {} 116 set all_x {} 117 foreach r $nums1 { 118 incr a 119 set t1ra($r) $a 120 set t1ar($a) $r 121 set x [format %08x%08x [expr {wide($r)>>32}] $r] 122 set t1rx($r) $x 123 set t1xr($x) $r 124 puts " INSERT INTO t1(oid,a,x) VALUES($r,$a,'$x');" 125 lappend all_rowid $r 126 lappend all_a $a 127 lappend all_x $x 128 } 129 puts " CREATE INDEX t1i1 ON t1(a);" 130 puts " CREATE INDEX t1i2 ON t1(x);" 131 puts " \175" 132 puts "\175 {}" 133 134 puts "do_test $tname-1.2 \173" 135 puts " db eval \173" 136 puts " SELECT count(*) FROM t1" 137 puts " \175" 138 puts "\175 {[llength $nums1]}" 139 140 proc maketest {tnum sql answer} { 141 puts "do_test $::tname-$tnum \173" 142 puts " db eval \173" 143 puts " $sql" 144 puts " \175" 145 puts "\175 {$answer}" 146 } 147 148 set ans {} 149 foreach r [sort $all_rowid] { 150 lappend ans $r $t1ra($r) $t1rx($r) 151 } 152 maketest 1.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans 153 maketest 1.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans 154 155 set ans {} 156 foreach r [reverse [sort $all_rowid]] { 157 lappend ans $r $t1ra($r) $t1rx($r) 158 } 159 maketest 1.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans 160 maketest 1.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans 161 162 set ans {} 163 foreach a [sort $all_a] { 164 set r $t1ar($a) 165 lappend ans $r $a $t1rx($r) 166 } 167 maketest 1.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans 168 maketest 1.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans 169 170 set ans {} 171 foreach a [reverse [sort $all_a]] { 172 set r $t1ar($a) 173 lappend ans $r $a $t1rx($r) 174 } 175 maketest 1.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans 176 maketest 1.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans 177 178 set ans {} 179 foreach x [sort $all_x] { 180 set r $t1xr($x) 181 lappend ans $r $t1ra($r) $x 182 } 183 maketest 1.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans 184 maketest 1.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans 185 186 set ans {} 187 foreach x [reverse [sort $all_x]] { 188 set r $t1xr($x) 189 lappend ans $r $t1ra($r) $x 190 } 191 maketest 1.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans 192 maketest 1.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans 193 194 maketest 2.1 {UPDATE t1 SET rowid=a, a=rowid} {} 195 196 set ans {} 197 foreach r [sort $all_rowid] { 198 lappend ans $r $t1ra($r) $t1rx($r) 199 } 200 maketest 2.3 {SELECT a, rowid, x FROM t1 ORDER BY +a} $ans 201 maketest 2.4 {SELECT a, rowid, x FROM t1 ORDER BY a} $ans 202 203 set ans {} 204 foreach r [reverse [sort $all_rowid]] { 205 lappend ans $r $t1ra($r) $t1rx($r) 206 } 207 maketest 2.5 {SELECT a, rowid, x FROM t1 ORDER BY +a DESC} $ans 208 maketest 2.6 {SELECT a, rowid, x FROM t1 ORDER BY a DESC} $ans 209 210 set ans {} 211 foreach a [sort $all_a] { 212 set r $t1ar($a) 213 lappend ans $r $a $t1rx($r) 214 } 215 maketest 2.7 {SELECT a, rowid, x FROM t1 ORDER BY +rowid} $ans 216 maketest 2.8 {SELECT a, rowid, x FROM t1 ORDER BY rowid} $ans 217 218 set ans {} 219 foreach a [reverse [sort $all_a]] { 220 set r $t1ar($a) 221 lappend ans $r $a $t1rx($r) 222 } 223 maketest 2.9 {SELECT a, rowid, x FROM t1 ORDER BY +rowid DESC} $ans 224 maketest 2.10 {SELECT a, rowid, x FROM t1 ORDER BY rowid DESC} $ans 225 226 set ans {} 227 foreach x [sort $all_x] { 228 set r $t1xr($x) 229 lappend ans $r $t1ra($r) $x 230 } 231 maketest 2.11 {SELECT a, rowid, x FROM t1 ORDER BY +x} $ans 232 maketest 2.12 {SELECT a, rowid, x FROM t1 ORDER BY x} $ans 233 234 set ans {} 235 foreach x [reverse [sort $all_x]] { 236 set r $t1xr($x) 237 lappend ans $r $t1ra($r) $x 238 } 239 maketest 2.13 {SELECT a, rowid, x FROM t1 ORDER BY +x DESC} $ans 240 maketest 2.14 {SELECT a, rowid, x FROM t1 ORDER BY x DESC} $ans 241 242 maketest 3.1 {UPDATE t1 SET rowid=a, a=rowid} {} 243 maketest 3.2 {ALTER TABLE t1 ADD COLUMN z; UPDATE t1 SET z=zeroblob(600)} {} 244 245 set ans {} 246 foreach r [sort $all_rowid] { 247 lappend ans $r $t1ra($r) $t1rx($r) 248 } 249 maketest 3.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans 250 maketest 3.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans 251 252 set ans {} 253 foreach r [reverse [sort $all_rowid]] { 254 lappend ans $r $t1ra($r) $t1rx($r) 255 } 256 maketest 3.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans 257 maketest 3.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans 258 259 set ans {} 260 foreach a [sort $all_a] { 261 set r $t1ar($a) 262 lappend ans $r $a $t1rx($r) 263 } 264 maketest 3.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans 265 maketest 3.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans 266 267 set ans {} 268 foreach a [reverse [sort $all_a]] { 269 set r $t1ar($a) 270 lappend ans $r $a $t1rx($r) 271 } 272 maketest 3.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans 273 maketest 3.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans 274 275 set ans {} 276 foreach x [sort $all_x] { 277 set r $t1xr($x) 278 lappend ans $r $t1ra($r) $x 279 } 280 maketest 3.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans 281 maketest 3.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans 282 283 set ans {} 284 foreach x [reverse [sort $all_x]] { 285 set r $t1xr($x) 286 lappend ans $r $t1ra($r) $x 287 } 288 maketest 3.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans 289 maketest 3.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans 290 291 292 maketest 4.1 {UPDATE t1 SET rowid=a, a=rowid, x=z, z=x} {} 293 294 set ans {} 295 foreach r [sort $all_rowid] { 296 lappend ans $r $t1ra($r) $t1rx($r) 297 } 298 maketest 4.3 {SELECT a, rowid, z FROM t1 ORDER BY +a} $ans 299 maketest 4.4 {SELECT a, rowid, z FROM t1 ORDER BY a} $ans 300 301 set ans {} 302 foreach r [reverse [sort $all_rowid]] { 303 lappend ans $r $t1ra($r) $t1rx($r) 304 } 305 maketest 4.5 {SELECT a, rowid, z FROM t1 ORDER BY +a DESC} $ans 306 maketest 4.6 {SELECT a, rowid, z FROM t1 ORDER BY a DESC} $ans 307 308 set ans {} 309 foreach a [sort $all_a] { 310 set r $t1ar($a) 311 lappend ans $r $a $t1rx($r) 312 } 313 maketest 4.7 {SELECT a, rowid, z FROM t1 ORDER BY +rowid} $ans 314 maketest 4.8 {SELECT a, rowid, z FROM t1 ORDER BY rowid} $ans 315 316 set ans {} 317 foreach a [reverse [sort $all_a]] { 318 set r $t1ar($a) 319 lappend ans $r $a $t1rx($r) 320 } 321 maketest 4.9 {SELECT a, rowid, z FROM t1 ORDER BY +rowid DESC} $ans 322 maketest 4.10 {SELECT a, rowid, z FROM t1 ORDER BY rowid DESC} $ans 323 324 set ans {} 325 foreach x [sort $all_x] { 326 set r $t1xr($x) 327 lappend ans $r $t1ra($r) $x 328 } 329 maketest 4.11 {SELECT a, rowid, z FROM t1 ORDER BY +z} $ans 330 maketest 4.12 {SELECT a, rowid, z FROM t1 ORDER BY z} $ans 331 332 set ans {} 333 foreach x [reverse [sort $all_x]] { 334 set r $t1xr($x) 335 lappend ans $r $t1ra($r) $x 336 } 337 maketest 4.13 {SELECT a, rowid, z FROM t1 ORDER BY +z DESC} $ans 338 maketest 4.14 {SELECT a, rowid, z FROM t1 ORDER BY z DESC} $ans 339 340 puts {finish_test}