| OLD | NEW | 
 | (Empty) | 
|    1 # 2008 June 18 |  | 
|    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 # This file contains tests of the memory allocation subsystem. |  | 
|   13 # |  | 
|   14 # $Id: memsubsys2.test,v 1.2 2008/08/12 15:21:12 drh Exp $ |  | 
|   15  |  | 
|   16 set testdir [file dirname $argv0] |  | 
|   17 source $testdir/tester.tcl |  | 
|   18 sqlite3_reset_auto_extension |  | 
|   19  |  | 
|   20 # This procedure constructs a new database in test.db.  It fills |  | 
|   21 # this database with many small records (enough to force multiple |  | 
|   22 # rebalance operations in the btree-layer and to require a large |  | 
|   23 # page cache), verifies correct results, then returns. |  | 
|   24 # |  | 
|   25 proc build_test_db {testname pragmas} { |  | 
|   26   catch {db close} |  | 
|   27   file delete -force test.db test.db-journal |  | 
|   28   sqlite3 db test.db |  | 
|   29   db eval $pragmas |  | 
|   30   db eval { |  | 
|   31     CREATE TABLE t1(x, y); |  | 
|   32     CREATE TABLE t2(a, b); |  | 
|   33     CREATE INDEX i1 ON t1(x,y); |  | 
|   34     INSERT INTO t1 VALUES(1, 100); |  | 
|   35     INSERT INTO t1 VALUES(2, 200); |  | 
|   36   } |  | 
|   37   for {set i 2} {$i<5000} {incr i $i} { |  | 
|   38     db eval {INSERT INTO t2 SELECT * FROM t1} |  | 
|   39     db eval {INSERT INTO t1 SELECT a+$i, a+b*100 FROM t2} |  | 
|   40     db eval {DELETE FROM t2} |  | 
|   41   } |  | 
|   42   do_test $testname.1 { |  | 
|   43     db eval {SELECT count(*) FROM t1} |  | 
|   44   } 8192 |  | 
|   45   integrity_check $testname.2 |  | 
|   46 } |  | 
|   47  |  | 
|   48 # Reset all of the highwater marks. |  | 
|   49 # |  | 
|   50 proc reset_highwater_marks {} { |  | 
|   51   sqlite3_status SQLITE_STATUS_MEMORY_USED 1 |  | 
|   52   sqlite3_status SQLITE_STATUS_MALLOC_SIZE 1 |  | 
|   53   sqlite3_status SQLITE_STATUS_PAGECACHE_USED 1 |  | 
|   54   sqlite3_status SQLITE_STATUS_PAGECACHE_OVERFLOW 1 |  | 
|   55   sqlite3_status SQLITE_STATUS_PAGECACHE_SIZE 1 |  | 
|   56   sqlite3_status SQLITE_STATUS_SCRATCH_USED 1 |  | 
|   57   sqlite3_status SQLITE_STATUS_SCRATCH_OVERFLOW 1 |  | 
|   58   sqlite3_status SQLITE_STATUS_SCRATCH_SIZE 1 |  | 
|   59   sqlite3_status SQLITE_STATUS_PARSER_STACK 1 |  | 
|   60 } |  | 
|   61  |  | 
|   62 # Test 1:  Verify that calling sqlite3_malloc(0) returns a NULL |  | 
|   63 # pointer. |  | 
|   64 # |  | 
|   65 set highwater [sqlite3_memory_highwater 0] |  | 
|   66 do_test memsubsys2-1.1 { |  | 
|   67   sqlite3_malloc 0 |  | 
|   68 } {0} |  | 
|   69 do_test memsubsys2-1.2 { |  | 
|   70   sqlite3_memory_highwater 0 |  | 
|   71 } $highwater |  | 
|   72  |  | 
|   73  |  | 
|   74 # Test 2:  Verify that the highwater mark increases after a large |  | 
|   75 # allocation. |  | 
|   76 # |  | 
|   77 sqlite3_memory_highwater 1 |  | 
|   78 set highwater [sqlite3_memory_highwater 0] |  | 
|   79 do_test memsubsys2-2.1 { |  | 
|   80   sqlite3_free [set x [sqlite3_malloc 100000]] |  | 
|   81   expr {$x!="0"} |  | 
|   82 } {1} |  | 
|   83 do_test memsubsys2-2.2 { |  | 
|   84   expr {[sqlite3_memory_highwater 0]>=[sqlite3_memory_used]+$highwater} |  | 
|   85 } {1} |  | 
|   86  |  | 
|   87 # Test 3: Verify that turning of memstatus disables the statistics |  | 
|   88 # tracking. |  | 
|   89 # |  | 
|   90 db close |  | 
|   91 sqlite3_shutdown |  | 
|   92 sqlite3_config_memstatus 0 |  | 
|   93 sqlite3_initialize |  | 
|   94 reset_highwater_marks |  | 
|   95 set highwater [sqlite3_memory_highwater 0] |  | 
|   96 do_test memsubsys2-3.1 { |  | 
|   97   set highwater |  | 
|   98 } {0} |  | 
|   99 do_test memsubsys2-3.2 { |  | 
|  100   sqlite3_malloc 0 |  | 
|  101 } {0} |  | 
|  102 do_test memsubsys2-3.3 { |  | 
|  103   sqlite3_memory_highwater 0 |  | 
|  104 } {0} |  | 
|  105 do_test memsubsys2-3.4 { |  | 
|  106   sqlite3_memory_used |  | 
|  107 } {0} |  | 
|  108 do_test memsubsys2-3.5 { |  | 
|  109   set ::allocation [sqlite3_malloc 100000] |  | 
|  110   expr {$::allocation!="0"} |  | 
|  111 } {1} |  | 
|  112 do_test memsubsys2-3.6 { |  | 
|  113   sqlite3_memory_highwater 0 |  | 
|  114 } {0} |  | 
|  115 do_test memsubsys2-3.7 { |  | 
|  116   sqlite3_memory_used |  | 
|  117 } {0} |  | 
|  118 do_test memsubsys2-3.8 { |  | 
|  119   sqlite3_free $::allocation |  | 
|  120 } {} |  | 
|  121 do_test memsubsys2-3.9 { |  | 
|  122   sqlite3_free 0 |  | 
|  123 } {} |  | 
|  124    |  | 
|  125  |  | 
|  126 # Test 4: Verify that turning on memstatus reenables the statistics |  | 
|  127 # tracking. |  | 
|  128 # |  | 
|  129 sqlite3_shutdown |  | 
|  130 sqlite3_config_memstatus 1 |  | 
|  131 sqlite3_initialize |  | 
|  132 reset_highwater_marks |  | 
|  133 set highwater [sqlite3_memory_highwater 0] |  | 
|  134 do_test memsubsys2-4.1 { |  | 
|  135   set highwater |  | 
|  136 } {0} |  | 
|  137 do_test memsubsys2-4.2 { |  | 
|  138   sqlite3_malloc 0 |  | 
|  139 } {0} |  | 
|  140 do_test memsubsys2-4.3 { |  | 
|  141   sqlite3_memory_highwater 0 |  | 
|  142 } {0} |  | 
|  143 do_test memsubsys2-4.4 { |  | 
|  144   sqlite3_memory_used |  | 
|  145 } {0} |  | 
|  146 do_test memsubsys2-4.5 { |  | 
|  147   set ::allocation [sqlite3_malloc 100000] |  | 
|  148   expr {$::allocation!="0"} |  | 
|  149 } {1} |  | 
|  150 do_test memsubsys2-4.6 { |  | 
|  151   expr {[sqlite3_memory_highwater 0]>=100000} |  | 
|  152 } {1} |  | 
|  153 do_test memsubsys2-4.7 { |  | 
|  154   expr {[sqlite3_memory_used]>=100000} |  | 
|  155 } {1} |  | 
|  156 do_test memsubsys2-4.8 { |  | 
|  157   sqlite3_free $::allocation |  | 
|  158 } {} |  | 
|  159 do_test memsubsys2-4.9 { |  | 
|  160   sqlite3_free 0 |  | 
|  161 } {} |  | 
|  162 do_test memsubsys2-4.10 { |  | 
|  163   expr {[sqlite3_memory_highwater 0]>=100000} |  | 
|  164 } {1} |  | 
|  165 do_test memsubsys2-4.11 { |  | 
|  166   sqlite3_memory_used |  | 
|  167 } {0} |  | 
|  168    |  | 
|  169  |  | 
|  170  |  | 
|  171  |  | 
|  172 autoinstall_test_functions |  | 
|  173 finish_test |  | 
| OLD | NEW |