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