os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/bitvec.test
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/bitvec.test	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,191 @@
     1.4 +# 2008 February 18
     1.5 +#
     1.6 +# The author disclaims copyright to this source code.  In place of
     1.7 +# a legal notice, here is a blessing:
     1.8 +#
     1.9 +#    May you do good and not evil.
    1.10 +#    May you find forgiveness for yourself and forgive others.
    1.11 +#    May you share freely, never taking more than you give.
    1.12 +#
    1.13 +#***********************************************************************
    1.14 +#
    1.15 +# Unit testing of the Bitvec object.
    1.16 +#
    1.17 +# $Id: bitvec.test,v 1.2 2008/03/21 16:45:48 drh Exp $
    1.18 +#
    1.19 +
    1.20 +set testdir [file dirname $argv0]
    1.21 +source $testdir/tester.tcl
    1.22 +
    1.23 +# The built-in test logic must be operational in order for
    1.24 +# this test to work.
    1.25 +ifcapable !builtin_test {
    1.26 +  finish_test
    1.27 +  return
    1.28 +}
    1.29 +
    1.30 +# Test that sqlite3BitvecBuiltinTest correctly reports errors
    1.31 +# that are deliberately introduced.
    1.32 +#
    1.33 +do_test bitvec-1.0.1 {
    1.34 +  sqlite3BitvecBuiltinTest 400 {5 1 1 1 0}
    1.35 +} 1
    1.36 +do_test bitvec-1.0.2 {
    1.37 +  sqlite3BitvecBuiltinTest 400 {5 1 234 1 0}
    1.38 +} 234
    1.39 +
    1.40 +# Run test cases that set every bit in vectors of various sizes.
    1.41 +# for larger cases, this should cycle the bit vector representation
    1.42 +# from hashing into subbitmaps.  The subbitmaps should start as
    1.43 +# hashes then change to either subbitmaps or linear maps, depending
    1.44 +# on their size.
    1.45 +#
    1.46 +do_test bitvec-1.1 {
    1.47 +  sqlite3BitvecBuiltinTest 400 {1 400 1 1 0}
    1.48 +} 0
    1.49 +do_test bitvec-1.2 {
    1.50 +  sqlite3BitvecBuiltinTest 4000 {1 4000 1 1 0}
    1.51 +} 0
    1.52 +do_test bitvec-1.3 {
    1.53 +  sqlite3BitvecBuiltinTest 40000 {1 40000 1 1 0}
    1.54 +} 0
    1.55 +do_test bitvec-1.4 {
    1.56 +  sqlite3BitvecBuiltinTest 400000 {1 400000 1 1 0}
    1.57 +} 0
    1.58 +
    1.59 +# By specifying a larger increments, we spread the load around.
    1.60 +#
    1.61 +do_test bitvec-1.5 {
    1.62 +  sqlite3BitvecBuiltinTest 400 {1 400 1 7 0}
    1.63 +} 0
    1.64 +do_test bitvec-1.6 {
    1.65 +  sqlite3BitvecBuiltinTest 4000 {1 4000 1 7 0}
    1.66 +} 0
    1.67 +do_test bitvec-1.7 {
    1.68 +  sqlite3BitvecBuiltinTest 40000 {1 40000 1 7 0}
    1.69 +} 0
    1.70 +do_test bitvec-1.8 {
    1.71 +  sqlite3BitvecBuiltinTest 400000 {1 400000 1 7 0}
    1.72 +} 0
    1.73 +
    1.74 +# First fill up the bitmap with ones,  then go through and
    1.75 +# clear all the bits.  This will stress the clearing mechanism.
    1.76 +#
    1.77 +do_test bitvec-1.9 {
    1.78 +  sqlite3BitvecBuiltinTest 400 {1 400 1 1 2 400 1 1 0}
    1.79 +} 0
    1.80 +do_test bitvec-1.10 {
    1.81 +  sqlite3BitvecBuiltinTest 4000 {1 4000 1 1 2 4000 1 1 0}
    1.82 +} 0
    1.83 +do_test bitvec-1.11 {
    1.84 +  sqlite3BitvecBuiltinTest 40000 {1 40000 1 1 2 40000 1 1 0}
    1.85 +} 0
    1.86 +do_test bitvec-1.12 {
    1.87 +  sqlite3BitvecBuiltinTest 400000 {1 400000 1 1 2 400000 1 1 0}
    1.88 +} 0
    1.89 +
    1.90 +do_test bitvec-1.13 {
    1.91 +  sqlite3BitvecBuiltinTest 400 {1 400 1 1 2 400 1 7 0}
    1.92 +} 0
    1.93 +do_test bitvec-1.15 {
    1.94 +  sqlite3BitvecBuiltinTest 4000 {1 4000 1 1 2 4000 1 7 0}
    1.95 +} 0
    1.96 +do_test bitvec-1.16 {
    1.97 +  sqlite3BitvecBuiltinTest 40000 {1 40000 1 1 2 40000 1 77 0}
    1.98 +} 0
    1.99 +do_test bitvec-1.17 {
   1.100 +  sqlite3BitvecBuiltinTest 400000 {1 400000 1 1 2 400000 1 777 0}
   1.101 +} 0
   1.102 +
   1.103 +do_test bitvec-1.18 {
   1.104 +  sqlite3BitvecBuiltinTest 400000 {1 5000 100000 1 2 400000 1 37 0}
   1.105 +} 0
   1.106 +
   1.107 +# Attempt to induce hash collisions.  
   1.108 +#
   1.109 +unset -nocomplain start
   1.110 +unset -nocomplain incr
   1.111 +foreach start {1 2 3 4 5 6 7 8} {
   1.112 +  foreach incr {124 125} {
   1.113 +    do_test bitvec-1.20.$start.$incr {
   1.114 +      set prog [list 1 60 $::start $::incr 2 5000 1 1 0]
   1.115 +      sqlite3BitvecBuiltinTest 5000 $prog
   1.116 +    } 0
   1.117 +  }
   1.118 +}
   1.119 +
   1.120 +do_test bitvec-1.30.big_and_slow {
   1.121 +  sqlite3BitvecBuiltinTest 17000000 {1 17000000 1 1 2 17000000 1 1 0}
   1.122 +} 0
   1.123 +
   1.124 +
   1.125 +# Test setting and clearing a random subset of bits.
   1.126 +#
   1.127 +do_test bitvec-2.1 {
   1.128 +  sqlite3BitvecBuiltinTest 4000 {3 2000 4 2000 0}
   1.129 +} 0
   1.130 +do_test bitvec-2.2 {
   1.131 +  sqlite3BitvecBuiltinTest 4000 {3 1000 4 1000 3 1000 4 1000 3 1000 4 1000
   1.132 +                                 3 1000 4 1000 3 1000 4 1000 3 1000 4 1000 0}
   1.133 +} 0
   1.134 +do_test bitvec-2.3 {
   1.135 +  sqlite3BitvecBuiltinTest 400000 {3 10 0}
   1.136 +} 0
   1.137 +do_test bitvec-2.4 {
   1.138 +  sqlite3BitvecBuiltinTest 4000 {3 10 2 4000 1 1 0}
   1.139 +} 0
   1.140 +do_test bitvec-2.5 {
   1.141 +  sqlite3BitvecBuiltinTest 5000 {3 20 2 5000 1 1 0}
   1.142 +} 0
   1.143 +do_test bitvec-2.6 {
   1.144 +  sqlite3BitvecBuiltinTest 50000 {3 60 2 50000 1 1 0}
   1.145 +} 0
   1.146 +
   1.147 +# This procedure runs sqlite3BitvecBuiltinTest with argments "n" and
   1.148 +# "program".  But it also causes a malloc error to occur after the
   1.149 +# "failcnt"-th malloc.  The result should be "0" if no malloc failure
   1.150 +# occurs or "-1" if there is a malloc failure.
   1.151 +#
   1.152 +proc bitvec_malloc_test {label failcnt n program} {
   1.153 +  do_test $label [subst {
   1.154 +    sqlite3_memdebug_fail $failcnt
   1.155 +    set x \[sqlite3BitvecBuiltinTest $n [list $program]\]
   1.156 +    set nFail \[sqlite3_memdebug_fail -1\]
   1.157 +    if {\$nFail==0} {
   1.158 +      set ::go 0
   1.159 +      set x -1
   1.160 +    }
   1.161 +    set x
   1.162 +  }] -1
   1.163 +}
   1.164 +
   1.165 +# Make sure malloc failures are handled sanily.
   1.166 +#
   1.167 +unset -nocomplain n
   1.168 +unset -nocomplain go
   1.169 +set go 1
   1.170 +save_prng_state
   1.171 +for {set n 0} {$go} {incr n} {
   1.172 +  restore_prng_state
   1.173 +  bitvec_malloc_test bitvec-3.1.$n $n 5000 {
   1.174 +      3 60 2 5000 1 1 3 60 2 5000 1 1 3 60 2 5000 1 1 0
   1.175 +  }
   1.176 +}
   1.177 +set go 1
   1.178 +for {set n 0} {$go} {incr n} {
   1.179 +  restore_prng_state
   1.180 +  bitvec_malloc_test bitvec-3.2.$n $n 5000 {
   1.181 +      3 600 2 5000 1 1 3 600 2 5000 1 1 3 600 2 5000 1 1 0
   1.182 +  }
   1.183 +}
   1.184 +set go 1
   1.185 +for {set n 1} {$go} {incr n} {
   1.186 +  bitvec_malloc_test bitvec-3.3.$n $n 50000 {1 50000 1 1 0}
   1.187 +}
   1.188 +
   1.189 +finish_test
   1.190 +return
   1.191 +
   1.192 +
   1.193 +
   1.194 +finish_test