Annotation of embedaddon/sqlite3/test/boundary1.tcl, revision 1.1
1.1 ! misho 1: puts {# 2008 December 11
! 2: #
! 3: # The author disclaims copyright to this source code. In place of
! 4: # 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:
! 18: set testdir [file dirname $argv0]
! 19: source $testdir/tester.tcl
! 20:
! 21: # Many of the boundary tests depend on a working 64-bit implementation.
! 22: if {![working_64bit_int]} { finish_test; return }
! 23: }
! 24:
! 25: expr srand(0)
! 26:
! 27: # Generate interesting boundary numbers
! 28: #
! 29: foreach x {
! 30: 0
! 31: 1
! 32: 0x7f
! 33: 0x7fff
! 34: 0x7fffff
! 35: 0x7fffffff
! 36: 0x7fffffffff
! 37: 0x7fffffffffff
! 38: 0x7fffffffffffff
! 39: 0x7fffffffffffffff
! 40: } {
! 41: set x [expr {wide($x)}]
! 42: set boundarynum($x) 1
! 43: set boundarynum([expr {$x+1}]) 1
! 44: set boundarynum([expr {-($x+1)}]) 1
! 45: set boundarynum([expr {-($x+2)}]) 1
! 46: set boundarynum([expr {$x+$x+1}]) 1
! 47: set boundarynum([expr {$x+$x+2}]) 1
! 48: }
! 49: set x [expr {wide(127)}]
! 50: for {set i 1} {$i<=9} {incr i} {
! 51: set boundarynum($x) 1
! 52: set boundarynum([expr {$x+1}]) 1
! 53: set x [expr {wide($x*128 + 127)}]
! 54: }
! 55:
! 56: # Scramble the $inlist into a random order.
! 57: #
! 58: proc 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 $outlist
! 69: }
! 70:
! 71: # A simple selection sort. Not trying to be efficient.
! 72: #
! 73: proc 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 $mn
! 80: set mx $mn
! 81: while {1} {
! 82: set valid 0
! 83: foreach x $inlist {
! 84: if {$x>$mx && (!$valid || $mn>$x)} {
! 85: set mn $x
! 86: set valid 1
! 87: }
! 88: }
! 89: if {!$valid} break
! 90: lappend outlist $mn
! 91: set mx $mn
! 92: }
! 93: return $outlist
! 94: }
! 95:
! 96: # Reverse the order of a list
! 97: #
! 98: proc 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 $outlist
! 105: }
! 106:
! 107: set nums1 [scramble [array names boundarynum]]
! 108: set nums2 [scramble [array names boundarynum]]
! 109:
! 110: set tname boundary1
! 111: puts "do_test $tname-1.1 \173"
! 112: puts " db eval \173"
! 113: puts " CREATE TABLE t1(a,x);"
! 114: set a 0
! 115: foreach r $nums1 {
! 116: incr a
! 117: set t1ra($r) $a
! 118: set t1ar($a) $r
! 119: set x [format %08x%08x [expr {wide($r)>>32}] $r]
! 120: set t1rx($r) $x
! 121: set t1xr($x) $r
! 122: puts " INSERT INTO t1(oid,a,x) VALUES($r,$a,'$x');"
! 123: }
! 124: puts " CREATE INDEX t1i1 ON t1(a);"
! 125: puts " CREATE INDEX t1i2 ON t1(x);"
! 126: puts " \175"
! 127: puts "\175 {}"
! 128:
! 129: puts "do_test $tname-1.2 \173"
! 130: puts " db eval \173"
! 131: puts " SELECT count(*) FROM t1"
! 132: puts " \175"
! 133: puts "\175 {64}"
! 134:
! 135: set nums3 $nums2
! 136: lappend nums3 9.22337303685477580800e+18
! 137: lappend nums3 -9.22337303685477580800e+18
! 138:
! 139: set i 0
! 140: foreach r $nums3 {
! 141: incr i
! 142:
! 143: if {abs($r)<9.22337203685477580800e+18} {
! 144: set x $t1rx($r)
! 145: set a $t1ra($r)
! 146: set r5 $r.5
! 147: set r0 $r.0
! 148: 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.1
! 168: set rset {}
! 169: set aset {}
! 170: foreach rx $nums2 {
! 171: if "\$rx $op \$r" {
! 172: lappend rset $rx
! 173: 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.2
! 183: 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.3
! 190: 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.4
! 201: 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.5
! 212: 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.10
! 228: if {abs($r)>9223372036854775808 || [string length $r5]>15} continue
! 229: set rset {}
! 230: set aset {}
! 231: foreach rx $nums2 {
! 232: if "\$rx $op \$r0" {
! 233: lappend rset $rx
! 234: }
! 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.11
! 246: 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.12
! 258: set rset {}
! 259: set aset {}
! 260: foreach rx $nums2 {
! 261: if "\$rx $op \$r5" {
! 262: lappend rset $rx
! 263: }
! 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.13
! 275: 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:
! 289: puts {finish_test}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>