From: dan Date: Wed, 20 Mar 2013 10:07:43 +0000 (+0000) Subject: Add test file mmap1.test. X-Git-Tag: version-3.7.17~114^2~67 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eecc3983741f501203faf8404eca56332418696e;p=thirdparty%2Fsqlite.git Add test file mmap1.test. FossilOrigin-Name: aee1f53a74e636776cbbc11bdd5516432ad50533 --- diff --git a/manifest b/manifest index 45c3ee6fc5..1a8ba2228d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\ssqlite3_io_methods.xMremap()\smethod\sto\sthe\sVFS\sinterface.\sAlso\s"PRAGMA\smmap_size". -D 2013-03-19T19:28:06.473 +C Add\stest\sfile\smmap1.test. +D 2013-03-20T10:07:43.411 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 9a804abbd3cae82d196e4d33aba13239e32522a5 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -630,6 +630,7 @@ F test/misc5.test 528468b26d03303b1f047146e5eefc941b9069f5 F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91 F test/misc7.test dd82ec9250b89178b96cd28b2aca70639d21e5b3 F test/misuse.test ba4fb5d1a6101d1c171ea38b3c613d0661c83054 +F test/mmap1.test 46ff4038b6d300bb9b39d3f89ea1aef3dff9b88f F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256 F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101 @@ -1038,7 +1039,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P f8ca5622d99bedca957caa9ad311d798f63b3ce9 -R 1add721bf7e9669d3b4d4c28d41bb13b +P 6183f1bd86ceed76d22d9762f3d7eb33262c62d1 +R 1501a2a578b96ab1d025c2aefaaa8f35 U dan -Z 3a3766130d03f0bab6c4936a9c26c7a5 +Z a7aa76ce5b116a8f55025f0891a0dfbb diff --git a/manifest.uuid b/manifest.uuid index 8d198c909c..68ed5bb6a8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6183f1bd86ceed76d22d9762f3d7eb33262c62d1 \ No newline at end of file +aee1f53a74e636776cbbc11bdd5516432ad50533 \ No newline at end of file diff --git a/test/mmap1.test b/test/mmap1.test new file mode 100644 index 0000000000..343ad230b1 --- /dev/null +++ b/test/mmap1.test @@ -0,0 +1,84 @@ +# 2013 March 20 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/lock_common.tcl +set testprefix mmap1 + +proc nRead {db} { + set bt [btree_from_db $db] + db_enter $db + array set stats [btree_pager_stats $bt] + db_leave $db + return $stats(read) +} + +foreach {t mmap_size nRead} { + 1 { PRAGMA mmap_size = -65536 } 4 + 2 { PRAGMA mmap_size = -50 } 156 + 3 { PRAGMA mmap_size = 0 } 344 +} { + do_multiclient_test tn { + sql1 $mmap_size + + code2 { + set ::rcnt 0 + proc rblob {n} { + set ::rcnt [expr (($::rcnt << 3) + $::rcnt + 456) & 0xFFFFFFFF] + set str [format %.8x [expr $::rcnt ^ 0xbdf20da3]] + string range [string repeat $str [expr $n/4]] 1 $n + } + db2 func rblob rblob + } + + sql2 { + PRAGMA auto_vacuum = 1; + CREATE TABLE t1(a, b, UNIQUE(a, b)); + INSERT INTO t1 VALUES(rblob(500), rblob(500)); + INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1; -- 2 + INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1; -- 4 + INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1; -- 8 + INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1; -- 16 + INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1; -- 32 + } + do_test $t.$tn.1 { + sql1 "SELECT count(*) FROM t1; PRAGMA integrity_check ; PRAGMA page_count" + } {32 ok 77} + + # Have connection 2 shrink the file. Check connection 1 can still read it. + sql2 { DELETE FROM t1 WHERE rowid%2; } + do_test $t.$tn.2 { + sql1 "SELECT count(*) FROM t1; PRAGMA integrity_check ; PRAGMA page_count" + } {16 ok 42} + + # Have connection 2 grow the file. Check connection 1 can still read it. + sql2 { INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1 } + do_test $t.$tn.3 { + sql1 "SELECT count(*) FROM t1; PRAGMA integrity_check ; PRAGMA page_count" + } {32 ok 79} + + # Have connection 2 grow the file again. Check connection 1 is still ok. + sql2 { INSERT INTO t1 SELECT rblob(500), rblob(500) FROM t1 } + do_test $t.$tn.4 { + sql1 "SELECT count(*) FROM t1; PRAGMA integrity_check ; PRAGMA page_count" + } {64 ok 149} + + # Check that the number of pages read by connection 1 indicates that the + # "PRAGMA mmap_size" command worked. + do_test $t.$tn.5 { nRead db } $nRead + } +} + + +finish_test +