/ Hex Artifact Content
Login

Artifact 75894a880520164d73b1305c1c3f96882615e142:


0000: 23 20 32 30 30 38 20 46 65 62 72 75 61 72 79 20  # 2008 February 
0010: 31 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  18.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 23 20 55 6e 69  ********.#.# Uni
0170: 74 20 74 65 73 74 69 6e 67 20 6f 66 20 74 68 65  t testing of the
0180: 20 42 69 74 76 65 63 20 6f 62 6a 65 63 74 2e 0a   Bitvec object..
0190: 23 0a 23 20 24 49 64 3a 20 62 69 74 76 65 63 2e  #.# $Id: bitvec.
01a0: 74 65 73 74 2c 76 20 31 2e 34 20 32 30 30 39 2f  test,v 1.4 2009/
01b0: 30 34 2f 30 31 20 32 33 3a 34 39 3a 30 34 20 64  04/01 23:49:04 d
01c0: 72 68 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20  rh Exp $.#..set 
01d0: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
01e0: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
01f0: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0200: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 54 68 65 20  ster.tcl..# The 
0210: 62 75 69 6c 74 2d 69 6e 20 74 65 73 74 20 6c 6f  built-in test lo
0220: 67 69 63 20 6d 75 73 74 20 62 65 20 6f 70 65 72  gic must be oper
0230: 61 74 69 6f 6e 61 6c 20 69 6e 20 6f 72 64 65 72  ational in order
0240: 20 66 6f 72 0a 23 20 74 68 69 73 20 74 65 73 74   for.# this test
0250: 20 74 6f 20 77 6f 72 6b 2e 0a 69 66 63 61 70 61   to work..ifcapa
0260: 62 6c 65 20 21 62 75 69 6c 74 69 6e 5f 74 65 73  ble !builtin_tes
0270: 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73  t {.  finish_tes
0280: 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20  t.  return.}..# 
0290: 54 65 73 74 20 74 68 61 74 20 73 71 6c 69 74 65  Test that sqlite
02a0: 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
02b0: 73 74 20 63 6f 72 72 65 63 74 6c 79 20 72 65 70  st correctly rep
02c0: 6f 72 74 73 20 65 72 72 6f 72 73 0a 23 20 74 68  orts errors.# th
02d0: 61 74 20 61 72 65 20 64 65 6c 69 62 65 72 61 74  at are deliberat
02e0: 65 6c 79 20 69 6e 74 72 6f 64 75 63 65 64 2e 0a  ely introduced..
02f0: 23 0a 64 6f 5f 74 65 73 74 20 62 69 74 76 65 63  #.do_test bitvec
0300: 2d 31 2e 30 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -1.0.1 {.  sqlit
0310: 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
0320: 65 73 74 20 34 30 30 20 7b 35 20 31 20 31 20 31  est 400 {5 1 1 1
0330: 20 30 7d 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20   0}.} 1.do_test 
0340: 62 69 74 76 65 63 2d 31 2e 30 2e 32 20 7b 0a 20  bitvec-1.0.2 {. 
0350: 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
0360: 69 6c 74 69 6e 54 65 73 74 20 34 30 30 20 7b 35  iltinTest 400 {5
0370: 20 31 20 32 33 34 20 31 20 30 7d 0a 7d 20 32 33   1 234 1 0}.} 23
0380: 34 0a 0a 23 20 52 75 6e 20 74 65 73 74 20 63 61  4..# Run test ca
0390: 73 65 73 20 74 68 61 74 20 73 65 74 20 65 76 65  ses that set eve
03a0: 72 79 20 62 69 74 20 69 6e 20 76 65 63 74 6f 72  ry bit in vector
03b0: 73 20 6f 66 20 76 61 72 69 6f 75 73 20 73 69 7a  s of various siz
03c0: 65 73 2e 0a 23 20 66 6f 72 20 6c 61 72 67 65 72  es..# for larger
03d0: 20 63 61 73 65 73 2c 20 74 68 69 73 20 73 68 6f   cases, this sho
03e0: 75 6c 64 20 63 79 63 6c 65 20 74 68 65 20 62 69  uld cycle the bi
03f0: 74 20 76 65 63 74 6f 72 20 72 65 70 72 65 73 65  t vector represe
0400: 6e 74 61 74 69 6f 6e 0a 23 20 66 72 6f 6d 20 68  ntation.# from h
0410: 61 73 68 69 6e 67 20 69 6e 74 6f 20 73 75 62 62  ashing into subb
0420: 69 74 6d 61 70 73 2e 20 20 54 68 65 20 73 75 62  itmaps.  The sub
0430: 62 69 74 6d 61 70 73 20 73 68 6f 75 6c 64 20 73  bitmaps should s
0440: 74 61 72 74 20 61 73 0a 23 20 68 61 73 68 65 73  tart as.# hashes
0450: 20 74 68 65 6e 20 63 68 61 6e 67 65 20 74 6f 20   then change to 
0460: 65 69 74 68 65 72 20 73 75 62 62 69 74 6d 61 70  either subbitmap
0470: 73 20 6f 72 20 6c 69 6e 65 61 72 20 6d 61 70 73  s or linear maps
0480: 2c 20 64 65 70 65 6e 64 69 6e 67 0a 23 20 6f 6e  , depending.# on
0490: 20 74 68 65 69 72 20 73 69 7a 65 2e 0a 23 0a 64   their size..#.d
04a0: 6f 5f 74 65 73 74 20 62 69 74 76 65 63 2d 31 2e  o_test bitvec-1.
04b0: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 42 69 74  1 {.  sqlite3Bit
04c0: 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 20 34  vecBuiltinTest 4
04d0: 30 30 20 7b 31 20 34 30 30 20 31 20 31 20 30 7d  00 {1 400 1 1 0}
04e0: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 74  .} 0.do_test bit
04f0: 76 65 63 2d 31 2e 32 20 7b 0a 20 20 73 71 6c 69  vec-1.2 {.  sqli
0500: 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
0510: 54 65 73 74 20 34 30 30 30 20 7b 31 20 34 30 30  Test 4000 {1 400
0520: 30 20 31 20 31 20 30 7d 0a 7d 20 30 0a 64 6f 5f  0 1 1 0}.} 0.do_
0530: 74 65 73 74 20 62 69 74 76 65 63 2d 31 2e 33 20  test bitvec-1.3 
0540: 7b 0a 20 20 73 71 6c 69 74 65 33 42 69 74 76 65  {.  sqlite3Bitve
0550: 63 42 75 69 6c 74 69 6e 54 65 73 74 20 34 30 30  cBuiltinTest 400
0560: 30 30 20 7b 31 20 34 30 30 30 30 20 31 20 31 20  00 {1 40000 1 1 
0570: 30 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62  0}.} 0.do_test b
0580: 69 74 76 65 63 2d 31 2e 34 20 7b 0a 20 20 73 71  itvec-1.4 {.  sq
0590: 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
05a0: 69 6e 54 65 73 74 20 34 30 30 30 30 30 20 7b 31  inTest 400000 {1
05b0: 20 34 30 30 30 30 30 20 31 20 31 20 30 7d 0a 7d   400000 1 1 0}.}
05c0: 20 30 0a 0a 23 20 42 79 20 73 70 65 63 69 66 79   0..# By specify
05d0: 69 6e 67 20 61 20 6c 61 72 67 65 72 20 69 6e 63  ing a larger inc
05e0: 72 65 6d 65 6e 74 73 2c 20 77 65 20 73 70 72 65  rements, we spre
05f0: 61 64 20 74 68 65 20 6c 6f 61 64 20 61 72 6f 75  ad the load arou
0600: 6e 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 69  nd..#.do_test bi
0610: 74 76 65 63 2d 31 2e 35 20 7b 0a 20 20 73 71 6c  tvec-1.5 {.  sql
0620: 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
0630: 6e 54 65 73 74 20 34 30 30 20 7b 31 20 34 30 30  nTest 400 {1 400
0640: 20 31 20 37 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74   1 7 0}.} 0.do_t
0650: 65 73 74 20 62 69 74 76 65 63 2d 31 2e 36 20 7b  est bitvec-1.6 {
0660: 0a 20 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  .  sqlite3Bitvec
0670: 42 75 69 6c 74 69 6e 54 65 73 74 20 34 30 30 30  BuiltinTest 4000
0680: 20 7b 31 20 34 30 30 30 20 31 20 37 20 30 7d 0a   {1 4000 1 7 0}.
0690: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 74 76  } 0.do_test bitv
06a0: 65 63 2d 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74  ec-1.7 {.  sqlit
06b0: 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
06c0: 65 73 74 20 34 30 30 30 30 20 7b 31 20 34 30 30  est 40000 {1 400
06d0: 30 30 20 31 20 37 20 30 7d 0a 7d 20 30 0a 64 6f  00 1 7 0}.} 0.do
06e0: 5f 74 65 73 74 20 62 69 74 76 65 63 2d 31 2e 38  _test bitvec-1.8
06f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 42 69 74 76   {.  sqlite3Bitv
0700: 65 63 42 75 69 6c 74 69 6e 54 65 73 74 20 34 30  ecBuiltinTest 40
0710: 30 30 30 30 20 7b 31 20 34 30 30 30 30 30 20 31  0000 {1 400000 1
0720: 20 37 20 30 7d 0a 7d 20 30 0a 0a 23 20 46 69 72   7 0}.} 0..# Fir
0730: 73 74 20 66 69 6c 6c 20 75 70 20 74 68 65 20 62  st fill up the b
0740: 69 74 6d 61 70 20 77 69 74 68 20 6f 6e 65 73 2c  itmap with ones,
0750: 20 20 74 68 65 6e 20 67 6f 20 74 68 72 6f 75 67    then go throug
0760: 68 20 61 6e 64 0a 23 20 63 6c 65 61 72 20 61 6c  h and.# clear al
0770: 6c 20 74 68 65 20 62 69 74 73 2e 20 20 54 68 69  l the bits.  Thi
0780: 73 20 77 69 6c 6c 20 73 74 72 65 73 73 20 74 68  s will stress th
0790: 65 20 63 6c 65 61 72 69 6e 67 20 6d 65 63 68 61  e clearing mecha
07a0: 6e 69 73 6d 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  nism..#.do_test 
07b0: 62 69 74 76 65 63 2d 31 2e 39 20 7b 0a 20 20 73  bitvec-1.9 {.  s
07c0: 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
07d0: 74 69 6e 54 65 73 74 20 34 30 30 20 7b 31 20 34  tinTest 400 {1 4
07e0: 30 30 20 31 20 31 20 32 20 34 30 30 20 31 20 31  00 1 1 2 400 1 1
07f0: 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20   0}.} 0.do_test 
0800: 62 69 74 76 65 63 2d 31 2e 31 30 20 7b 0a 20 20  bitvec-1.10 {.  
0810: 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
0820: 6c 74 69 6e 54 65 73 74 20 34 30 30 30 20 7b 31  ltinTest 4000 {1
0830: 20 34 30 30 30 20 31 20 31 20 32 20 34 30 30 30   4000 1 1 2 4000
0840: 20 31 20 31 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74   1 1 0}.} 0.do_t
0850: 65 73 74 20 62 69 74 76 65 63 2d 31 2e 31 31 20  est bitvec-1.11 
0860: 7b 0a 20 20 73 71 6c 69 74 65 33 42 69 74 76 65  {.  sqlite3Bitve
0870: 63 42 75 69 6c 74 69 6e 54 65 73 74 20 34 30 30  cBuiltinTest 400
0880: 30 30 20 7b 31 20 34 30 30 30 30 20 31 20 31 20  00 {1 40000 1 1 
0890: 32 20 34 30 30 30 30 20 31 20 31 20 30 7d 0a 7d  2 40000 1 1 0}.}
08a0: 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 74 76 65   0.do_test bitve
08b0: 63 2d 31 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74  c-1.12 {.  sqlit
08c0: 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
08d0: 65 73 74 20 34 30 30 30 30 30 20 7b 31 20 34 30  est 400000 {1 40
08e0: 30 30 30 30 20 31 20 31 20 32 20 34 30 30 30 30  0000 1 1 2 40000
08f0: 30 20 31 20 31 20 30 7d 0a 7d 20 30 0a 0a 64 6f  0 1 1 0}.} 0..do
0900: 5f 74 65 73 74 20 62 69 74 76 65 63 2d 31 2e 31  _test bitvec-1.1
0910: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 42 69 74  3 {.  sqlite3Bit
0920: 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 20 34  vecBuiltinTest 4
0930: 30 30 20 7b 31 20 34 30 30 20 31 20 31 20 32 20  00 {1 400 1 1 2 
0940: 34 30 30 20 31 20 37 20 30 7d 0a 7d 20 30 0a 64  400 1 7 0}.} 0.d
0950: 6f 5f 74 65 73 74 20 62 69 74 76 65 63 2d 31 2e  o_test bitvec-1.
0960: 31 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 42 69  15 {.  sqlite3Bi
0970: 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 20  tvecBuiltinTest 
0980: 34 30 30 30 20 7b 31 20 34 30 30 30 20 31 20 31  4000 {1 4000 1 1
0990: 20 32 20 34 30 30 30 20 31 20 37 20 30 7d 0a 7d   2 4000 1 7 0}.}
09a0: 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 74 76 65   0.do_test bitve
09b0: 63 2d 31 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74  c-1.16 {.  sqlit
09c0: 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
09d0: 65 73 74 20 34 30 30 30 30 20 7b 31 20 34 30 30  est 40000 {1 400
09e0: 30 30 20 31 20 31 20 32 20 34 30 30 30 30 20 31  00 1 1 2 40000 1
09f0: 20 37 37 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74 65   77 0}.} 0.do_te
0a00: 73 74 20 62 69 74 76 65 63 2d 31 2e 31 37 20 7b  st bitvec-1.17 {
0a10: 0a 20 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  .  sqlite3Bitvec
0a20: 42 75 69 6c 74 69 6e 54 65 73 74 20 34 30 30 30  BuiltinTest 4000
0a30: 30 30 20 7b 31 20 34 30 30 30 30 30 20 31 20 31  00 {1 400000 1 1
0a40: 20 32 20 34 30 30 30 30 30 20 31 20 37 37 37 20   2 400000 1 777 
0a50: 30 7d 0a 7d 20 30 0a 0a 64 6f 5f 74 65 73 74 20  0}.} 0..do_test 
0a60: 62 69 74 76 65 63 2d 31 2e 31 38 20 7b 0a 20 20  bitvec-1.18 {.  
0a70: 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
0a80: 6c 74 69 6e 54 65 73 74 20 34 30 30 30 30 30 20  ltinTest 400000 
0a90: 7b 31 20 35 30 30 30 20 31 30 30 30 30 30 20 31  {1 5000 100000 1
0aa0: 20 32 20 34 30 30 30 30 30 20 31 20 33 37 20 30   2 400000 1 37 0
0ab0: 7d 0a 7d 20 30 0a 0a 23 20 41 74 74 65 6d 70 74  }.} 0..# Attempt
0ac0: 20 74 6f 20 69 6e 64 75 63 65 20 68 61 73 68 20   to induce hash 
0ad0: 63 6f 6c 6c 69 73 69 6f 6e 73 2e 20 20 0a 23 0a  collisions.  .#.
0ae0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
0af0: 6e 20 73 74 61 72 74 0a 75 6e 73 65 74 20 2d 6e  n start.unset -n
0b00: 6f 63 6f 6d 70 6c 61 69 6e 20 69 6e 63 72 0a 66  ocomplain incr.f
0b10: 6f 72 65 61 63 68 20 73 74 61 72 74 20 7b 31 20  oreach start {1 
0b20: 32 20 33 20 34 20 35 20 36 20 37 20 38 7d 20 7b  2 3 4 5 6 7 8} {
0b30: 0a 20 20 66 6f 72 65 61 63 68 20 69 6e 63 72 20  .  foreach incr 
0b40: 7b 31 32 34 20 31 32 35 7d 20 7b 0a 20 20 20 20  {124 125} {.    
0b50: 64 6f 5f 74 65 73 74 20 62 69 74 76 65 63 2d 31  do_test bitvec-1
0b60: 2e 32 30 2e 24 73 74 61 72 74 2e 24 69 6e 63 72  .20.$start.$incr
0b70: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 70 72 6f   {.      set pro
0b80: 67 20 5b 6c 69 73 74 20 31 20 36 30 20 24 3a 3a  g [list 1 60 $::
0b90: 73 74 61 72 74 20 24 3a 3a 69 6e 63 72 20 32 20  start $::incr 2 
0ba0: 35 30 30 30 20 31 20 31 20 30 5d 0a 20 20 20 20  5000 1 1 0].    
0bb0: 20 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42    sqlite3BitvecB
0bc0: 75 69 6c 74 69 6e 54 65 73 74 20 35 30 30 30 20  uiltinTest 5000 
0bd0: 24 70 72 6f 67 0a 20 20 20 20 7d 20 30 0a 20 20  $prog.    } 0.  
0be0: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 62 69 74  }.}..do_test bit
0bf0: 76 65 63 2d 31 2e 33 30 2e 62 69 67 5f 61 6e 64  vec-1.30.big_and
0c00: 5f 73 6c 6f 77 20 7b 0a 20 20 73 71 6c 69 74 65  _slow {.  sqlite
0c10: 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
0c20: 73 74 20 31 37 30 30 30 30 30 30 20 7b 31 20 31  st 17000000 {1 1
0c30: 37 30 30 30 30 30 30 20 31 20 31 20 32 20 31 37  7000000 1 1 2 17
0c40: 30 30 30 30 30 30 20 31 20 31 20 30 7d 0a 7d 20  000000 1 1 0}.} 
0c50: 30 0a 0a 0a 23 20 54 65 73 74 20 73 65 74 74 69  0...# Test setti
0c60: 6e 67 20 61 6e 64 20 63 6c 65 61 72 69 6e 67 20  ng and clearing 
0c70: 61 20 72 61 6e 64 6f 6d 20 73 75 62 73 65 74 20  a random subset 
0c80: 6f 66 20 62 69 74 73 2e 0a 23 0a 64 6f 5f 74 65  of bits..#.do_te
0c90: 73 74 20 62 69 74 76 65 63 2d 32 2e 31 20 7b 0a  st bitvec-2.1 {.
0ca0: 20 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42    sqlite3BitvecB
0cb0: 75 69 6c 74 69 6e 54 65 73 74 20 34 30 30 30 20  uiltinTest 4000 
0cc0: 7b 33 20 32 30 30 30 20 34 20 32 30 30 30 20 30  {3 2000 4 2000 0
0cd0: 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69  }.} 0.do_test bi
0ce0: 74 76 65 63 2d 32 2e 32 20 7b 0a 20 20 73 71 6c  tvec-2.2 {.  sql
0cf0: 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
0d00: 6e 54 65 73 74 20 34 30 30 30 20 7b 33 20 31 30  nTest 4000 {3 10
0d10: 30 30 20 34 20 31 30 30 30 20 33 20 31 30 30 30  00 4 1000 3 1000
0d20: 20 34 20 31 30 30 30 20 33 20 31 30 30 30 20 34   4 1000 3 1000 4
0d30: 20 31 30 30 30 0a 20 20 20 20 20 20 20 20 20 20   1000.          
0d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d50: 20 20 20 20 20 20 20 33 20 31 30 30 30 20 34 20         3 1000 4 
0d60: 31 30 30 30 20 33 20 31 30 30 30 20 34 20 31 30  1000 3 1000 4 10
0d70: 30 30 20 33 20 31 30 30 30 20 34 20 31 30 30 30  00 3 1000 4 1000
0d80: 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20   0}.} 0.do_test 
0d90: 62 69 74 76 65 63 2d 32 2e 33 20 7b 0a 20 20 73  bitvec-2.3 {.  s
0da0: 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
0db0: 74 69 6e 54 65 73 74 20 34 30 30 30 30 30 20 7b  tinTest 400000 {
0dc0: 33 20 31 30 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74  3 10 0}.} 0.do_t
0dd0: 65 73 74 20 62 69 74 76 65 63 2d 32 2e 34 20 7b  est bitvec-2.4 {
0de0: 0a 20 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  .  sqlite3Bitvec
0df0: 42 75 69 6c 74 69 6e 54 65 73 74 20 34 30 30 30  BuiltinTest 4000
0e00: 20 7b 33 20 31 30 20 32 20 34 30 30 30 20 31 20   {3 10 2 4000 1 
0e10: 31 20 30 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74  1 0}.} 0.do_test
0e20: 20 62 69 74 76 65 63 2d 32 2e 35 20 7b 0a 20 20   bitvec-2.5 {.  
0e30: 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
0e40: 6c 74 69 6e 54 65 73 74 20 35 30 30 30 20 7b 33  ltinTest 5000 {3
0e50: 20 32 30 20 32 20 35 30 30 30 20 31 20 31 20 30   20 2 5000 1 1 0
0e60: 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69  }.} 0.do_test bi
0e70: 74 76 65 63 2d 32 2e 36 20 7b 0a 20 20 73 71 6c  tvec-2.6 {.  sql
0e80: 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
0e90: 6e 54 65 73 74 20 35 30 30 30 30 20 7b 33 20 36  nTest 50000 {3 6
0ea0: 30 20 32 20 35 30 30 30 30 20 31 20 31 20 30 7d  0 2 50000 1 1 0}
0eb0: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 74  .} 0.do_test bit
0ec0: 76 65 63 2d 32 2e 37 20 7b 0a 20 20 73 71 6c 69  vec-2.7 {.  sqli
0ed0: 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
0ee0: 54 65 73 74 20 35 30 30 30 20 7b 0a 20 20 20 20  Test 5000 {.    
0ef0: 20 20 20 20 20 20 31 20 32 35 20 31 32 31 20 31        1 25 121 1
0f00: 32 35 0a 20 20 20 20 20 20 20 20 20 20 31 20 35  25.          1 5
0f10: 30 20 31 32 31 20 31 32 35 0a 20 20 20 20 20 20  0 121 125.      
0f20: 20 20 20 20 32 20 32 35 20 31 32 31 20 31 32 35      2 25 121 125
0f30: 0a 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 7d  .          0.  }
0f40: 0a 7d 20 30 0a 0a 23 20 54 68 69 73 20 70 72 6f  .} 0..# This pro
0f50: 63 65 64 75 72 65 20 72 75 6e 73 20 73 71 6c 69  cedure runs sqli
0f60: 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
0f70: 54 65 73 74 20 77 69 74 68 20 61 72 67 6d 65 6e  Test with argmen
0f80: 74 73 20 22 6e 22 20 61 6e 64 0a 23 20 22 70 72  ts "n" and.# "pr
0f90: 6f 67 72 61 6d 22 2e 20 20 42 75 74 20 69 74 20  ogram".  But it 
0fa0: 61 6c 73 6f 20 63 61 75 73 65 73 20 61 20 6d 61  also causes a ma
0fb0: 6c 6c 6f 63 20 65 72 72 6f 72 20 74 6f 20 6f 63  lloc error to oc
0fc0: 63 75 72 20 61 66 74 65 72 20 74 68 65 0a 23 20  cur after the.# 
0fd0: 22 66 61 69 6c 63 6e 74 22 2d 74 68 20 6d 61 6c  "failcnt"-th mal
0fe0: 6c 6f 63 2e 20 20 54 68 65 20 72 65 73 75 6c 74  loc.  The result
0ff0: 20 73 68 6f 75 6c 64 20 62 65 20 22 30 22 20 69   should be "0" i
1000: 66 20 6e 6f 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  f no malloc fail
1010: 75 72 65 0a 23 20 6f 63 63 75 72 73 20 6f 72 20  ure.# occurs or 
1020: 22 2d 31 22 20 69 66 20 74 68 65 72 65 20 69 73  "-1" if there is
1030: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
1040: 65 2e 0a 23 0a 70 72 6f 63 20 62 69 74 76 65 63  e..#.proc bitvec
1050: 5f 6d 61 6c 6c 6f 63 5f 74 65 73 74 20 7b 6c 61  _malloc_test {la
1060: 62 65 6c 20 66 61 69 6c 63 6e 74 20 6e 20 70 72  bel failcnt n pr
1070: 6f 67 72 61 6d 7d 20 7b 0a 20 20 64 6f 5f 74 65  ogram} {.  do_te
1080: 73 74 20 24 6c 61 62 65 6c 20 5b 73 75 62 73 74  st $label [subst
1090: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d   {.    sqlite3_m
10a0: 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 24 66 61  emdebug_fail $fa
10b0: 69 6c 63 6e 74 0a 20 20 20 20 73 65 74 20 78 20  ilcnt.    set x 
10c0: 5c 5b 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  \[sqlite3BitvecB
10d0: 75 69 6c 74 69 6e 54 65 73 74 20 24 6e 20 5b 6c  uiltinTest $n [l
10e0: 69 73 74 20 24 70 72 6f 67 72 61 6d 5d 5c 5d 0a  ist $program]\].
10f0: 20 20 20 20 73 65 74 20 6e 46 61 69 6c 20 5c 5b      set nFail \[
1100: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
1110: 5f 66 61 69 6c 20 2d 31 5c 5d 0a 20 20 20 20 69  _fail -1\].    i
1120: 66 20 7b 5c 24 6e 46 61 69 6c 3d 3d 30 7d 20 7b  f {\$nFail==0} {
1130: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 67 6f 20  .      set ::go 
1140: 30 0a 20 20 20 20 20 20 73 65 74 20 78 20 2d 31  0.      set x -1
1150: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 78  .    }.    set x
1160: 0a 20 20 7d 5d 20 2d 31 0a 7d 0a 0a 23 20 4d 61  .  }] -1.}..# Ma
1170: 6b 65 20 73 75 72 65 20 6d 61 6c 6c 6f 63 20 66  ke sure malloc f
1180: 61 69 6c 75 72 65 73 20 61 72 65 20 68 61 6e 64  ailures are hand
1190: 6c 65 64 20 73 61 6e 69 6c 79 2e 0a 23 0a 75 6e  led sanily..#.un
11a0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
11b0: 6e 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  n.unset -nocompl
11c0: 61 69 6e 20 67 6f 0a 73 65 74 20 67 6f 20 31 0a  ain go.set go 1.
11d0: 73 61 76 65 5f 70 72 6e 67 5f 73 74 61 74 65 0a  save_prng_state.
11e0: 66 6f 72 20 7b 73 65 74 20 6e 20 30 7d 20 7b 24  for {set n 0} {$
11f0: 67 6f 7d 20 7b 69 6e 63 72 20 6e 7d 20 7b 0a 20  go} {incr n} {. 
1200: 20 72 65 73 74 6f 72 65 5f 70 72 6e 67 5f 73 74   restore_prng_st
1210: 61 74 65 0a 20 20 62 69 74 76 65 63 5f 6d 61 6c  ate.  bitvec_mal
1220: 6c 6f 63 5f 74 65 73 74 20 62 69 74 76 65 63 2d  loc_test bitvec-
1230: 33 2e 31 2e 24 6e 20 24 6e 20 35 30 30 30 20 7b  3.1.$n $n 5000 {
1240: 0a 20 20 20 20 20 20 33 20 36 30 20 32 20 35 30  .      3 60 2 50
1250: 30 30 20 31 20 31 20 33 20 36 30 20 32 20 35 30  00 1 1 3 60 2 50
1260: 30 30 20 31 20 31 20 33 20 36 30 20 32 20 35 30  00 1 1 3 60 2 50
1270: 30 30 20 31 20 31 20 30 0a 20 20 7d 0a 7d 0a 73  00 1 1 0.  }.}.s
1280: 65 74 20 67 6f 20 31 0a 66 6f 72 20 7b 73 65 74  et go 1.for {set
1290: 20 6e 20 30 7d 20 7b 24 67 6f 7d 20 7b 69 6e 63   n 0} {$go} {inc
12a0: 72 20 6e 7d 20 7b 0a 20 20 72 65 73 74 6f 72 65  r n} {.  restore
12b0: 5f 70 72 6e 67 5f 73 74 61 74 65 0a 20 20 62 69  _prng_state.  bi
12c0: 74 76 65 63 5f 6d 61 6c 6c 6f 63 5f 74 65 73 74  tvec_malloc_test
12d0: 20 62 69 74 76 65 63 2d 33 2e 32 2e 24 6e 20 24   bitvec-3.2.$n $
12e0: 6e 20 35 30 30 30 20 7b 0a 20 20 20 20 20 20 33  n 5000 {.      3
12f0: 20 36 30 30 20 32 20 35 30 30 30 20 31 20 31 20   600 2 5000 1 1 
1300: 33 20 36 30 30 20 32 20 35 30 30 30 20 31 20 31  3 600 2 5000 1 1
1310: 20 33 20 36 30 30 20 32 20 35 30 30 30 20 31 20   3 600 2 5000 1 
1320: 31 20 30 0a 20 20 7d 0a 7d 0a 73 65 74 20 67 6f  1 0.  }.}.set go
1330: 20 31 0a 66 6f 72 20 7b 73 65 74 20 6e 20 31 7d   1.for {set n 1}
1340: 20 7b 24 67 6f 7d 20 7b 69 6e 63 72 20 6e 7d 20   {$go} {incr n} 
1350: 7b 0a 20 20 62 69 74 76 65 63 5f 6d 61 6c 6c 6f  {.  bitvec_mallo
1360: 63 5f 74 65 73 74 20 62 69 74 76 65 63 2d 33 2e  c_test bitvec-3.
1370: 33 2e 24 6e 20 24 6e 20 35 30 30 30 30 20 7b 31  3.$n $n 50000 {1
1380: 20 35 30 30 30 30 20 31 20 31 20 30 7d 0a 7d 0a   50000 1 1 0}.}.
1390: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a 72 65 74  .finish_test.ret
13a0: 75 72 6e 0a                                      urn.