CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
boundary2.tcl446 linesDownload Raw Back to test
1puts {# 2008 December 112#3# The author disclaims copyright to this source code.  In place of4# 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 18set testdir [file dirname $argv0]19source $testdir/tester.tcl20 21# Many of the boundary tests depend on a working 64-bit implementation.22if {![working_64bit_int]} { finish_test; return }23}24 25expr srand(0)26 27# Generate interesting boundary numbers28#29foreach x {30  031  132  0x7f33  0x7fff34  0x7fffff35  0x7fffffff36  0x7fffffffff37  0x7fffffffffff38  0x7fffffffffffff39  0x7fffffffffffffff40} {41  set x [expr {wide($x)}]42  set boundarynum($x) 143  set boundarynum([expr {$x+1}]) 144  set boundarynum([expr {-($x+1)}]) 145  set boundarynum([expr {-($x+2)}]) 146  set boundarynum([expr {$x+$x+1}]) 147  set boundarynum([expr {$x+$x+2}]) 148}49set x [expr {wide(127)}]50for {set i 1} {$i<=9} {incr i} {51  set boundarynum($x) 152  set boundarynum([expr {$x+1}]) 153  set x [expr {wide($x*128 + 127)}]54}55 56# Scramble the $inlist into a random order.57#58proc 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 $outlist69}70 71# A simple selection sort.  Not trying to be efficient.72#73proc 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 $mn80  set mx $mn81  while {1} {82    set valid 083    foreach x $inlist {84      if {$x>$mx && (!$valid || $mn>$x)} {85        set mn $x86        set valid 187      }88    }89    if {!$valid} break90    lappend outlist $mn91    set mx $mn92  }93  return $outlist94}95 96# Reverse the order of a list97#98proc 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 $outlist105}106 107set nums1 [scramble [array names boundarynum]]108set nums2 [scramble [array names boundarynum]]109 110set tname boundary2111puts "do_test $tname-1.1 \173"112puts "  db eval \173"113puts "    CREATE TABLE t1(r INTEGER, a INTEGER, x TEXT);"114set a 0115foreach r $nums1 {116  incr a117  set t1ra($r) $a118  set t1ar($a) $r119  set x [format %08x%08x [expr {wide($r)>>32}] $r]120  set t1rx($r) $x121  set t1xr($x) $r122  puts "    INSERT INTO t1 VALUES($r,$a,'$x');"123}124puts "    CREATE INDEX t1i1 ON t1(r);"125puts "    CREATE INDEX t1i2 ON t1(a);"126puts "    CREATE INDEX t1i3 ON t1(x);"127puts "  \175"128puts "\175 {}"129 130puts "do_test $tname-1.2 \173"131puts "  db eval \173"132puts "    SELECT count(*) FROM t1"133puts "  \175"134puts "\175 {64}"135 136set nums3 $nums2137lappend nums3 9.22337303685477580800e+18138lappend nums3 -9.22337303685477580800e+18139 140set i 0141foreach r $nums3 {142  incr i143 144  if {abs($r)<9.22337203685477580800e+18} {145    set x $t1rx($r)146    set a $t1ra($r)147    set r5 $r.5148    set r0 $r.0149    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.1169    set rset {}170    set aset {}171    foreach rx $nums2 {172      if "\$rx $op \$r" {173        lappend rset $rx174        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.2184    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.3191    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.4202    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.5213    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.10229    if {abs($r)>9223372036854775808 || [string length $r5]>15} continue230    set rset {}231    set aset {}232    foreach rx $nums2 {233      if "\$rx $op \$r0" {234        lappend rset $rx235      }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.11247    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.12259    set rset {}260    set aset {}261    foreach rx $nums2 {262      if "\$rx $op \$r5" {263        lappend rset $rx264      }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.13276    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 288puts "do_test $tname-3.1 \173"289puts "  db eval \173"290puts "    DROP INDEX t1i1;"291puts "    DROP INDEX t1i2;"292puts "    DROP INDEX t1i3;"293puts "  \175"294puts "\175 {}"295 296set i 0297foreach r $nums3 {298  incr i299 300  if {abs($r)<9.22337203685477580800e+18} {301    set x $t1rx($r)302    set a $t1ra($r)303    set r5 $r.5304    set r0 $r.0305    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.1325    set rset {}326    set aset {}327    foreach rx $nums2 {328      if "\$rx $op \$r" {329        lappend rset $rx330        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.2340    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.3347    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.4358    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.5369    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.10385    if {abs($r)>9223372036854775808 || [string length $r5]>15} continue386    set rset {}387    set aset {}388    foreach rx $nums2 {389      if "\$rx $op \$r0" {390        lappend rset $rx391      }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.11403    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.12415    set rset {}416    set aset {}417    foreach rx $nums2 {418      if "\$rx $op \$r5" {419        lappend rset $rx420      }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.13432    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 445puts {finish_test}446