]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add test file mmap1.test.
authordan <dan@noemail.net>
Wed, 20 Mar 2013 10:07:43 +0000 (10:07 +0000)
committerdan <dan@noemail.net>
Wed, 20 Mar 2013 10:07:43 +0000 (10:07 +0000)
FossilOrigin-Name: aee1f53a74e636776cbbc11bdd5516432ad50533

manifest
manifest.uuid
test/mmap1.test [new file with mode: 0644]

index 45c3ee6fc58d3db76578e802c7fd33c94ef98dc0..1a8ba2228de9b125277e1e79cabc8031064f7aca 100644 (file)
--- 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
index 8d198c909c619e6a9bcae00c53d07ffd1e8440cc..68ed5bb6a853a58c5bd14d8225d474d314aaf602 100644 (file)
@@ -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 (file)
index 0000000..343ad23
--- /dev/null
@@ -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
+