| 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: boundary2.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 boundary2 |  | 
|  111 puts "do_test $tname-1.1 \173" |  | 
|  112 puts "  db eval \173" |  | 
|  113 puts "    CREATE TABLE t1(r INTEGER, a INTEGER, x TEXT);" |  | 
|  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 VALUES($r,$a,'$x');" |  | 
|  123 } |  | 
|  124 puts "    CREATE INDEX t1i1 ON t1(r);" |  | 
|  125 puts "    CREATE INDEX t1i2 ON t1(a);" |  | 
|  126 puts "    CREATE INDEX t1i3 ON t1(x);" |  | 
|  127 puts "  \175" |  | 
|  128 puts "\175 {}" |  | 
|  129  |  | 
|  130 puts "do_test $tname-1.2 \173" |  | 
|  131 puts "  db eval \173" |  | 
|  132 puts "    SELECT count(*) FROM t1" |  | 
|  133 puts "  \175" |  | 
|  134 puts "\175 {64}" |  | 
|  135  |  | 
|  136 set nums3 $nums2 |  | 
|  137 lappend nums3 9.22337303685477580800e+18 |  | 
|  138 lappend nums3 -9.22337303685477580800e+18 |  | 
|  139  |  | 
|  140 set i 0 |  | 
|  141 foreach r $nums3 { |  | 
|  142   incr i |  | 
|  143  |  | 
|  144   if {abs($r)<9.22337203685477580800e+18} { |  | 
|  145     set x $t1rx($r) |  | 
|  146     set a $t1ra($r) |  | 
|  147     set r5 $r.5 |  | 
|  148     set r0 $r.0 |  | 
|  149     puts "do_test $tname-2.$i.1 \173" |  | 
|  150     puts "  db eval \173" |  | 
|  151     puts "    SELECT * FROM t1 WHERE r=$r" |  | 
|  152     puts "  \175" |  | 
|  153     puts "\175 {$r $a $x}" |  | 
|  154     puts "do_test $tname-2.$i.2 \173" |  | 
|  155     puts "  db eval \173" |  | 
|  156     puts "    SELECT r, a FROM t1 WHERE x='$x'" |  | 
|  157     puts "  \175" |  | 
|  158     puts "\175 {$r $a}" |  | 
|  159     puts "do_test $tname-2.$i.3 \173" |  | 
|  160     puts "  db eval \173" |  | 
|  161     puts "    SELECT r, x FROM t1 WHERE a=$a" |  | 
|  162     puts "  \175" |  | 
|  163     puts "\175 {$r $x}" |  | 
|  164   } |  | 
|  165  |  | 
|  166   foreach op {> >= < <=} subno {gt ge lt le} { |  | 
|  167  |  | 
|  168     ################################################################ 2.x.y.1 |  | 
|  169     set rset {} |  | 
|  170     set aset {} |  | 
|  171     foreach rx $nums2 { |  | 
|  172       if "\$rx $op \$r" { |  | 
|  173         lappend rset $rx |  | 
|  174         lappend aset $t1ra($rx) |  | 
|  175       } |  | 
|  176     } |  | 
|  177     puts "do_test $tname-2.$i.$subno.1 \173" |  | 
|  178     puts "  db eval \173" |  | 
|  179     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY a" |  | 
|  180     puts "  \175" |  | 
|  181     puts "\175 {[sort $aset]}" |  | 
|  182    |  | 
|  183     ################################################################ 2.x.y.2 |  | 
|  184     puts "do_test $tname-2.$i.$subno.2 \173" |  | 
|  185     puts "  db eval \173" |  | 
|  186     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY a DESC" |  | 
|  187     puts "  \175" |  | 
|  188     puts "\175 {[reverse [sort $aset]]}" |  | 
|  189    |  | 
|  190     ################################################################ 2.x.y.3 |  | 
|  191     set aset {} |  | 
|  192     foreach rx [sort $rset] { |  | 
|  193       lappend aset $t1ra($rx) |  | 
|  194     } |  | 
|  195     puts "do_test $tname-2.$i.$subno.3 \173" |  | 
|  196     puts "  db eval \173" |  | 
|  197     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY r" |  | 
|  198     puts "  \175" |  | 
|  199     puts "\175 {$aset}" |  | 
|  200    |  | 
|  201     ################################################################ 2.x.y.4 |  | 
|  202     set aset {} |  | 
|  203     foreach rx [reverse [sort $rset]] { |  | 
|  204       lappend aset $t1ra($rx) |  | 
|  205     } |  | 
|  206     puts "do_test $tname-2.$i.$subno.4 \173" |  | 
|  207     puts "  db eval \173" |  | 
|  208     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY r DESC" |  | 
|  209     puts "  \175" |  | 
|  210     puts "\175 {$aset}" |  | 
|  211    |  | 
|  212     ################################################################ 2.x.y.5 |  | 
|  213     set aset {} |  | 
|  214     set xset {} |  | 
|  215     foreach rx $rset { |  | 
|  216       lappend xset $t1rx($rx) |  | 
|  217     } |  | 
|  218     foreach x [sort $xset] { |  | 
|  219       set rx $t1xr($x) |  | 
|  220       lappend aset $t1ra($rx) |  | 
|  221     } |  | 
|  222     puts "do_test $tname-2.$i.$subno.5 \173" |  | 
|  223     puts "  db eval \173" |  | 
|  224     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY x" |  | 
|  225     puts "  \175" |  | 
|  226     puts "\175 {$aset}" |  | 
|  227    |  | 
|  228     ################################################################ 2.x.y.10 |  | 
|  229     if {abs($r)>9223372036854775808 || [string length $r5]>15} continue |  | 
|  230     set rset {} |  | 
|  231     set aset {} |  | 
|  232     foreach rx $nums2 { |  | 
|  233       if "\$rx $op \$r0" { |  | 
|  234         lappend rset $rx |  | 
|  235       } |  | 
|  236     } |  | 
|  237     foreach rx [sort $rset] { |  | 
|  238       lappend aset $t1ra($rx) |  | 
|  239     } |  | 
|  240     puts "do_test $tname-2.$i.$subno.10 \173" |  | 
|  241     puts "  db eval \173" |  | 
|  242     puts "    SELECT a FROM t1 WHERE r $op $r0 ORDER BY r" |  | 
|  243     puts "  \175" |  | 
|  244     puts "\175 {$aset}" |  | 
|  245    |  | 
|  246     ################################################################ 2.x.y.11 |  | 
|  247     set aset {} |  | 
|  248     foreach rx [reverse [sort $rset]] { |  | 
|  249       lappend aset $t1ra($rx) |  | 
|  250     } |  | 
|  251     puts "do_test $tname-2.$i.$subno.11 \173" |  | 
|  252     puts "  db eval \173" |  | 
|  253     puts "    SELECT a FROM t1 WHERE r $op $r0 ORDER BY r DESC" |  | 
|  254     puts "  \175" |  | 
|  255     puts "\175 {$aset}" |  | 
|  256  |  | 
|  257  |  | 
|  258     ################################################################ 2.x.y.12 |  | 
|  259     set rset {} |  | 
|  260     set aset {} |  | 
|  261     foreach rx $nums2 { |  | 
|  262       if "\$rx $op \$r5" { |  | 
|  263         lappend rset $rx |  | 
|  264       } |  | 
|  265     } |  | 
|  266     foreach rx [sort $rset] { |  | 
|  267       lappend aset $t1ra($rx) |  | 
|  268     } |  | 
|  269     puts "do_test $tname-2.$i.$subno.12 \173" |  | 
|  270     puts "  db eval \173" |  | 
|  271     puts "    SELECT a FROM t1 WHERE r $op $r5 ORDER BY r" |  | 
|  272     puts "  \175" |  | 
|  273     puts "\175 {$aset}" |  | 
|  274    |  | 
|  275     ################################################################ 2.x.y.13 |  | 
|  276     set aset {} |  | 
|  277     foreach rx [reverse [sort $rset]] { |  | 
|  278       lappend aset $t1ra($rx) |  | 
|  279     } |  | 
|  280     puts "do_test $tname-2.$i.$subno.13 \173" |  | 
|  281     puts "  db eval \173" |  | 
|  282     puts "    SELECT a FROM t1 WHERE r $op $r5 ORDER BY r DESC" |  | 
|  283     puts "  \175" |  | 
|  284     puts "\175 {$aset}" |  | 
|  285   } |  | 
|  286 } |  | 
|  287  |  | 
|  288 puts "do_test $tname-3.1 \173" |  | 
|  289 puts "  db eval \173" |  | 
|  290 puts "    DROP INDEX t1i1;" |  | 
|  291 puts "    DROP INDEX t1i2;" |  | 
|  292 puts "    DROP INDEX t1i3;" |  | 
|  293 puts "  \175" |  | 
|  294 puts "\175 {}" |  | 
|  295  |  | 
|  296 set i 0 |  | 
|  297 foreach r $nums3 { |  | 
|  298   incr i |  | 
|  299  |  | 
|  300   if {abs($r)<9.22337203685477580800e+18} { |  | 
|  301     set x $t1rx($r) |  | 
|  302     set a $t1ra($r) |  | 
|  303     set r5 $r.5 |  | 
|  304     set r0 $r.0 |  | 
|  305     puts "do_test $tname-4.$i.1 \173" |  | 
|  306     puts "  db eval \173" |  | 
|  307     puts "    SELECT * FROM t1 WHERE r=$r" |  | 
|  308     puts "  \175" |  | 
|  309     puts "\175 {$r $a $x}" |  | 
|  310     puts "do_test $tname-4.$i.2 \173" |  | 
|  311     puts "  db eval \173" |  | 
|  312     puts "    SELECT r, a FROM t1 WHERE x='$x'" |  | 
|  313     puts "  \175" |  | 
|  314     puts "\175 {$r $a}" |  | 
|  315     puts "do_test $tname-4.$i.3 \173" |  | 
|  316     puts "  db eval \173" |  | 
|  317     puts "    SELECT r, x FROM t1 WHERE a=$a" |  | 
|  318     puts "  \175" |  | 
|  319     puts "\175 {$r $x}" |  | 
|  320   } |  | 
|  321  |  | 
|  322   foreach op {> >= < <=} subno {gt ge lt le} { |  | 
|  323  |  | 
|  324     ################################################################ 2.x.y.1 |  | 
|  325     set rset {} |  | 
|  326     set aset {} |  | 
|  327     foreach rx $nums2 { |  | 
|  328       if "\$rx $op \$r" { |  | 
|  329         lappend rset $rx |  | 
|  330         lappend aset $t1ra($rx) |  | 
|  331       } |  | 
|  332     } |  | 
|  333     puts "do_test $tname-4.$i.$subno.1 \173" |  | 
|  334     puts "  db eval \173" |  | 
|  335     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY a" |  | 
|  336     puts "  \175" |  | 
|  337     puts "\175 {[sort $aset]}" |  | 
|  338    |  | 
|  339     ################################################################ 2.x.y.2 |  | 
|  340     puts "do_test $tname-4.$i.$subno.2 \173" |  | 
|  341     puts "  db eval \173" |  | 
|  342     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY a DESC" |  | 
|  343     puts "  \175" |  | 
|  344     puts "\175 {[reverse [sort $aset]]}" |  | 
|  345    |  | 
|  346     ################################################################ 2.x.y.3 |  | 
|  347     set aset {} |  | 
|  348     foreach rx [sort $rset] { |  | 
|  349       lappend aset $t1ra($rx) |  | 
|  350     } |  | 
|  351     puts "do_test $tname-4.$i.$subno.3 \173" |  | 
|  352     puts "  db eval \173" |  | 
|  353     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY r" |  | 
|  354     puts "  \175" |  | 
|  355     puts "\175 {$aset}" |  | 
|  356    |  | 
|  357     ################################################################ 2.x.y.4 |  | 
|  358     set aset {} |  | 
|  359     foreach rx [reverse [sort $rset]] { |  | 
|  360       lappend aset $t1ra($rx) |  | 
|  361     } |  | 
|  362     puts "do_test $tname-4.$i.$subno.4 \173" |  | 
|  363     puts "  db eval \173" |  | 
|  364     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY r DESC" |  | 
|  365     puts "  \175" |  | 
|  366     puts "\175 {$aset}" |  | 
|  367    |  | 
|  368     ################################################################ 2.x.y.5 |  | 
|  369     set aset {} |  | 
|  370     set xset {} |  | 
|  371     foreach rx $rset { |  | 
|  372       lappend xset $t1rx($rx) |  | 
|  373     } |  | 
|  374     foreach x [sort $xset] { |  | 
|  375       set rx $t1xr($x) |  | 
|  376       lappend aset $t1ra($rx) |  | 
|  377     } |  | 
|  378     puts "do_test $tname-4.$i.$subno.5 \173" |  | 
|  379     puts "  db eval \173" |  | 
|  380     puts "    SELECT a FROM t1 WHERE r $op $r ORDER BY x" |  | 
|  381     puts "  \175" |  | 
|  382     puts "\175 {$aset}" |  | 
|  383    |  | 
|  384     ################################################################ 2.x.y.10 |  | 
|  385     if {abs($r)>9223372036854775808 || [string length $r5]>15} continue |  | 
|  386     set rset {} |  | 
|  387     set aset {} |  | 
|  388     foreach rx $nums2 { |  | 
|  389       if "\$rx $op \$r0" { |  | 
|  390         lappend rset $rx |  | 
|  391       } |  | 
|  392     } |  | 
|  393     foreach rx [sort $rset] { |  | 
|  394       lappend aset $t1ra($rx) |  | 
|  395     } |  | 
|  396     puts "do_test $tname-4.$i.$subno.10 \173" |  | 
|  397     puts "  db eval \173" |  | 
|  398     puts "    SELECT a FROM t1 WHERE r $op $r0 ORDER BY r" |  | 
|  399     puts "  \175" |  | 
|  400     puts "\175 {$aset}" |  | 
|  401    |  | 
|  402     ################################################################ 2.x.y.11 |  | 
|  403     set aset {} |  | 
|  404     foreach rx [reverse [sort $rset]] { |  | 
|  405       lappend aset $t1ra($rx) |  | 
|  406     } |  | 
|  407     puts "do_test $tname-4.$i.$subno.11 \173" |  | 
|  408     puts "  db eval \173" |  | 
|  409     puts "    SELECT a FROM t1 WHERE r $op $r0 ORDER BY r DESC" |  | 
|  410     puts "  \175" |  | 
|  411     puts "\175 {$aset}" |  | 
|  412  |  | 
|  413  |  | 
|  414     ################################################################ 2.x.y.12 |  | 
|  415     set rset {} |  | 
|  416     set aset {} |  | 
|  417     foreach rx $nums2 { |  | 
|  418       if "\$rx $op \$r5" { |  | 
|  419         lappend rset $rx |  | 
|  420       } |  | 
|  421     } |  | 
|  422     foreach rx [sort $rset] { |  | 
|  423       lappend aset $t1ra($rx) |  | 
|  424     } |  | 
|  425     puts "do_test $tname-4.$i.$subno.12 \173" |  | 
|  426     puts "  db eval \173" |  | 
|  427     puts "    SELECT a FROM t1 WHERE r $op $r5 ORDER BY r" |  | 
|  428     puts "  \175" |  | 
|  429     puts "\175 {$aset}" |  | 
|  430    |  | 
|  431     ################################################################ 2.x.y.13 |  | 
|  432     set aset {} |  | 
|  433     foreach rx [reverse [sort $rset]] { |  | 
|  434       lappend aset $t1ra($rx) |  | 
|  435     } |  | 
|  436     puts "do_test $tname-4.$i.$subno.13 \173" |  | 
|  437     puts "  db eval \173" |  | 
|  438     puts "    SELECT a FROM t1 WHERE r $op $r5 ORDER BY r DESC" |  | 
|  439     puts "  \175" |  | 
|  440     puts "\175 {$aset}" |  | 
|  441   } |  | 
|  442 } |  | 
|  443  |  | 
|  444  |  | 
|  445 puts {finish_test} |  | 
| OLD | NEW |