| 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: boundary1.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   0 |  | 
|   31   1 |  | 
|   32   0x7f |  | 
|   33   0x7fff |  | 
|   34   0x7fffff |  | 
|   35   0x7fffffff |  | 
|   36   0x7fffffffff |  | 
|   37   0x7fffffffffff |  | 
|   38   0x7fffffffffffff |  | 
|   39   0x7fffffffffffffff |  | 
|   40 } { |  | 
|   41   set x [expr {wide($x)}] |  | 
|   42   set boundarynum($x) 1 |  | 
|   43   set boundarynum([expr {$x+1}]) 1 |  | 
|   44   set boundarynum([expr {-($x+1)}]) 1 |  | 
|   45   set boundarynum([expr {-($x+2)}]) 1 |  | 
|   46   set boundarynum([expr {$x+$x+1}]) 1 |  | 
|   47   set boundarynum([expr {$x+$x+2}]) 1 |  | 
|   48 } |  | 
|   49 set x [expr {wide(127)}] |  | 
|   50 for {set i 1} {$i<=9} {incr i} { |  | 
|   51   set boundarynum($x) 1 |  | 
|   52   set boundarynum([expr {$x+1}]) 1 |  | 
|   53   set x [expr {wide($x*128 + 127)}] |  | 
|   54 } |  | 
|   55  |  | 
|   56 # Scramble the $inlist into a random order. |  | 
|   57 # |  | 
|   58 proc scramble {inlist} { |  | 
|   59   set y {} |  | 
|   60   foreach x $inlist { |  | 
|   61     lappend y [list [expr {rand()}] $x] |  | 
|   62   } |  | 
|   63   set y [lsort $y] |  | 
|   64   set outlist {} |  | 
|   65   foreach x $y { |  | 
|   66     lappend outlist [lindex $x 1] |  | 
|   67   } |  | 
|   68   return $outlist |  | 
|   69 } |  | 
|   70  |  | 
|   71 # A simple selection sort.  Not trying to be efficient. |  | 
|   72 # |  | 
|   73 proc sort {inlist} { |  | 
|   74   set outlist {} |  | 
|   75   set mn [lindex $inlist 0] |  | 
|   76   foreach x $inlist { |  | 
|   77     if {$x<$mn} {set mn $x} |  | 
|   78   } |  | 
|   79   set outlist $mn |  | 
|   80   set mx $mn |  | 
|   81   while {1} { |  | 
|   82     set valid 0 |  | 
|   83     foreach x $inlist { |  | 
|   84       if {$x>$mx && (!$valid || $mn>$x)} { |  | 
|   85         set mn $x |  | 
|   86         set valid 1 |  | 
|   87       } |  | 
|   88     } |  | 
|   89     if {!$valid} break |  | 
|   90     lappend outlist $mn |  | 
|   91     set mx $mn |  | 
|   92   } |  | 
|   93   return $outlist |  | 
|   94 } |  | 
|   95  |  | 
|   96 # Reverse the order of a list |  | 
|   97 # |  | 
|   98 proc reverse {inlist} { |  | 
|   99   set i [llength $inlist] |  | 
|  100   set outlist {} |  | 
|  101   for {incr i -1} {$i>=0} {incr i -1} { |  | 
|  102     lappend outlist [lindex $inlist $i] |  | 
|  103   } |  | 
|  104   return $outlist |  | 
|  105 } |  | 
|  106  |  | 
|  107 set nums1 [scramble [array names boundarynum]] |  | 
|  108 set nums2 [scramble [array names boundarynum]] |  | 
|  109  |  | 
|  110 set tname boundary1 |  | 
|  111 puts "do_test $tname-1.1 \173" |  | 
|  112 puts "  db eval \173" |  | 
|  113 puts "    CREATE TABLE t1(a,x);" |  | 
|  114 set a 0 |  | 
|  115 foreach r $nums1 { |  | 
|  116   incr a |  | 
|  117   set t1ra($r) $a |  | 
|  118   set t1ar($a) $r |  | 
|  119   set x [format %08x%08x [expr {wide($r)>>32}] $r] |  | 
|  120   set t1rx($r) $x |  | 
|  121   set t1xr($x) $r |  | 
|  122   puts "    INSERT INTO t1(oid,a,x) VALUES($r,$a,'$x');" |  | 
|  123 } |  | 
|  124 puts "    CREATE INDEX t1i1 ON t1(a);" |  | 
|  125 puts "    CREATE INDEX t1i2 ON t1(x);" |  | 
|  126 puts "  \175" |  | 
|  127 puts "\175 {}" |  | 
|  128  |  | 
|  129 puts "do_test $tname-1.2 \173" |  | 
|  130 puts "  db eval \173" |  | 
|  131 puts "    SELECT count(*) FROM t1" |  | 
|  132 puts "  \175" |  | 
|  133 puts "\175 {64}" |  | 
|  134  |  | 
|  135 set nums3 $nums2 |  | 
|  136 lappend nums3 9.22337303685477580800e+18 |  | 
|  137 lappend nums3 -9.22337303685477580800e+18 |  | 
|  138  |  | 
|  139 set i 0 |  | 
|  140 foreach r $nums3 { |  | 
|  141   incr i |  | 
|  142  |  | 
|  143   if {abs($r)<9.22337203685477580800e+18} { |  | 
|  144     set x $t1rx($r) |  | 
|  145     set a $t1ra($r) |  | 
|  146     set r5 $r.5 |  | 
|  147     set r0 $r.0 |  | 
|  148     puts "do_test $tname-2.$i.1 \173" |  | 
|  149     puts "  db eval \173" |  | 
|  150     puts "    SELECT * FROM t1 WHERE rowid=$r" |  | 
|  151     puts "  \175" |  | 
|  152     puts "\175 {$a $x}" |  | 
|  153     puts "do_test $tname-2.$i.2 \173" |  | 
|  154     puts "  db eval \173" |  | 
|  155     puts "    SELECT rowid, a FROM t1 WHERE x='$x'" |  | 
|  156     puts "  \175" |  | 
|  157     puts "\175 {$r $a}" |  | 
|  158     puts "do_test $tname-2.$i.3 \173" |  | 
|  159     puts "  db eval \173" |  | 
|  160     puts "    SELECT rowid, x FROM t1 WHERE a=$a" |  | 
|  161     puts "  \175" |  | 
|  162     puts "\175 {$r $x}" |  | 
|  163   } |  | 
|  164  |  | 
|  165   foreach op {> >= < <=} subno {gt ge lt le} { |  | 
|  166  |  | 
|  167     ################################################################ 2.x.y.1 |  | 
|  168     set rset {} |  | 
|  169     set aset {} |  | 
|  170     foreach rx $nums2 { |  | 
|  171       if "\$rx $op \$r" { |  | 
|  172         lappend rset $rx |  | 
|  173         lappend aset $t1ra($rx) |  | 
|  174       } |  | 
|  175     } |  | 
|  176     puts "do_test $tname-2.$i.$subno.1 \173" |  | 
|  177     puts "  db eval \173" |  | 
|  178     puts "    SELECT a FROM t1 WHERE rowid $op $r ORDER BY a" |  | 
|  179     puts "  \175" |  | 
|  180     puts "\175 {[sort $aset]}" |  | 
|  181    |  | 
|  182     ################################################################ 2.x.y.2 |  | 
|  183     puts "do_test $tname-2.$i.$subno.2 \173" |  | 
|  184     puts "  db eval \173" |  | 
|  185     puts "    SELECT a FROM t1 WHERE rowid $op $r ORDER BY a DESC" |  | 
|  186     puts "  \175" |  | 
|  187     puts "\175 {[reverse [sort $aset]]}" |  | 
|  188    |  | 
|  189     ################################################################ 2.x.y.3 |  | 
|  190     set aset {} |  | 
|  191     foreach rx [sort $rset] { |  | 
|  192       lappend aset $t1ra($rx) |  | 
|  193     } |  | 
|  194     puts "do_test $tname-2.$i.$subno.3 \173" |  | 
|  195     puts "  db eval \173" |  | 
|  196     puts "    SELECT a FROM t1 WHERE rowid $op $r ORDER BY rowid" |  | 
|  197     puts "  \175" |  | 
|  198     puts "\175 {$aset}" |  | 
|  199    |  | 
|  200     ################################################################ 2.x.y.4 |  | 
|  201     set aset {} |  | 
|  202     foreach rx [reverse [sort $rset]] { |  | 
|  203       lappend aset $t1ra($rx) |  | 
|  204     } |  | 
|  205     puts "do_test $tname-2.$i.$subno.4 \173" |  | 
|  206     puts "  db eval \173" |  | 
|  207     puts "    SELECT a FROM t1 WHERE rowid $op $r ORDER BY rowid DESC" |  | 
|  208     puts "  \175" |  | 
|  209     puts "\175 {$aset}" |  | 
|  210    |  | 
|  211     ################################################################ 2.x.y.5 |  | 
|  212     set aset {} |  | 
|  213     set xset {} |  | 
|  214     foreach rx $rset { |  | 
|  215       lappend xset $t1rx($rx) |  | 
|  216     } |  | 
|  217     foreach x [sort $xset] { |  | 
|  218       set rx $t1xr($x) |  | 
|  219       lappend aset $t1ra($rx) |  | 
|  220     } |  | 
|  221     puts "do_test $tname-2.$i.$subno.5 \173" |  | 
|  222     puts "  db eval \173" |  | 
|  223     puts "    SELECT a FROM t1 WHERE rowid $op $r ORDER BY x" |  | 
|  224     puts "  \175" |  | 
|  225     puts "\175 {$aset}" |  | 
|  226    |  | 
|  227     ################################################################ 2.x.y.10 |  | 
|  228     if {abs($r)>9223372036854775808 || [string length $r5]>15} continue |  | 
|  229     set rset {} |  | 
|  230     set aset {} |  | 
|  231     foreach rx $nums2 { |  | 
|  232       if "\$rx $op \$r0" { |  | 
|  233         lappend rset $rx |  | 
|  234       } |  | 
|  235     } |  | 
|  236     foreach rx [sort $rset] { |  | 
|  237       lappend aset $t1ra($rx) |  | 
|  238     } |  | 
|  239     puts "do_test $tname-2.$i.$subno.10 \173" |  | 
|  240     puts "  db eval \173" |  | 
|  241     puts "    SELECT a FROM t1 WHERE rowid $op $r0 ORDER BY rowid" |  | 
|  242     puts "  \175" |  | 
|  243     puts "\175 {$aset}" |  | 
|  244    |  | 
|  245     ################################################################ 2.x.y.11 |  | 
|  246     set aset {} |  | 
|  247     foreach rx [reverse [sort $rset]] { |  | 
|  248       lappend aset $t1ra($rx) |  | 
|  249     } |  | 
|  250     puts "do_test $tname-2.$i.$subno.11 \173" |  | 
|  251     puts "  db eval \173" |  | 
|  252     puts "    SELECT a FROM t1 WHERE rowid $op $r0 ORDER BY rowid DESC" |  | 
|  253     puts "  \175" |  | 
|  254     puts "\175 {$aset}" |  | 
|  255  |  | 
|  256  |  | 
|  257     ################################################################ 2.x.y.12 |  | 
|  258     set rset {} |  | 
|  259     set aset {} |  | 
|  260     foreach rx $nums2 { |  | 
|  261       if "\$rx $op \$r5" { |  | 
|  262         lappend rset $rx |  | 
|  263       } |  | 
|  264     } |  | 
|  265     foreach rx [sort $rset] { |  | 
|  266       lappend aset $t1ra($rx) |  | 
|  267     } |  | 
|  268     puts "do_test $tname-2.$i.$subno.12 \173" |  | 
|  269     puts "  db eval \173" |  | 
|  270     puts "    SELECT a FROM t1 WHERE rowid $op $r5 ORDER BY rowid" |  | 
|  271     puts "  \175" |  | 
|  272     puts "\175 {$aset}" |  | 
|  273    |  | 
|  274     ################################################################ 2.x.y.13 |  | 
|  275     set aset {} |  | 
|  276     foreach rx [reverse [sort $rset]] { |  | 
|  277       lappend aset $t1ra($rx) |  | 
|  278     } |  | 
|  279     puts "do_test $tname-2.$i.$subno.13 \173" |  | 
|  280     puts "  db eval \173" |  | 
|  281     puts "    SELECT a FROM t1 WHERE rowid $op $r5 ORDER BY rowid DESC" |  | 
|  282     puts "  \175" |  | 
|  283     puts "\175 {$aset}" |  | 
|  284   } |  | 
|  285    |  | 
|  286 } |  | 
|  287  |  | 
|  288  |  | 
|  289 puts {finish_test} |  | 
| OLD | NEW |