| 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: boundary3.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 boundary3 |  | 
|  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 puts "do_test $tname-1.3 \173" |  | 
|  136 puts "  db eval \173" |  | 
|  137 puts "    CREATE TABLE t2(r,a);" |  | 
|  138 puts "    INSERT INTO t2 SELECT rowid, a FROM t1;" |  | 
|  139 puts "    CREATE INDEX t2i1 ON t2(r);" |  | 
|  140 puts "    CREATE INDEX t2i2 ON t2(a);" |  | 
|  141 puts "    INSERT INTO t2 VALUES(9.22337303685477580800e+18,65);" |  | 
|  142 set t1ra(9.22337303685477580800e+18) 65 |  | 
|  143 set t1ar(65) 9.22337303685477580800e+18) |  | 
|  144 puts "    INSERT INTO t2 VALUES(-9.22337303685477580800e+18,66);" |  | 
|  145 set t1ra(-9.22337303685477580800e+18) 66 |  | 
|  146 set t1ar(66) -9.22337303685477580800e+18) |  | 
|  147 puts "    SELECT count(*) FROM t2;" |  | 
|  148 puts "  \175" |  | 
|  149 puts "\175 {66}" |  | 
|  150  |  | 
|  151 set nums3 $nums2 |  | 
|  152 lappend nums3 9.22337303685477580800e+18 |  | 
|  153 lappend nums3 -9.22337303685477580800e+18 |  | 
|  154  |  | 
|  155 set i 0 |  | 
|  156 foreach r $nums3 { |  | 
|  157   incr i |  | 
|  158  |  | 
|  159   set r5 $r.5 |  | 
|  160   set r0 $r.0 |  | 
|  161   if {abs($r)<9.22337203685477580800e+18} { |  | 
|  162     set x $t1rx($r) |  | 
|  163     set a $t1ra($r) |  | 
|  164     puts "do_test $tname-2.$i.1 \173" |  | 
|  165     puts "  db eval \173" |  | 
|  166     puts "    SELECT t1.* FROM t1, t2 WHERE t1.rowid=$r AND t2.a=t1.a" |  | 
|  167     puts "  \175" |  | 
|  168     puts "\175 {$a $x}" |  | 
|  169     puts "do_test $tname-2.$i.2 \173" |  | 
|  170     puts "  db eval \173" |  | 
|  171     puts "    SELECT t2.* FROM t1 JOIN t2 USING(a) WHERE x='$x'" |  | 
|  172     puts "  \175" |  | 
|  173     puts "\175 {$r $a}" |  | 
|  174     puts "do_test $tname-2.$i.3 \173" |  | 
|  175     puts "  db eval \173" |  | 
|  176     puts "    SELECT t1.rowid, x FROM t1 JOIN t2 ON t2.r=t1.rowid WHERE t2.a=$a" |  | 
|  177     puts "  \175" |  | 
|  178     puts "\175 {$r $x}" |  | 
|  179   } |  | 
|  180  |  | 
|  181   foreach op {> >= < <=} subno {gt ge lt le} { |  | 
|  182  |  | 
|  183     ################################################################ 2.x.y.1 |  | 
|  184     set rset {} |  | 
|  185     set aset {} |  | 
|  186     foreach rx $nums2 { |  | 
|  187       if "\$rx $op \$r" { |  | 
|  188         lappend rset $rx |  | 
|  189         lappend aset $t1ra($rx) |  | 
|  190       } |  | 
|  191     } |  | 
|  192     puts "do_test $tname-2.$i.$subno.1 \173" |  | 
|  193     puts "  db eval \173" |  | 
|  194     puts "    SELECT t2.a FROM t1 JOIN t2 USING(a)" |  | 
|  195     puts "     WHERE t1.rowid $op $r ORDER BY t2.a" |  | 
|  196     puts "  \175" |  | 
|  197     puts "\175 {[sort $aset]}" |  | 
|  198    |  | 
|  199     ################################################################ 2.x.y.2 |  | 
|  200     puts "do_test $tname-2.$i.$subno.2 \173" |  | 
|  201     puts "  db eval \173" |  | 
|  202     puts "    SELECT t2.a FROM t2 NATURAL JOIN t1" |  | 
|  203     puts "     WHERE t1.rowid $op $r ORDER BY t1.a DESC" |  | 
|  204     puts "  \175" |  | 
|  205     puts "\175 {[reverse [sort $aset]]}" |  | 
|  206  |  | 
|  207  |  | 
|  208     ################################################################ 2.x.y.3 |  | 
|  209     set ax $t1ra($r) |  | 
|  210     set aset {} |  | 
|  211     foreach rx [sort $rset] { |  | 
|  212       lappend aset $t1ra($rx) |  | 
|  213     } |  | 
|  214     puts "do_test $tname-2.$i.$subno.3 \173" |  | 
|  215     puts "  db eval \173" |  | 
|  216     puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op t2.r" |  | 
|  217     puts "     WHERE t2.a=$ax" |  | 
|  218     puts "     ORDER BY t1.rowid" |  | 
|  219     puts "  \175" |  | 
|  220     puts "\175 {$aset}" |  | 
|  221    |  | 
|  222     ################################################################ 2.x.y.4 |  | 
|  223     set aset {} |  | 
|  224     foreach rx [reverse [sort $rset]] { |  | 
|  225       lappend aset $t1ra($rx) |  | 
|  226     } |  | 
|  227     puts "do_test $tname-2.$i.$subno.4 \173" |  | 
|  228     puts "  db eval \173" |  | 
|  229     puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op t2.r" |  | 
|  230     puts "     WHERE t2.a=$ax" |  | 
|  231     puts "     ORDER BY t1.rowid DESC" |  | 
|  232     puts "  \175" |  | 
|  233     puts "\175 {$aset}" |  | 
|  234    |  | 
|  235     ################################################################ 2.x.y.5 |  | 
|  236     set aset {} |  | 
|  237     set xset {} |  | 
|  238     foreach rx $rset { |  | 
|  239       lappend xset $t1rx($rx) |  | 
|  240     } |  | 
|  241     foreach x [sort $xset] { |  | 
|  242       set rx $t1xr($x) |  | 
|  243       lappend aset $t1ra($rx) |  | 
|  244     } |  | 
|  245     puts "do_test $tname-2.$i.$subno.5 \173" |  | 
|  246     puts "  db eval \173" |  | 
|  247     puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op t2.r" |  | 
|  248     puts "     WHERE t2.a=$ax" |  | 
|  249     puts "     ORDER BY x" |  | 
|  250     puts "  \175" |  | 
|  251     puts "\175 {$aset}" |  | 
|  252    |  | 
|  253     ################################################################ 2.x.y.10 |  | 
|  254     if {[string length $r5]>15} continue |  | 
|  255     set rset {} |  | 
|  256     set aset {} |  | 
|  257     foreach rx $nums2 { |  | 
|  258       if "\$rx $op \$r0" { |  | 
|  259         lappend rset $rx |  | 
|  260       } |  | 
|  261     } |  | 
|  262     foreach rx [sort $rset] { |  | 
|  263       lappend aset $t1ra($rx) |  | 
|  264     } |  | 
|  265     puts "do_test $tname-2.$i.$subno.10 \173" |  | 
|  266     puts "  db eval \173" |  | 
|  267     puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op CAST(t2.r AS real)" |  | 
|  268     puts "     WHERE t2.a=$ax" |  | 
|  269     puts "     ORDER BY t1.rowid" |  | 
|  270     puts "  \175" |  | 
|  271     puts "\175 {$aset}" |  | 
|  272    |  | 
|  273     ################################################################ 2.x.y.11 |  | 
|  274     set aset {} |  | 
|  275     foreach rx [reverse [sort $rset]] { |  | 
|  276       lappend aset $t1ra($rx) |  | 
|  277     } |  | 
|  278     puts "do_test $tname-2.$i.$subno.11 \173" |  | 
|  279     puts "  db eval \173" |  | 
|  280     puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op CAST(t2.r AS real)" |  | 
|  281     puts "     WHERE t2.a=$ax" |  | 
|  282     puts "     ORDER BY t1.rowid DESC" |  | 
|  283     puts "  \175" |  | 
|  284     puts "\175 {$aset}" |  | 
|  285   } |  | 
|  286    |  | 
|  287 } |  | 
|  288  |  | 
|  289  |  | 
|  290 puts {finish_test} |  | 
| OLD | NEW |