Annotation of embedaddon/sqlite3/test/boundary4.tcl, revision 1.1.1.1

1.1       misho       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}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>