index5.test 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # 2012 August 6
  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. set testdir [file dirname $argv0]
  13. source $testdir/tester.tcl
  14. set ::testprefix index5
  15. do_test 1.1 {
  16. execsql {
  17. PRAGMA page_size = 1024;
  18. CREATE TABLE t1(x);
  19. BEGIN;
  20. }
  21. for {set i 0} {$i < 100000} {incr i} {
  22. execsql { INSERT INTO t1 VALUES(randstr(100,100)) }
  23. }
  24. execsql COMMIT
  25. execsql {
  26. CREATE INDEX i1 ON t1(x);
  27. DROP INDEX I1;
  28. PRAGMA main.page_size;
  29. }
  30. } {1024}
  31. db close
  32. testvfs tvfs
  33. tvfs filter xWrite
  34. tvfs script write_cb
  35. proc write_cb {xCall file handle iOfst args} {
  36. if {[file tail $file]=="test.db"} {
  37. lappend ::write_list [expr $iOfst/1024]
  38. }
  39. }
  40. do_test 1.2 {
  41. sqlite3 db test.db -vfs tvfs
  42. set ::write_list [list]
  43. execsql { CREATE INDEX i1 ON t1(x) }
  44. } {}
  45. do_test 1.3 {
  46. set nForward 0
  47. set nBackward 0
  48. set nNoncont 0
  49. set iPrev [lindex $::write_list 0]
  50. for {set i 1} {$i < [llength $::write_list]} {incr i} {
  51. set iNext [lindex $::write_list $i]
  52. if {$iNext==($iPrev+1)} {
  53. incr nForward
  54. } elseif {$iNext==($iPrev-1)} {
  55. incr nBackward
  56. } else {
  57. incr nNoncont
  58. }
  59. set iPrev $iNext
  60. }
  61. puts -nonewline \
  62. " (forward=$nForward, back=$nBackward, noncontiguous=$nNoncont)"
  63. expr {$nForward > 2*($nBackward + $nNoncont)}
  64. } {1}
  65. db close
  66. tvfs delete
  67. finish_test