Annotation of embedaddon/sqlite3/test/boundary2.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: boundary2.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 boundary2
! 111: puts "do_test $tname-1.1 \173"
! 112: puts " db eval \173"
! 113: puts " CREATE TABLE t1(r INTEGER, a INTEGER, x TEXT);"
! 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 VALUES($r,$a,'$x');"
! 123: }
! 124: puts " CREATE INDEX t1i1 ON t1(r);"
! 125: puts " CREATE INDEX t1i2 ON t1(a);"
! 126: puts " CREATE INDEX t1i3 ON t1(x);"
! 127: puts " \175"
! 128: puts "\175 {}"
! 129:
! 130: puts "do_test $tname-1.2 \173"
! 131: puts " db eval \173"
! 132: puts " SELECT count(*) FROM t1"
! 133: puts " \175"
! 134: puts "\175 {64}"
! 135:
! 136: set nums3 $nums2
! 137: lappend nums3 9.22337303685477580800e+18
! 138: lappend nums3 -9.22337303685477580800e+18
! 139:
! 140: set i 0
! 141: foreach r $nums3 {
! 142: incr i
! 143:
! 144: if {abs($r)<9.22337203685477580800e+18} {
! 145: set x $t1rx($r)
! 146: set a $t1ra($r)
! 147: set r5 $r.5
! 148: set r0 $r.0
! 149: puts "do_test $tname-2.$i.1 \173"
! 150: puts " db eval \173"
! 151: puts " SELECT * FROM t1 WHERE r=$r"
! 152: puts " \175"
! 153: puts "\175 {$r $a $x}"
! 154: puts "do_test $tname-2.$i.2 \173"
! 155: puts " db eval \173"
! 156: puts " SELECT r, a FROM t1 WHERE x='$x'"
! 157: puts " \175"
! 158: puts "\175 {$r $a}"
! 159: puts "do_test $tname-2.$i.3 \173"
! 160: puts " db eval \173"
! 161: puts " SELECT r, x FROM t1 WHERE a=$a"
! 162: puts " \175"
! 163: puts "\175 {$r $x}"
! 164: }
! 165:
! 166: foreach op {> >= < <=} subno {gt ge lt le} {
! 167:
! 168: ################################################################ 2.x.y.1
! 169: set rset {}
! 170: set aset {}
! 171: foreach rx $nums2 {
! 172: if "\$rx $op \$r" {
! 173: lappend rset $rx
! 174: lappend aset $t1ra($rx)
! 175: }
! 176: }
! 177: puts "do_test $tname-2.$i.$subno.1 \173"
! 178: puts " db eval \173"
! 179: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a"
! 180: puts " \175"
! 181: puts "\175 {[sort $aset]}"
! 182:
! 183: ################################################################ 2.x.y.2
! 184: puts "do_test $tname-2.$i.$subno.2 \173"
! 185: puts " db eval \173"
! 186: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a DESC"
! 187: puts " \175"
! 188: puts "\175 {[reverse [sort $aset]]}"
! 189:
! 190: ################################################################ 2.x.y.3
! 191: set aset {}
! 192: foreach rx [sort $rset] {
! 193: lappend aset $t1ra($rx)
! 194: }
! 195: puts "do_test $tname-2.$i.$subno.3 \173"
! 196: puts " db eval \173"
! 197: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r"
! 198: puts " \175"
! 199: puts "\175 {$aset}"
! 200:
! 201: ################################################################ 2.x.y.4
! 202: set aset {}
! 203: foreach rx [reverse [sort $rset]] {
! 204: lappend aset $t1ra($rx)
! 205: }
! 206: puts "do_test $tname-2.$i.$subno.4 \173"
! 207: puts " db eval \173"
! 208: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r DESC"
! 209: puts " \175"
! 210: puts "\175 {$aset}"
! 211:
! 212: ################################################################ 2.x.y.5
! 213: set aset {}
! 214: set xset {}
! 215: foreach rx $rset {
! 216: lappend xset $t1rx($rx)
! 217: }
! 218: foreach x [sort $xset] {
! 219: set rx $t1xr($x)
! 220: lappend aset $t1ra($rx)
! 221: }
! 222: puts "do_test $tname-2.$i.$subno.5 \173"
! 223: puts " db eval \173"
! 224: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY x"
! 225: puts " \175"
! 226: puts "\175 {$aset}"
! 227:
! 228: ################################################################ 2.x.y.10
! 229: if {abs($r)>9223372036854775808 || [string length $r5]>15} continue
! 230: set rset {}
! 231: set aset {}
! 232: foreach rx $nums2 {
! 233: if "\$rx $op \$r0" {
! 234: lappend rset $rx
! 235: }
! 236: }
! 237: foreach rx [sort $rset] {
! 238: lappend aset $t1ra($rx)
! 239: }
! 240: puts "do_test $tname-2.$i.$subno.10 \173"
! 241: puts " db eval \173"
! 242: puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r"
! 243: puts " \175"
! 244: puts "\175 {$aset}"
! 245:
! 246: ################################################################ 2.x.y.11
! 247: set aset {}
! 248: foreach rx [reverse [sort $rset]] {
! 249: lappend aset $t1ra($rx)
! 250: }
! 251: puts "do_test $tname-2.$i.$subno.11 \173"
! 252: puts " db eval \173"
! 253: puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r DESC"
! 254: puts " \175"
! 255: puts "\175 {$aset}"
! 256:
! 257:
! 258: ################################################################ 2.x.y.12
! 259: set rset {}
! 260: set aset {}
! 261: foreach rx $nums2 {
! 262: if "\$rx $op \$r5" {
! 263: lappend rset $rx
! 264: }
! 265: }
! 266: foreach rx [sort $rset] {
! 267: lappend aset $t1ra($rx)
! 268: }
! 269: puts "do_test $tname-2.$i.$subno.12 \173"
! 270: puts " db eval \173"
! 271: puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r"
! 272: puts " \175"
! 273: puts "\175 {$aset}"
! 274:
! 275: ################################################################ 2.x.y.13
! 276: set aset {}
! 277: foreach rx [reverse [sort $rset]] {
! 278: lappend aset $t1ra($rx)
! 279: }
! 280: puts "do_test $tname-2.$i.$subno.13 \173"
! 281: puts " db eval \173"
! 282: puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r DESC"
! 283: puts " \175"
! 284: puts "\175 {$aset}"
! 285: }
! 286: }
! 287:
! 288: puts "do_test $tname-3.1 \173"
! 289: puts " db eval \173"
! 290: puts " DROP INDEX t1i1;"
! 291: puts " DROP INDEX t1i2;"
! 292: puts " DROP INDEX t1i3;"
! 293: puts " \175"
! 294: puts "\175 {}"
! 295:
! 296: set i 0
! 297: foreach r $nums3 {
! 298: incr i
! 299:
! 300: if {abs($r)<9.22337203685477580800e+18} {
! 301: set x $t1rx($r)
! 302: set a $t1ra($r)
! 303: set r5 $r.5
! 304: set r0 $r.0
! 305: puts "do_test $tname-4.$i.1 \173"
! 306: puts " db eval \173"
! 307: puts " SELECT * FROM t1 WHERE r=$r"
! 308: puts " \175"
! 309: puts "\175 {$r $a $x}"
! 310: puts "do_test $tname-4.$i.2 \173"
! 311: puts " db eval \173"
! 312: puts " SELECT r, a FROM t1 WHERE x='$x'"
! 313: puts " \175"
! 314: puts "\175 {$r $a}"
! 315: puts "do_test $tname-4.$i.3 \173"
! 316: puts " db eval \173"
! 317: puts " SELECT r, x FROM t1 WHERE a=$a"
! 318: puts " \175"
! 319: puts "\175 {$r $x}"
! 320: }
! 321:
! 322: foreach op {> >= < <=} subno {gt ge lt le} {
! 323:
! 324: ################################################################ 2.x.y.1
! 325: set rset {}
! 326: set aset {}
! 327: foreach rx $nums2 {
! 328: if "\$rx $op \$r" {
! 329: lappend rset $rx
! 330: lappend aset $t1ra($rx)
! 331: }
! 332: }
! 333: puts "do_test $tname-4.$i.$subno.1 \173"
! 334: puts " db eval \173"
! 335: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a"
! 336: puts " \175"
! 337: puts "\175 {[sort $aset]}"
! 338:
! 339: ################################################################ 2.x.y.2
! 340: puts "do_test $tname-4.$i.$subno.2 \173"
! 341: puts " db eval \173"
! 342: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a DESC"
! 343: puts " \175"
! 344: puts "\175 {[reverse [sort $aset]]}"
! 345:
! 346: ################################################################ 2.x.y.3
! 347: set aset {}
! 348: foreach rx [sort $rset] {
! 349: lappend aset $t1ra($rx)
! 350: }
! 351: puts "do_test $tname-4.$i.$subno.3 \173"
! 352: puts " db eval \173"
! 353: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r"
! 354: puts " \175"
! 355: puts "\175 {$aset}"
! 356:
! 357: ################################################################ 2.x.y.4
! 358: set aset {}
! 359: foreach rx [reverse [sort $rset]] {
! 360: lappend aset $t1ra($rx)
! 361: }
! 362: puts "do_test $tname-4.$i.$subno.4 \173"
! 363: puts " db eval \173"
! 364: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r DESC"
! 365: puts " \175"
! 366: puts "\175 {$aset}"
! 367:
! 368: ################################################################ 2.x.y.5
! 369: set aset {}
! 370: set xset {}
! 371: foreach rx $rset {
! 372: lappend xset $t1rx($rx)
! 373: }
! 374: foreach x [sort $xset] {
! 375: set rx $t1xr($x)
! 376: lappend aset $t1ra($rx)
! 377: }
! 378: puts "do_test $tname-4.$i.$subno.5 \173"
! 379: puts " db eval \173"
! 380: puts " SELECT a FROM t1 WHERE r $op $r ORDER BY x"
! 381: puts " \175"
! 382: puts "\175 {$aset}"
! 383:
! 384: ################################################################ 2.x.y.10
! 385: if {abs($r)>9223372036854775808 || [string length $r5]>15} continue
! 386: set rset {}
! 387: set aset {}
! 388: foreach rx $nums2 {
! 389: if "\$rx $op \$r0" {
! 390: lappend rset $rx
! 391: }
! 392: }
! 393: foreach rx [sort $rset] {
! 394: lappend aset $t1ra($rx)
! 395: }
! 396: puts "do_test $tname-4.$i.$subno.10 \173"
! 397: puts " db eval \173"
! 398: puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r"
! 399: puts " \175"
! 400: puts "\175 {$aset}"
! 401:
! 402: ################################################################ 2.x.y.11
! 403: set aset {}
! 404: foreach rx [reverse [sort $rset]] {
! 405: lappend aset $t1ra($rx)
! 406: }
! 407: puts "do_test $tname-4.$i.$subno.11 \173"
! 408: puts " db eval \173"
! 409: puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r DESC"
! 410: puts " \175"
! 411: puts "\175 {$aset}"
! 412:
! 413:
! 414: ################################################################ 2.x.y.12
! 415: set rset {}
! 416: set aset {}
! 417: foreach rx $nums2 {
! 418: if "\$rx $op \$r5" {
! 419: lappend rset $rx
! 420: }
! 421: }
! 422: foreach rx [sort $rset] {
! 423: lappend aset $t1ra($rx)
! 424: }
! 425: puts "do_test $tname-4.$i.$subno.12 \173"
! 426: puts " db eval \173"
! 427: puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r"
! 428: puts " \175"
! 429: puts "\175 {$aset}"
! 430:
! 431: ################################################################ 2.x.y.13
! 432: set aset {}
! 433: foreach rx [reverse [sort $rset]] {
! 434: lappend aset $t1ra($rx)
! 435: }
! 436: puts "do_test $tname-4.$i.$subno.13 \173"
! 437: puts " db eval \173"
! 438: puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r DESC"
! 439: puts " \175"
! 440: puts "\175 {$aset}"
! 441: }
! 442: }
! 443:
! 444:
! 445: puts {finish_test}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>