modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/rtree/rtree2.test (about)

     1  # 2008 Feb 19
     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  #
    12  # The focus of this file is testing the r-tree extension.
    13  #
    14  
    15  if {![info exists testdir]} {
    16    set testdir [file join [file dirname [info script]] .. .. test]
    17  } 
    18  source [file join [file dirname [info script]] rtree_util.tcl]
    19  source $testdir/tester.tcl
    20  
    21  ifcapable !rtree {
    22    finish_test
    23    return
    24  }
    25  
    26  set ::NROW   1000
    27  set ::NDEL     10
    28  set ::NSELECT 100
    29  
    30  if {[info exists G(isquick)] && $G(isquick)} {
    31    set ::NROW 100
    32    set ::NSELECT 10
    33  }
    34  
    35  foreach module {rtree_i32 rtree} {
    36    for {set nDim 1} {$nDim <= 5} {incr nDim} {
    37    
    38      do_test rtree2-$module.$nDim.1 {
    39        set cols [list]
    40        foreach c [list c0 c1 c2 c3 c4 c5 c6 c7 c8 c9] {
    41          lappend cols "$c REAL"
    42        }
    43        set cols [join [lrange $cols 0 [expr {$nDim*2-1}]] ", "]
    44        execsql " 
    45          CREATE VIRTUAL TABLE t1 USING ${module}(ii, $cols);
    46          CREATE TABLE t2 (ii, $cols);
    47        "
    48      } {}
    49    
    50      do_test rtree2-$module.$nDim.2 {
    51        db transaction {
    52          for {set ii 0} {$ii < $::NROW} {incr ii} {
    53            #puts "Row $ii"
    54            set values [list]
    55            for {set jj 0} {$jj<$nDim*2} {incr jj} {
    56              lappend values [expr int(rand()*1000)]
    57            }
    58            set values [join $values ,]
    59            #puts [rtree_treedump db t1]
    60            #puts "INSERT INTO t2 VALUES($ii, $values)"
    61            set rc [catch {db eval "INSERT INTO t1 VALUES($ii, $values)"}]
    62            if {$rc} {
    63              incr ii -1
    64            } else {
    65              db eval "INSERT INTO t2 VALUES($ii, $values)"
    66            }
    67            #if {[rtree_check db t1]} {
    68              #puts [rtree_treedump db t1]
    69              #exit
    70            #}
    71          }
    72        }
    73    
    74        set t1 [execsql {SELECT * FROM t1 ORDER BY ii}]
    75        set t2 [execsql {SELECT * FROM t2 ORDER BY ii}]
    76        set rc [expr {$t1 eq $t2}]
    77        if {$rc != 1} {
    78          puts $t1
    79          puts $t2
    80        }
    81        set rc
    82      } {1}
    83    
    84      do_test rtree2-$module.$nDim.3 {
    85        rtree_check db t1
    86      } 0
    87    
    88      set OPS [list < > <= >= =]
    89      for {set ii 0} {$ii < $::NSELECT} {incr ii} {
    90        do_test rtree2-$module.$nDim.4.$ii.1 {
    91          set where [list]
    92          foreach look_three_dots! {. . .} {
    93            set colidx [expr int(rand()*($nDim*2+1))-1]
    94            if {$colidx<0} {
    95              set col ii
    96            } else {
    97              set col "c$colidx"
    98            }
    99            set op  [lindex $OPS [expr int(rand()*[llength $OPS])]]
   100            set val [expr int(rand()*1000)]
   101            lappend where "$col $op $val"
   102          }
   103          set where [join $where " AND "]
   104    
   105          set t1 [execsql "SELECT * FROM t1 WHERE $where ORDER BY ii"]
   106          set t2 [execsql "SELECT * FROM t2 WHERE $where ORDER BY ii"]
   107          set rc [expr {$t1 eq $t2}]
   108          if {$rc != 1} {
   109            #puts $where
   110            puts $t1
   111            puts $t2
   112            #puts [rtree_treedump db t1]
   113            #breakpoint
   114            #set t1 [execsql "SELECT * FROM t1 WHERE $where ORDER BY ii"]
   115            #exit
   116          }
   117          set rc
   118        } {1}
   119      }
   120    
   121      for {set ii 0} {$ii < $::NROW} {incr ii $::NDEL} {
   122        #puts [rtree_treedump db t1]
   123        do_test rtree2-$module.$nDim.5.$ii.1 {
   124          execsql "DELETE FROM t2 WHERE ii <= $::ii"
   125          execsql "DELETE FROM t1 WHERE ii <= $::ii"
   126    
   127          set t1 [execsql {SELECT * FROM t1 ORDER BY ii}]
   128          set t2 [execsql {SELECT * FROM t2 ORDER BY ii}]
   129          set rc [expr {$t1 eq $t2}]
   130          if {$rc != 1} {
   131            puts $t1
   132            puts $t2
   133          }
   134          set rc
   135        } {1}
   136        do_test rtree2-$module.$nDim.5.$ii.2 {
   137          rtree_check db t1
   138        } {0}
   139      }
   140    
   141      do_test rtree2-$module.$nDim.6 {
   142        execsql {
   143          DROP TABLE t1;
   144          DROP TABLE t2;
   145        }
   146      } {}
   147    }
   148  }
   149  
   150  finish_test