gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/boundary4.tcl (about)

     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: boundary4.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  ifcapable !altertable     { finish_test; return }
    24  }
    25  
    26  expr srand(0)
    27  
    28  # Generate interesting boundary numbers
    29  #
    30  foreach x {
    31    0x7f
    32    0x7fff
    33    0x7fffff
    34    0x7fffffff
    35    0x7fffffffff
    36    0x7fffffffffff
    37    0x7fffffffffffff
    38    0x7fffffffffffffff
    39  } {
    40    set x [expr {wide($x)}]
    41    set boundarynum($x) 1
    42    set boundarynum([expr {$x+1}]) 1
    43    set boundarynum([expr {-($x+1)}]) 1
    44    set boundarynum([expr {-($x+2)}]) 1
    45    set boundarynum([expr {$x+$x+1}]) 1
    46    set boundarynum([expr {$x+$x+2}]) 1
    47  }
    48  set x [expr {wide(127)}]
    49  for {set i 127} {$i<=9} {incr i} {
    50    set boundarynum($x) 1
    51    set boundarynum([expr {$x+1}]) 1
    52    set x [expr {wide($x*128 + 127)}]
    53  }
    54  
    55  # Scramble the $inlist into a random order.
    56  #
    57  proc 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 $outlist
    68  }
    69  
    70  # A simple selection sort.  Not trying to be efficient.
    71  #
    72  proc 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 $mn
    79    set mx $mn
    80    while {1} {
    81      set valid 0
    82      foreach x $inlist {
    83        if {$x>$mx && (!$valid || $mn>$x)} {
    84          set mn $x
    85          set valid 1
    86        }
    87      }
    88      if {!$valid} break
    89      lappend outlist $mn
    90      set mx $mn
    91    }
    92    return $outlist
    93  }
    94  
    95  # Reverse the order of a list
    96  #
    97  proc 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 $outlist
   104  }
   105  
   106  set nums1 [scramble [array names boundarynum]]
   107  set nums2 [scramble [array names boundarynum]]
   108  
   109  set tname boundary4
   110  puts "do_test $tname-1.1 \173"
   111  puts "  db eval \173"
   112  puts "    CREATE TABLE t1(a,x);"
   113  set a 0
   114  set all_rowid {}
   115  set all_a {}
   116  set all_x {}
   117  foreach r $nums1 {
   118    incr a
   119    set t1ra($r) $a
   120    set t1ar($a) $r
   121    set x [format %08x%08x [expr {wide($r)>>32}] $r]
   122    set t1rx($r) $x
   123    set t1xr($x) $r
   124    puts "    INSERT INTO t1(oid,a,x) VALUES($r,$a,'$x');"
   125    lappend all_rowid $r
   126    lappend all_a $a
   127    lappend all_x $x
   128  }
   129  puts "    CREATE INDEX t1i1 ON t1(a);"
   130  puts "    CREATE INDEX t1i2 ON t1(x);"
   131  puts "  \175"
   132  puts "\175 {}"
   133  
   134  puts "do_test $tname-1.2 \173"
   135  puts "  db eval \173"
   136  puts "    SELECT count(*) FROM t1"
   137  puts "  \175"
   138  puts "\175 {[llength $nums1]}"
   139  
   140  proc maketest {tnum sql answer} {
   141    puts "do_test $::tname-$tnum \173"
   142    puts "  db eval \173"
   143    puts "    $sql"
   144    puts "  \175"
   145    puts "\175 {$answer}"
   146  }
   147  
   148  set ans {}
   149  foreach r [sort $all_rowid] {
   150    lappend ans $r $t1ra($r) $t1rx($r)
   151  }
   152  maketest 1.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans
   153  maketest 1.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans
   154  
   155  set ans {}
   156  foreach r [reverse [sort $all_rowid]] {
   157    lappend ans $r $t1ra($r) $t1rx($r)
   158  }
   159  maketest 1.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans
   160  maketest 1.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans
   161  
   162  set ans {}
   163  foreach a [sort $all_a] {
   164    set r $t1ar($a)
   165    lappend ans $r $a $t1rx($r)
   166  }
   167  maketest 1.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans
   168  maketest 1.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans
   169  
   170  set ans {}
   171  foreach a [reverse [sort $all_a]] {
   172    set r $t1ar($a)
   173    lappend ans $r $a $t1rx($r)
   174  }
   175  maketest 1.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans
   176  maketest 1.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans
   177  
   178  set ans {}
   179  foreach x [sort $all_x] {
   180    set r $t1xr($x)
   181    lappend ans $r $t1ra($r) $x
   182  }
   183  maketest 1.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans
   184  maketest 1.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans
   185  
   186  set ans {}
   187  foreach x [reverse [sort $all_x]] {
   188    set r $t1xr($x)
   189    lappend ans $r $t1ra($r) $x
   190  }
   191  maketest 1.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans
   192  maketest 1.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans
   193  
   194  maketest 2.1 {UPDATE t1 SET rowid=a, a=rowid} {}
   195  
   196  set ans {}
   197  foreach r [sort $all_rowid] {
   198    lappend ans $r $t1ra($r) $t1rx($r)
   199  }
   200  maketest 2.3 {SELECT a, rowid, x FROM t1 ORDER BY +a} $ans
   201  maketest 2.4 {SELECT a, rowid, x FROM t1 ORDER BY a} $ans
   202  
   203  set ans {}
   204  foreach r [reverse [sort $all_rowid]] {
   205    lappend ans $r $t1ra($r) $t1rx($r)
   206  }
   207  maketest 2.5 {SELECT a, rowid, x FROM t1 ORDER BY +a DESC} $ans
   208  maketest 2.6 {SELECT a, rowid, x FROM t1 ORDER BY a DESC} $ans
   209  
   210  set ans {}
   211  foreach a [sort $all_a] {
   212    set r $t1ar($a)
   213    lappend ans $r $a $t1rx($r)
   214  }
   215  maketest 2.7 {SELECT a, rowid, x FROM t1 ORDER BY +rowid} $ans
   216  maketest 2.8 {SELECT a, rowid, x FROM t1 ORDER BY rowid} $ans
   217  
   218  set ans {}
   219  foreach a [reverse [sort $all_a]] {
   220    set r $t1ar($a)
   221    lappend ans $r $a $t1rx($r)
   222  }
   223  maketest 2.9 {SELECT a, rowid, x FROM t1 ORDER BY +rowid DESC} $ans
   224  maketest 2.10 {SELECT a, rowid, x FROM t1 ORDER BY rowid DESC} $ans
   225  
   226  set ans {}
   227  foreach x [sort $all_x] {
   228    set r $t1xr($x)
   229    lappend ans $r $t1ra($r) $x
   230  }
   231  maketest 2.11 {SELECT a, rowid, x FROM t1 ORDER BY +x} $ans
   232  maketest 2.12 {SELECT a, rowid, x FROM t1 ORDER BY x} $ans
   233  
   234  set ans {}
   235  foreach x [reverse [sort $all_x]] {
   236    set r $t1xr($x)
   237    lappend ans $r $t1ra($r) $x
   238  }
   239  maketest 2.13 {SELECT a, rowid, x FROM t1 ORDER BY +x DESC} $ans
   240  maketest 2.14 {SELECT a, rowid, x FROM t1 ORDER BY x DESC} $ans
   241  
   242  maketest 3.1 {UPDATE t1 SET rowid=a, a=rowid} {}
   243  maketest 3.2 {ALTER TABLE t1 ADD COLUMN z; UPDATE t1 SET z=zeroblob(600)} {}
   244  
   245  set ans {}
   246  foreach r [sort $all_rowid] {
   247    lappend ans $r $t1ra($r) $t1rx($r)
   248  }
   249  maketest 3.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans
   250  maketest 3.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans
   251  
   252  set ans {}
   253  foreach r [reverse [sort $all_rowid]] {
   254    lappend ans $r $t1ra($r) $t1rx($r)
   255  }
   256  maketest 3.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans
   257  maketest 3.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans
   258  
   259  set ans {}
   260  foreach a [sort $all_a] {
   261    set r $t1ar($a)
   262    lappend ans $r $a $t1rx($r)
   263  }
   264  maketest 3.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans
   265  maketest 3.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans
   266  
   267  set ans {}
   268  foreach a [reverse [sort $all_a]] {
   269    set r $t1ar($a)
   270    lappend ans $r $a $t1rx($r)
   271  }
   272  maketest 3.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans
   273  maketest 3.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans
   274  
   275  set ans {}
   276  foreach x [sort $all_x] {
   277    set r $t1xr($x)
   278    lappend ans $r $t1ra($r) $x
   279  }
   280  maketest 3.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans
   281  maketest 3.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans
   282  
   283  set ans {}
   284  foreach x [reverse [sort $all_x]] {
   285    set r $t1xr($x)
   286    lappend ans $r $t1ra($r) $x
   287  }
   288  maketest 3.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans
   289  maketest 3.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans
   290  
   291  
   292  maketest 4.1 {UPDATE t1 SET rowid=a, a=rowid, x=z, z=x} {}
   293  
   294  set ans {}
   295  foreach r [sort $all_rowid] {
   296    lappend ans $r $t1ra($r) $t1rx($r)
   297  }
   298  maketest 4.3 {SELECT a, rowid, z FROM t1 ORDER BY +a} $ans
   299  maketest 4.4 {SELECT a, rowid, z FROM t1 ORDER BY a} $ans
   300  
   301  set ans {}
   302  foreach r [reverse [sort $all_rowid]] {
   303    lappend ans $r $t1ra($r) $t1rx($r)
   304  }
   305  maketest 4.5 {SELECT a, rowid, z FROM t1 ORDER BY +a DESC} $ans
   306  maketest 4.6 {SELECT a, rowid, z FROM t1 ORDER BY a DESC} $ans
   307  
   308  set ans {}
   309  foreach a [sort $all_a] {
   310    set r $t1ar($a)
   311    lappend ans $r $a $t1rx($r)
   312  }
   313  maketest 4.7 {SELECT a, rowid, z FROM t1 ORDER BY +rowid} $ans
   314  maketest 4.8 {SELECT a, rowid, z FROM t1 ORDER BY rowid} $ans
   315  
   316  set ans {}
   317  foreach a [reverse [sort $all_a]] {
   318    set r $t1ar($a)
   319    lappend ans $r $a $t1rx($r)
   320  }
   321  maketest 4.9 {SELECT a, rowid, z FROM t1 ORDER BY +rowid DESC} $ans
   322  maketest 4.10 {SELECT a, rowid, z FROM t1 ORDER BY rowid DESC} $ans
   323  
   324  set ans {}
   325  foreach x [sort $all_x] {
   326    set r $t1xr($x)
   327    lappend ans $r $t1ra($r) $x
   328  }
   329  maketest 4.11 {SELECT a, rowid, z FROM t1 ORDER BY +z} $ans
   330  maketest 4.12 {SELECT a, rowid, z FROM t1 ORDER BY z} $ans
   331  
   332  set ans {}
   333  foreach x [reverse [sort $all_x]] {
   334    set r $t1xr($x)
   335    lappend ans $r $t1ra($r) $x
   336  }
   337  maketest 4.13 {SELECT a, rowid, z FROM t1 ORDER BY +z DESC} $ans
   338  maketest 4.14 {SELECT a, rowid, z FROM t1 ORDER BY z DESC} $ans
   339  
   340  puts {finish_test}