blob: b141166072d9174f9cc05232724ecc5253c1e64c [file] [log] [blame]
 puts {# 2008 December 11 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file is automatically generated from a separate TCL script. # This file seeks to exercise integer boundary values. # # \$Id: boundary2.tcl,v 1.3 2009/01/02 15:45:48 shane Exp \$ set testdir [file dirname \$argv0] source \$testdir/tester.tcl # Many of the boundary tests depend on a working 64-bit implementation. if {![working_64bit_int]} { finish_test; return } } expr srand(0) # Generate interesting boundary numbers # foreach x { 0 1 0x7f 0x7fff 0x7fffff 0x7fffffff 0x7fffffffff 0x7fffffffffff 0x7fffffffffffff 0x7fffffffffffffff } { set x [expr {wide(\$x)}] set boundarynum(\$x) 1 set boundarynum([expr {\$x+1}]) 1 set boundarynum([expr {-(\$x+1)}]) 1 set boundarynum([expr {-(\$x+2)}]) 1 set boundarynum([expr {\$x+\$x+1}]) 1 set boundarynum([expr {\$x+\$x+2}]) 1 } set x [expr {wide(127)}] for {set i 1} {\$i<=9} {incr i} { set boundarynum(\$x) 1 set boundarynum([expr {\$x+1}]) 1 set x [expr {wide(\$x*128 + 127)}] } # Scramble the \$inlist into a random order. # proc scramble {inlist} { set y {} foreach x \$inlist { lappend y [list [expr {rand()}] \$x] } set y [lsort \$y] set outlist {} foreach x \$y { lappend outlist [lindex \$x 1] } return \$outlist } # A simple selection sort. Not trying to be efficient. # proc sort {inlist} { set outlist {} set mn [lindex \$inlist 0] foreach x \$inlist { if {\$x<\$mn} {set mn \$x} } set outlist \$mn set mx \$mn while {1} { set valid 0 foreach x \$inlist { if {\$x>\$mx && (!\$valid || \$mn>\$x)} { set mn \$x set valid 1 } } if {!\$valid} break lappend outlist \$mn set mx \$mn } return \$outlist } # Reverse the order of a list # proc reverse {inlist} { set i [llength \$inlist] set outlist {} for {incr i -1} {\$i>=0} {incr i -1} { lappend outlist [lindex \$inlist \$i] } return \$outlist } set nums1 [scramble [array names boundarynum]] set nums2 [scramble [array names boundarynum]] set tname boundary2 puts "do_test \$tname-1.1 \173" puts " db eval \173" puts " CREATE TABLE t1(r INTEGER, a INTEGER, x TEXT);" set a 0 foreach r \$nums1 { incr a set t1ra(\$r) \$a set t1ar(\$a) \$r set x [format %08x%08x [expr {wide(\$r)>>32}] \$r] set t1rx(\$r) \$x set t1xr(\$x) \$r puts " INSERT INTO t1 VALUES(\$r,\$a,'\$x');" } puts " CREATE INDEX t1i1 ON t1(r);" puts " CREATE INDEX t1i2 ON t1(a);" puts " CREATE INDEX t1i3 ON t1(x);" puts " \175" puts "\175 {}" puts "do_test \$tname-1.2 \173" puts " db eval \173" puts " SELECT count(*) FROM t1" puts " \175" puts "\175 {64}" set nums3 \$nums2 lappend nums3 9.22337303685477580800e+18 lappend nums3 -9.22337303685477580800e+18 set i 0 foreach r \$nums3 { incr i if {abs(\$r)<9.22337203685477580800e+18} { set x \$t1rx(\$r) set a \$t1ra(\$r) set r5 \$r.5 set r0 \$r.0 puts "do_test \$tname-2.\$i.1 \173" puts " db eval \173" puts " SELECT * FROM t1 WHERE r=\$r" puts " \175" puts "\175 {\$r \$a \$x}" puts "do_test \$tname-2.\$i.2 \173" puts " db eval \173" puts " SELECT r, a FROM t1 WHERE x='\$x'" puts " \175" puts "\175 {\$r \$a}" puts "do_test \$tname-2.\$i.3 \173" puts " db eval \173" puts " SELECT r, x FROM t1 WHERE a=\$a" puts " \175" puts "\175 {\$r \$x}" } foreach op {> >= < <=} subno {gt ge lt le} { ################################################################ 2.x.y.1 set rset {} set aset {} foreach rx \$nums2 { if "\\$rx \$op \\$r" { lappend rset \$rx lappend aset \$t1ra(\$rx) } } puts "do_test \$tname-2.\$i.\$subno.1 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY a" puts " \175" puts "\175 {[sort \$aset]}" ################################################################ 2.x.y.2 puts "do_test \$tname-2.\$i.\$subno.2 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY a DESC" puts " \175" puts "\175 {[reverse [sort \$aset]]}" ################################################################ 2.x.y.3 set aset {} foreach rx [sort \$rset] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.3 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY r" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.4 set aset {} foreach rx [reverse [sort \$rset]] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.4 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY r DESC" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.5 set aset {} set xset {} foreach rx \$rset { lappend xset \$t1rx(\$rx) } foreach x [sort \$xset] { set rx \$t1xr(\$x) lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.5 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY x" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.10 if {abs(\$r)>9223372036854775808 || [string length \$r5]>15} continue set rset {} set aset {} foreach rx \$nums2 { if "\\$rx \$op \\$r0" { lappend rset \$rx } } foreach rx [sort \$rset] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.10 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r0 ORDER BY r" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.11 set aset {} foreach rx [reverse [sort \$rset]] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.11 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r0 ORDER BY r DESC" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.12 set rset {} set aset {} foreach rx \$nums2 { if "\\$rx \$op \\$r5" { lappend rset \$rx } } foreach rx [sort \$rset] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.12 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r5 ORDER BY r" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.13 set aset {} foreach rx [reverse [sort \$rset]] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-2.\$i.\$subno.13 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r5 ORDER BY r DESC" puts " \175" puts "\175 {\$aset}" } } puts "do_test \$tname-3.1 \173" puts " db eval \173" puts " DROP INDEX t1i1;" puts " DROP INDEX t1i2;" puts " DROP INDEX t1i3;" puts " \175" puts "\175 {}" set i 0 foreach r \$nums3 { incr i if {abs(\$r)<9.22337203685477580800e+18} { set x \$t1rx(\$r) set a \$t1ra(\$r) set r5 \$r.5 set r0 \$r.0 puts "do_test \$tname-4.\$i.1 \173" puts " db eval \173" puts " SELECT * FROM t1 WHERE r=\$r" puts " \175" puts "\175 {\$r \$a \$x}" puts "do_test \$tname-4.\$i.2 \173" puts " db eval \173" puts " SELECT r, a FROM t1 WHERE x='\$x'" puts " \175" puts "\175 {\$r \$a}" puts "do_test \$tname-4.\$i.3 \173" puts " db eval \173" puts " SELECT r, x FROM t1 WHERE a=\$a" puts " \175" puts "\175 {\$r \$x}" } foreach op {> >= < <=} subno {gt ge lt le} { ################################################################ 2.x.y.1 set rset {} set aset {} foreach rx \$nums2 { if "\\$rx \$op \\$r" { lappend rset \$rx lappend aset \$t1ra(\$rx) } } puts "do_test \$tname-4.\$i.\$subno.1 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY a" puts " \175" puts "\175 {[sort \$aset]}" ################################################################ 2.x.y.2 puts "do_test \$tname-4.\$i.\$subno.2 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY a DESC" puts " \175" puts "\175 {[reverse [sort \$aset]]}" ################################################################ 2.x.y.3 set aset {} foreach rx [sort \$rset] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.3 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY r" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.4 set aset {} foreach rx [reverse [sort \$rset]] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.4 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY r DESC" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.5 set aset {} set xset {} foreach rx \$rset { lappend xset \$t1rx(\$rx) } foreach x [sort \$xset] { set rx \$t1xr(\$x) lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.5 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r ORDER BY x" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.10 if {abs(\$r)>9223372036854775808 || [string length \$r5]>15} continue set rset {} set aset {} foreach rx \$nums2 { if "\\$rx \$op \\$r0" { lappend rset \$rx } } foreach rx [sort \$rset] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.10 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r0 ORDER BY r" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.11 set aset {} foreach rx [reverse [sort \$rset]] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.11 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r0 ORDER BY r DESC" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.12 set rset {} set aset {} foreach rx \$nums2 { if "\\$rx \$op \\$r5" { lappend rset \$rx } } foreach rx [sort \$rset] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.12 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r5 ORDER BY r" puts " \175" puts "\175 {\$aset}" ################################################################ 2.x.y.13 set aset {} foreach rx [reverse [sort \$rset]] { lappend aset \$t1ra(\$rx) } puts "do_test \$tname-4.\$i.\$subno.13 \173" puts " db eval \173" puts " SELECT a FROM t1 WHERE r \$op \$r5 ORDER BY r DESC" puts " \175" puts "\175 {\$aset}" } } puts {finish_test}