File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / memsubsys2.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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.1.1.1 2012/02/21 17:04:16 misho 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:   forcedelete 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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>