rtree2.test 3.9 KB

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