xref: /sqlite-3.40.0/test/index5.test (revision 7b96f2fa)
1428c218cSdan# 2012 August 6
2428c218cSdan#
3428c218cSdan# The author disclaims copyright to this source code.  In place of
4428c218cSdan# a legal notice, here is a blessing:
5428c218cSdan#
6428c218cSdan#    May you do good and not evil.
7428c218cSdan#    May you find forgiveness for yourself and forgive others.
8428c218cSdan#    May you share freely, never taking more than you give.
9428c218cSdan#
10428c218cSdan#***********************************************************************
11428c218cSdan#
12428c218cSdan
13428c218cSdan
14428c218cSdanset testdir [file dirname $argv0]
15428c218cSdansource $testdir/tester.tcl
16428c218cSdanset ::testprefix index5
17428c218cSdan
18428c218cSdando_test 1.1 {
195bd8af7cSdan  if {[permutation]=="memsubsys1"} {
205bd8af7cSdan    execsql { PRAGMA auto_vacuum = 0; }
215bd8af7cSdan  }
22428c218cSdan  execsql {
23428c218cSdan    PRAGMA page_size = 1024;
24428c218cSdan    CREATE TABLE t1(x);
25428c218cSdan    BEGIN;
26428c218cSdan  }
27428c218cSdan  for {set i 0} {$i < 100000} {incr i} {
28428c218cSdan    execsql { INSERT INTO t1 VALUES(randstr(100,100)) }
29428c218cSdan  }
30428c218cSdan  execsql COMMIT
31428c218cSdan  execsql {
32428c218cSdan    CREATE INDEX i1 ON t1(x);
33428c218cSdan    DROP INDEX I1;
34428c218cSdan    PRAGMA main.page_size;
35428c218cSdan  }
36428c218cSdan} {1024}
37428c218cSdan
38428c218cSdandb close
39428c218cSdantestvfs tvfs
40428c218cSdantvfs filter xWrite
41428c218cSdantvfs script write_cb
42132d9383Sdanproc write_cb {xCall file handle iOfst args} {
43428c218cSdan  if {[file tail $file]=="test.db"} {
445bd8af7cSdan    lappend ::write_list [expr $iOfst/1024 + 1]
45428c218cSdan  }
46428c218cSdan}
47428c218cSdan
48428c218cSdando_test 1.2 {
49428c218cSdan  sqlite3 db test.db -vfs tvfs
50428c218cSdan  set ::write_list [list]
51428c218cSdan  execsql { CREATE INDEX i1 ON t1(x) }
52428c218cSdan} {}
53428c218cSdan
54428c218cSdando_test 1.3 {
55428c218cSdan  set nForward 0
56428c218cSdan  set nBackward 0
57428c218cSdan  set nNoncont 0
58428c218cSdan  set iPrev [lindex $::write_list 0]
59428c218cSdan  for {set i 1} {$i < [llength $::write_list]} {incr i} {
60428c218cSdan    set iNext [lindex $::write_list $i]
61428c218cSdan    if {$iNext==($iPrev+1)} {
62428c218cSdan      incr nForward
63428c218cSdan    } elseif {$iNext==($iPrev-1)} {
64428c218cSdan      incr nBackward
65428c218cSdan    } else {
66428c218cSdan      incr nNoncont
67428c218cSdan    }
68428c218cSdan    set iPrev $iNext
69428c218cSdan  }
70*7b96f2faSmistachkin  if {0} {
71c6a67173Sdrh    puts -nonewline \
72c6a67173Sdrh        " (forward=$nForward, back=$nBackward, noncontiguous=$nNoncont)"
73*7b96f2faSmistachkin  }
74428c218cSdan
757015698bSdrh  expr {$nForward > 2*($nBackward + $nNoncont)}
76428c218cSdan} {1}
77428c218cSdandb close
78428c218cSdantvfs delete
79428c218cSdan
80428c218cSdanfinish_test
81