CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
boundary3.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 17set testdir [file dirname $argv0]18source $testdir/tester.tcl19 20# Many of the boundary tests depend on a working 64-bit implementation.21if {![working_64bit_int]} { finish_test; return }22}23 24expr srand(0)25 26# Generate interesting boundary numbers27#28foreach x {29  030  131  0x7f32  0x7fff33  0x7fffff34  0x7fffffff35  0x7fffffffff36  0x7fffffffffff37  0x7fffffffffffff38  0x7fffffffffffffff39} {40  set x [expr {wide($x)}]41  set boundarynum($x) 142  set boundarynum([expr {wide($x+1)}]) 143  set boundarynum([expr {wide(-($x+1))}]) 144  set boundarynum([expr {wide(-($x+2))}]) 145  set boundarynum([expr {wide($x+$x+1)}]) 146  set boundarynum([expr {wide($x+$x+2)}]) 147}48set x [expr {wide(127)}]49for {set i 1} {$i<=9} {incr i} {50  set boundarynum($x) 151  set boundarynum([expr {wide($x+1)}]) 152  set x [expr {wide($x*128 + 127)}]53}54 55# Scramble the $inlist into a random order.56#57proc 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 $outlist68}69 70# A simple selection sort.  Not trying to be efficient.71#72proc 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 $mn79  set mx $mn80  while {1} {81    set valid 082    foreach x $inlist {83      if {$x>$mx && (!$valid || $mn>$x)} {84        set mn $x85        set valid 186      }87    }88    if {!$valid} break89    lappend outlist $mn90    set mx $mn91  }92  return $outlist93}94 95# Reverse the order of a list96#97proc 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 $outlist104}105 106set nums1 [scramble [array names boundarynum]]107set nums2 [scramble [array names boundarynum]]108 109set tname boundary3110puts "do_test $tname-1.1 \173"111puts "  db eval \173"112puts "    CREATE TABLE t1(a,x);"113set a 0114foreach r $nums1 {115  incr a116  set t1ra($r) $a117  set t1ar($a) $r118  set x [format %016x [expr {wide($r)}]]119  set t1rx($r) $x120  set t1xr($x) $r121  puts "    INSERT INTO t1(oid,a,x) VALUES($r,$a,'$x');"122}123puts "    CREATE INDEX t1i1 ON t1(a);"124puts "    CREATE INDEX t1i2 ON t1(x);"125puts "  \175"126puts "\175 {}"127 128puts "do_test $tname-1.2 \173"129puts "  db eval \173"130puts "    SELECT count(*) FROM t1"131puts "  \175"132puts "\175 {64}"133 134puts "do_test $tname-1.3 \173"135puts "  db eval \173"136puts "    CREATE TABLE t2(r,a);"137puts "    INSERT INTO t2 SELECT rowid, a FROM t1;"138puts "    CREATE INDEX t2i1 ON t2(r);"139puts "    CREATE INDEX t2i2 ON t2(a);"140puts "    INSERT INTO t2 VALUES(9.22337303685477580800e+18,65);"141set t1ra(9.22337303685477580800e+18) 65142set t1ar(65) 9.22337303685477580800e+18)143puts "    INSERT INTO t2 VALUES(-9.22337303685477580800e+18,66);"144set t1ra(-9.22337303685477580800e+18) 66145set t1ar(66) -9.22337303685477580800e+18)146puts "    SELECT count(*) FROM t2;"147puts "  \175"148puts "\175 {66}"149 150set nums3 $nums2151lappend nums3 9.22337303685477580800e+18152lappend nums3 -9.22337303685477580800e+18153 154set i 0155foreach r $nums3 {156  incr i157 158  set r5 $r.5159  set r0 $r.0160   if {abs($r)<0x7FFFFFFFFFFFFFFF || $r==-9223372036854775808} {161    set x $t1rx($r)162    set a $t1ra($r)163    puts "do_test $tname-2.$i.1 \173"164    puts "  db eval \173"165    puts "    SELECT t1.* FROM t1, t2 WHERE t1.rowid=$r AND t2.a=t1.a"166    puts "  \175"167    puts "\175 {$a $x}"168    puts "do_test $tname-2.$i.2 \173"169    puts "  db eval \173"170    puts "    SELECT t2.* FROM t1 JOIN t2 USING(a) WHERE x='$x'"171    puts "  \175"172    puts "\175 {$r $a}"173    puts "do_test $tname-2.$i.3 \173"174    puts "  db eval \173"175    puts "    SELECT t1.rowid, x FROM t1 JOIN t2 ON t2.r=t1.rowid WHERE t2.a=$a"176    puts "  \175"177    puts "\175 {$r $x}"178  }179 180  foreach op {> >= < <=} subno {gt ge lt le} {181 182    ################################################################ 2.x.y.1183    set rset {}184    set aset {}185    foreach rx $nums2 {186      if "\$rx $op \$r" {187        lappend rset $rx188        lappend aset $t1ra($rx)189      }190    }191    puts "do_test $tname-2.$i.$subno.1 \173"192    puts "  db eval \173"193    puts "    SELECT t2.a FROM t1 JOIN t2 USING(a)"194    puts "     WHERE t1.rowid $op $r ORDER BY t2.a"195    puts "  \175"196    puts "\175 {[sort $aset]}"197  198    ################################################################ 2.x.y.2199    puts "do_test $tname-2.$i.$subno.2 \173"200    puts "  db eval \173"201    puts "    SELECT t2.a FROM t2 NATURAL JOIN t1"202    puts "     WHERE t1.rowid $op $r ORDER BY t1.a DESC"203    puts "  \175"204    puts "\175 {[reverse [sort $aset]]}"205 206 207    ################################################################ 2.x.y.3208    set ax $t1ra($r)209    set aset {}210    foreach rx [sort $rset] {211      lappend aset $t1ra($rx)212    }213    puts "do_test $tname-2.$i.$subno.3 \173"214    puts "  db eval \173"215    puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op t2.r"216    puts "     WHERE t2.a=$ax"217    puts "     ORDER BY t1.rowid"218    puts "  \175"219    puts "\175 {$aset}"220  221    ################################################################ 2.x.y.4222    set aset {}223    foreach rx [reverse [sort $rset]] {224      lappend aset $t1ra($rx)225    }226    puts "do_test $tname-2.$i.$subno.4 \173"227    puts "  db eval \173"228    puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op t2.r"229    puts "     WHERE t2.a=$ax"230    puts "     ORDER BY t1.rowid DESC"231    puts "  \175"232    puts "\175 {$aset}"233  234    ################################################################ 2.x.y.5235    set aset {}236    set xset {}237    foreach rx $rset {238      lappend xset $t1rx($rx)239    }240    foreach x [sort $xset] {241      set rx $t1xr($x)242      lappend aset $t1ra($rx)243    }244    puts "do_test $tname-2.$i.$subno.5 \173"245    puts "  db eval \173"246    puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op t2.r"247    puts "     WHERE t2.a=$ax"248    puts "     ORDER BY x"249    puts "  \175"250    puts "\175 {$aset}"251  252    ################################################################ 2.x.y.10253    if {[string length $r5]>15} continue254    set rset {}255    set aset {}256    foreach rx $nums2 {257      if "\$rx $op \$r0" {258        lappend rset $rx259      }260    }261    foreach rx [sort $rset] {262      lappend aset $t1ra($rx)263    }264    puts "do_test $tname-2.$i.$subno.10 \173"265    puts "  db eval \173"266    puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op CAST(t2.r AS real)"267    puts "     WHERE t2.a=$ax"268    puts "     ORDER BY t1.rowid"269    puts "  \175"270    puts "\175 {$aset}"271  272    ################################################################ 2.x.y.11273    set aset {}274    foreach rx [reverse [sort $rset]] {275      lappend aset $t1ra($rx)276    }277    puts "do_test $tname-2.$i.$subno.11 \173"278    puts "  db eval \173"279    puts "    SELECT t1.a FROM t1 JOIN t2 ON t1.rowid $op CAST(t2.r AS real)"280    puts "     WHERE t2.a=$ax"281    puts "     ORDER BY t1.rowid DESC"282    puts "  \175"283    puts "\175 {$aset}"284  }285  286}287 288 289puts {finish_test}290