Home | History | Annotate | Download | only in test
      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}
    341