OLD | NEW |
| (Empty) |
1 # 2008 August 01 | |
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 # Tests for the lookaside memory allocator. | |
13 # | |
14 # $Id: lookaside.test,v 1.10 2009/04/09 01:23:49 drh Exp $ | |
15 | |
16 set testdir [file dirname $argv0] | |
17 source $testdir/tester.tcl | |
18 | |
19 ifcapable !lookaside { | |
20 finish_test | |
21 return | |
22 } | |
23 | |
24 # The tests in this file configure the lookaside allocator after a | |
25 # connection is opened. This will not work if there is any "presql" | |
26 # configured (SQL run within the [sqlite3] wrapper in tester.tcl). | |
27 if {[info exists ::G(perm:presql)]} { | |
28 finish_test | |
29 return | |
30 } | |
31 | |
32 catch {db close} | |
33 sqlite3_shutdown | |
34 sqlite3_config_pagecache 0 0 | |
35 sqlite3_config_scratch 0 0 | |
36 sqlite3_initialize | |
37 autoinstall_test_functions | |
38 sqlite3 db test.db | |
39 | |
40 # Make sure sqlite3_db_config() and sqlite3_db_status are working. | |
41 # | |
42 do_test lookaside-1.1 { | |
43 catch {sqlite3_config_error db} | |
44 } {0} | |
45 | |
46 do_test lookaside-1.2 { | |
47 sqlite3_db_config_lookaside db 1 18 18 | |
48 } {0} | |
49 do_test lookaside-1.3.1 { | |
50 sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 0 | |
51 } {0 0 0} | |
52 do_test lookaside-1.3.2 { | |
53 sqlite3_db_status db DBSTATUS_LOOKASIDE_HIT 0 | |
54 } {0 0 0} | |
55 do_test lookaside-1.3.3 { | |
56 sqlite3_db_status db DBSTATUS_LOOKASIDE_MISS_SIZE 0 | |
57 } {0 0 0} | |
58 do_test lookaside-1.3.4 { | |
59 sqlite3_db_status db DBSTATUS_LOOKASIDE_MISS_FULL 0 | |
60 } {0 0 0} | |
61 | |
62 do_test lookaside-1.4 { | |
63 db eval {CREATE TABLE t1(w,x,y,z);} | |
64 foreach {x y z} [sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 0] break | |
65 set p [lindex [sqlite3_db_status db DBSTATUS_LOOKASIDE_HIT 0] 2] | |
66 set q [lindex [sqlite3_db_status db DBSTATUS_LOOKASIDE_MISS_SIZE 0] 2] | |
67 set r [lindex [sqlite3_db_status db DBSTATUS_LOOKASIDE_MISS_FULL 0] 2] | |
68 expr {$x==0 && $y<$z && $z==18 && $p>0 && $q>0 && $r>0} | |
69 } {0} | |
70 do_test lookaside-1.5 { | |
71 foreach {x y z} [sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 1] break | |
72 expr {$x==0 && $y<$z && $z==18} | |
73 } {0} | |
74 do_test lookaside-1.6 { | |
75 foreach {x y z} [sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 0] break | |
76 expr {$x==0 && $y==$z && $y<18} | |
77 } {1} | |
78 do_test lookaside-1.7 { | |
79 db cache flush | |
80 foreach {x y z} [sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 0] break | |
81 expr {$x==0 && $y==0 && $z<18} | |
82 } {1} | |
83 do_test lookaside-1.8 { | |
84 db cache flush | |
85 foreach {x y z} [sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 1] break | |
86 expr {$x==0 && $y==0 && $z<18} | |
87 } {1} | |
88 do_test lookaside-1.9 { | |
89 db cache flush | |
90 sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 0 | |
91 } {0 0 0} | |
92 | |
93 do_test lookaside-2.1 { | |
94 sqlite3_db_config_lookaside db 0 100 1000 | |
95 } {0} | |
96 do_test lookaside-2.2 { | |
97 db eval {CREATE TABLE t2(x);} | |
98 foreach {x y z} [sqlite3_db_status db DBSTATUS_LOOKASIDE_USED 0] break | |
99 expr {$x==0 && $y<$z && $z>10 && $z<100} | |
100 } {1} | |
101 do_test lookaside-2.3 { | |
102 sqlite3_db_config_lookaside db 0 50 50 | |
103 } {5} ;# SQLITE_BUSY | |
104 do_test lookaside-2.4 { | |
105 db cache flush | |
106 sqlite3_db_config_lookaside db 0 50 50 | |
107 } {0} ;# SQLITE_OK | |
108 do_test lookaside-2.5 { | |
109 sqlite3_db_config_lookaside db 0 -1 50 | |
110 } {0} ;# SQLITE_OK | |
111 do_test lookaside-2.6 { | |
112 sqlite3_db_config_lookaside db 0 50 -1 | |
113 } {0} ;# SQLITE_OK | |
114 | |
115 # sqlite3_db_status() with an invalid verb returns an error. | |
116 # | |
117 do_test lookaside-3.1 { | |
118 sqlite3_db_status db 99999 0 | |
119 } {1 0 0} | |
120 | |
121 # Test that an invalid verb on sqlite3_config() is detected and | |
122 # reported as an error. | |
123 # | |
124 do_test lookaside-4.1 { | |
125 db close | |
126 sqlite3_shutdown | |
127 catch sqlite3_config_error | |
128 } {0} | |
129 sqlite3_initialize | |
130 autoinstall_test_functions | |
131 | |
132 finish_test | |
OLD | NEW |