2008-12-12 19:19:22 +00:00
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.
#
2009-01-02 15:45:47 +00:00
# $Id: boundary1.tcl,v 1.3 2009/01/02 15:45:48 shane Exp $
2008-12-12 19:19:22 +00:00
set testdir [ file dirname $argv0 ]
source $testdir / tester.tcl
2009-01-02 15:45:47 +00:00
# Many of the boundary tests depend on a working 64-bit implementation.
if { ! [ working_64bit_int ] } { finish_test ; return }
2008-12-12 19:19:22 +00:00
}
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
}
2008-12-14 02:55:16 +00:00
# A simple selection sort. Not trying to be efficient.
2008-12-12 19:19:22 +00:00
#
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 boundary1
puts " d o _ t e s t $ t n a m e - 1 . 1 \173 "
puts " d b e v a l \173 "
puts " C R E A T E T A B L E t 1 ( a , x ) ; "
set a 0
foreach r $nums1 {
incr a
set t1ra( $r ) $a
set t1ar( $a ) $r
set x [ format % 08 x% 08 x [ expr { wide ( $r ) >> 32 } ] $r ]
set t1rx( $r ) $x
set t1xr( $x ) $r
puts " I N S E R T I N T O t 1 ( o i d , a , x ) V A L U E S ( $ r , $ a , ' $ x ' ) ; "
}
puts " C R E A T E I N D E X t 1 i 1 O N t 1 ( a ) ; "
puts " C R E A T E I N D E X t 1 i 2 O N t 1 ( x ) ; "
puts " \175 "
puts " \175 { } "
puts " d o _ t e s t $ t n a m e - 1 . 2 \173 "
puts " d b e v a l \173 "
puts " S E L E C T c o u n t ( * ) F R O M t 1 "
puts " \175 "
puts " \175 { 6 4 } "
set nums3 $nums2
lappend nums3 9.22337303685477580800 e+ 18
lappend nums3 - 9.22337303685477580800 e+ 18
set i 0
foreach r $nums3 {
incr i
if { abs ( $r ) < 9.22337203685477580800 e+ 18 } {
set x $t1rx ( $r )
set a $t1ra ( $r )
set r5 $r.5
set r0 $r.0
puts " d o _ t e s t $ t n a m e - 2 . $ i . 1 \173 "
puts " d b e v a l \173 "
puts " S E L E C T * F R O M t 1 W H E R E r o w i d = $ r "
puts " \175 "
puts " \175 { $ a $ x } "
puts " d o _ t e s t $ t n a m e - 2 . $ i . 2 \173 "
puts " d b e v a l \173 "
puts " S E L E C T r o w i d , a F R O M t 1 W H E R E x = ' $ x ' "
puts " \175 "
puts " \175 { $ r $ a } "
puts " d o _ t e s t $ t n a m e - 2 . $ i . 3 \173 "
puts " d b e v a l \173 "
puts " S E L E C T r o w i d , x F R O M t 1 W H E R E 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 " \$ r x $ o p \$ r " {
lappend rset $rx
lappend aset $t1ra ( $rx )
}
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 1 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r O R D E R B Y a "
puts " \175 "
puts " \175 { [ s o r t $ a s e t ] } "
# ############################################################### 2.x.y.2
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 2 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r O R D E R B Y a D E S C "
puts " \175 "
puts " \175 { [ r e v e r s e [ s o r t $ a s e t ] ] } "
# ############################################################### 2.x.y.3
set aset { }
foreach rx [ sort $rset ] {
lappend aset $t1ra ( $rx )
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 3 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r O R D E R B Y r o w i d "
puts " \175 "
puts " \175 { $ a s e t } "
# ############################################################### 2.x.y.4
set aset { }
foreach rx [ reverse [ sort $rset ] ] {
lappend aset $t1ra ( $rx )
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 4 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r O R D E R B Y r o w i d D E S C "
puts " \175 "
puts " \175 { $ a s e t } "
# ############################################################### 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 " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 5 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r O R D E R B Y x "
puts " \175 "
puts " \175 { $ a s e t } "
# ############################################################### 2.x.y.10
if { abs ( $r ) > 9223372036854775808 || [ string length $r5 ] > 15 } continue
set rset { }
set aset { }
foreach rx $nums2 {
if " \$ r x $ o p \$ r 0 " {
lappend rset $rx
}
}
foreach rx [ sort $rset ] {
lappend aset $t1ra ( $rx )
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 1 0 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r 0 O R D E R B Y r o w i d "
puts " \175 "
puts " \175 { $ a s e t } "
# ############################################################### 2.x.y.11
set aset { }
foreach rx [ reverse [ sort $rset ] ] {
lappend aset $t1ra ( $rx )
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 1 1 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r 0 O R D E R B Y r o w i d D E S C "
puts " \175 "
puts " \175 { $ a s e t } "
# ############################################################### 2.x.y.12
set rset { }
set aset { }
foreach rx $nums2 {
if " \$ r x $ o p \$ r 5 " {
lappend rset $rx
}
}
foreach rx [ sort $rset ] {
lappend aset $t1ra ( $rx )
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 1 2 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r 5 O R D E R B Y r o w i d "
puts " \175 "
puts " \175 { $ a s e t } "
# ############################################################### 2.x.y.13
set aset { }
foreach rx [ reverse [ sort $rset ] ] {
lappend aset $t1ra ( $rx )
}
puts " d o _ t e s t $ t n a m e - 2 . $ i . $ s u b n o . 1 3 \173 "
puts " d b e v a l \173 "
puts " S E L E C T a F R O M t 1 W H E R E r o w i d $ o p $ r 5 O R D E R B Y r o w i d D E S C "
puts " \175 "
puts " \175 { $ a s e t } "
}
}
puts { finish_test }