xref: /sqlite-3.40.0/test/permutations.test (revision a16edfa2)
11077e3f7Sdanielk1977# 2008 June 21
21077e3f7Sdanielk1977#
31077e3f7Sdanielk1977# The author disclaims copyright to this source code.  In place of
41077e3f7Sdanielk1977# a legal notice, here is a blessing:
51077e3f7Sdanielk1977#
61077e3f7Sdanielk1977#    May you do good and not evil.
71077e3f7Sdanielk1977#    May you find forgiveness for yourself and forgive others.
81077e3f7Sdanielk1977#    May you share freely, never taking more than you give.
91077e3f7Sdanielk1977#
101077e3f7Sdanielk1977#***********************************************************************
111077e3f7Sdanielk1977#
121077e3f7Sdanielk1977
131077e3f7Sdanielk1977set testdir [file dirname $argv0]
141077e3f7Sdanielk1977source $testdir/tester.tcl
1513a3cb82Sdandb close
161077e3f7Sdanielk1977
170626dfc3Sdan#-------------------------------------------------------------------------
180626dfc3Sdan# test_suite NAME OPTIONS
191077e3f7Sdanielk1977#
201077e3f7Sdanielk1977# where available options are:
211077e3f7Sdanielk1977#
22430e74cdSdan#       -description TITLE                  (default "")
231077e3f7Sdanielk1977#       -initialize  SCRIPT                 (default "")
241077e3f7Sdanielk1977#       -shutdown    SCRIPT                 (default "")
251077e3f7Sdanielk1977#       -presql      SQL                    (default "")
260626dfc3Sdan#       -files       LIST-OF-FILES          (default $::ALLTESTS)
272fce9ab3Sdan#       -prefix      NAME                   (default "$::NAME.")
281ce1b4a7Sdan#       -dbconfig    SCRIPT                 (default "")
290626dfc3Sdan#
300626dfc3Sdanproc test_suite {name args} {
31430e74cdSdan
32430e74cdSdan  set default(-shutdown)    ""
33430e74cdSdan  set default(-initialize)  ""
34430e74cdSdan  set default(-presql)      ""
35430e74cdSdan  set default(-description) "no description supplied (fixme)"
360626dfc3Sdan  set default(-files)       ""
372fce9ab3Sdan  set default(-prefix)      "${name}."
381ce1b4a7Sdan  set default(-dbconfig)    ""
39430e74cdSdan
40430e74cdSdan  array set options [array get default]
410626dfc3Sdan  if {[llength $args]%2} {
420626dfc3Sdan    error "uneven number of options/switches passed to test_suite"
43430e74cdSdan  }
440626dfc3Sdan  foreach {k v} $args {
450626dfc3Sdan    set o [array names options ${k}*]
460626dfc3Sdan    if {[llength $o]>1}  { error "ambiguous option: $k" }
470626dfc3Sdan    if {[llength $o]==0} { error "unknown option: $k" }
480626dfc3Sdan    set options([lindex $o 0]) $v
490a846f96Sdrh  }
501077e3f7Sdanielk1977
510626dfc3Sdan  set     ::testspec($name) [array get options]
520626dfc3Sdan  lappend ::testsuitelist $name
53c1def3e0Sdanielk1977}
540626dfc3Sdan
550626dfc3Sdan#-------------------------------------------------------------------------
560626dfc3Sdan# test_set ARGS...
570626dfc3Sdan#
580626dfc3Sdanproc test_set {args} {
590626dfc3Sdan  set isExclude 0
600626dfc3Sdan  foreach a $args {
610626dfc3Sdan    if {[string match -* $a]} {
620626dfc3Sdan      switch -- $a {
630626dfc3Sdan        -include { set isExclude 0 }
640626dfc3Sdan        -exclude { set isExclude 1 }
650626dfc3Sdan        default {
660626dfc3Sdan          error "Unknown switch: $a"
670626dfc3Sdan        }
680626dfc3Sdan      }
690626dfc3Sdan    } elseif {$isExclude == 0} {
700626dfc3Sdan      foreach f $a { set t($f) 1 }
710a846f96Sdrh    } else {
720626dfc3Sdan      foreach f $a { array unset t $f }
73897230ebSdan      foreach f $a { array unset t */$f }
741077e3f7Sdanielk1977    }
751077e3f7Sdanielk1977  }
761077e3f7Sdanielk1977
770626dfc3Sdan  return [array names t]
781077e3f7Sdanielk1977}
791077e3f7Sdanielk1977
800626dfc3Sdan#-------------------------------------------------------------------------
810626dfc3Sdan# Set up the following global list variables containing the names of
820626dfc3Sdan# various test scripts:
830626dfc3Sdan#
840626dfc3Sdan#   $alltests
852fce9ab3Sdan#   $allquicktests
860626dfc3Sdan#
870626dfc3Sdanset alltests [list]
880626dfc3Sdanforeach f [glob $testdir/*.test] { lappend alltests [file tail $f] }
89e82126c9Sdanforeach f [glob -nocomplain            \
90e82126c9Sdan    $testdir/../ext/rtree/*.test       \
91e82126c9Sdan    $testdir/../ext/fts5/test/*.test   \
92cd84474eSdan    $testdir/../ext/expert/*.test      \
934b8035e6Sdan    $testdir/../ext/lsm1/test/*.test   \
94f2f8a3a3Sdan    $testdir/../ext/recover/*.test     \
95e82126c9Sdan] {
96897230ebSdan  lappend alltests $f
97897230ebSdan}
987cf7df7dSdanforeach f [glob -nocomplain $testdir/../ext/session/*.test] {
997cf7df7dSdan  lappend alltests $f
1007cf7df7dSdan}
101897230ebSdan
1020626dfc3Sdanif {$::tcl_platform(platform)!="unix"} {
1030626dfc3Sdan  set alltests [test_set $alltests -exclude crash.test crash2.test]
104c1def3e0Sdanielk1977}
1050626dfc3Sdanset alltests [test_set $alltests -exclude {
1060626dfc3Sdan  all.test        async.test         quick.test  veryquick.test
1070626dfc3Sdan  memleak.test    permutations.test  soak.test   fts3.test
108905da63aSdrh  mallocAll.test  rtree.test         full.test   extraquick.test
1091e8487dbSmistachkin  session.test    rbu.test
1100626dfc3Sdan}]
1110626dfc3Sdan
1120626dfc3Sdanset allquicktests [test_set $alltests -exclude {
1130626dfc3Sdan  async2.test async3.test backup_ioerr.test corrupt.test
1140626dfc3Sdan  corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test
1150626dfc3Sdan  crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test
1160626dfc3Sdan  fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test
117273f3f0dSdan  misc7.test mutex2.test notify2.test onefile.test pagerfault2.test
1180626dfc3Sdan  savepoint4.test savepoint6.test select9.test
1190626dfc3Sdan  speed1.test speed1p.test speed2.test speed3.test speed4.test
1200626dfc3Sdan  speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test
1210626dfc3Sdan  thread003.test thread004.test thread005.test trans2.test vacuum3.test
1220626dfc3Sdan  incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test
123533100d3Sdan  vtab_err.test walslow.test walcrash.test walcrash3.test
1242aba5d96Sdan  walthread.test rtree3.test indexfault.test securedel2.test
125db2f9190Sdrh  sort3.test sort4.test fts4growth.test fts4growth2.test
1268417863fSmistachkin  bigsort.test walprotocol.test mmap4.test fuzzer2.test
127be7721d1Sdan  walcrash2.test e_fkey.test backup.test
128be7721d1Sdan
129be7721d1Sdan  fts4merge.test fts4merge2.test fts4merge4.test fts4check.test
13023d3f5d6Sdan  fts4merge5.test
131be7721d1Sdan  fts3cov.test fts3snippet.test fts3corrupt2.test fts3an.test
132be7721d1Sdan  fts3defer.test fts4langid.test fts3sort.test fts5unicode.test
1338e62d370Sdan  recovercorrupt.test
134be7721d1Sdan
135be7721d1Sdan  rtree4.test
1364df68e0aSdan  sessionbig.test
137cf2ad7aeSdan
138cf2ad7aeSdan  writecrash.test view3.test
139cf2ad7aeSdan  fts5dlidx.test fts5ac.test fts4merge3.test fts5prefix.test
140cf2ad7aeSdan  sessionB.test
1410626dfc3Sdan}]
1426310990dSdanif {[info exists ::env(QUICKTEST_INCLUDE)]} {
1436310990dSdan  set allquicktests [concat $allquicktests $::env(QUICKTEST_INCLUDE)]
1446310990dSdan}
1454081d5daSdrhif {[info exists ::env(QUICKTEST_OMIT)]} {
14696e337dfSdan  # If environment variable QUICKTEST_OMIT is set, it is a comma-separated
14796e337dfSdan  # list of regular expressions to match against test file names in
14896e337dfSdan  # the "allquicktests" set. Any matches are excluded. Only the filename
14996e337dfSdan  # is matched, not any directory component of the path.
15096e337dfSdan  set all [list]
15196e337dfSdan  foreach a $allquicktests {
15296e337dfSdan    set bIn 1
1534081d5daSdrh    foreach x [split $::env(QUICKTEST_OMIT) ,] {
15496e337dfSdan      if {[regexp $x [file tail $a]]} {
15596e337dfSdan        set bIn 0
15696e337dfSdan        break
1574081d5daSdrh      }
1584081d5daSdrh    }
15996e337dfSdan    if {$bIn} {
16096e337dfSdan      lappend all $a
16196e337dfSdan    }
16296e337dfSdan  }
16396e337dfSdan  set allquicktests $all
16496e337dfSdan}
165c1def3e0Sdanielk1977
166edb31cd1Sdrh# If the TEST_FAILURE environment variable is set, it means that we what to
167edb31cd1Sdrh# deliberately provoke test failures in order to test the test infrastructure.
168edb31cd1Sdrh# Only the main.test module is needed for this.
169edb31cd1Sdrh#
170edb31cd1Sdrhif {[info exists ::env(TEST_FAILURE)]} {
171edb31cd1Sdrh  set allquicktests main.test
172edb31cd1Sdrh}
173d63bd759Sdrh
1741077e3f7Sdanielk1977#############################################################################
1751077e3f7Sdanielk1977# Start of tests
1760626dfc3Sdan#
1770626dfc3Sdan
1780626dfc3Sdan#-------------------------------------------------------------------------
1790626dfc3Sdan# Define the generic test suites:
1800626dfc3Sdan#
1810626dfc3Sdan#   veryquick
1820626dfc3Sdan#   quick
1830626dfc3Sdan#   full
1840626dfc3Sdan#
185e91a54e1Sdanlappend ::testsuitelist xxx
1860626dfc3Sdan
1872fce9ab3Sdantest_suite "veryquick" -prefix "" -description {
188905da63aSdrh  "Very" quick test suite. Runs in minutes on a workstation.
1890626dfc3Sdan  This test suite is the same as the "quick" tests, except that some files
1900626dfc3Sdan  that test malloc and IO errors are omitted.
1910626dfc3Sdan} -files [
192e82126c9Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \
193b6e9f7a4Sdan      *fts5corrupt* *fts5big* *fts5aj*
194905da63aSdrh]
195905da63aSdrh
1969776784fSdrhtest_suite "shell" -prefix "" -description {
1979776784fSdrh  Run tests of the command-line shell
1989776784fSdrh} -files [
1999776784fSdrh  test_set [glob $testdir/shell*.test]
2009776784fSdrh]
2019776784fSdrh
202905da63aSdrhtest_suite "extraquick" -prefix "" -description {
203905da63aSdrh  "Extra" quick test suite. Runs in a few minutes on a workstation.
204905da63aSdrh  This test suite is the same as the "veryquick" tests, except that
205905da63aSdrh  slower tests are omitted.
206905da63aSdrh} -files [
207be7721d1Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \
208905da63aSdrh     wal3.test fts4merge* sort2.test mmap1.test walcrash* \
209905da63aSdrh     percentile.test where8m.test walcksum.test savepoint3.test \
210905da63aSdrh     fuzzer1.test fuzzer3.test fts3expr3.test
2110626dfc3Sdan]
2120626dfc3Sdan
2139b4c59faSdrhtest_suite "mmap" -prefix "mm-" -description {
214e895b873Sdan  Similar to veryquick. Except with memory mapping enabled.
2155d8a1372Sdan} -presql {
2169b4c59faSdrh  pragma mmap_size = 268435456;
2175d8a1372Sdan} -files [
21823f8a7cdSdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* -include malloc.test
2190626dfc3Sdan]
2200626dfc3Sdan
22125568441Sdantest_suite "valgrind" -prefix "" -description {
22225568441Sdan  Run the "veryquick" test suite with a couple of multi-process tests (that
22325568441Sdan  fail under valgrind) omitted.
22425568441Sdan} -files [
225be7721d1Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *_err* wal.test \
226f015a3d1Slarrybr              shell2.test shell6.test shell7.test \
227f015a3d1Slarrybr              crash8.test atof1.test selectG.test \
228f2f72a0fSdan              tkt-fc62af4523.test numindex1.test corruptK.test
22925568441Sdan] -initialize {
23025568441Sdan  set ::G(valgrind) 1
23125568441Sdan} -shutdown {
23225568441Sdan  unset -nocomplain ::G(valgrind)
23325568441Sdan}
23425568441Sdan
2355f43812aSdantest_suite "valgrind-nolookaside" -prefix "" -description {
2365f43812aSdan  Run the "veryquick" test suite with a couple of multi-process tests (that
2375f43812aSdan  fail under valgrind) omitted.
2385f43812aSdan} -files [
239be7721d1Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *_err* \
240be7721d1Sdan      wal.test atof1.test
2415f43812aSdan] -initialize {
2425f43812aSdan  set ::G(valgrind) 1
2435f43812aSdan  catch {db close}
2445f43812aSdan  sqlite3_shutdown
2455f43812aSdan  sqlite3_config_lookaside 0 0
2465f43812aSdan  sqlite3_initialize
2475f43812aSdan  autoinstall_test_functions
2485f43812aSdan} -shutdown {
2495f43812aSdan  catch {db close}
2505f43812aSdan  sqlite3_shutdown
2515f43812aSdan  sqlite3_config_lookaside 100 500
2525f43812aSdan  sqlite3_initialize
2535f43812aSdan  autoinstall_test_functions
2545f43812aSdan  unset -nocomplain ::G(valgrind)
2555f43812aSdan}
2565f43812aSdan
2575f43812aSdan
2582fce9ab3Sdantest_suite "quick" -prefix "" -description {
2590626dfc3Sdan  Quick test suite. Runs in around 10 minutes on a workstation.
2600626dfc3Sdan} -files [
2610626dfc3Sdan  test_set $allquicktests
2620626dfc3Sdan]
2630626dfc3Sdan
2642fce9ab3Sdantest_suite "full" -prefix "" -description {
2650626dfc3Sdan  Full test suite. Takes a long time.
2660626dfc3Sdan} -files [
2670626dfc3Sdan  test_set $alltests
2680626dfc3Sdan] -initialize {
2690626dfc3Sdan  unset -nocomplain ::G(isquick)
2700626dfc3Sdan}
2710626dfc3Sdan
272ea5542d1Sdantest_suite "threads" -prefix "" -description {
273ea5542d1Sdan  All multi-threaded tests.
274ea5542d1Sdan} -files {
275ea5542d1Sdan  notify2.test   thread001.test thread002.test thread003.test
276ea5542d1Sdan  thread004.test thread005.test walthread.test
277ea5542d1Sdan}
278ea5542d1Sdan
279a69f7d5aSdantest_suite "fts3" -prefix "" -description {
280ddf80eb8Sdan  All FTS3 tests except fts3rnd.test.
281a69f7d5aSdan} -files {
282119fc11eSdan  fts3aa.test fts3ab.test fts3ac.test fts3ad.test
283119fc11eSdan  fts3ae.test fts3af.test fts3ag.test fts3ah.test
284119fc11eSdan  fts3ai.test fts3aj.test fts3ak.test fts3al.test
285119fc11eSdan  fts3am.test fts3an.test fts3ao.test fts3atoken.test
286119fc11eSdan  fts3auto.test fts3aux1.test fts3aux2.test fts3b.test
287119fc11eSdan  fts3comp1.test fts3conf.test fts3corrupt2.test fts3corrupt.test
28829d77dc4Sdan  fts3corrupt4.test
289119fc11eSdan  fts3cov.test fts3c.test fts3defer2.test fts3defer3.test
290119fc11eSdan  fts3defer.test fts3drop.test fts3d.test fts3e.test
291119fc11eSdan  fts3expr2.test fts3expr3.test fts3expr4.test fts3expr5.test
292119fc11eSdan  fts3expr.test fts3fault2.test fts3fault.test fts3first.test
293119fc11eSdan  fts3join.test fts3malloc.test fts3matchinfo.test fts3near.test
294119fc11eSdan  fts3offsets.test fts3prefix2.test fts3prefix.test fts3query.test
295119fc11eSdan  fts3shared.test fts3snippet.test fts3sort.test fts3tok1.test
296119fc11eSdan  fts3tok_err.test fts3varint.test fts4aa.test fts4check.test
297119fc11eSdan  fts4content.test fts4docid.test fts4growth2.test fts4growth.test
298119fc11eSdan  fts4incr.test fts4langid.test fts4lastrowid.test fts4merge2.test
299119fc11eSdan  fts4merge4.test fts4merge.test fts4noti.test fts4onepass.test
300119fc11eSdan  fts4opt.test fts4unicode.test
301ddf47470Sdan  fts3corrupt3.test
302624edacfSdan  fts3misc.test
303a69f7d5aSdan}
304a69f7d5aSdan
30522d43ec4Sdantest_suite "fts5" -prefix "" -description {
30622d43ec4Sdan  All FTS5 tests.
307e716aca2Sdan} -files [glob -nocomplain $::testdir/../ext/fts5/test/*.test]
30822d43ec4Sdan
30923d53888Sdantest_suite "fts5-light" -prefix "" -description {
31023d53888Sdan  All FTS5 tests.
31123d53888Sdan} -files [
31223d53888Sdan  test_set \
31323d53888Sdan      [glob -nocomplain $::testdir/../ext/fts5/test/*.test] \
31423d53888Sdan      -exclude *corrupt* *fault* *big* *fts5aj*
31523d53888Sdan]
31623d53888Sdan
3179a94722dSdantest_suite "window" -prefix "" -description {
3189a94722dSdan  All window function related tests .
3199a94722dSdan} -files [
3209a94722dSdan  test_set [glob -nocomplain $::testdir/window*.test]
3219a94722dSdan]
3229a94722dSdan
32359541d70Smistachkintest_suite "lsm1" -prefix "" -description {
32459541d70Smistachkin  All LSM1 tests.
32559541d70Smistachkin} -files [glob -nocomplain $::testdir/../ext/lsm1/test/*.test]
32659541d70Smistachkin
327a879342bSdantest_suite "nofaultsim" -prefix "" -description {
328a879342bSdan  "Very" quick test suite. Runs in less than 5 minutes on a workstation.
329a879342bSdan  This test suite is the same as the "quick" tests, except that some files
330a879342bSdan  that test malloc and IO errors are omitted.
331a879342bSdan} -files [
332be7721d1Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *_err*
333a879342bSdan] -initialize {
334a879342bSdan  catch {db close}
335a879342bSdan  sqlite3_shutdown
336a879342bSdan  install_malloc_faultsim 0
337a879342bSdan  sqlite3_initialize
338a879342bSdan  autoinstall_test_functions
339a879342bSdan} -shutdown {
340a879342bSdan  unset -nocomplain ::G(valgrind)
341a879342bSdan}
342ea5542d1Sdan
343fd5874d2Sdrhtest_suite "queryplanner" -prefix "" -description {
344fd5874d2Sdrh  Tests of the query planner and query optimizer
345fd5874d2Sdrh} -files {
346fd5874d2Sdrh  alter2.test alter3.test alter4.test alter.test analyze3.test
347fd5874d2Sdrh  analyze4.test analyze5.test analyze6.test analyze7.test analyze8.test
3484fe425adSdrh  analyze.test attach2.test attach3.test attach4.test
349fd5874d2Sdrh  attach.test autoinc.test autoindex1.test between.test cast.test
350fd5874d2Sdrh  check.test closure01.test coalesce.test collate1.test collate2.test
351fd5874d2Sdrh  collate3.test collate4.test collate5.test collate6.test collate7.test
352fd5874d2Sdrh  collate8.test collate9.test collateA.test colmeta.test colname.test
353fd5874d2Sdrh  conflict.test count.test coveridxscan.test createtab.test cse.test
354fd5874d2Sdrh  date.test dbstatus2.test dbstatus.test default.test delete2.test
355fd5874d2Sdrh  delete3.test delete.test descidx1.test descidx2.test descidx3.test
356fd5874d2Sdrh  distinctagg.test distinct.test e_createtable.test e_delete.test
3574fe425adSdrh  e_droptrigger.test e_dropview.test e_expr.test e_insert.test
358fd5874d2Sdrh  eqp.test e_reindex.test e_resolve.test e_select2.test e_select.test
359fd5874d2Sdrh  e_update.test exists.test expr.test fkey1.test fkey2.test fkey3.test
3604fe425adSdrh  fkey4.test fkey5.test func2.test func3.test func.test
3614fe425adSdrh  in3.test in4.test in5.test index2.test index3.test
3624fe425adSdrh  index4.test index5.test indexedby.test index.test
363fd5874d2Sdrh  insert2.test insert3.test insert4.test insert5.test insert.test
364fd5874d2Sdrh  instr.test in.test intpkey.test join2.test join3.test join4.test
365fd5874d2Sdrh  join5.test join6.test join.test like2.test like.test limit.test
366fd5874d2Sdrh  minmax2.test minmax3.test minmax4.test minmax.test misc1.test misc2.test
367fd5874d2Sdrh  misc3.test misc4.test misc5.test misc6.test misc7.test orderby1.test
368fd5874d2Sdrh  orderby2.test orderby3.test orderby4.test randexpr1.test regexp1.test
369fd5874d2Sdrh  reindex.test rowhash.test rowid.test schema2.test schema3.test
3704fe425adSdrh  schema4.test schema5.test schema.test
371fd5874d2Sdrh  select1.test select2.test select3.test select4.test select5.test
372fd5874d2Sdrh  select6.test select7.test select8.test select9.test selectA.test
373fd5874d2Sdrh  selectB.test selectC.test selectD.test selectE.test sidedelete.test
374fd5874d2Sdrh  sort.test spellfix.test subquery2.test subquery.test subselect.test
375fd5874d2Sdrh  substr.test tkt-02a8e81d44.test tkt1435.test tkt1443.test tkt1444.test
376fd5874d2Sdrh  tkt1449.test tkt1473.test tkt1501.test tkt1512.test tkt1514.test
377fd5874d2Sdrh  tkt1536.test tkt1537.test tkt1567.test tkt1644.test tkt1667.test
378fd5874d2Sdrh  tkt1873.test tkt2141.test tkt2192.test tkt2213.test tkt2251.test
379fd5874d2Sdrh  tkt2285.test tkt2332.test tkt2339.test tkt2391.test tkt2409.test
380fd5874d2Sdrh  tkt2450.test tkt2565.test tkt2640.test tkt2643.test tkt2686.test
381fd5874d2Sdrh  tkt-26ff0c2d1e.test tkt2767.test tkt2817.test tkt2820.test tkt2822.test
382fd5874d2Sdrh  tkt2832.test tkt2854.test tkt2920.test tkt2927.test tkt2942.test
383fd5874d2Sdrh  tkt-2a5629202f.test tkt-2d1a5c67d.test tkt-2ea2425d34.test tkt3080.test
384fd5874d2Sdrh  tkt3093.test tkt3121.test tkt-31338dca7e.test tkt-313723c356.test
385fd5874d2Sdrh  tkt3201.test tkt3292.test tkt3298.test tkt3334.test tkt3346.test
386fd5874d2Sdrh  tkt3357.test tkt3419.test tkt3424.test tkt3442.test tkt3457.test
387fd5874d2Sdrh  tkt3461.test tkt3493.test tkt3508.test tkt3522.test tkt3527.test
388fd5874d2Sdrh  tkt3541.test tkt3554.test tkt3581.test tkt35xx.test tkt3630.test
389fd5874d2Sdrh  tkt3718.test tkt3731.test tkt3757.test tkt3761.test tkt3762.test
390fd5874d2Sdrh  tkt3773.test tkt3791.test tkt3793.test tkt3810.test tkt3824.test
391fd5874d2Sdrh  tkt3832.test tkt3838.test tkt3841.test tkt-385a5b56b9.test tkt3871.test
392fd5874d2Sdrh  tkt3879.test tkt-38cb5df375.test tkt3911.test tkt3918.test tkt3922.test
393fd5874d2Sdrh  tkt3929.test tkt3935.test tkt3992.test tkt3997.test tkt-3998683a16.test
394fd5874d2Sdrh  tkt-3a77c9714e.test tkt-3fe897352e.test tkt4018.test tkt-4a03edc4c8.test
395fd5874d2Sdrh  tkt-4dd95f6943.test tkt-54844eea3f.test tkt-5d863f876e.test
396fd5874d2Sdrh  tkt-5e10420e8d.test tkt-5ee23731f.test tkt-6bfb98dfc0.test
397fd5874d2Sdrh  tkt-752e1646fc.test tkt-78e04e52ea.test tkt-7a31705a7e6.test
398fd5874d2Sdrh  tkt-7bbfb7d442.test tkt-80ba201079.test tkt-80e031a00f.test
399fd5874d2Sdrh  tkt-8454a207b9.test tkt-91e2e8ba6f.test tkt-94c04eaadb.test
400fd5874d2Sdrh  tkt-9d68c883.test tkt-a7b7803e.test tkt-b1d3a2e531.test
401fd5874d2Sdrh  tkt-b351d95f9.test tkt-b72787b1.test tkt-bd484a090c.test
402fd5874d2Sdrh  tkt-bdc6bbbb38.test tkt-c48d99d690.test tkt-cbd054fa6b.test
403fd5874d2Sdrh  tkt-d11f09d36e.test tkt-d635236375.test tkt-d82e3f3721.test
404fd5874d2Sdrh  tkt-f3e5abed55.test tkt-f777251dc7a.test tkt-f7b4edec.test
405fd5874d2Sdrh  tkt-f973c7ac31.test tkt-fa7bf5ec.test tkt-fc62af4523.test
406fd5874d2Sdrh  tkt-fc7bd6358f.test trigger1.test trigger2.test trigger3.test
407fd5874d2Sdrh  trigger4.test trigger5.test trigger6.test trigger7.test trigger8.test
408fd5874d2Sdrh  trigger9.test triggerA.test triggerB.test triggerC.test triggerD.test
409fd5874d2Sdrh  types2.test types3.test types.test unique.test unordered.test
410fd5874d2Sdrh  update.test view.test vtab1.test vtab2.test vtab3.test vtab4.test
411fd5874d2Sdrh  vtab5.test vtab6.test vtab7.test vtab8.test vtab9.test vtab_alter.test
4124fe425adSdrh  vtabA.test vtabB.test vtabC.test vtabD.test vtabE.test
413fd5874d2Sdrh  vtabF.test where2.test where3.test where4.test where5.test where6.test
414fd5874d2Sdrh  where7.test where8m.test where8.test where9.test whereA.test whereB.test
415fd5874d2Sdrh  whereC.test whereD.test whereE.test whereF.test wherelimit.test
416fd5874d2Sdrh  where.test
417fd5874d2Sdrh}
418fd5874d2Sdrh
41930e2f0aeSdantest_suite "vfslog" -prefix "" -description {
42030e2f0aeSdan  "Vfslog" quick test suite. Like "veryquick" except does not omits
42130e2f0aeSdan  a few tests that do not work with a version 1 VFS. And the quota* tests,
42230e2f0aeSdan  which do not work with a VFS that uses the pVfs argument passed to
42330e2f0aeSdan  sqlite3_vfs methods.
42430e2f0aeSdan} -files [
42530e2f0aeSdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* oserror.test \
42630e2f0aeSdan  pager1.test syscall.test sysfault.test tkt3457.test quota* superlock* \
42730e2f0aeSdan  wal* mmap*
42830e2f0aeSdan]
42930e2f0aeSdan
4304da30f88Sdantest_suite "atomic-batch-write" -prefix "" -description {
4314da30f88Sdan  Like veryquick.test, but must be run on a file-system that supports
4324da30f88Sdan  atomic-batch-writes. Tests that depend on the journal file being present
4334da30f88Sdan  are omitted.
4344da30f88Sdan} -files [
4354da30f88Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \
4364da30f88Sdan      *fts5corrupt* *fts5big* *fts5aj*  \
4374da30f88Sdan      crash8.test delete_db.test        \
4384da30f88Sdan      exclusive.test journal3.test      \
4394da30f88Sdan      journal1.test                     \
4404da30f88Sdan      jrnlmode.test jrnlmode2.test      \
4414da30f88Sdan      lock4.test pager1.test            \
4424da30f88Sdan      pager3.test sharedA.test          \
4434da30f88Sdan      symlink.test stmt.test            \
4444da30f88Sdan      sync.test sync2.test              \
4454da30f88Sdan      tempdb.test tkt3457.test          \
4464da30f88Sdan      vacuum5.test wal2.test            \
4474da30f88Sdan      walmode.test zerodamage.test
4484da30f88Sdan] -initialize {
4494da30f88Sdan  if {[atomic_batch_write test.db]==0} {
4504da30f88Sdan    error "File system does NOT support atomic-batch-write"
4514da30f88Sdan  }
4524da30f88Sdan}
4534da30f88Sdan
454e91a54e1Sdanlappend ::testsuitelist xxx
4550626dfc3Sdan#-------------------------------------------------------------------------
4560626dfc3Sdan# Define the coverage related test suites:
4570626dfc3Sdan#
4580626dfc3Sdan#   coverage-wal
4590626dfc3Sdan#
4600626dfc3Sdantest_suite "coverage-wal" -description {
4610626dfc3Sdan  Coverage tests for file wal.c.
4620626dfc3Sdan} -files {
4638d69a581Sdan  wal.test wal2.test wal3.test wal4.test wal5.test
4648d69a581Sdan  wal64k.test wal6.test wal7.test wal8.test wal9.test
4658d69a581Sdan  walbak.test walbig.test walblock.test walcksum.test walcrash2.test
4668d69a581Sdan  walcrash3.test walcrash4.test walcrash.test walfault.test walhook.test
4678d69a581Sdan  walmode.test walnoshm.test waloverwrite.test walpersist.test
4688d69a581Sdan  walprotocol2.test walprotocol.test walro2.test walrofault.test
4698d69a581Sdan  walro.test walshared.test walslow.test walvfs.test
47092107a38Sdan  walfault2.test
4718d69a581Sdan  nockpt.test
472f6febee0Sdan
473f6febee0Sdan  snapshot2.test snapshot3.test snapshot4.test
474f6febee0Sdan  snapshot_fault.test snapshot.test snapshot_up.test
4750626dfc3Sdan}
4760626dfc3Sdan
477e91a54e1Sdantest_suite "coverage-pager" -description {
478e91a54e1Sdan  Coverage tests for file pager.c.
479e91a54e1Sdan} -files {
480f43d7fceSdan  pager1.test    pager2.test  pagerfault.test  pagerfault2.test
481f43d7fceSdan  walfault.test  walbak.test  journal2.test    tkt-9d68c883.test
482e91a54e1Sdan}
4830626dfc3Sdan
484b49d1047Sdantest_suite "coverage-analyze" -description {
485b49d1047Sdan  Coverage tests for file analyze.c.
486b49d1047Sdan} -files {
487b49d1047Sdan  analyze3.test analyze4.test analyze5.test analyze6.test
488cfee884eSdrh  analyze7.test analyze8.test analyze9.test
489cfee884eSdrh  analyze.test mallocA.test
490b49d1047Sdan}
491b49d1047Sdan
4920d51def2Sdantest_suite "coverage-sorter" -description {
4930d51def2Sdan  Coverage tests for file vdbesort.c.
4940d51def2Sdan} -files {
4950d51def2Sdan  sort.test sortfault.test
4960d51def2Sdan}
4970d51def2Sdan
4980626dfc3Sdan
499e91a54e1Sdanlappend ::testsuitelist xxx
5000626dfc3Sdan#-------------------------------------------------------------------------
5010626dfc3Sdan# Define the permutation test suites:
5020626dfc3Sdan#
5031077e3f7Sdanielk1977
504b2a0f75cSdrh# Run some tests using pre-allocated page blocks.
5051077e3f7Sdanielk1977#
5064c5aeeccSdan# mmap1.test is excluded because a good number of its tests depend on
5074c5aeeccSdan# the page-cache being larger than the database. But this permutation
5084c5aeeccSdan# causes the effective limit on the page-cache to be just 24 pages.
5094c5aeeccSdan#
5100626dfc3Sdantest_suite "memsubsys1" -description {
511b2a0f75cSdrh  Tests using pre-allocated page blocks
5120626dfc3Sdan} -files [
5134c5aeeccSdan  test_set $::allquicktests -exclude ioerr5.test malloc5.test mmap1.test
5140626dfc3Sdan] -initialize {
51503bc525aSdan  test_set_config_pagecache 4096 24
5161077e3f7Sdanielk1977  catch {db close}
5171077e3f7Sdanielk1977  sqlite3_shutdown
5181077e3f7Sdanielk1977  sqlite3_initialize
519bb77b753Sdrh  autoinstall_test_functions
5201077e3f7Sdanielk1977} -shutdown {
52103bc525aSdan  test_restore_config_pagecache
5221077e3f7Sdanielk1977  catch {db close}
5231077e3f7Sdanielk1977  sqlite3_shutdown
5241077e3f7Sdanielk1977  sqlite3_initialize
525bb77b753Sdrh  autoinstall_test_functions
5261077e3f7Sdanielk1977}
5271077e3f7Sdanielk1977
528b2a0f75cSdrh# Run some tests using pre-allocated page blocks. This time
5291077e3f7Sdanielk1977# the allocations are too small to use in most cases.
5301077e3f7Sdanielk1977#
53134c61e68Sdanielk1977# Both ioerr5.test and malloc5.test are excluded because they test the
53234c61e68Sdanielk1977# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
53334c61e68Sdanielk1977# This functionality is disabled if a pre-allocated page block is provided.
53434c61e68Sdanielk1977#
5350626dfc3Sdantest_suite "memsubsys2" -description {
536b2a0f75cSdrh  Tests using small pre-allocated page blocks
5370626dfc3Sdan} -files [
5380626dfc3Sdan  test_set $::allquicktests -exclude ioerr5.test malloc5.test
5390626dfc3Sdan] -initialize {
54003bc525aSdan  test_set_config_pagecache 512 5
541d63bd759Sdrh  catch {db close}
5421077e3f7Sdanielk1977  sqlite3_shutdown
5431077e3f7Sdanielk1977  sqlite3_initialize
544bb77b753Sdrh  autoinstall_test_functions
5451077e3f7Sdanielk1977} -shutdown {
54603bc525aSdan  test_restore_config_pagecache
5471077e3f7Sdanielk1977  catch {db close}
5481077e3f7Sdanielk1977  sqlite3_shutdown
5491077e3f7Sdanielk1977  sqlite3_initialize
550bb77b753Sdrh  autoinstall_test_functions
5511077e3f7Sdanielk1977}
5521077e3f7Sdanielk1977
553e2a7c6e0Sdrh# Run all tests with the lookaside allocator disabled.
554e2a7c6e0Sdrh#
5550626dfc3Sdantest_suite "nolookaside" -description {
556e2a7c6e0Sdrh  OOM tests with lookaside disabled
557e2a7c6e0Sdrh} -initialize {
558e2a7c6e0Sdrh  catch {db close}
559e2a7c6e0Sdrh  sqlite3_shutdown
560e2a7c6e0Sdrh  sqlite3_config_lookaside 0 0
561e2a7c6e0Sdrh  sqlite3_initialize
562bb77b753Sdrh  autoinstall_test_functions
563e2a7c6e0Sdrh} -shutdown {
564e2a7c6e0Sdrh  catch {db close}
565e2a7c6e0Sdrh  sqlite3_shutdown
566e2a7c6e0Sdrh  sqlite3_config_lookaside 100 500
567e2a7c6e0Sdrh  sqlite3_initialize
568bb77b753Sdrh  autoinstall_test_functions
5690626dfc3Sdan} -files $::allquicktests
570e2a7c6e0Sdrh
5711077e3f7Sdanielk1977# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
5721077e3f7Sdanielk1977#
5730626dfc3Sdantest_suite "singlethread" -description {
5741077e3f7Sdanielk1977  Tests run in SQLITE_CONFIG_SINGLETHREAD mode
5751077e3f7Sdanielk1977} -initialize {
5761077e3f7Sdanielk1977  catch {db close}
5771077e3f7Sdanielk1977  sqlite3_shutdown
57804df18dcSdrh  catch {sqlite3_config singlethread}
579bb77b753Sdrh  sqlite3_initialize
580bb77b753Sdrh  autoinstall_test_functions
5810626dfc3Sdan} -files {
5821077e3f7Sdanielk1977  delete.test   delete2.test  insert.test  rollback.test  select1.test
5831077e3f7Sdanielk1977  select2.test  trans.test    update.test  vacuum.test    types.test
5841077e3f7Sdanielk1977  types2.test   types3.test
5851077e3f7Sdanielk1977} -shutdown {
5861077e3f7Sdanielk1977  catch {db close}
5871077e3f7Sdanielk1977  sqlite3_shutdown
58804df18dcSdrh  catch {sqlite3_config serialized}
589bb77b753Sdrh  sqlite3_initialize
590bb77b753Sdrh  autoinstall_test_functions
5911077e3f7Sdanielk1977}
5921077e3f7Sdanielk1977
5930626dfc3Sdantest_suite "nomutex" -description {
594039963adSdrh  Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
5959a6284c1Sdanielk1977} -initialize {
596b1e1a0fdSdan  set ::G(perm:sqlite3_args) [list -fullmutex 0 -nomutex 1]
5970626dfc3Sdan} -files {
5989a6284c1Sdanielk1977  delete.test   delete2.test  insert.test  rollback.test  select1.test
5999a6284c1Sdanielk1977  select2.test  trans.test    update.test  vacuum.test    types.test
6009a6284c1Sdanielk1977  types2.test   types3.test
6019a6284c1Sdanielk1977}
6029a6284c1Sdanielk1977
6031077e3f7Sdanielk1977# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
6041077e3f7Sdanielk1977#
6050626dfc3Sdantest_suite "multithread" -description {
6061077e3f7Sdanielk1977  Tests run in SQLITE_CONFIG_MULTITHREAD mode
6071077e3f7Sdanielk1977} -initialize {
6081077e3f7Sdanielk1977  catch {db close}
6091077e3f7Sdanielk1977  sqlite3_shutdown
61004df18dcSdrh  catch {sqlite3_config multithread}
611bb77b753Sdrh  sqlite3_initialize
612bb77b753Sdrh  autoinstall_test_functions
6130626dfc3Sdan} -files {
6141077e3f7Sdanielk1977  delete.test   delete2.test  insert.test  rollback.test  select1.test
6151077e3f7Sdanielk1977  select2.test  trans.test    update.test  vacuum.test    types.test
616dfea4533Sdan  types2.test   types3.test   sort4.test
6171077e3f7Sdanielk1977} -shutdown {
6181077e3f7Sdanielk1977  catch {db close}
6191077e3f7Sdanielk1977  sqlite3_shutdown
62004df18dcSdrh  catch {sqlite3_config serialized}
621bb77b753Sdrh  sqlite3_initialize
622bb77b753Sdrh  autoinstall_test_functions
6231077e3f7Sdanielk1977}
6241077e3f7Sdanielk1977
625039963adSdrh# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
626039963adSdrh#
6270626dfc3Sdantest_suite "fullmutex" -description {
628039963adSdrh  Tests run in SQLITE_OPEN_FULLMUTEX mode
629039963adSdrh} -initialize {
630b1e1a0fdSdan  set ::G(perm:sqlite3_args) [list -nomutex 0 -fullmutex 1]
6310626dfc3Sdan} -files {
632039963adSdrh  delete.test   delete2.test  insert.test  rollback.test  select1.test
633039963adSdrh  select2.test  trans.test    update.test  vacuum.test    types.test
634039963adSdrh  types2.test   types3.test
635039963adSdrh}
636039963adSdrh
6371077e3f7Sdanielk1977# Run some tests using the "onefile" demo.
6381077e3f7Sdanielk1977#
6390626dfc3Sdantest_suite "onefile" -description {
6401077e3f7Sdanielk1977  Run some tests using the "test_onefile.c" demo
6411077e3f7Sdanielk1977} -initialize {
642b1e1a0fdSdan  set ::G(perm:sqlite3_args) [list -vfs fs]
6430626dfc3Sdan} -files {
6441077e3f7Sdanielk1977  conflict.test  insert.test   insert2.test  insert3.test
6451077e3f7Sdanielk1977  rollback.test  select1.test  select2.test  select3.test
6461077e3f7Sdanielk1977}
6471077e3f7Sdanielk1977
6481077e3f7Sdanielk1977# Run some tests using UTF-16 databases.
6491077e3f7Sdanielk1977#
6500626dfc3Sdantest_suite "utf16" -description {
6511077e3f7Sdanielk1977  Run tests using UTF-16 databases
6522dd6d809Sdanielk1977} -presql {
6531077e3f7Sdanielk1977  pragma encoding = 'UTF-16'
6540626dfc3Sdan} -files {
6551077e3f7Sdanielk1977    alter.test alter3.test
65622d73b1cSdan    analyze.test analyze3.test analyze4.test analyze5.test analyze6.test
657cfee884eSdrh    analyze7.test analyze8.test analyze9.test
6581077e3f7Sdanielk1977    auth.test bind.test blob.test capi2.test capi3.test collate1.test
6591077e3f7Sdanielk1977    collate2.test collate3.test collate4.test collate5.test collate6.test
6601077e3f7Sdanielk1977    conflict.test date.test delete.test expr.test fkey1.test func.test
6611077e3f7Sdanielk1977    hook.test index.test insert2.test insert.test interrupt.test in.test
6621077e3f7Sdanielk1977    intpkey.test ioerr.test join2.test join.test lastinsert.test
6631077e3f7Sdanielk1977    laststmtchanges.test limit.test lock2.test lock.test main.test
6641077e3f7Sdanielk1977    memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
6651077e3f7Sdanielk1977    null.test progress.test quote.test rowid.test select1.test select2.test
6661077e3f7Sdanielk1977    select3.test select4.test select5.test select6.test sort.test
6671077e3f7Sdanielk1977    subselect.test tableapi.test table.test temptable.test
6681077e3f7Sdanielk1977    trace.test trigger1.test trigger2.test trigger3.test
6691077e3f7Sdanielk1977    trigger4.test types2.test types.test unique.test update.test
6701077e3f7Sdanielk1977    vacuum.test view.test where.test
671b78b83a2Sdan    bestindex1.test
6721077e3f7Sdanielk1977}
6731077e3f7Sdanielk1977
6741077e3f7Sdanielk1977# Run some tests in exclusive locking mode.
6751077e3f7Sdanielk1977#
6760626dfc3Sdantest_suite "exclusive" -description {
6771077e3f7Sdanielk1977  Run tests in exclusive locking mode.
6781077e3f7Sdanielk1977} -presql {
6791077e3f7Sdanielk1977  pragma locking_mode = 'exclusive'
6800626dfc3Sdan} -files {
6811077e3f7Sdanielk1977  rollback.test select1.test select2.test
6821077e3f7Sdanielk1977  malloc.test ioerr.test
6831077e3f7Sdanielk1977}
6841077e3f7Sdanielk1977
68504335886Sdrh# Run some tests in exclusive locking mode with truncated journals.
68604335886Sdrh#
6870626dfc3Sdantest_suite "exclusive-truncate" -description {
68804335886Sdrh  Run tests in exclusive locking mode and truncate journal mode.
68904335886Sdrh} -presql {
69004335886Sdrh  pragma locking_mode = 'exclusive';
69104335886Sdrh  pragma journal_mode = TRUNCATE;
6920626dfc3Sdan} -files {
69304335886Sdrh  delete.test delete2.test insert.test rollback.test select1.test
69404335886Sdrh  select2.test update.test malloc.test ioerr.test
69504335886Sdrh}
69604335886Sdrh
6971077e3f7Sdanielk1977# Run some tests in persistent journal mode.
6981077e3f7Sdanielk1977#
6990626dfc3Sdantest_suite "persistent_journal" -description {
7001077e3f7Sdanielk1977  Run tests in persistent-journal mode.
7011077e3f7Sdanielk1977} -presql {
7021077e3f7Sdanielk1977  pragma journal_mode = persist
7030626dfc3Sdan} -files {
7041077e3f7Sdanielk1977  delete.test delete2.test insert.test rollback.test select1.test
7051077e3f7Sdanielk1977  select2.test trans.test update.test vacuum.test
7061077e3f7Sdanielk1977}
7071077e3f7Sdanielk1977
70804335886Sdrh# Run some tests in truncating journal mode.
70904335886Sdrh#
7100626dfc3Sdantest_suite "truncate_journal" -description {
71104335886Sdrh  Run tests in persistent-journal mode.
71204335886Sdrh} -presql {
71304335886Sdrh  pragma journal_mode = truncate
7140626dfc3Sdan} -files {
71504335886Sdrh  delete.test delete2.test insert.test rollback.test select1.test
71604335886Sdrh  select2.test trans.test update.test vacuum.test
71704335886Sdrh  malloc.test ioerr.test
71804335886Sdrh}
71904335886Sdrh
7201077e3f7Sdanielk1977# Run some error tests in persistent journal mode.
7211077e3f7Sdanielk1977#
7220626dfc3Sdantest_suite "persistent_journal_error" -description {
7231077e3f7Sdanielk1977  Run malloc.test and ioerr.test in persistent-journal mode.
7241077e3f7Sdanielk1977} -presql {
7251077e3f7Sdanielk1977  pragma journal_mode = persist
7260626dfc3Sdan} -files {
7271077e3f7Sdanielk1977  malloc.test ioerr.test
7281077e3f7Sdanielk1977}
7291077e3f7Sdanielk1977
7301077e3f7Sdanielk1977# Run some tests in no journal mode.
7311077e3f7Sdanielk1977#
7320626dfc3Sdantest_suite "no_journal" -description {
7331077e3f7Sdanielk1977  Run tests in no-journal mode.
7341077e3f7Sdanielk1977} -presql {
7351077e3f7Sdanielk1977  pragma journal_mode = persist
7360626dfc3Sdan} -files {
7371077e3f7Sdanielk1977  delete.test delete2.test insert.test rollback.test select1.test
7381077e3f7Sdanielk1977  select2.test trans.test update.test vacuum.test
7391077e3f7Sdanielk1977}
7401077e3f7Sdanielk1977
7411077e3f7Sdanielk1977# Run some error tests in no journal mode.
7421077e3f7Sdanielk1977#
7430626dfc3Sdantest_suite "no_journal_error" -description {
7441077e3f7Sdanielk1977  Run malloc.test and ioerr.test in no-journal mode.
7451077e3f7Sdanielk1977} -presql {
7461077e3f7Sdanielk1977  pragma journal_mode = persist
7470626dfc3Sdan} -files {
7481077e3f7Sdanielk1977  malloc.test ioerr.test
7491077e3f7Sdanielk1977}
7501077e3f7Sdanielk1977
7511077e3f7Sdanielk1977# Run some crash-tests in autovacuum mode.
7521077e3f7Sdanielk1977#
7530626dfc3Sdantest_suite "autovacuum_crash" -description {
7541077e3f7Sdanielk1977  Run crash.test in autovacuum mode.
7551077e3f7Sdanielk1977} -presql {
7561077e3f7Sdanielk1977  pragma auto_vacuum = 1
7570626dfc3Sdan} -files crash.test
7581077e3f7Sdanielk1977
7591077e3f7Sdanielk1977# Run some ioerr-tests in autovacuum mode.
7601077e3f7Sdanielk1977#
7610626dfc3Sdantest_suite "autovacuum_ioerr" -description {
7621077e3f7Sdanielk1977  Run ioerr.test in autovacuum mode.
7631077e3f7Sdanielk1977} -presql {
7641077e3f7Sdanielk1977  pragma auto_vacuum = 1
7650626dfc3Sdan} -files ioerr.test
7661077e3f7Sdanielk1977
767b3175389Sdanielk1977# Run tests with an in-memory journal.
768b3175389Sdanielk1977#
7690626dfc3Sdantest_suite "inmemory_journal" -description {
770b3175389Sdanielk1977  Run tests with an in-memory journal file.
771b3175389Sdanielk1977} -presql {
772b3175389Sdanielk1977  pragma journal_mode = 'memory'
7730626dfc3Sdan} -files [test_set $::allquicktests -exclude {
774b3175389Sdanielk1977  # Exclude all tests that simulate IO errors.
77585979cd8Sdrh  autovacuum_ioerr2.test cffault.test incrvacuum_ioerr.test ioerr.test
776b3175389Sdanielk1977  ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
7772206a2b6Sdrh  vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
778c3b84830Sshaneh  e_fts3.test fts3cov.test fts3malloc.test fts3rnd.test
77914cee38bSdan  fts3snippet.test mmapfault.test sessionfault.test sessionfault2.test
780b3175389Sdanielk1977
781b3175389Sdanielk1977  # Exclude test scripts that use tcl IO to access journal files or count
782b3175389Sdanielk1977  # the number of fsync() calls.
783b3175389Sdanielk1977  pager.test exclusive.test jrnlmode.test sync.test misc1.test
784cb257902Sdanielk1977  journal1.test conflict.test crash8.test tkt3457.test io.test
7854fc4ba77Sdan  journal3.test 8_3_names.test shmlock.test
78601d38564Sdan
787cb354603Sdan  pager1.test async4.test corrupt.test filefmt.test pager2.test
788cb354603Sdan  corrupt5.test corruptA.test pageropt.test
789cb354603Sdan
79001d38564Sdan  # Exclude stmt.test, which expects sub-journals to use temporary files.
79185979cd8Sdrh  stmt.test symlink.test
7920b944135Sdrh
7936b4e9a84Sdan  zerodamage.test
7946b4e9a84Sdan
7950b944135Sdrh  # WAL mode is different.
796b5a2d55eSdrh  wal* tkt-2d1a5c67d.test backcompat.test e_wal* rowallock.test
797ee7de914Sdan
798ee7de914Sdan  # This test does not work as the "PRAGMA journal_mode = memory"
799ee7de914Sdan  # statement switches the database out of wal mode at inopportune
800ee7de914Sdan  # times.
801ee7de914Sdan  snapshot_fault.test
802b3906816Sdan
803b3906816Sdan  # This test assumes a journal file is created on disk.
804b3906816Sdan  delete_db.test
80518b20c98Sdan
80618b20c98Sdan  # This test depends on a successful recovery from the pager error
80718b20c98Sdan  # state. Which is not possible with an in-memory journal
80818b20c98Sdan  fts5fault1.test
809*a16edfa2Sdan
810*a16edfa2Sdan  recoverpgsz.test
8110626dfc3Sdan}]
812b3175389Sdanielk1977
8136b39c2e4Sdanielk1977ifcapable mem3 {
8140626dfc3Sdan  test_suite "memsys3" -description {
81557e5ea93Sdanielk1977    Run tests using the allocator in mem3.c.
816eace527bSdan  } -files [test_set $::allquicktests -exclude {
8178a42cbd3Sdrh    autovacuum.test           delete3.test              manydb.test
8188a42cbd3Sdrh    bigrow.test               incrblob2.test            memdb.test
8198a42cbd3Sdrh    bitvec.test               index2.test               memsubsys1.test
8208a42cbd3Sdrh    capi3c.test               ioerr.test                memsubsys2.test
8218a42cbd3Sdrh    capi3.test                join3.test                pagesize.test
8228b322827Sdanielk1977    collate5.test             limit.test                backup_ioerr.test
8238b322827Sdanielk1977    backup_malloc.test
8240626dfc3Sdan  }] -initialize {
82557e5ea93Sdanielk1977    catch {db close}
82657e5ea93Sdanielk1977    sqlite3_reset_auto_extension
82757e5ea93Sdanielk1977    sqlite3_shutdown
8287830cd41Sdrh    sqlite3_config_heap 25000000 0
829e2a7c6e0Sdrh    sqlite3_config_lookaside 0 0
8308b322827Sdanielk1977    ifcapable mem5 {
8318b322827Sdanielk1977      # If both memsys3 and memsys5 are enabled in the build, the call to
8328b322827Sdanielk1977      # [sqlite3_config_heap] will initialize the system to use memsys5.
8338b322827Sdanielk1977      # The following overrides this preference and installs the memsys3
8348b322827Sdanielk1977      # allocator.
8358b322827Sdanielk1977      sqlite3_install_memsys3
8368b322827Sdanielk1977    }
83732155ef0Sdanielk1977    install_malloc_faultsim 1
83857e5ea93Sdanielk1977    sqlite3_initialize
83957e5ea93Sdanielk1977    autoinstall_test_functions
84057e5ea93Sdanielk1977  } -shutdown {
84157e5ea93Sdanielk1977    catch {db close}
84257e5ea93Sdanielk1977    sqlite3_shutdown
8430d84e5b2Sdanielk1977    sqlite3_config_heap 0 0
844e2a7c6e0Sdrh    sqlite3_config_lookaside 100 500
84532155ef0Sdanielk1977    install_malloc_faultsim 1
84657e5ea93Sdanielk1977    sqlite3_initialize
847bb77b753Sdrh    autoinstall_test_functions
84857e5ea93Sdanielk1977  }
8496b39c2e4Sdanielk1977}
85057e5ea93Sdanielk1977
8516b39c2e4Sdanielk1977ifcapable mem5 {
8520626dfc3Sdan  test_suite "memsys5" -description {
8536b39c2e4Sdanielk1977    Run tests using the allocator in mem5.c.
854eace527bSdan  } -files [test_set $::allquicktests -exclude {
8558a42cbd3Sdrh    autovacuum.test           delete3.test              manydb.test
8568a42cbd3Sdrh    bigrow.test               incrblob2.test            memdb.test
8578a42cbd3Sdrh    bitvec.test               index2.test               memsubsys1.test
8588a42cbd3Sdrh    capi3c.test               ioerr.test                memsubsys2.test
8598a42cbd3Sdrh    capi3.test                join3.test                pagesize.test
860ac8d7b35Sdanielk1977    collate5.test             limit.test                zeroblob.test
8610626dfc3Sdan  }] -initialize {
862c66c0e14Sdanielk1977    catch {db close}
863c66c0e14Sdanielk1977    sqlite3_shutdown
8647830cd41Sdrh    sqlite3_config_heap 25000000 64
865e2a7c6e0Sdrh    sqlite3_config_lookaside 0 0
8665099be5eSdanielk1977    install_malloc_faultsim 1
8675099be5eSdanielk1977    sqlite3_initialize
8685099be5eSdanielk1977    autoinstall_test_functions
8695099be5eSdanielk1977  } -shutdown {
8705099be5eSdanielk1977    catch {db close}
8715099be5eSdanielk1977    sqlite3_shutdown
8720d84e5b2Sdanielk1977    sqlite3_config_heap 0 0
873e2a7c6e0Sdrh    sqlite3_config_lookaside 100 500
8745099be5eSdanielk1977    install_malloc_faultsim 1
8755099be5eSdanielk1977    sqlite3_initialize
876bb77b753Sdrh    autoinstall_test_functions
8775099be5eSdanielk1977  }
8785099be5eSdanielk1977
8790626dfc3Sdan  test_suite "memsys5-2" -description {
8805099be5eSdanielk1977    Run tests using the allocator in mem5.c in a different configuration.
8810626dfc3Sdan  } -files {
8828a42cbd3Sdrh    select1.test
8835099be5eSdanielk1977  } -initialize {
8845099be5eSdanielk1977    catch {db close}
8855099be5eSdanielk1977    sqlite3_shutdown
886b0c6a888Sdan    sqlite3_config_memstatus 0
8877830cd41Sdrh    sqlite3_config_heap 40000000 16
888e2a7c6e0Sdrh    sqlite3_config_lookaside 0 0
889c66c0e14Sdanielk1977    install_malloc_faultsim 1
890c66c0e14Sdanielk1977    sqlite3_initialize
891c66c0e14Sdanielk1977    autoinstall_test_functions
892c66c0e14Sdanielk1977  } -shutdown {
893c66c0e14Sdanielk1977    catch {db close}
894c66c0e14Sdanielk1977    sqlite3_shutdown
8950d84e5b2Sdanielk1977    sqlite3_config_heap 0 0
896e2a7c6e0Sdrh    sqlite3_config_lookaside 100 500
897c66c0e14Sdanielk1977    install_malloc_faultsim 1
898c66c0e14Sdanielk1977    sqlite3_initialize
899bb77b753Sdrh    autoinstall_test_functions
900c66c0e14Sdanielk1977  }
9016b39c2e4Sdanielk1977}
902c66c0e14Sdanielk1977
9038a42cbd3Sdrhifcapable threadsafe {
9040626dfc3Sdan  test_suite "no_mutex_try" -description {
9058a42cbd3Sdrh     The sqlite3_mutex_try() interface always fails
9060626dfc3Sdan  } -files [
9070626dfc3Sdan    test_set $::allquicktests -exclude mutex1.test mutex2.test
9080626dfc3Sdan  ] -initialize {
9098a42cbd3Sdrh    catch {db close}
9108a42cbd3Sdrh    sqlite3_shutdown
9118a42cbd3Sdrh    install_mutex_counters 1
9128a42cbd3Sdrh    set ::disable_mutex_try 1
913bb77b753Sdrh    sqlite3_initialize
914bb77b753Sdrh    autoinstall_test_functions
9158a42cbd3Sdrh  } -shutdown {
9168a42cbd3Sdrh    catch {db close}
9178a42cbd3Sdrh    sqlite3_shutdown
9188a42cbd3Sdrh    install_mutex_counters 0
919bb77b753Sdrh    sqlite3_initialize
920bb77b753Sdrh    autoinstall_test_functions
9218a42cbd3Sdrh  }
9228a42cbd3Sdrh}
9238a42cbd3Sdrh
924b13dee99Sdanielk1977# run_tests "crash_safe_append" -description {
925b13dee99Sdanielk1977#   Run crash.test with persistent journals on a SAFE_APPEND file-system.
926b13dee99Sdanielk1977# } -initialize {
927b13dee99Sdanielk1977#   rename crashsql sa_crashsql
928b13dee99Sdanielk1977#   proc crashsql {args} {
929b13dee99Sdanielk1977#     set options [lrange $args 0 [expr {[llength $args]-2}]]
930b13dee99Sdanielk1977#     lappend options -char safe_append
931b13dee99Sdanielk1977#     set sql [lindex $args end]
932b13dee99Sdanielk1977#     lappend options "
933b13dee99Sdanielk1977#       PRAGMA journal_mode=persistent;
934b13dee99Sdanielk1977#       $sql
935b13dee99Sdanielk1977#     "
936b13dee99Sdanielk1977#     set fd [open test.db-journal w]
937b13dee99Sdanielk1977#     puts $fd [string repeat 1234567890 100000]
938b13dee99Sdanielk1977#     close $fd
939b13dee99Sdanielk1977#     eval sa_crashsql $options
940b13dee99Sdanielk1977#   }
941b13dee99Sdanielk1977# } -shutdown {
942b13dee99Sdanielk1977#   rename crashsql {}
943b13dee99Sdanielk1977#   rename sa_crashsql crashsql
9440626dfc3Sdan# } -files crash.test
945b13dee99Sdanielk1977
9460626dfc3Sdantest_suite "safe_append" -description {
947755339ecSdanielk1977  Run some tests on a SAFE_APPEND file-system.
948755339ecSdanielk1977} -initialize {
949b1e1a0fdSdan  set ::G(perm:sqlite3_args) [list -vfs devsym]
950755339ecSdanielk1977  sqlite3_simulate_device -char safe_append
9510626dfc3Sdan} -files [
9520626dfc3Sdan  test_set $::allquicktests shared_err.test -exclude async3.test
9530626dfc3Sdan]
954755339ecSdanielk1977
955b232c232Sdrh# The set of tests to run on the alternative-pcache
956b232c232Sdrhset perm-alt-pcache-testset {
957b232c232Sdrh  async.test
958b232c232Sdrh  attach.test
959b232c232Sdrh  delete.test delete2.test
960b232c232Sdrh  index.test
961b232c232Sdrh  insert.test insert2.test
962b232c232Sdrh  join.test join2.test
963b232c232Sdrh  rollback.test
964b232c232Sdrh  select1.test select2.test
965b232c232Sdrh  trans.test
966b232c232Sdrh  update.test
967b232c232Sdrh}
968b232c232Sdrh
9692acd4c63Sdanforeach discard_rate {0 10 50 90 100} {
9702acd4c63Sdan  test_suite "pcache${discard_rate}" -description "
9712acd4c63Sdan    Alternative pcache implementation with ${discard_rate}% random discard
9722acd4c63Sdan  " -initialize "
973b232c232Sdrh    catch {db close}
974b232c232Sdrh    sqlite3_shutdown
9752acd4c63Sdan    sqlite3_config_alt_pcache 1 $discard_rate 1
976b232c232Sdrh    sqlite3_initialize
977b232c232Sdrh    autoinstall_test_functions
9782acd4c63Sdan  " -shutdown {
979b232c232Sdrh    catch {db close}
980b232c232Sdrh    sqlite3_shutdown
981b232c232Sdrh    sqlite3_config_alt_pcache 0 0 0
982b232c232Sdrh    sqlite3_config_lookaside 100 500
983b232c232Sdrh    install_malloc_faultsim 1
984b232c232Sdrh    sqlite3_initialize
985bb77b753Sdrh    autoinstall_test_functions
9860626dfc3Sdan  } -files ${perm-alt-pcache-testset}
9872acd4c63Sdan}
988b13dee99Sdanielk1977
9890626dfc3Sdantest_suite "journaltest" -description {
990f3107512Sdanielk1977  Check that pages are synced before being written (test_journal.c).
991f3107512Sdanielk1977} -initialize {
992f3107512Sdanielk1977  catch {db close}
993f3107512Sdanielk1977  register_jt_vfs -default ""
994f3107512Sdanielk1977} -shutdown {
995f3107512Sdanielk1977  unregister_jt_vfs
9960626dfc3Sdan} -files [test_set $::allquicktests -exclude {
9970626dfc3Sdan  wal* incrvacuum.test ioerr.test corrupt4.test io.test crash8.test
99805accd22Sdan  async4.test bigfile.test backcompat.test e_wal* fstat.test mmap2.test
99905accd22Sdan  pager1.test syscall.test tkt3457.test *malloc* mmap* multiplex* nolock*
100005accd22Sdan  pager2.test *fault* rowal* snapshot* superlock* symlink.test
1001e88c0cdeSdan  delete_db.test shmlock.test chunksize.test
100255f36787Sdan  busy2.test avfs.test external_reader.test
1003fb4a626dSdrh}]
1004f3107512Sdanielk1977
10050a7a9155Sdanif {[info commands register_demovfs] != ""} {
10060626dfc3Sdan  test_suite "demovfs" -description {
1007430e74cdSdan    Check that the demovfs (code in test_demovfs.c) more or less works.
10080a7a9155Sdan  } -initialize {
10090a7a9155Sdan    register_demovfs
10100a7a9155Sdan  } -shutdown {
10110a7a9155Sdan    unregister_demovfs
10120626dfc3Sdan  } -files {
10130a7a9155Sdan    insert.test   insert2.test  insert3.test rollback.test
10140a7a9155Sdan    select1.test  select2.test  select3.test
10150a7a9155Sdan  }
10160a7a9155Sdan}
10170a7a9155Sdan
10180626dfc3Sdantest_suite "wal" -description {
101971cb518fSdan  Run tests with journal_mode=WAL
102031f98fc8Sdan} -initialize {
1021430e74cdSdan  set ::G(savepoint6_iterations) 100
102231f98fc8Sdan} -shutdown {
1023430e74cdSdan  unset -nocomplain ::G(savepoint6_iterations)
10240626dfc3Sdan} -files {
1025e106de63Sdan  savepoint.test     savepoint2.test     savepoint6.test
1026e106de63Sdan  trans.test         avtrans.test
102760f9da75Sdan
102860f9da75Sdan  fts3aa.test  fts3ab.test  fts3ac.test  fts3ad.test
102960f9da75Sdan  fts3ae.test  fts3af.test  fts3ag.test  fts3ah.test
103060f9da75Sdan  fts3ai.test  fts3aj.test  fts3ak.test  fts3al.test
103160f9da75Sdan  fts3am.test  fts3an.test  fts3ao.test  fts3b.test
103260f9da75Sdan  fts3c.test   fts3d.test   fts3e.test   fts3query.test
103371cb518fSdan}
1034897230ebSdan
1035897230ebSdantest_suite "rtree" -description {
1036897230ebSdan  All R-tree related tests. Provides coverage of source file rtree.c.
1037897230ebSdan} -files [glob -nocomplain $::testdir/../ext/rtree/*.test]
1038897230ebSdan
10397cf7df7dSdantest_suite "session" -description {
10407cf7df7dSdan  All session module related tests.
10417cf7df7dSdan} -files [glob -nocomplain $::testdir/../ext/session/*.test]
10427cf7df7dSdan
104335e2858eSdantest_suite "session_eec" -description {
104435e2858eSdan  All session module related tests with sqlite3_extended_result_codes() set.
104535e2858eSdan} -files [
104635e2858eSdan  glob -nocomplain $::testdir/../ext/session/*.test
104735e2858eSdan] -dbconfig {
104835e2858eSdan  sqlite3_extended_result_codes $::dbhandle 1
104935e2858eSdan}
105035e2858eSdan
1051f1a08ad8Sdrhtest_suite "session_strm" -description {
1052ef7a6304Sdan  All session module related tests using the streaming APIs.
1053ef7a6304Sdan} -files [
1054ef7a6304Sdan  glob -nocomplain $::testdir/../ext/session/*.test
1055ef7a6304Sdan] -dbconfig {
1056ef7a6304Sdan  set ::sqlite3session_streams 1
1057ef7a6304Sdan}
1058ef7a6304Sdan
1059cfb8f8d6Sdrhtest_suite "rbu" -description {
1060cfb8f8d6Sdrh  RBU tests.
106193fdbfa6Sdan} -files [
1062cfb8f8d6Sdrh  test_set [glob -nocomplain $::testdir/../ext/rbu/*.test] -exclude rbu.test
106393fdbfa6Sdan]
106493fdbfa6Sdan
10651ce1b4a7Sdantest_suite "no_optimization" -description {
10661ce1b4a7Sdan  Run test scripts with optimizations disabled using the
10671ce1b4a7Sdan  sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS) interface.
1068108e6b2cSdan} -files [
1069108e6b2cSdan  test_set \
1070108e6b2cSdan    [glob -nocomplain $::testdir/window*.test]                       \
1071108e6b2cSdan    where.test where2.test where3.test where4.test where5.test       \
1072108e6b2cSdan    where6.test where7.test where8.test where9.test                  \
1073108e6b2cSdan    whereA.test whereB.test wherelimit.test                          \
1074108e6b2cSdan    select1.test select2.test select3.test select4.test select5.test \
1075eefef9aeSdan    select7.test select8.test selectA.test selectC.test              \
1076eefef9aeSdan    -exclude windowpushd.test
1077108e6b2cSdan] -dbconfig {
10781ce1b4a7Sdan  optimization_control $::dbhandle all 0
10791ce1b4a7Sdan}
10801ce1b4a7Sdan
1081c431fd55Sdantest_suite "prepare" -description {
1082c431fd55Sdan  Run tests with the db connection using sqlite3_prepare() instead of _v2().
1083c431fd55Sdan} -dbconfig {
10848544d43eSdrh  $::dbhandle version -use-legacy-prepare 1
1085c431fd55Sdan  #$::dbhandle cache size 0
1086c431fd55Sdan} -files [
1087a50b3091Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* \
1088a50b3091Sdan      stmtvtab1.test index9.test
1089c431fd55Sdan]
1090c431fd55Sdan
10912e3a5a81Sdantest_suite "sorterref" -prefix "" -description {
10922e3a5a81Sdan  Run the "veryquick" test suite with SQLITE_CONFIG_SORTERREF_SIZE set
10932e3a5a81Sdan  to 0 so that sorter-references are used whenever possible.
10942e3a5a81Sdan} -files [
10952e3a5a81Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \
10962e3a5a81Sdan      *fts5corrupt* *fts5big* *fts5aj*
10972e3a5a81Sdan] -initialize {
10982e3a5a81Sdan  catch {db close}
10992e3a5a81Sdan  sqlite3_shutdown
11002e3a5a81Sdan  sqlite3_config_sorterref 0
11012e3a5a81Sdan  sqlite3_initialize
11022e3a5a81Sdan  autoinstall_test_functions
11032e3a5a81Sdan} -shutdown {
11042e3a5a81Sdan  catch {db close}
11052e3a5a81Sdan  sqlite3_shutdown
11062e3a5a81Sdan  sqlite3_config_sorterref -1
11072e3a5a81Sdan  sqlite3_initialize
11082e3a5a81Sdan  autoinstall_test_functions
11092e3a5a81Sdan}
11102e3a5a81Sdan
111100bd55e1Sdantest_suite "maindbname" -prefix "" -description {
111200bd55e1Sdan  Run the "veryquick" test suite with SQLITE_DBCONFIG_MAINDBNAME used to
111300bd55e1Sdan  set the name of database 0 to "icecube".
111400bd55e1Sdan} -files [
111500bd55e1Sdan  test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \
111600bd55e1Sdan      *fts5corrupt* *fts5big* *fts5aj*
111700bd55e1Sdan] -dbconfig {
111800bd55e1Sdan  dbconfig_maindbname_icecube $::dbhandle
111900bd55e1Sdan}
112000bd55e1Sdan
11211077e3f7Sdanielk1977# End of tests
11221077e3f7Sdanielk1977#############################################################################
11231077e3f7Sdanielk1977
11240626dfc3Sdan# run_tests NAME OPTIONS
11250626dfc3Sdan#
11260626dfc3Sdan# where available options are:
11270626dfc3Sdan#
11282fce9ab3Sdan#       -description TITLE
11292fce9ab3Sdan#       -initialize  SCRIPT
11302fce9ab3Sdan#       -shutdown    SCRIPT
11312fce9ab3Sdan#       -files       LIST-OF-FILES
11322fce9ab3Sdan#       -prefix      NAME
1133b1e1a0fdSdan#       -dbconfig    SCRIPT
11340626dfc3Sdan#
11350626dfc3Sdanproc run_tests {name args} {
1136b1e1a0fdSdan  set options(-initialize) ""
1137b1e1a0fdSdan  set options(-shutdown) ""
1138b1e1a0fdSdan  set options(-prefix) ""
1139b1e1a0fdSdan  set options(-dbconfig) ""
11407d0fa14cSdan  set options(-presql) ""
1141b1e1a0fdSdan
11420626dfc3Sdan  array set options $args
11431077e3f7Sdanielk1977
1144d506de02Sdan  set ::G(perm:name)         $name
1145d506de02Sdan  set ::G(perm:prefix)       $options(-prefix)
11460626dfc3Sdan  set ::G(isquick)           1
11471ce1b4a7Sdan  set ::G(perm:dbconfig)     $options(-dbconfig)
11487d0fa14cSdan  set ::G(perm:presql)       $options(-presql)
11490626dfc3Sdan
1150867bc4deSdan  set filelist [lsort $options(-files)]
1151867bc4deSdan  if {[info exists ::env(TCLTEST_PART)]} {
1152867bc4deSdan    regexp {^([0-9]*)/([0-9]*)$} $::env(TCLTEST_PART) -> A B
1153867bc4deSdan    set nFile [expr {([llength $filelist]+$B-1)/$B}]
1154867bc4deSdan    set filelist [lrange $filelist [expr ($A-1)*$nFile] [expr $A*$nFile-1]]
1155867bc4deSdan  }
1156867bc4deSdan
1157867bc4deSdan  foreach file $filelist {
1158897230ebSdan    if {[file tail $file] == $file} { set file [file join $::testdir $file] }
1159632f0ed2Sdan
1160632f0ed2Sdan    if {[info exists ::env(SQLITE_TEST_PATTERN_LIST)]} {
1161632f0ed2Sdan      set ok 0
1162632f0ed2Sdan      foreach p $::env(SQLITE_TEST_PATTERN_LIST) {
1163632f0ed2Sdan        set p [string map {% *} $p]
1164632f0ed2Sdan        if {[string match $p [file tail $file]]} {set ok 1 ; break}
1165632f0ed2Sdan      }
1166632f0ed2Sdan      if {!$ok} continue
1167632f0ed2Sdan    }
1168632f0ed2Sdan
1169632f0ed2Sdan    uplevel $options(-initialize)
1170897230ebSdan    slave_test_file $file
11710626dfc3Sdan    uplevel $options(-shutdown)
1172b1e1a0fdSdan    unset -nocomplain ::G(perm:sqlite3_args)
117305accd22Sdan  }
11740626dfc3Sdan
11750626dfc3Sdan  unset ::G(perm:name)
1176d506de02Sdan  unset ::G(perm:prefix)
11771ce1b4a7Sdan  unset ::G(perm:dbconfig)
11787d0fa14cSdan  unset ::G(perm:presql)
11790626dfc3Sdan}
11800626dfc3Sdan
11810626dfc3Sdanproc run_test_suite {name} {
11820626dfc3Sdan  if {[info exists ::testspec($name)]==0} {
11830626dfc3Sdan    error "No such test suite: $name"
11840626dfc3Sdan  }
11850626dfc3Sdan  uplevel run_tests $name $::testspec($name)
11860626dfc3Sdan}
11870626dfc3Sdan
11880626dfc3Sdanproc help {} {
1189e91a54e1Sdan  puts "Usage: $::argv0 TESTSUITE ?TESTFILE?"
1190e91a54e1Sdan  puts ""
1191e91a54e1Sdan  puts "Available test-suites are:"
1192b1e1a0fdSdan
1193b1e1a0fdSdan  set iPos 0
11940626dfc3Sdan  foreach k $::testsuitelist {
1195b1e1a0fdSdan    if {[info exists ::testspec($k)]} {
1196b1e1a0fdSdan      switch $iPos {
1197b1e1a0fdSdan        0 {
1198e91a54e1Sdan          puts ""
1199b1e1a0fdSdan          puts -nonewline "  [format %-30s $k]"
1200b1e1a0fdSdan        }
1201b1e1a0fdSdan
1202b1e1a0fdSdan        1 {
1203b1e1a0fdSdan          puts -nonewline [format %-30s $k]
1204b1e1a0fdSdan        }
1205b1e1a0fdSdan
1206b1e1a0fdSdan        2 {
1207b1e1a0fdSdan          puts -nonewline $k
12080626dfc3Sdan        }
1209e91a54e1Sdan      }
1210b1e1a0fdSdan
1211b1e1a0fdSdan      set iPos [expr (($iPos+1) % 3)]
1212b1e1a0fdSdan    }
1213b1e1a0fdSdan  }
1214b1e1a0fdSdan  puts ""
12150626dfc3Sdan  exit -1
12160626dfc3Sdan}
12170626dfc3Sdan
1218a5809363Sdrhif {[file tail $argv0] == "permutations.test"} {
12190626dfc3Sdan  proc main {argv} {
12200626dfc3Sdan    if {[llength $argv]==0} {
12210626dfc3Sdan      help
12220626dfc3Sdan    } else {
1223b1e1a0fdSdan
1224b1e1a0fdSdan      # See if the first argument is a named test-suite.
1225b1e1a0fdSdan      #
1226a5809363Sdrh      set suite [file tail [lindex $argv 0]]
1227b1e1a0fdSdan      if {[info exists ::testspec($suite)]} {
1228b1e1a0fdSdan        set S $::testspec($suite)
1229b1e1a0fdSdan        set i 1
1230b1e1a0fdSdan      } else {
1231a24df58fSdan        set suite default
1232b1e1a0fdSdan        set S [list]
1233b1e1a0fdSdan        set i 0
1234b1e1a0fdSdan      }
1235b1e1a0fdSdan
12360626dfc3Sdan      set extra ""
1237b1e1a0fdSdan      if {$i < [llength $argv] && [string range [lindex $argv $i] 0 0]!="-" } {
1238b1e1a0fdSdan        set files [list]
1239b1e1a0fdSdan        for {} {$i < [llength $argv]} {incr i} {
1240b1e1a0fdSdan          set pattern [string map {% *} [lindex $argv $i]]
1241b1e1a0fdSdan          if {[string range $pattern 0 0]=="-"} break
1242b1e1a0fdSdan          foreach f $::alltests {
1243b1e1a0fdSdan            set tail [file tail $f]
1244b1e1a0fdSdan            if {[lsearch $files $f]<0 && [string match $pattern $tail]} {
1245b1e1a0fdSdan              lappend files $f
1246b1e1a0fdSdan            }
1247b1e1a0fdSdan          }
1248b1e1a0fdSdan        }
1249b1e1a0fdSdan        set extra [list -files $files]
1250b1e1a0fdSdan      }
1251b1e1a0fdSdan
1252a24df58fSdan      eval [list run_tests $suite] $S $extra
12530626dfc3Sdan    }
12540626dfc3Sdan  }
12550626dfc3Sdan  main $argv
12566caccc16Sdrh  set argv {}
12571077e3f7Sdanielk1977  finish_test
12580626dfc3Sdan}
1259