CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
boundary1.tcl290 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: boundary1.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 boundary1111puts "do_test $tname-1.1 \173"112puts "  db eval \173"113puts "    CREATE TABLE t1(a,x);"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(oid,a,x) VALUES($r,$a,'$x');"123}124puts "    CREATE INDEX t1i1 ON t1(a);"125puts "    CREATE INDEX t1i2 ON t1(x);"126puts "  \175"127puts "\175 {}"128 129puts "do_test $tname-1.2 \173"130puts "  db eval \173"131puts "    SELECT count(*) FROM t1"132puts "  \175"133puts "\175 {64}"134 135set nums3 $nums2136lappend nums3 9.22337303685477580800e+18137lappend nums3 -9.22337303685477580800e+18138 139set i 0140foreach r $nums3 {141  incr i142 143  if {abs($r)<9.22337203685477580800e+18} {144    set x $t1rx($r)145    set a $t1ra($r)146    set r5 $r.5147    set r0 $r.0148    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.1168    set rset {}169    set aset {}170    foreach rx $nums2 {171      if "\$rx $op \$r" {172        lappend rset $rx173        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.2183    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.3190    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.4201    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.5212    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.10228    if {abs($r)>9223372036854775808 || [string length $r5]>15} continue229    set rset {}230    set aset {}231    foreach rx $nums2 {232      if "\$rx $op \$r0" {233        lappend rset $rx234      }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.11246    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.12258    set rset {}259    set aset {}260    foreach rx $nums2 {261      if "\$rx $op \$r5" {262        lappend rset $rx263      }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.13275    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 289puts {finish_test}290