CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
bitvec.test196 linesDownload Raw Back to test
1# 2008 February 182#3# The author disclaims copyright to this source code.  In place of4# 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# Unit testing of the Bitvec object.13#14# $Id: bitvec.test,v 1.4 2009/04/01 23:49:04 drh Exp $15#16 17set testdir [file dirname $argv0]18source $testdir/tester.tcl19 20# The built-in test logic must be operational in order for21# this test to work.22ifcapable !builtin_test {23  finish_test24  return25}26 27# Test that sqlite3BitvecBuiltinTest correctly reports errors28# that are deliberately introduced.29#30do_test bitvec-1.0.1 {31  sqlite3BitvecBuiltinTest 400 {5 1 1 1 0}32} 133do_test bitvec-1.0.2 {34  sqlite3BitvecBuiltinTest 400 {5 1 234 1 0}35} 23436 37# Run test cases that set every bit in vectors of various sizes.38# for larger cases, this should cycle the bit vector representation39# from hashing into subbitmaps.  The subbitmaps should start as40# hashes then change to either subbitmaps or linear maps, depending41# on their size.42#43do_test bitvec-1.1 {44  sqlite3BitvecBuiltinTest 400 {1 400 1 1 0}45} 046do_test bitvec-1.2 {47  sqlite3BitvecBuiltinTest 4000 {1 4000 1 1 0}48} 049do_test bitvec-1.3 {50  sqlite3BitvecBuiltinTest 40000 {1 40000 1 1 0}51} 052do_test bitvec-1.4 {53  sqlite3BitvecBuiltinTest 400000 {1 400000 1 1 0}54} 055 56# By specifying a larger increments, we spread the load around.57#58do_test bitvec-1.5 {59  sqlite3BitvecBuiltinTest 400 {1 400 1 7 0}60} 061do_test bitvec-1.6 {62  sqlite3BitvecBuiltinTest 4000 {1 4000 1 7 0}63} 064do_test bitvec-1.7 {65  sqlite3BitvecBuiltinTest 40000 {1 40000 1 7 0}66} 067do_test bitvec-1.8 {68  sqlite3BitvecBuiltinTest 400000 {1 400000 1 7 0}69} 070 71# First fill up the bitmap with ones,  then go through and72# clear all the bits.  This will stress the clearing mechanism.73#74do_test bitvec-1.9 {75  sqlite3BitvecBuiltinTest 400 {1 400 1 1 2 400 1 1 0}76} 077do_test bitvec-1.10 {78  sqlite3BitvecBuiltinTest 4000 {1 4000 1 1 2 4000 1 1 0}79} 080do_test bitvec-1.11 {81  sqlite3BitvecBuiltinTest 40000 {1 40000 1 1 2 40000 1 1 0}82} 083do_test bitvec-1.12 {84  sqlite3BitvecBuiltinTest 400000 {1 400000 1 1 2 400000 1 1 0}85} 086 87do_test bitvec-1.13 {88  sqlite3BitvecBuiltinTest 400 {1 400 1 1 2 400 1 7 0}89} 090do_test bitvec-1.15 {91  sqlite3BitvecBuiltinTest 4000 {1 4000 1 1 2 4000 1 7 0}92} 093do_test bitvec-1.16 {94  sqlite3BitvecBuiltinTest 40000 {1 40000 1 1 2 40000 1 77 0}95} 096do_test bitvec-1.17 {97  sqlite3BitvecBuiltinTest 400000 {1 400000 1 1 2 400000 1 777 0}98} 099 100do_test bitvec-1.18 {101  sqlite3BitvecBuiltinTest 400000 {1 5000 100000 1 2 400000 1 37 0}102} 0103 104# Attempt to induce hash collisions.  105#106unset -nocomplain start107unset -nocomplain incr108foreach start {1 2 3 4 5 6 7 8} {109  foreach incr {124 125} {110    do_test bitvec-1.20.$start.$incr {111      set prog [list 1 60 $::start $::incr 2 5000 1 1 0]112      sqlite3BitvecBuiltinTest 5000 $prog113    } 0114  }115}116 117do_test bitvec-1.30.big_and_slow {118  sqlite3BitvecBuiltinTest 17000000 {1 17000000 1 1 2 17000000 1 1 0}119} 0120 121 122# Test setting and clearing a random subset of bits.123#124do_test bitvec-2.1 {125  sqlite3BitvecBuiltinTest 4000 {3 2000 4 2000 0}126} 0127do_test bitvec-2.2 {128  sqlite3BitvecBuiltinTest 4000 {3 1000 4 1000 3 1000 4 1000 3 1000 4 1000129                                 3 1000 4 1000 3 1000 4 1000 3 1000 4 1000 0}130} 0131do_test bitvec-2.3 {132  sqlite3BitvecBuiltinTest 400000 {3 10 0}133} 0134do_test bitvec-2.4 {135  sqlite3BitvecBuiltinTest 4000 {3 10 2 4000 1 1 0}136} 0137do_test bitvec-2.5 {138  sqlite3BitvecBuiltinTest 5000 {3 20 2 5000 1 1 0}139} 0140do_test bitvec-2.6 {141  sqlite3BitvecBuiltinTest 50000 {3 60 2 50000 1 1 0}142} 0143do_test bitvec-2.7 {144  sqlite3BitvecBuiltinTest 5000 {145          1 25 121 125146          1 50 121 125147          2 25 121 125148          0149  }150} 0151 152# This procedure runs sqlite3BitvecBuiltinTest with argments "n" and153# "program".  But it also causes a malloc error to occur after the154# "failcnt"-th malloc.  The result should be "0" if no malloc failure155# occurs or "-1" if there is a malloc failure.156#157proc bitvec_malloc_test {label failcnt n program} {158  do_test $label [subst {159    sqlite3_memdebug_fail $failcnt160    set x \[sqlite3BitvecBuiltinTest $n [list $program]\]161    set nFail \[sqlite3_memdebug_fail -1\]162    if {\$nFail==0} {163      set ::go 0164      set x -1165    }166    set x167  }] -1168}169 170# Make sure malloc failures are handled sanily.171#172unset -nocomplain n173unset -nocomplain go174set go 1175save_prng_state176for {set n 0} {$go} {incr n} {177  restore_prng_state178  bitvec_malloc_test bitvec-3.1.$n $n 5000 {179      3 60 2 5000 1 1 3 60 2 5000 1 1 3 60 2 5000 1 1 0180  }181}182set go 1183for {set n 0} {$go} {incr n} {184  restore_prng_state185  bitvec_malloc_test bitvec-3.2.$n $n 5000 {186      3 600 2 5000 1 1 3 600 2 5000 1 1 3 600 2 5000 1 1 0187  }188}189set go 1190for {set n 1} {$go} {incr n} {191  bitvec_malloc_test bitvec-3.3.$n $n 50000 {1 50000 1 1 0}192}193 194finish_test195return196