1puts {# 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 18set testdir [file dirname $argv0] 19source $testdir/tester.tcl 20 21# Many of the boundary tests depend on a working 64-bit implementation. 22if {![working_64bit_int]} { finish_test; return } 23ifcapable !altertable { finish_test; return } 24} 25 26expr srand(0) 27 28# Generate interesting boundary numbers 29# 30foreach 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} 48set x [expr {wide(127)}] 49for {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# 57proc 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# 72proc 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# 97proc 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 106set nums1 [scramble [array names boundarynum]] 107set nums2 [scramble [array names boundarynum]] 108 109set tname boundary4 110puts "do_test $tname-1.1 \173" 111puts " db eval \173" 112puts " CREATE TABLE t1(a,x);" 113set a 0 114set all_rowid {} 115set all_a {} 116set all_x {} 117foreach 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} 129puts " CREATE INDEX t1i1 ON t1(a);" 130puts " CREATE INDEX t1i2 ON t1(x);" 131puts " \175" 132puts "\175 {}" 133 134puts "do_test $tname-1.2 \173" 135puts " db eval \173" 136puts " SELECT count(*) FROM t1" 137puts " \175" 138puts "\175 {[llength $nums1]}" 139 140proc 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 148set ans {} 149foreach r [sort $all_rowid] { 150 lappend ans $r $t1ra($r) $t1rx($r) 151} 152maketest 1.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans 153maketest 1.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans 154 155set ans {} 156foreach r [reverse [sort $all_rowid]] { 157 lappend ans $r $t1ra($r) $t1rx($r) 158} 159maketest 1.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans 160maketest 1.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans 161 162set ans {} 163foreach a [sort $all_a] { 164 set r $t1ar($a) 165 lappend ans $r $a $t1rx($r) 166} 167maketest 1.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans 168maketest 1.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans 169 170set ans {} 171foreach a [reverse [sort $all_a]] { 172 set r $t1ar($a) 173 lappend ans $r $a $t1rx($r) 174} 175maketest 1.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans 176maketest 1.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans 177 178set ans {} 179foreach x [sort $all_x] { 180 set r $t1xr($x) 181 lappend ans $r $t1ra($r) $x 182} 183maketest 1.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans 184maketest 1.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans 185 186set ans {} 187foreach x [reverse [sort $all_x]] { 188 set r $t1xr($x) 189 lappend ans $r $t1ra($r) $x 190} 191maketest 1.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans 192maketest 1.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans 193 194maketest 2.1 {UPDATE t1 SET rowid=a, a=rowid} {} 195 196set ans {} 197foreach r [sort $all_rowid] { 198 lappend ans $r $t1ra($r) $t1rx($r) 199} 200maketest 2.3 {SELECT a, rowid, x FROM t1 ORDER BY +a} $ans 201maketest 2.4 {SELECT a, rowid, x FROM t1 ORDER BY a} $ans 202 203set ans {} 204foreach r [reverse [sort $all_rowid]] { 205 lappend ans $r $t1ra($r) $t1rx($r) 206} 207maketest 2.5 {SELECT a, rowid, x FROM t1 ORDER BY +a DESC} $ans 208maketest 2.6 {SELECT a, rowid, x FROM t1 ORDER BY a DESC} $ans 209 210set ans {} 211foreach a [sort $all_a] { 212 set r $t1ar($a) 213 lappend ans $r $a $t1rx($r) 214} 215maketest 2.7 {SELECT a, rowid, x FROM t1 ORDER BY +rowid} $ans 216maketest 2.8 {SELECT a, rowid, x FROM t1 ORDER BY rowid} $ans 217 218set ans {} 219foreach a [reverse [sort $all_a]] { 220 set r $t1ar($a) 221 lappend ans $r $a $t1rx($r) 222} 223maketest 2.9 {SELECT a, rowid, x FROM t1 ORDER BY +rowid DESC} $ans 224maketest 2.10 {SELECT a, rowid, x FROM t1 ORDER BY rowid DESC} $ans 225 226set ans {} 227foreach x [sort $all_x] { 228 set r $t1xr($x) 229 lappend ans $r $t1ra($r) $x 230} 231maketest 2.11 {SELECT a, rowid, x FROM t1 ORDER BY +x} $ans 232maketest 2.12 {SELECT a, rowid, x FROM t1 ORDER BY x} $ans 233 234set ans {} 235foreach x [reverse [sort $all_x]] { 236 set r $t1xr($x) 237 lappend ans $r $t1ra($r) $x 238} 239maketest 2.13 {SELECT a, rowid, x FROM t1 ORDER BY +x DESC} $ans 240maketest 2.14 {SELECT a, rowid, x FROM t1 ORDER BY x DESC} $ans 241 242maketest 3.1 {UPDATE t1 SET rowid=a, a=rowid} {} 243maketest 3.2 {ALTER TABLE t1 ADD COLUMN z; UPDATE t1 SET z=zeroblob(600)} {} 244 245set ans {} 246foreach r [sort $all_rowid] { 247 lappend ans $r $t1ra($r) $t1rx($r) 248} 249maketest 3.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans 250maketest 3.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans 251 252set ans {} 253foreach r [reverse [sort $all_rowid]] { 254 lappend ans $r $t1ra($r) $t1rx($r) 255} 256maketest 3.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans 257maketest 3.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans 258 259set ans {} 260foreach a [sort $all_a] { 261 set r $t1ar($a) 262 lappend ans $r $a $t1rx($r) 263} 264maketest 3.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans 265maketest 3.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans 266 267set ans {} 268foreach a [reverse [sort $all_a]] { 269 set r $t1ar($a) 270 lappend ans $r $a $t1rx($r) 271} 272maketest 3.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans 273maketest 3.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans 274 275set ans {} 276foreach x [sort $all_x] { 277 set r $t1xr($x) 278 lappend ans $r $t1ra($r) $x 279} 280maketest 3.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans 281maketest 3.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans 282 283set ans {} 284foreach x [reverse [sort $all_x]] { 285 set r $t1xr($x) 286 lappend ans $r $t1ra($r) $x 287} 288maketest 3.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans 289maketest 3.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans 290 291 292maketest 4.1 {UPDATE t1 SET rowid=a, a=rowid, x=z, z=x} {} 293 294set ans {} 295foreach r [sort $all_rowid] { 296 lappend ans $r $t1ra($r) $t1rx($r) 297} 298maketest 4.3 {SELECT a, rowid, z FROM t1 ORDER BY +a} $ans 299maketest 4.4 {SELECT a, rowid, z FROM t1 ORDER BY a} $ans 300 301set ans {} 302foreach r [reverse [sort $all_rowid]] { 303 lappend ans $r $t1ra($r) $t1rx($r) 304} 305maketest 4.5 {SELECT a, rowid, z FROM t1 ORDER BY +a DESC} $ans 306maketest 4.6 {SELECT a, rowid, z FROM t1 ORDER BY a DESC} $ans 307 308set ans {} 309foreach a [sort $all_a] { 310 set r $t1ar($a) 311 lappend ans $r $a $t1rx($r) 312} 313maketest 4.7 {SELECT a, rowid, z FROM t1 ORDER BY +rowid} $ans 314maketest 4.8 {SELECT a, rowid, z FROM t1 ORDER BY rowid} $ans 315 316set ans {} 317foreach a [reverse [sort $all_a]] { 318 set r $t1ar($a) 319 lappend ans $r $a $t1rx($r) 320} 321maketest 4.9 {SELECT a, rowid, z FROM t1 ORDER BY +rowid DESC} $ans 322maketest 4.10 {SELECT a, rowid, z FROM t1 ORDER BY rowid DESC} $ans 323 324set ans {} 325foreach x [sort $all_x] { 326 set r $t1xr($x) 327 lappend ans $r $t1ra($r) $x 328} 329maketest 4.11 {SELECT a, rowid, z FROM t1 ORDER BY +z} $ans 330maketest 4.12 {SELECT a, rowid, z FROM t1 ORDER BY z} $ans 331 332set ans {} 333foreach x [reverse [sort $all_x]] { 334 set r $t1xr($x) 335 lappend ans $r $t1ra($r) $x 336} 337maketest 4.13 {SELECT a, rowid, z FROM t1 ORDER BY +z DESC} $ans 338maketest 4.14 {SELECT a, rowid, z FROM t1 ORDER BY z DESC} $ans 339 340puts {finish_test} 341