Documentation Source Text

Hex Artifact Content
Login

Artifact 7955ba7a189628a8354965dfda0e7a9a56f832f6911b7de96148a6988b990dbf:


0000: 3c 74 69 74 6c 65 3e 54 48 33 3c 2f 74 69 74 6c  <title>TH3</titl
0010: 65 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  e>.<tcl>hd_keywo
0020: 72 64 73 20 7b 54 48 33 7d 3c 2f 74 63 6c 3e 0a  rds {TH3}</tcl>.
0030: 0a 3c 74 61 62 6c 65 5f 6f 66 5f 63 6f 6e 74 65  .<table_of_conte
0040: 6e 74 73 3e 0a 3c 68 31 3e 4f 76 65 72 76 69 65  nts>.<h1>Overvie
0050: 77 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74  w</h1>..<p>SQLit
0060: 65 20 54 65 73 74 20 48 61 72 6e 65 73 73 20 23  e Test Harness #
0070: 33 20 28 68 65 72 65 61 66 74 65 72 20 22 54 48  3 (hereafter "TH
0080: 33 22 29 20 69 73 20 6f 6e 65 20 6f 66 0a 5b 74  3") is one of.[t
0090: 68 72 65 65 20 74 65 73 74 20 68 61 72 6e 65 73  hree test harnes
00a0: 73 65 73 5d 20 75 73 65 64 20 66 6f 72 20 74 65  ses] used for te
00b0: 73 74 69 6e 67 20 53 51 4c 69 74 65 2e 0a 54 48  sting SQLite..TH
00c0: 33 20 6d 65 65 74 73 20 74 68 65 20 66 6f 6c 6c  3 meets the foll
00d0: 6f 77 69 6e 67 20 6f 62 6a 65 63 74 69 76 65 73  owing objectives
00e0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
00f0: 3c 70 3e 20 54 48 33 20 69 73 20 61 62 6c 65 20  <p> TH3 is able 
0100: 74 6f 20 72 75 6e 20 6f 6e 20 65 6d 62 65 64 64  to run on embedd
0110: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 74 68 61  ed platforms tha
0120: 74 20 6c 61 63 6b 20 74 68 65 20 73 75 70 70 6f  t lack the suppo
0130: 72 74 0a 20 20 20 20 20 69 6e 66 72 61 73 74 72  rt.     infrastr
0140: 75 63 74 75 72 65 20 6f 66 20 77 6f 72 6b 73 74  ucture of workst
0150: 61 74 69 6f 6e 73 2e 3c 2f 70 3e 3c 2f 6c 69 3e  ations.</p></li>
0160: 0a 0a 3c 6c 69 3e 3c 70 3e 20 54 48 33 20 74 65  ..<li><p> TH3 te
0170: 73 74 73 20 53 51 4c 69 74 65 20 69 6e 20 61 6e  sts SQLite in an
0180: 20 61 73 2d 64 65 70 6c 6f 79 65 64 20 63 6f 6e   as-deployed con
0190: 66 69 67 75 72 61 74 69 6f 6e 20 75 73 69 6e 67  figuration using
01a0: 20 6f 6e 6c 79 0a 20 20 20 20 20 70 75 62 6c 69   only.     publi
01b0: 73 68 65 64 20 61 6e 64 20 64 6f 63 75 6d 65 6e  shed and documen
01c0: 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  ted interfaces..
01d0: 20 20 20 20 20 49 6e 20 6f 74 68 65 72 20 77 6f       In other wo
01e0: 72 64 73 2c 20 54 48 33 20 74 65 73 74 73 20 74  rds, TH3 tests t
01f0: 68 65 20 63 6f 6d 70 69 6c 65 64 20 6f 62 6a 65  he compiled obje
0200: 63 74 20 63 6f 64 65 2c 20 6e 6f 74 0a 20 20 20  ct code, not.   
0210: 20 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64    the source cod
0220: 65 2c 20 74 68 75 73 20 76 65 72 69 66 79 69 6e  e, thus verifyin
0230: 67 20 74 68 61 74 20 6e 6f 20 70 72 6f 62 6c 65  g that no proble
0240: 6d 73 20 77 65 72 65 20 69 6e 74 72 6f 64 75 63  ms were introduc
0250: 65 64 0a 20 20 20 20 20 62 79 20 63 6f 6d 70 69  ed.     by compi
0260: 6c 65 72 20 62 75 67 73 2e 20 20 22 54 65 73 74  ler bugs.  "Test
0270: 20 77 68 61 74 20 79 6f 75 20 66 6c 79 20 61 6e   what you fly an
0280: 64 20 66 6c 79 20 77 68 61 74 20 79 6f 75 20 74  d fly what you t
0290: 65 73 74 2e 22 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  est."</p></li>..
02a0: 3c 6c 69 3e 3c 70 3e 20 54 48 33 20 63 68 65 63  <li><p> TH3 chec
02b0: 6b 73 20 53 51 4c 69 74 65 27 73 20 72 65 73 70  ks SQLite's resp
02c0: 6f 6e 73 65 20 74 6f 20 6f 75 74 2d 6f 66 2d 6d  onse to out-of-m
02d0: 65 6d 6f 72 79 20 65 72 72 6f 72 73 2c 20 64 69  emory errors, di
02e0: 73 6b 20 49 2f 4f 0a 20 20 20 20 20 65 72 72 6f  sk I/O.     erro
02f0: 72 73 2c 20 61 6e 64 20 70 6f 77 65 72 20 6c 6f  rs, and power lo
0300: 73 73 20 64 75 72 69 6e 67 20 74 72 61 6e 73 61  ss during transa
0310: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 2e 20 3c 2f  ction commit. </
0320: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
0330: 20 54 48 33 20 65 78 65 72 63 69 73 65 73 20 53   TH3 exercises S
0340: 51 4c 69 74 65 20 69 6e 20 61 20 76 61 72 69 65  QLite in a varie
0350: 74 79 20 6f 66 20 72 75 6e 2d 74 69 6d 65 20 63  ty of run-time c
0360: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0a 20 20  onfigurations.  
0370: 20 20 20 28 55 54 46 38 20 76 73 20 55 54 46 31     (UTF8 vs UTF1
0380: 36 2c 20 64 69 66 66 65 72 65 6e 74 20 70 61 67  6, different pag
0390: 65 73 20 73 69 7a 65 73 2c 20 76 61 72 79 69 6e  es sizes, varyin
03a0: 67 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 73 2c  g journal modes,
03b0: 20 65 74 63 2e 29 0a 20 20 20 20 20 3c 2f 70 3e   etc.).     </p>
03c0: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 20 54  </li>..<li><p> T
03d0: 48 33 20 61 63 68 69 65 76 65 73 20 31 30 30 25  H3 achieves 100%
03e0: 20 62 72 61 6e 63 68 20 74 65 73 74 20 63 6f 76   branch test cov
03f0: 65 72 61 67 65 20 28 61 6e 64 20 31 30 30 25 20  erage (and 100% 
0400: 0a 20 20 20 20 5b 68 74 74 70 73 3a 2f 2f 65 6e  .    [https://en
0410: 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
0420: 69 6b 69 2f 4d 6f 64 69 66 69 65 64 5f 63 6f 6e  iki/Modified_con
0430: 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 5f  dition/decision_
0440: 63 6f 76 65 72 61 67 65 7c 4d 43 2f 44 43 5d 29  coverage|MC/DC])
0450: 0a 20 20 20 20 6f 76 65 72 20 74 68 65 20 53 51  .    over the SQ
0460: 4c 69 74 65 20 63 6f 72 65 2e 0a 20 20 20 20 28  Lite core..    (
0470: 54 65 73 74 20 63 6f 76 65 72 61 67 65 20 6f 66  Test coverage of
0480: 20 65 78 74 65 6e 73 69 6f 6e 73 20 73 75 63 68   extensions such
0490: 20 61 73 20 46 54 53 20 61 6e 64 20 52 54 52 45   as FTS and RTRE
04a0: 45 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  E is less than 1
04b0: 30 30 25 29 2e 0a 20 20 20 20 20 3c 2f 70 3e 3c  00%)..     </p><
04c0: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54  /li>.</ul>..<p>T
04d0: 48 33 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  H3 was originall
04e0: 79 20 77 72 69 74 74 65 6e 20 66 6f 72 20 76 61  y written for va
04f0: 6c 69 64 61 74 69 6f 6e 20 74 65 73 74 69 6e 67  lidation testing
0500: 20 6f 6e 6c 79 2c 20 62 75 74 20 68 61 73 0a 73   only, but has.s
0510: 75 62 73 65 71 75 65 6e 74 6c 79 20 62 65 65 6e  ubsequently been
0520: 20 75 73 65 64 20 66 6f 72 20 64 65 76 65 6c 6f   used for develo
0530: 70 6d 65 6e 74 20 74 65 73 74 69 6e 67 20 61 6e  pment testing an
0540: 64 20 64 65 62 75 67 67 69 6e 67 0a 61 73 20 77  d debugging.as w
0550: 65 6c 6c 2c 20 61 6e 64 20 68 61 73 20 70 72 6f  ell, and has pro
0560: 76 65 6e 20 76 65 72 79 20 68 65 6c 70 66 75 6c  ven very helpful
0570: 20 69 6e 20 74 68 6f 73 65 20 72 6f 6c 65 73 2e   in those roles.
0580: 20 20 41 20 66 75 6c 6c 2d 63 6f 76 65 72 61 67    A full-coverag
0590: 65 0a 74 65 73 74 20 74 61 6b 65 73 20 6c 65 73  e.test takes les
05a0: 73 20 74 68 61 6e 20 66 69 76 65 20 6d 69 6e 75  s than five minu
05b0: 74 65 73 20 6f 6e 20 61 20 77 6f 72 6b 73 74 61  tes on a worksta
05c0: 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65 0a 73  tion and hence.s
05d0: 65 72 76 65 73 20 61 73 20 61 20 66 61 73 74 20  erves as a fast 
05e0: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 20  regression test 
05f0: 64 75 72 69 6e 67 20 64 61 79 2d 74 6f 2d 64 61  during day-to-da
0600: 79 20 6d 61 69 6e 74 65 6e 61 6e 63 65 0a 6f 66  y maintenance.of
0610: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
0620: 20 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e   base.</p>..<h2>
0630: 48 69 73 74 6f 72 79 3c 2f 68 32 3e 0a 0a 3c 70  History</h2>..<p
0640: 3e 54 48 33 20 6f 72 69 67 69 6e 61 74 65 64 20  >TH3 originated 
0650: 66 72 6f 6d 20 61 6e 20 65 66 66 6f 72 74 20 74  from an effort t
0660: 6f 20 74 65 73 74 20 53 51 4c 69 74 65 20 6f 6e  o test SQLite on
0670: 20 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69   .[https://en.wi
0680: 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
0690: 2f 53 79 6d 62 69 61 6e 7c 53 79 6d 62 69 61 6e  /Symbian|Symbian
06a0: 4f 53 5d 2e 0a 50 72 69 6f 72 20 74 6f 20 54 48  OS]..Prior to TH
06b0: 33 2c 20 61 6c 6c 20 53 51 4c 69 74 65 20 74 65  3, all SQLite te
06c0: 73 74 73 20 77 65 72 65 20 72 75 6e 20 75 73 69  sts were run usi
06d0: 6e 67 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77  ng the.[http://w
06e0: 77 77 2e 74 63 6c 2e 74 6b 2f 7c 54 43 4c 5d 20  ww.tcl.tk/|TCL] 
06f0: 73 63 72 69 70 74 20 6c 61 6e 67 75 61 67 65 2c  script language,
0700: 20 62 75 74 20 54 43 4c 20 77 6f 75 6c 64 20 6e   but TCL would n
0710: 6f 74 20 28 65 61 73 69 6c 79 29 0a 63 6f 6d 70  ot (easily).comp
0720: 69 6c 65 20 6f 6e 20 53 79 6d 62 69 61 6e 4f 53  ile on SymbianOS
0730: 20 77 68 69 63 68 20 6d 61 64 65 20 74 65 73 74   which made test
0740: 69 6e 67 20 64 69 66 66 69 63 75 6c 74 2e 20 20  ing difficult.  
0750: 54 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  The first attemp
0760: 74 0a 74 6f 20 72 65 6d 65 64 79 20 74 68 69 73  t.to remedy this
0770: 20 70 72 6f 62 6c 65 6d 20 77 61 73 20 74 68 65   problem was the
0780: 20 22 54 48 31 22 20 28 54 65 73 74 20 48 61 72   "TH1" (Test Har
0790: 6e 65 73 73 20 23 31 29 20 73 63 72 69 70 74 69  ness #1) scripti
07a0: 6e 67 20 0a 6c 61 6e 67 75 61 67 65 20 2d 20 61  ng .language - a
07b0: 20 72 65 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f   reimplementatio
07c0: 6e 20 6f 66 20 70 61 72 74 73 20 6f 66 20 74 68  n of parts of th
07d0: 65 20 54 43 4c 20 6c 61 6e 67 75 61 67 65 20 69  e TCL language i
07e0: 6e 20 61 20 0a 6d 6f 72 65 20 70 6f 72 74 61 62  n a .more portab
07f0: 6c 65 20 66 6f 72 6d 20 74 68 61 74 20 77 6f 75  le form that wou
0800: 6c 64 20 63 6f 6d 70 69 6c 65 20 61 6e 64 20 72  ld compile and r
0810: 75 6e 20 6f 6e 20 53 79 6d 62 69 61 6e 4f 53 2c  un on SymbianOS,
0820: 20 61 6e 64 20 0a 74 68 61 74 20 77 61 73 20 73   and .that was s
0830: 75 66 66 69 63 69 65 6e 74 20 74 6f 20 72 75 6e  ufficient to run
0840: 20 74 68 65 20 53 51 4c 69 74 65 20 74 65 73 74   the SQLite test
0850: 73 2e 20 20 54 48 31 0a 64 69 64 20 6e 6f 74 20  s.  TH1.did not 
0860: 73 75 72 76 69 76 65 20 61 73 20 61 20 73 74 61  survive as a sta
0870: 6e 64 61 72 64 20 74 65 73 74 69 6e 67 20 74 6f  ndard testing to
0880: 6f 6c 20 66 6f 72 20 53 51 4c 69 74 65 2c 0a 62  ol for SQLite,.b
0890: 75 74 20 69 74 20 64 69 64 20 66 69 6e 64 20 63  ut it did find c
08a0: 6f 6e 74 69 6e 75 65 64 20 73 65 72 76 69 63 65  ontinued service
08b0: 20 61 73 20 61 0a 73 63 72 69 70 74 69 6e 67 20   as a.scripting 
08c0: 6c 61 6e 67 75 61 67 65 20 75 73 65 64 20 74 6f  language used to
08d0: 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20 0a   customize the .
08e0: 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73  [http://www.foss
08f0: 69 6c 2d 73 63 6d 2e 6f 72 67 2f 7c 46 6f 73 73  il-scm.org/|Foss
0900: 69 6c 5d 20 76 65 72 73 69 6f 6e 20 63 6f 6e 74  il] version cont
0910: 72 6f 6c 20 73 79 73 74 65 6d 2e 0a 54 68 65 72  rol system..Ther
0920: 65 20 77 61 73 20 61 6c 73 6f 20 61 20 22 54 65  e was also a "Te
0930: 73 74 20 48 61 72 6e 65 73 73 20 23 32 22 20 77  st Harness #2" w
0940: 68 69 63 68 20 77 61 73 20 61 6e 20 61 74 74 65  hich was an atte
0950: 6d 70 74 20 74 6f 0a 63 72 65 61 74 65 20 61 20  mpt to.create a 
0960: 73 69 6d 70 6c 65 20 73 63 72 69 70 74 69 6e 67  simple scripting
0970: 20 6c 61 6e 67 75 61 67 65 20 75 73 69 6e 67 20   language using 
0980: 6f 70 65 72 61 74 6f 72 20 70 72 65 66 69 78 20  operator prefix 
0990: 6e 6f 74 61 74 69 6f 6e 0a 74 6f 20 64 72 69 76  notation.to driv
09a0: 65 20 74 65 73 74 73 2e 20 54 48 33 20 77 61 73  e tests. TH3 was
09b0: 20 74 68 65 20 74 68 69 72 64 20 61 74 74 65 6d   the third attem
09c0: 70 74 2e 0a 0a 3c 70 3e 41 74 20 61 62 6f 75 74  pt...<p>At about
09d0: 20 74 68 61 74 20 73 61 6d 65 20 74 69 6d 65 2c   that same time,
09e0: 20 73 6f 6d 65 20 61 76 69 6f 6e 69 63 73 20 6d   some avionics m
09f0: 61 6e 75 66 61 63 74 75 72 65 72 73 20 77 65 72  anufacturers wer
0a00: 65 0a 65 78 70 72 65 73 73 69 6e 67 20 69 6e 74  e.expressing int
0a10: 65 72 65 73 74 20 69 6e 20 53 51 4c 69 74 65 2c  erest in SQLite,
0a20: 20 77 68 69 63 68 20 70 72 6f 6d 70 74 65 64 20   which prompted 
0a30: 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c  the SQLite devel
0a40: 6f 70 65 72 73 0a 74 6f 20 64 65 73 69 67 6e 20  opers.to design 
0a50: 54 48 33 20 74 6f 20 73 75 70 70 6f 72 74 20 74  TH3 to support t
0a60: 68 65 20 72 69 67 6f 72 6f 75 73 20 74 65 73 74  he rigorous test
0a70: 69 6e 67 20 73 74 61 6e 64 61 72 64 73 20 6f 66  ing standards of
0a80: 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b  .[https://en.wik
0a90: 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
0aa0: 44 4f 2d 31 37 38 42 7c 44 4f 2d 31 37 38 42 5d  DO-178B|DO-178B]
0ab0: 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 72 73 74 20  ...<p>The first 
0ac0: 63 6f 64 65 20 66 6f 72 20 54 48 33 20 77 61 73  code for TH3 was
0ad0: 20 6c 61 69 64 20 64 6f 77 6e 20 6f 6e 20 32 30   laid down on 20
0ae0: 30 38 2d 30 39 2d 32 35 2e 0a 41 6e 20 69 6e 74  08-09-25..An int
0af0: 65 6e 73 65 20 65 66 66 6f 72 74 20 6f 76 65 72  ense effort over
0b00: 20 74 68 65 20 6e 65 78 74 20 31 30 20 6d 6f 6e   the next 10 mon
0b10: 74 68 73 20 72 65 73 75 6c 74 65 64 20 69 6e 20  ths resulted in 
0b20: 54 48 33 20 61 63 68 69 65 76 69 6e 67 0a 31 30  TH3 achieving.10
0b30: 30 25 20 4d 43 2f 44 43 20 6f 6e 20 32 30 30 39  0% MC/DC on 2009
0b40: 2d 30 37 2d 32 35 2e 20 20 54 68 65 20 54 48 33  -07-25.  The TH3
0b50: 20 63 6f 64 65 20 63 6f 6e 74 69 6e 75 65 73 20   code continues 
0b60: 74 6f 20 62 65 20 69 6d 70 72 6f 76 65 64 20 61  to be improved a
0b70: 6e 64 0a 65 78 70 61 6e 64 65 64 2e 0a 0a 3c 70  nd.expanded...<p
0b80: 3e 41 73 20 6f 66 20 32 30 31 38 2d 30 35 2d 31  >As of 2018-05-1
0b90: 39 2c 20 74 68 65 20 54 48 33 20 73 6f 75 72 63  9, the TH3 sourc
0ba0: 65 20 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  e tree consists 
0bb0: 0a 61 6e 64 20 77 65 6c 6c 20 6f 76 65 72 20 35  .and well over 5
0bc0: 30 30 2c 30 30 30 20 6c 69 6e 65 73 20 6f 66 20  00,000 lines of 
0bd0: 73 6f 75 72 63 65 20 63 6f 64 65 20 69 6e 20 31  source code in 1
0be0: 37 30 39 20 73 65 70 61 72 61 74 65 20 66 69 6c  709 separate fil
0bf0: 65 73 2e 0a 0a 3c 68 31 3e 4f 70 65 72 61 74 69  es...<h1>Operati
0c00: 6f 6e 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 48 33 20  on</h1>..<p>TH3 
0c10: 69 73 20 61 20 74 65 73 74 20 70 72 6f 67 72 61  is a test progra
0c20: 6d 20 67 65 6e 65 72 61 74 6f 72 2e 20 20 54 68  m generator.  Th
0c30: 65 20 6f 75 74 70 75 74 20 6f 66 20 54 48 33 20  e output of TH3 
0c40: 69 73 20 61 20 70 72 6f 67 72 61 6d 0a 69 6d 70  is a program.imp
0c50: 6c 65 6d 65 6e 74 65 64 20 69 6e 20 43 2d 63 6f  lemented in C-co
0c60: 64 65 20 61 6e 64 20 69 6e 74 65 6e 64 65 64 20  de and intended 
0c70: 74 6f 20 62 65 0a 6c 69 6e 6b 65 64 20 61 67 61  to be.linked aga
0c80: 69 6e 73 74 20 74 68 65 20 53 51 4c 69 74 65 20  inst the SQLite 
0c90: 6c 69 62 72 61 72 79 20 75 6e 64 65 72 20 74 65  library under te
0ca0: 73 74 2e 20 20 54 68 65 20 67 65 6e 65 72 61 74  st.  The generat
0cb0: 65 64 20 74 65 73 74 0a 70 72 6f 67 72 61 6d 20  ed test.program 
0cc0: 69 73 20 63 6f 6d 70 69 6c 65 64 20 61 6e 64 20  is compiled and 
0cd0: 72 75 6e 20 6f 6e 20 74 68 65 20 74 61 72 67 65  run on the targe
0ce0: 74 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 6f 72  t platform in or
0cf0: 64 65 72 20 74 6f 20 76 65 72 69 66 79 0a 63 6f  der to verify.co
0d00: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
0d10: 6f 66 20 53 51 4c 69 74 65 20 6f 6e 20 74 68 61  of SQLite on tha
0d20: 74 20 70 6c 61 74 66 6f 72 6d 2e 3c 2f 70 3e 0a  t platform.</p>.
0d30: 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 73 20 74  .<p>The inputs t
0d40: 6f 20 54 48 33 20 61 72 65 20 74 65 73 74 20 6d  o TH3 are test m
0d50: 6f 64 75 6c 65 73 20 77 72 69 74 74 65 6e 20 69  odules written i
0d60: 6e 20 43 20 6f 72 20 53 51 4c 20 61 6e 64 0a 73  n C or SQL and.s
0d70: 6d 61 6c 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  mall configurati
0d80: 6f 6e 0a 66 69 6c 65 73 20 74 68 61 74 20 64 65  on.files that de
0d90: 74 65 72 6d 69 6e 65 20 68 6f 77 20 74 6f 20 69  termine how to i
0da0: 6e 69 74 69 61 6c 69 7a 65 20 53 51 4c 69 74 65  nitialize SQLite
0db0: 2e 20 20 54 68 65 0a 54 48 33 20 70 61 63 6b 61  .  The.TH3 packa
0dc0: 67 65 20 69 6e 63 6c 75 64 65 73 20 20 31 2c 34  ge includes  1,4
0dd0: 34 34 20 74 65 73 74 0a 6d 6f 64 75 6c 65 73 20  44 test.modules 
0de0: 61 6e 64 20 6d 6f 72 65 20 74 68 61 6e 20 34 37  and more than 47
0df0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
0e00: 28 61 73 20 6f 66 20 32 30 31 38 2d 30 35 2d 31  (as of 2018-05-1
0e10: 39 29 2e 0a 4e 65 77 20 6d 6f 64 75 6c 65 73 20  9)..New modules 
0e20: 61 6e 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  and configuratio
0e30: 6e 73 0a 63 61 6e 20 62 65 20 61 64 64 65 64 20  ns.can be added 
0e40: 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 54 48 33  to customize TH3
0e50: 20 66 6f 72 20 73 70 65 63 69 61 6c 69 7a 65 64   for specialized
0e60: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 45   applications..E
0e70: 61 63 68 20 74 69 6d 65 20 54 48 33 20 69 73 20  ach time TH3 is 
0e80: 72 75 6e 2c 20 69 74 20 72 65 61 64 73 0a 61 20  run, it reads.a 
0e90: 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 61 76  subset of the av
0ea0: 61 69 6c 61 62 6c 65 20 74 65 73 74 20 6d 6f 64  ailable test mod
0eb0: 75 6c 65 73 20 61 6e 64 20 63 6f 6e 66 69 67 75  ules and configu
0ec0: 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 6f 20  ration files to 
0ed0: 67 65 6e 65 72 61 74 65 0a 61 20 63 75 73 74 6f  generate.a custo
0ee0: 6d 20 43 20 70 72 6f 67 72 61 6d 20 74 68 61 74  m C program that
0ef0: 20 70 65 72 66 6f 72 6d 73 20 61 6c 6c 20 6f 66   performs all of
0f00: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
0f10: 65 73 74 73 20 75 6e 64 65 72 20 61 6c 6c 0a 73  ests under all.s
0f20: 70 65 63 69 66 69 65 64 20 63 6f 6e 66 69 67 75  pecified configu
0f30: 72 61 74 69 6f 6e 73 2e 20 20 41 20 63 6f 6d 70  rations.  A comp
0f40: 6c 65 74 65 20 74 65 73 74 20 6f 66 20 53 51 4c  lete test of SQL
0f50: 69 74 65 20 6e 6f 72 6d 61 6c 6c 79 20 69 6e 76  ite normally inv
0f60: 6f 6c 76 65 73 20 72 75 6e 6e 69 6e 67 0a 54 48  olves running.TH
0f70: 33 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  3 multiple times
0f80: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 6d 75 6c   to generate mul
0f90: 74 69 70 6c 65 20 74 65 73 74 20 70 72 6f 67 72  tiple test progr
0fa0: 61 6d 73 20 63 6f 76 65 72 69 6e 67 20 64 69 66  ams covering dif
0fb0: 66 65 72 65 6e 74 0a 61 73 70 65 63 74 73 20 6f  ferent.aspects o
0fc0: 66 20 53 51 4c 69 74 65 27 73 20 6f 70 65 72 61  f SQLite's opera
0fd0: 74 69 6f 6e 2c 20 74 68 65 6e 20 6c 69 6e 6b 69  tion, then linki
0fe0: 6e 67 20 61 6c 6c 20 74 65 73 74 20 70 72 6f 67  ng all test prog
0ff0: 72 61 6d 73 20 61 67 61 69 6e 73 74 0a 61 20 63  rams against.a c
1000: 6f 6d 6d 6f 6e 20 53 51 4c 69 74 65 20 6c 69 62  ommon SQLite lib
1010: 72 61 72 79 20 61 6e 64 20 72 75 6e 6e 69 6e 67  rary and running
1020: 20 74 68 65 6d 20 73 65 70 61 72 61 74 65 6c 79   them separately
1030: 20 6f 6e 20 74 68 65 20 74 61 72 67 65 74 20 70   on the target p
1040: 6c 61 74 66 6f 72 6d 2e 0a 3c 2f 70 3e 0a 0a 3c  latform..</p>..<
1050: 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61  p>There are no a
1060: 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20  rbitrary limits 
1070: 69 6e 20 54 48 33 2e 20 20 4f 6e 65 20 63 6f 75  in TH3.  One cou
1080: 6c 64 20 67 65 6e 65 72 61 74 65 20 61 0a 73 69  ld generate a.si
1090: 6e 67 6c 65 20 74 65 73 74 20 70 72 6f 67 72 61  ngle test progra
10a0: 6d 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 65 64  m that contained
10b0: 20 61 6c 6c 20 74 65 73 74 20 6d 6f 64 75 6c 65   all test module
10c0: 73 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 66 69 67  s and all config
10d0: 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 2e 0a 48  uration files..H
10e0: 6f 77 65 76 65 72 2c 20 73 75 63 68 20 61 20 74  owever, such a t
10f0: 65 73 74 20 70 72 6f 67 72 61 6d 20 6d 69 67 68  est program migh
1100: 74 20 62 65 20 74 6f 6f 20 6c 61 72 67 65 20 74  t be too large t
1110: 6f 20 64 65 70 6c 6f 79 20 6f 6e 20 65 6d 62 65  o deploy on embe
1120: 64 64 65 64 0a 70 6c 61 74 66 6f 72 6d 73 2e 20  dded.platforms. 
1130: 20 28 41 73 20 6f 66 20 32 30 31 38 2d 30 35 2d   (As of 2018-05-
1140: 31 39 2c 20 61 20 66 75 6c 6c 2d 75 70 20 54 48  19, a full-up TH
1150: 33 20 74 65 73 74 20 69 73 20 6f 76 65 72 20 38  3 test is over 8
1160: 35 30 2c 30 30 30 20 6c 69 6e 65 73 20 61 6e 64  50,000 lines and
1170: 0a 35 38 4d 42 20 6f 66 20 43 20 63 6f 64 65 2e  .58MB of C code.
1180: 29 20 20 54 48 33 20 70 72 6f 76 69 64 65 73 20  )  TH3 provides 
1190: 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 62  the ability to b
11a0: 72 65 61 6b 20 74 68 65 20 6c 69 62 72 61 72 79  reak the library
11b0: 20 6f 66 20 74 65 73 74 0a 6d 6f 64 75 6c 65 73   of test.modules
11c0: 20 75 70 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72   up into smaller
11d0: 2c 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 64 69  , more easily di
11e0: 67 65 73 74 65 64 20 70 69 65 63 65 73 2e 3c 2f  gested pieces.</
11f0: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 69 6e 64 69  p>..<p>Each indi
1200: 76 69 64 75 61 6c 20 74 65 73 74 20 6d 6f 64 75  vidual test modu
1210: 6c 65 20 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e  le might contain
1220: 20 64 6f 7a 65 6e 73 2c 20 68 75 6e 64 72 65 64   dozens, hundred
1230: 73 2c 20 6f 72 20 74 68 6f 75 73 61 6e 64 73 0a  s, or thousands.
1240: 6f 66 20 73 65 70 61 72 61 74 65 20 74 65 73 74  of separate test
1250: 73 2e 20 20 54 68 65 20 74 65 73 74 20 6d 6f 64  s.  The test mod
1260: 75 6c 65 73 20 63 61 6e 20 62 65 20 77 72 69 74  ules can be writ
1270: 74 65 6e 20 69 6e 20 43 20 6f 72 20 61 73 20 73  ten in C or as s
1280: 63 72 69 70 74 73 20 6f 66 0a 53 51 4c 20 6f 72  cripts of.SQL or
1290: 20 61 20 6d 69 78 74 75 72 65 20 6f 66 20 74 68   a mixture of th
12a0: 65 20 74 77 6f 2e 20 20 41 62 6f 75 74 20 74 77  e two.  About tw
12b0: 6f 2d 74 68 69 72 64 73 20 6f 66 20 74 68 65 20  o-thirds of the 
12c0: 65 78 69 73 74 69 6e 67 20 74 65 73 74 20 6d 6f  existing test mo
12d0: 64 75 6c 65 73 20 61 72 65 0a 77 72 69 74 74 65  dules are.writte
12e0: 6e 20 69 6e 20 70 75 72 65 20 53 51 4c 20 77 69  n in pure SQL wi
12f0: 74 68 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  th the remainder
1300: 20 65 69 74 68 65 72 20 69 6e 20 70 75 72 65 20   either in pure 
1310: 43 20 6f 72 20 61 20 63 6f 6d 62 69 6e 61 74 69  C or a combinati
1320: 6f 6e 20 0a 6f 66 20 43 20 61 6e 64 20 53 51 4c  on .of C and SQL
1330: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  ..</p>..<p>Each 
1340: 74 65 73 74 20 6d 6f 64 75 6c 65 20 66 69 6c 65  test module file
1350: 20 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61 64   contains a head
1360: 65 72 20 77 68 69 63 68 20 64 65 73 63 72 69 62  er which describ
1370: 65 73 20 74 68 65 20 63 69 72 63 75 6d 73 74 61  es the circumsta
1380: 6e 63 65 73 0a 75 6e 64 65 72 20 77 68 69 63 68  nces.under which
1390: 20 74 68 65 20 74 65 73 74 20 69 73 20 76 61 6c   the test is val
13a0: 69 64 2e 20 20 46 6f 72 20 61 20 70 61 72 74 69  id.  For a parti
13b0: 63 75 6c 61 72 20 63 6f 6e 66 69 67 75 72 61 74  cular configurat
13c0: 69 6f 6e 2c 20 6f 6e 6c 79 20 74 68 6f 73 65 0a  ion, only those.
13d0: 6d 6f 64 75 6c 65 73 20 74 68 61 74 20 61 72 65  modules that are
13e0: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
13f0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
1400: 6f 6e 20 61 72 65 20 72 75 6e 2e 20 20 3c 2f 70  on are run.  </p
1410: 3e 0a 0a 3c 68 31 3e 47 65 6e 65 72 61 74 69 6e  >..<h1>Generatin
1420: 67 20 41 20 54 65 73 74 20 50 72 6f 67 72 61 6d  g A Test Program
1430: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 54 48  </h1>..<p>The TH
1440: 33 20 70 72 6f 67 72 61 6d 20 67 65 6e 65 72 61  3 program genera
1450: 74 6f 72 20 69 73 20 61 20 54 43 4c 20 73 63 72  tor is a TCL scr
1460: 69 70 74 20 6e 61 6d 65 64 20 22 3c 74 74 3e 6d  ipt named "<tt>m
1470: 6b 74 68 33 2e 74 63 6c 3c 2f 74 74 3e 22 2e 0a  kth3.tcl</tt>"..
1480: 54 6f 20 67 65 6e 65 72 61 74 65 20 61 20 74 65  To generate a te
1490: 73 74 20 70 72 6f 67 72 61 6d 2c 20 6f 6e 65 20  st program, one 
14a0: 68 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 75  has merely to ru
14b0: 6e 20 74 68 69 73 20 73 63 72 69 70 74 20 61 6e  n this script an
14c0: 64 20 73 75 70 70 6c 79 0a 74 68 65 20 6e 61 6d  d supply.the nam
14d0: 65 73 20 6f 66 20 66 69 6c 65 73 20 63 6f 6e 74  es of files cont
14e0: 61 69 6e 69 6e 67 20 74 65 73 74 20 6d 6f 64 75  aining test modu
14f0: 6c 65 73 20 61 6e 64 20 63 6f 6e 66 69 67 75 72  les and configur
1500: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 0a 63 6f  ations on the.co
1510: 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54 65 73  mmand line.  Tes
1520: 74 20 6d 6f 64 75 6c 65 73 20 61 72 65 20 66 69  t modules are fi
1530: 6c 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  les that use the
1540: 20 22 3c 74 74 3e 2e 74 65 73 74 3c 2f 74 74 3e   "<tt>.test</tt>
1550: 22 20 73 75 66 66 69 78 0a 61 6e 64 20 63 6f 6e  " suffix.and con
1560: 66 69 67 75 72 61 74 69 6f 6e 73 20 61 72 65 20  figurations are 
1570: 66 69 6c 65 73 20 74 68 61 74 20 75 73 65 20 74  files that use t
1580: 68 65 20 22 3c 74 74 3e 2e 63 66 67 3c 2f 74 74  he "<tt>.cfg</tt
1590: 3e 22 20 73 75 66 66 69 78 2e 20 20 41 0a 74 79  >" suffix.  A.ty
15a0: 70 69 63 61 6c 20 69 6e 76 6f 63 61 74 69 6f 6e  pical invocation
15b0: 20 6f 66 20 6d 6b 74 68 33 2e 74 63 6c 20 6d 69   of mkth3.tcl mi
15c0: 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69  ght look somethi
15d0: 6e 67 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c  ng like the foll
15e0: 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 63 6f 64  owing:</p>..<cod
15f0: 65 62 6c 6f 63 6b 3e 0a 74 63 6c 73 68 20 6d 6b  eblock>.tclsh mk
1600: 74 68 33 2e 74 63 6c 20 2a 2e 74 65 73 74 20 2a  th3.tcl *.test *
1610: 2e 63 66 67 20 26 67 74 3b 74 65 73 74 70 72 6f  .cfg &gt;testpro
1620: 67 31 2e 63 0a 3c 2f 63 6f 64 65 62 6c 6f 63 6b  g1.c.</codeblock
1630: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74  >..<p>The output
1640: 20 66 72 6f 6d 20 74 68 65 20 6d 6b 74 68 33 2e   from the mkth3.
1650: 74 63 6c 20 73 63 72 69 70 74 20 69 73 20 61 20  tcl script is a 
1660: 43 20 70 72 6f 67 72 61 6d 20 74 68 61 74 20 63  C program that c
1670: 6f 6e 74 61 69 6e 73 0a 65 76 65 72 79 74 68 69  ontains.everythi
1680: 6e 67 20 6e 65 65 64 65 64 20 74 6f 20 72 75 6e  ng needed to run
1690: 20 74 68 65 20 74 65 73 74 73 20 2d 20 65 76 65   the tests - eve
16a0: 72 79 74 68 69 6e 67 20 74 68 61 74 20 69 73 20  rything that is 
16b0: 65 78 63 65 70 74 20 66 6f 72 0a 74 68 65 20 53  except for.the S
16c0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 69 74  QLite library it
16d0: 73 65 6c 66 2e 20 20 54 68 65 20 67 65 6e 65 72  self.  The gener
16e0: 61 74 65 64 20 74 65 73 74 20 70 72 6f 67 72 61  ated test progra
16f0: 6d 20 63 6f 6e 74 61 69 6e 73 20 0a 69 6d 70 6c  m contains .impl
1700: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20  ementations for 
1710: 61 6c 6c 20 6f 66 20 74 68 65 20 73 75 70 70 6f  all of the suppo
1720: 72 74 20 69 6e 74 65 72 66 61 63 65 73 20 75 73  rt interfaces us
1730: 65 64 20 62 79 20 74 68 65 20 74 65 73 74 0a 6d  ed by the test.m
1740: 6f 64 75 6c 65 73 20 61 6e 64 20 69 74 20 63 6f  odules and it co
1750: 6e 74 61 69 6e 73 20 74 68 65 20 3c 74 74 3e 6d  ntains the <tt>m
1760: 61 69 6e 28 29 3c 2f 74 74 3e 20 72 6f 75 74 69  ain()</tt> routi
1770: 6e 65 20 74 68 61 74 20 64 72 69 76 65 73 20 74  ne that drives t
1780: 68 65 0a 74 65 73 74 73 2e 20 20 54 6f 20 63 6f  he.tests.  To co
1790: 6e 76 65 72 74 20 74 68 65 20 74 65 73 74 20 70  nvert the test p
17a0: 72 6f 67 72 61 6d 20 69 6e 74 6f 20 61 20 77 6f  rogram into a wo
17b0: 72 6b 69 6e 67 20 65 78 65 63 75 74 61 62 6c 65  rking executable
17c0: 2c 20 73 69 6d 70 6c 79 0a 63 6f 6d 70 69 6c 65  , simply.compile
17d0: 20 69 74 20 61 67 61 69 6e 73 74 20 53 51 4c 69   it against SQLi
17e0: 74 65 3a 3c 2f 70 3e 0a 0a 3c 63 6f 64 65 62 6c  te:</p>..<codebl
17f0: 6f 63 6b 3e 0a 63 63 20 2d 6f 20 74 65 73 74 70  ock>.cc -o testp
1800: 72 6f 67 31 20 74 65 73 74 70 72 6f 67 31 2e 63  rog1 testprog1.c
1810: 20 73 71 6c 69 74 65 33 2e 63 0a 3c 2f 63 6f 64   sqlite3.c.</cod
1820: 65 62 6c 6f 63 6b 3e 0a 0a 3c 70 3e 54 68 65 20  eblock>..<p>The 
1830: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 73 74 65 70  compilation step
1840: 20 73 68 6f 77 6e 20 69 6d 6d 65 64 69 61 74 65   shown immediate
1850: 6c 79 20 61 62 6f 76 65 20 69 73 20 6d 65 72 65  ly above is mere
1860: 6c 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 76  ly representativ
1870: 65 2e 0a 49 6e 20 61 20 77 6f 72 6b 69 6e 67 20  e..In a working 
1880: 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 2c 20 6f 6e  installation, on
1890: 65 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  e would normally
18a0: 20 77 61 6e 74 0a 74 6f 20 73 70 65 63 69 66 79   want.to specify
18b0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 70 61   optimization pa
18c0: 72 61 6d 65 74 65 72 73 20 61 6e 64 20 63 6f 6d  rameters and com
18d0: 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68  pile-time switch
18e0: 65 73 20 6f 6e 20 74 68 65 0a 63 6f 6d 70 69 6c  es on the.compil
18f0: 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e  er command line.
1900: 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 74 65 73  </p>..<p>For tes
1910: 74 69 6e 67 20 6f 6e 20 65 6d 62 65 64 64 65 64  ting on embedded
1920: 20 73 79 73 74 65 6d 73 2c 20 74 68 65 20 6d 6b   systems, the mk
1930: 74 68 33 2e 74 63 6c 20 73 63 72 69 70 74 20 61  th3.tcl script a
1940: 6e 64 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 0a  nd the compiler.
1950: 73 74 65 70 73 20 73 68 6f 77 6e 20 61 62 6f 76  steps shown abov
1960: 65 20 61 72 65 20 70 65 72 66 6f 72 6d 65 64 20  e are performed 
1970: 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 77  on an ordinary w
1980: 6f 72 6b 73 74 61 74 69 6f 6e 20 75 73 69 6e 67  orkstation using
1990: 0a 61 20 63 72 6f 73 73 2d 63 6f 6d 70 69 6c 65  .a cross-compile
19a0: 72 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  r, then the resu
19b0: 6c 74 69 6e 67 20 74 65 73 74 20 70 72 6f 67 72  lting test progr
19c0: 61 6d 20 69 73 0a 74 72 61 6e 73 66 65 72 72 65  am is.transferre
19d0: 64 20 6f 6e 74 6f 20 74 68 65 20 64 65 76 69 63  d onto the devic
19e0: 65 20 74 6f 20 62 65 20 72 75 6e 2e 3c 2f 70 3e  e to be run.</p>
19f0: 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20 74 65  ..<p>Once the te
1a00: 73 74 20 70 72 6f 67 72 61 6d 20 69 73 20 67 65  st program is ge
1a10: 6e 65 72 61 74 65 64 2c 20 69 74 20 69 73 20 72  nerated, it is r
1a20: 75 6e 20 77 69 74 68 20 6e 6f 20 61 72 67 75 6d  un with no argum
1a30: 65 6e 74 73 20 74 6f 0a 70 65 72 66 6f 72 6d 20  ents to.perform 
1a40: 74 68 65 20 74 65 73 74 73 2e 20 20 50 72 6f 67  the tests.  Prog
1a50: 72 65 73 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ress information
1a60: 20 61 73 20 77 65 6c 6c 20 61 73 20 65 72 72 6f   as well as erro
1a70: 72 20 64 69 61 67 6e 6f 73 74 69 63 73 0a 61 70  r diagnostics.ap
1a80: 70 65 61 72 20 6f 6e 20 73 74 61 6e 64 61 72 64  pear on standard
1a90: 20 6f 75 74 70 75 74 2e 20 20 28 41 6c 74 65 72   output.  (Alter
1aa0: 6e 61 74 69 76 65 20 6f 75 74 70 75 74 20 61 72  native output ar
1ab0: 72 61 6e 67 65 6d 65 6e 74 73 20 63 61 6e 20 62  rangements can b
1ac0: 65 20 6d 61 64 65 0a 75 73 69 6e 67 20 61 20 63  e made.using a c
1ad0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1ae0: 6f 6e 20 66 6f 72 20 65 6d 62 65 64 64 65 64 20  on for embedded 
1af0: 64 65 76 69 63 65 73 20 74 68 61 74 20 6c 61 63  devices that lac
1b00: 6b 20 61 20 73 74 61 6e 64 61 72 64 0a 6f 75 74  k a standard.out
1b10: 70 75 74 20 63 68 61 6e 6e 65 6c 2e 29 20 54 68  put channel.) Th
1b20: 65 20 70 72 6f 67 72 61 6d 20 72 65 74 75 72 6e  e program return
1b30: 73 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20  s zero if there 
1b40: 61 72 65 20 6e 6f 0a 65 72 72 6f 72 73 20 61 6e  are no.errors an
1b50: 64 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 6e  d non-zero if an
1b60: 79 20 70 72 6f 62 6c 65 6d 73 20 77 65 72 65 20  y problems were 
1b70: 64 65 74 65 63 74 65 64 2e 3c 2f 70 3e 0a 0a 3c  detected.</p>..<
1b80: 70 3e 54 79 70 69 63 61 6c 20 6f 75 74 70 75 74  p>Typical output
1b90: 20 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 54   from a single T
1ba0: 48 33 20 74 65 73 74 20 70 72 6f 67 72 61 6d 20  H3 test program 
1bb0: 72 75 6e 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 74  run looks like t
1bc0: 68 69 73 3a 0a 0a 3c 63 6f 64 65 62 6c 6f 63 6b  his:..<codeblock
1bd0: 3e 0a 57 69 74 68 20 53 51 4c 69 74 65 20 33 2e  >.With SQLite 3.
1be0: 38 2e 31 31 20 32 30 31 35 2d 30 35 2d 31 35 20  8.11 2015-05-15 
1bf0: 30 34 3a 31 33 3a 31 35 20 35 36 65 66 39 38 61  04:13:15 56ef98a
1c00: 30 34 37 36 35 63 33 34 63 31 63 32 66 33 65 64  04765c34c1c2f3ed
1c10: 37 61 36 66 30 33 61 37 33 32 66 33 62 38 38 36  7a6f03a732f3b886
1c20: 65 0a 2d 44 53 51 4c 49 54 45 5f 43 4f 56 45 52  e.-DSQLITE_COVER
1c30: 41 47 45 5f 54 45 53 54 0a 2d 44 53 51 4c 49 54  AGE_TEST.-DSQLIT
1c40: 45 5f 4e 4f 5f 53 59 4e 43 0a 2d 44 53 51 4c 49  E_NO_SYNC.-DSQLI
1c50: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1c60: 0a 2d 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44  .-DSQLITE_THREAD
1c70: 53 41 46 45 3d 31 0a 43 6f 6e 66 69 67 2d 62 65  SAFE=1.Config-be
1c80: 67 69 6e 20 63 31 2e 0a 42 65 67 69 6e 20 63 31  gin c1..Begin c1
1c90: 2e 70 61 67 65 72 30 38 0a 45 6e 64 20 63 31 2e  .pager08.End c1.
1ca0: 70 61 67 65 72 30 38 0a 42 65 67 69 6e 20 63 31  pager08.Begin c1
1cb0: 2e 62 75 69 6c 64 33 33 0a 45 6e 64 20 63 31 2e  .build33.End c1.
1cc0: 62 75 69 6c 64 33 33 0a 42 65 67 69 6e 20 63 31  build33.Begin c1
1cd0: 2e 6f 72 64 65 72 62 79 30 31 0a 45 6e 64 20 63  .orderby01.End c
1ce0: 31 2e 6f 72 64 65 72 62 79 30 31 0a 3c 69 3e 2e  1.orderby01.<i>.
1cf0: 2e 2e 20 31 35 30 31 34 20 6c 69 6e 65 73 20 6f  .. 15014 lines o
1d00: 66 20 6f 75 74 70 75 74 20 6f 6d 69 74 74 65 64  f output omitted
1d10: 20 2e 2e 2e 2e 3c 2f 69 3e 0a 42 65 67 69 6e 20   ....</i>.Begin 
1d20: 36 34 6b 2e 73 79 73 63 61 6c 6c 30 31 0a 45 6e  64k.syscall01.En
1d30: 64 20 36 34 6b 2e 73 79 73 63 61 6c 6c 30 31 0a  d 64k.syscall01.
1d40: 42 65 67 69 6e 20 36 34 6b 2e 62 75 69 6c 64 30  Begin 64k.build0
1d50: 31 0a 45 6e 64 20 36 34 6b 2e 62 75 69 6c 64 30  1.End 64k.build0
1d60: 31 0a 42 65 67 69 6e 20 36 34 6b 2e 61 75 74 68  1.Begin 64k.auth
1d70: 30 31 0a 45 6e 64 20 36 34 6b 2e 61 75 74 68 30  01.End 64k.auth0
1d80: 31 0a 43 6f 6e 66 69 67 2d 65 6e 64 20 36 34 6b  1.Config-end 64k
1d90: 2e 20 54 48 33 20 6d 65 6d 6f 72 79 20 75 73 65  . TH3 memory use
1da0: 64 3a 20 36 33 37 33 37 33 38 0a 43 6f 6e 66 69  d: 6373738.Confi
1db0: 67 2d 62 65 67 69 6e 20 77 61 6c 31 2e 0a 42 65  g-begin wal1..Be
1dc0: 67 69 6e 20 77 61 6c 31 2e 77 61 6c 33 37 0a 45  gin wal1.wal37.E
1dd0: 6e 64 20 77 61 6c 31 2e 77 61 6c 33 37 0a 43 6f  nd wal1.wal37.Co
1de0: 6e 66 69 67 2d 65 6e 64 20 77 61 6c 31 2e 20 54  nfig-end wal1. T
1df0: 48 33 20 6d 65 6d 6f 72 79 20 75 73 65 64 3a 20  H3 memory used: 
1e00: 31 30 30 39 36 31 0a 41 6c 6c 20 32 32 36 20 56  100961.All 226 V
1e10: 44 42 45 20 63 6f 76 65 72 61 67 65 20 70 6f 69  DBE coverage poi
1e20: 6e 74 73 20 72 65 61 63 68 65 64 0a 74 68 33 3a  nts reached.th3:
1e30: 20 30 20 65 72 72 6f 72 73 20 6f 75 74 20 6f 66   0 errors out of
1e40: 20 31 34 34 32 32 36 34 20 74 65 73 74 73 20 69   1442264 tests i
1e50: 6e 20 32 31 33 2e 37 34 31 20 73 65 63 6f 6e 64  n 213.741 second
1e60: 73 2e 20 36 34 2d 62 69 74 20 6c 69 74 74 6c 65  s. 64-bit little
1e70: 2d 65 6e 64 69 61 6e 0a 74 68 33 3a 20 53 51 4c  -endian.th3: SQL
1e80: 69 74 65 20 33 2e 38 2e 31 31 20 32 30 31 35 2d  ite 3.8.11 2015-
1e90: 30 35 2d 31 35 20 30 34 3a 31 33 3a 31 35 20 35  05-15 04:13:15 5
1ea0: 36 65 66 39 38 61 30 34 37 36 35 63 33 34 63 31  6ef98a04765c34c1
1eb0: 63 32 66 33 65 64 37 61 36 66 30 33 61 37 33 32  c2f3ed7a6f03a732
1ec0: 66 33 62 38 38 36 65 0a 3c 2f 63 6f 64 65 62 6c  f3b886e.</codebl
1ed0: 6f 63 6b 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  ock>..<p>The out
1ee0: 70 75 74 20 62 65 67 69 6e 73 20 77 69 74 68 20  put begins with 
1ef0: 61 20 72 65 70 6f 72 74 20 6f 66 20 74 68 65 20  a report of the 
1f00: 5b 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49  [SQLITE_SOURCE_I
1f10: 44 5d 0a 28 63 72 6f 73 73 2d 63 68 65 63 6b 65  D].(cross-checke
1f20: 64 20 61 67 61 69 6e 20 5b 73 71 6c 69 74 65 33  d again [sqlite3
1f30: 5f 73 6f 75 72 63 65 69 64 28 29 5d 29 20 66 6f  _sourceid()]) fo
1f40: 72 20 74 68 65 0a 53 51 4c 69 74 65 20 75 6e 64  r the.SQLite und
1f50: 65 72 20 74 65 73 74 20 61 6e 64 20 74 68 65 20  er test and the 
1f60: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
1f70: 69 6f 6e 73 20 75 73 65 64 20 61 73 20 72 65 70  ions used as rep
1f80: 6f 72 74 65 64 0a 62 79 20 5b 73 71 6c 69 74 65  orted.by [sqlite
1f90: 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
1fa0: 67 65 74 28 29 5d 2e 20 20 54 68 65 20 6f 75 74  get()].  The out
1fb0: 70 75 74 20 63 6f 6e 63 6c 75 64 65 73 20 77 69  put concludes wi
1fc0: 74 68 20 61 20 73 75 6d 6d 61 72 79 0a 6f 66 20  th a summary.of 
1fd0: 74 68 65 20 74 65 73 74 20 72 65 73 75 6c 74 73  the test results
1fe0: 20 61 6e 64 20 61 20 72 65 70 65 61 74 20 6f 66   and a repeat of
1ff0: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55   the [SQLITE_SOU
2000: 52 43 45 5f 49 44 5d 2e 20 20 49 66 20 61 6e 79  RCE_ID].  If any
2010: 0a 65 72 72 6f 72 73 20 61 72 65 20 64 65 74 65  .errors are dete
2020: 63 74 65 64 2c 20 61 64 64 69 74 69 6f 6e 61 6c  cted, additional
2030: 20 6c 69 6e 65 73 20 64 65 74 61 69 6c 20 74 68   lines detail th
2040: 65 20 70 72 6f 62 6c 65 6d 2e 20 20 54 68 65 20  e problem.  The 
2050: 65 72 72 6f 72 0a 72 65 70 6f 72 74 69 6e 67 20  error.reporting 
2060: 6c 69 6e 65 73 20 61 6c 77 61 79 73 20 62 65 67  lines always beg
2070: 69 6e 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  in with a single
2080: 20 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72   space character
2090: 20 73 6f 20 74 68 61 74 20 74 68 65 79 0a 63 61   so that they.ca
20a0: 6e 20 62 65 20 71 75 69 63 6b 6c 79 20 65 78 74  n be quickly ext
20b0: 72 61 63 74 65 64 20 66 72 6f 6d 20 6c 61 72 67  racted from larg
20c0: 65 20 6f 75 74 70 75 74 20 66 69 6c 65 73 20 75  e output files u
20d0: 73 69 6e 67 3a 0a 0a 3c 63 6f 64 65 62 6c 6f 63  sing:..<codebloc
20e0: 6b 3e 0a 67 72 65 70 20 22 26 23 39 34 3b 20 22  k>.grep "&#94; "
20f0: 0a 3c 2f 63 6f 64 65 62 6c 6f 63 6b 3e 0a 0a 3c  .</codeblock>..<
2100: 70 3e 54 68 65 20 64 65 66 61 75 6c 74 20 6f 75  p>The default ou
2110: 74 70 75 74 20 73 68 6f 77 73 20 74 68 65 20 62  tput shows the b
2120: 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
2130: 20 6f 66 20 65 61 63 68 20 63 6f 6e 66 69 67 75   of each configu
2140: 72 61 74 69 6f 6e 0a 61 6e 64 20 74 65 73 74 20  ration.and test 
2150: 6d 6f 64 75 6c 65 20 63 6f 6d 62 69 6e 61 74 69  module combinati
2160: 6f 6e 2e 20 20 49 6e 20 74 68 65 20 65 78 61 6d  on.  In the exam
2170: 70 6c 65 20 61 62 6f 76 65 20 22 63 31 22 20 61  ple above "c1" a
2180: 6e 64 20 22 36 34 6b 22 20 61 72 65 0a 63 6f 6e  nd "64k" are.con
2190: 66 69 67 75 72 61 74 69 6f 6e 73 20 61 6e 64 20  figurations and 
21a0: 22 70 61 67 65 72 30 38 22 2c 20 22 62 75 69 6c  "pager08", "buil
21b0: 64 33 33 22 2c 20 22 6f 72 64 65 72 62 79 30 31  d33", "orderby01
21c0: 22 2c 20 65 74 63 2e 20 61 72 65 20 74 65 73 74  ", etc. are test
21d0: 20 6d 6f 64 75 6c 65 73 2e 0a 43 6f 6d 70 69 6c   modules..Compil
21e0: 65 2d 74 69 6d 65 20 61 6e 64 20 72 75 6e 2d 74  e-time and run-t
21f0: 69 6d 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 20  ime options are 
2200: 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 69 6e 63  available to inc
2210: 72 65 61 73 65 20 6f 72 20 64 65 63 72 65 61 73  rease or decreas
2220: 65 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  e.the amount of 
2230: 6f 75 74 70 75 74 2e 0a 54 68 65 20 6f 75 74 70  output..The outp
2240: 75 74 20 63 61 6e 20 62 65 20 69 6e 63 72 65 61  ut can be increa
2250: 73 65 64 20 62 79 20 73 68 6f 77 69 6e 67 20 65  sed by showing e
2260: 61 63 68 20 74 65 73 74 20 63 61 73 65 20 77 69  ach test case wi
2270: 74 68 69 6e 20 65 61 63 68 0a 74 65 73 74 20 6d  thin each.test m
2280: 6f 64 75 6c 65 2e 20 20 54 68 65 20 6f 75 74 70  odule.  The outp
2290: 75 74 20 63 61 6e 20 62 65 20 64 65 63 72 65 61  ut can be decrea
22a0: 73 65 64 0a 62 79 20 64 65 67 72 65 65 73 3a 20  sed.by degrees: 
22b0: 6f 6d 69 74 74 69 6e 67 20 74 65 73 74 20 6d 6f  omitting test mo
22c0: 64 75 6c 65 73 20 73 74 61 72 74 73 20 61 6e 64  dules starts and
22d0: 20 73 74 6f 70 73 2c 0a 6f 6d 69 74 74 69 6e 67   stops,.omitting
22e0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
22f0: 74 61 72 74 73 20 61 6e 64 20 73 74 6f 70 73 2c  tarts and stops,
2300: 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 62 79 20   and finally by 
2310: 6f 6d 69 74 74 69 6e 67 20 61 6c 6c 20 6f 75 74  omitting all out
2320: 70 75 74 2e 0a 0a 3c 68 32 3e 54 65 73 74 20 41  put...<h2>Test A
2330: 75 74 6f 6d 61 74 69 6f 6e 20 53 63 72 69 70 74  utomation Script
2340: 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 48 33 20 63  s</h2>..<p>TH3 c
2350: 6f 6d 65 73 20 77 69 74 68 20 61 64 64 69 74 69  omes with additi
2360: 6f 6e 61 6c 20 54 43 4c 20 73 63 72 69 70 74 73  onal TCL scripts
2370: 20 74 68 61 74 20 68 65 6c 70 20 61 75 74 6f 6d   that help autom
2380: 61 74 65 20 74 68 65 20 74 65 73 74 69 6e 67 0a  ate the testing.
2390: 70 72 6f 63 65 73 73 20 6f 6e 20 77 6f 72 6b 73  process on works
23a0: 74 61 74 69 6f 6e 73 2e 20 20 54 68 65 20 22 74  tations.  The "t
23b0: 68 33 6d 61 6b 65 22 20 73 63 72 69 70 74 20 61  h3make" script a
23c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 75 6e  utomatically run
23d0: 73 20 22 6d 6b 74 68 33 2e 74 63 6c 22 0a 61 6e  s "mkth3.tcl".an
23e0: 64 20 22 67 63 63 22 20 61 6e 64 20 74 68 65 6e  d "gcc" and then
23f0: 20 72 75 6e 73 20 74 68 65 20 72 65 73 75 6c 74   runs the result
2400: 69 6e 67 20 74 65 73 74 20 70 72 6f 67 72 61 6d  ing test program
2410: 20 61 6e 64 20 63 68 65 63 6b 73 20 74 68 65 20   and checks the 
2420: 72 65 73 75 6c 74 73 2e 0a 41 72 67 75 6d 65 6e  results..Argumen
2430: 74 73 20 74 6f 20 74 68 33 6d 61 6b 65 20 69 6e  ts to th3make in
2440: 63 6c 75 64 65 20 61 6c 6c 20 6f 66 20 74 68 65  clude all of the
2450: 20 22 2a 2e 74 65 73 74 22 20 74 65 73 74 20 6d   "*.test" test m
2460: 6f 64 75 6c 65 73 20 61 6e 64 20 0a 22 2a 2e 63  odules and ."*.c
2470: 66 67 22 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  fg" configuratio
2480: 6e 73 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  ns that are to b
2490: 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  e included in th
24a0: 65 20 74 65 73 74 2e 20 20 41 64 64 69 74 69 6f  e test.  Additio
24b0: 6e 61 6c 0a 6f 70 74 69 6f 6e 73 20 74 6f 20 74  nal.options to t
24c0: 68 33 6d 61 6b 65 20 63 61 6e 20 63 61 75 73 65  h3make can cause
24d0: 20 74 68 65 20 74 65 73 74 20 70 72 6f 67 72 61   the test progra
24e0: 6d 20 74 6f 20 62 65 20 63 6f 6d 70 69 6c 65 64  m to be compiled
24f0: 20 75 73 69 6e 67 20 64 69 66 66 65 72 65 6e 74   using different
2500: 0a 63 6f 6d 70 69 6c 65 72 73 20 28 47 43 43 2c  .compilers (GCC,
2510: 20 43 6c 61 6e 67 2c 20 4d 53 56 43 29 2c 20 74   Clang, MSVC), t
2520: 6f 20 75 73 65 20 64 69 66 66 65 72 65 6e 74 20  o use different 
2530: 6f 75 74 70 75 74 20 76 65 72 62 6f 73 69 74 79  output verbosity
2540: 20 6c 65 76 65 6c 73 2c 20 74 6f 0a 72 75 6e 20   levels, to.run 
2550: 74 68 65 20 74 65 73 74 20 70 72 6f 67 72 61 6d  the test program
2560: 20 75 6e 64 65 72 20 76 61 6c 67 72 69 6e 64 2c   under valgrind,
2570: 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20 6f 75   to check the ou
2580: 74 70 75 74 20 66 6f 72 20 63 6f 76 65 72 61 67  tput for coverag
2590: 65 20 75 73 69 6e 67 0a 67 63 6f 76 2c 20 61 6e  e using.gcov, an
25a0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 54 68 65  d so forth.  The
25b0: 20 74 68 33 6d 61 6b 65 20 73 63 72 69 70 74 20   th3make script 
25c0: 61 6c 73 6f 20 61 63 63 65 70 74 73 20 22 2a 2e  also accepts "*.
25d0: 72 63 22 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  rc" filenames as
25e0: 0a 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65  .arguments.  The
25f0: 73 65 20 2a 2e 72 63 20 66 69 6c 65 73 20 61 72  se *.rc files ar
2600: 65 20 6a 75 73 74 20 63 6f 6c 6c 65 63 74 69 6f  e just collectio
2610: 6e 73 20 6f 66 20 6f 74 68 65 72 20 61 72 67 75  ns of other argu
2620: 6d 65 6e 74 73 20 74 68 61 74 0a 61 72 65 20 63  ments that.are c
2630: 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 74 6f 67  ommonly used tog
2640: 65 74 68 65 72 20 66 6f 72 20 61 20 73 69 6e 67  ether for a sing
2650: 6c 65 20 70 75 72 70 6f 73 65 2e 20 20 46 6f 72  le purpose.  For
2660: 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 22 71   example, the "q
2670: 75 69 63 6b 2e 72 63 22 0a 66 69 6c 65 20 63 6f  uick.rc".file co
2680: 6e 74 61 69 6e 73 20 61 20 73 65 74 20 6f 66 20  ntains a set of 
2690: 65 69 67 68 74 20 61 72 67 75 6d 65 6e 74 73 20  eight arguments 
26a0: 74 6f 20 74 68 33 6d 61 6b 65 20 74 68 61 74 20  to th3make that 
26b0: 72 75 6e 20 61 20 66 61 73 74 20 28 33 2d 6d 69  run a fast (3-mi
26c0: 6e 75 74 65 29 0a 66 75 6c 6c 2d 63 6f 76 65 72  nute).full-cover
26d0: 61 67 65 20 74 65 73 74 2e 20 20 54 68 69 73 20  age test.  This 
26e0: 61 6c 6c 6f 77 73 20 74 68 65 20 6f 70 65 72 61  allows the opera
26f0: 74 6f 72 20 74 6f 20 74 79 70 65 20 22 2e 2f 74  tor to type "./t
2700: 68 33 6d 61 6b 65 20 71 75 69 63 6b 2e 72 63 22  h3make quick.rc"
2710: 20 61 73 0a 61 20 73 68 6f 72 74 2d 63 75 74 20   as.a short-cut 
2720: 74 6f 20 74 79 70 69 6e 67 20 6f 75 74 20 61 6c  to typing out al
2730: 6c 20 6f 66 20 74 68 65 20 72 65 71 75 69 72 65  l of the require
2740: 64 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  d command-line o
2750: 70 74 69 6f 6e 73 2e 20 20 54 68 65 0a 66 6f 6c  ptions.  The.fol
2760: 6c 6f 77 69 6e 67 20 61 72 65 20 61 20 66 65 77  lowing are a few
2770: 20 6f 66 20 74 68 65 20 6d 6f 72 65 20 74 68 61   of the more tha
2780: 6e 20 34 30 20 61 76 61 69 6c 61 62 6c 65 20 2a  n 40 available *
2790: 2e 72 63 20 66 69 6c 65 73 3a 0a 0a 3c 75 6c 3e  .rc files:..<ul>
27a0: 0a 3c 6c 69 3e 3c 62 3e 61 6c 69 67 6e 6d 65 6e  .<li><b>alignmen
27b0: 74 3c 2f 62 3e 3c 69 3e 4e 3c 2f 69 3e 3c 62 3e  t</b><i>N</i><b>
27c0: 2e 72 63 3c 2f 62 3e 20 2d 20 0a 20 20 20 20 54  .rc</b> - .    T
27d0: 68 65 73 65 20 66 69 6c 65 73 20 63 6f 6e 74 61  hese files conta
27e0: 69 6e 20 2d 44 20 6f 70 74 69 6f 6e 73 20 74 6f  in -D options to
27f0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
2800: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 0a 20  at are used by. 
2810: 20 20 20 76 61 72 69 6f 75 73 20 6e 6f 74 61 62     various notab
2820: 6c 65 20 64 6f 77 6e 73 74 72 65 61 6d 73 2e 0a  le downstreams..
2830: 3c 6c 69 3e 3c 62 3e 63 6f 76 2e 72 63 3c 2f 62  <li><b>cov.rc</b
2840: 3e 20 2d 20 4f 70 74 69 6f 6e 73 20 66 6f 72 20  > - Options for 
2850: 6d 65 61 73 75 72 69 6e 67 20 74 65 73 74 20 63  measuring test c
2860: 6f 76 65 72 61 67 65 0a 3c 6c 69 3e 3c 62 3e 65  overage.<li><b>e
2870: 78 74 65 6e 73 69 6f 6e 73 2e 72 63 3c 2f 62 3e  xtensions.rc</b>
2880: 20 2d 20 4f 70 74 69 6f 6e 73 20 74 6f 20 65 6e   - Options to en
2890: 61 62 6c 65 20 5b 46 54 53 34 5d 2c 20 5b 52 2d  able [FTS4], [R-
28a0: 54 72 65 65 73 5d 2c 0a 20 20 20 20 61 6e 64 20  Trees],.    and 
28b0: 5b 53 51 4c 49 54 45 5f 53 54 41 54 34 7c 53 54  [SQLITE_STAT4|ST
28c0: 41 54 34 5d 2e 0a 3c 6c 69 3e 3c 62 3e 66 61 73  AT4]..<li><b>fas
28d0: 74 2e 72 63 3c 2f 62 3e 20 2d 20 52 75 6e 20 6d  t.rc</b> - Run m
28e0: 6f 73 74 20 74 65 73 74 73 2c 20 69 6e 63 6c 75  ost tests, inclu
28f0: 64 69 6e 67 20 74 68 6f 73 65 20 6e 6f 74 20 6e  ding those not n
2900: 65 65 64 65 64 20 66 6f 72 0a 20 20 20 20 63 6f  eeded for.    co
2910: 76 65 72 61 67 65 2c 20 73 6b 69 70 70 69 6e 67  verage, skipping
2920: 20 6f 6e 6c 79 20 73 6f 61 6b 20 74 65 73 74 73   only soak tests
2930: 2c 20 75 73 69 6e 67 20 64 65 6c 69 76 65 72 79  , using delivery
2940: 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e   compiler option
2950: 73 0a 20 20 20 20 28 65 78 3a 20 2d 4f 33 29 0a  s.    (ex: -O3).
2960: 3c 6c 69 3e 3c 62 3e 6d 65 6d 64 65 62 75 67 2e  <li><b>memdebug.
2970: 72 63 3c 2f 62 3e 20 2d 20 6c 69 6b 65 20 74 65  rc</b> - like te
2980: 73 74 2e 72 63 20 62 75 74 20 61 6c 73 6f 20 65  st.rc but also e
2990: 6e 61 62 6c 65 0a 20 20 20 20 5b 53 51 4c 49 54  nable.    [SQLIT
29a0: 45 5f 4d 45 4d 44 45 42 55 47 7c 2d 44 53 51 4c  E_MEMDEBUG|-DSQL
29b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 5d 2e 0a 3c  ITE_MEMDEBUG]..<
29c0: 6c 69 3e 3c 62 3e 6d 69 6e 2e 72 63 3c 2f 62 3e  li><b>min.rc</b>
29d0: 20 2d 20 52 75 6e 20 74 68 65 20 6d 69 6e 69 6d   - Run the minim
29e0: 75 6d 20 73 65 74 20 6f 66 20 74 65 73 74 73 20  um set of tests 
29f0: 6e 65 65 64 65 64 20 66 6f 72 20 31 30 30 25 20  needed for 100% 
2a00: 63 6f 76 65 72 61 67 65 2e 0a 3c 6c 69 3e 3c 62  coverage..<li><b
2a10: 3e 71 75 69 63 6b 2e 72 63 3c 2f 62 3e 20 2d 20  >quick.rc</b> - 
2a20: 52 75 6e 20 61 6c 6c 20 74 65 73 74 73 20 72 65  Run all tests re
2a30: 71 75 69 72 65 64 20 66 6f 72 20 31 30 30 25 20  quired for 100% 
2a40: 63 6f 76 65 72 61 67 65 20 74 65 73 74 73 0a 20  coverage tests. 
2a50: 20 20 20 75 73 69 6e 67 20 2d 4f 73 20 61 6e 64     using -Os and
2a60: 20 5b 53 51 4c 49 54 45 5f 44 45 42 55 47 7c 2d   [SQLITE_DEBUG|-
2a70: 44 53 51 4c 49 54 45 5f 44 45 42 55 47 5d 2e 0a  DSQLITE_DEBUG]..
2a80: 3c 6c 69 3e 3c 62 3e 74 65 73 74 2e 72 63 3c 2f  <li><b>test.rc</
2a90: 62 3e 20 2d 20 52 75 6e 20 74 68 65 20 73 61 6d  b> - Run the sam
2aa0: 65 20 74 65 73 74 73 20 61 73 20 69 6e 20 66 61  e tests as in fa
2ab0: 73 74 2e 72 63 20 62 75 74 20 77 69 74 68 6f 75  st.rc but withou
2ac0: 74 0a 20 20 20 20 63 6f 6d 70 69 6c 65 72 20 6f  t.    compiler o
2ad0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 61 6e 64 20  ptimization and 
2ae0: 65 6e 61 62 6c 69 6e 67 20 6f 70 74 69 6f 6e 73  enabling options
2af0: 20 6c 69 6b 65 0a 20 20 20 20 5b 53 51 4c 49 54   like.    [SQLIT
2b00: 45 5f 44 45 42 55 47 7c 2d 44 53 51 4c 49 54 45  E_DEBUG|-DSQLITE
2b10: 5f 44 45 42 55 47 5d 20 61 6e 64 0a 20 20 20 20  _DEBUG] and.    
2b20: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
2b30: 45 58 50 45 4e 53 49 56 45 5f 41 53 53 45 52 54  EXPENSIVE_ASSERT
2b40: 2e 0a 3c 6c 69 3e 3c 62 3e 74 65 73 74 2d 65 78  ..<li><b>test-ex
2b50: 2e 72 63 3c 2f 62 3e 20 2d 20 6c 6f 6e 67 2d 72  .rc</b> - long-r
2b60: 75 6e 6e 69 6e 67 20 73 6f 61 6b 20 74 65 73 74  unning soak test
2b70: 73 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68 65  s..</ul>..<p>The
2b80: 20 54 48 33 20 72 65 70 6f 73 69 74 6f 72 79 20   TH3 repository 
2b90: 61 6c 73 6f 20 69 6e 63 6c 75 64 65 73 20 74 68  also includes th
2ba0: 65 20 22 6d 75 6c 74 69 74 65 73 74 2e 74 63 6c  e "multitest.tcl
2bb0: 22 20 73 63 72 69 70 74 2c 20 61 6e 6f 74 68 65  " script, anothe
2bc0: 72 0a 54 43 4c 20 73 63 72 69 70 74 20 75 73 65  r.TCL script use
2bd0: 64 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 54 48  d to automate TH
2be0: 33 20 74 65 73 74 69 6e 67 20 6f 6e 20 77 6f 72  3 testing on wor
2bf0: 6b 73 74 61 74 69 6f 6e 73 2e 20 20 4d 75 6c 74  kstations.  Mult
2c00: 69 74 65 73 74 2e 74 63 6c 0a 61 75 74 6f 6d 61  itest.tcl.automa
2c10: 74 69 63 61 6c 6c 79 20 63 6f 6d 70 69 6c 65 73  tically compiles
2c20: 20 53 51 4c 69 74 65 2c 20 74 68 65 6e 0a 72 75   SQLite, then.ru
2c30: 6e 73 20 2e 2f 74 68 33 6d 61 6b 65 20 72 65 70  ns ./th3make rep
2c40: 65 61 74 65 64 6c 79 20 77 69 74 68 20 61 20 76  eatedly with a v
2c50: 61 72 69 65 74 79 20 6f 66 20 61 6c 69 67 6e 6d  ariety of alignm
2c60: 65 6e 74 73 2c 20 61 6e 64 20 63 61 70 74 75 72  ents, and captur
2c70: 65 73 0a 74 68 65 20 6f 75 74 70 75 74 20 69 6e  es.the output in
2c80: 20 61 20 73 75 63 63 69 6e 63 74 20 73 75 6d 6d   a succinct summ
2c90: 61 72 79 20 73 63 72 65 65 6e 2e 20 20 41 20 74  ary screen.  A t
2ca0: 79 70 69 63 61 6c 20 6d 75 6c 74 69 74 65 73 74  ypical multitest
2cb0: 2e 74 63 6c 20 72 75 6e 0a 67 65 6e 65 72 61 74  .tcl run.generat
2cc0: 65 73 20 6f 75 74 70 75 74 20 74 68 61 74 20 6c  es output that l
2cd0: 6f 6f 6b 73 20 6c 69 6b 65 20 74 68 69 73 3a 0a  ooks like this:.
2ce0: 0a 3c 63 6f 64 65 62 6c 6f 63 6b 3e 0a 2e 2f 6d  .<codeblock>../m
2cf0: 75 6c 74 69 74 65 73 74 2e 74 63 6c 20 2d 71 20  ultitest.tcl -q 
2d00: 2d 2d 6a 6f 62 73 20 33 0a 73 74 61 72 74 2d 74  --jobs 3.start-t
2d10: 69 6d 65 3a 20 32 30 31 38 2d 30 35 2d 31 39 20  ime: 2018-05-19 
2d20: 30 33 3a 31 37 3a 31 32 20 55 54 43 0a 66 69 6c  03:17:12 UTC.fil
2d30: 65 20 6d 6b 64 69 72 20 73 71 6c 69 74 65 33 62  e mkdir sqlite3b
2d40: 6c 64 0a 63 64 20 73 71 6c 69 74 65 33 62 6c 64  ld.cd sqlite3bld
2d50: 0a 65 78 65 63 20 73 68 20 2f 72 61 6d 64 69 73  .exec sh /ramdis
2d60: 6b 2f 73 71 6c 69 74 65 2f 63 6f 6e 66 69 67 75  k/sqlite/configu
2d70: 72 65 0a 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f  re.file copy -fo
2d80: 72 63 65 20 63 6f 6e 66 69 67 2e 68 20 2e 2e 2f  rce config.h ../
2d90: 63 6f 6e 66 69 67 2e 68 0a 65 78 65 63 20 6d 61  config.h.exec ma
2da0: 6b 65 20 63 6c 65 61 6e 20 73 71 6c 69 74 65 33  ke clean sqlite3
2db0: 2e 63 0a 66 69 6c 65 20 72 65 6e 61 6d 65 20 73  .c.file rename s
2dc0: 71 6c 69 74 65 33 2e 63 20 2e 2e 2f 73 71 6c 69  qlite3.c ../sqli
2dd0: 74 65 33 2e 63 0a 66 69 6c 65 20 72 65 6e 61 6d  te3.c.file renam
2de0: 65 20 73 71 6c 69 74 65 33 2e 68 20 2e 2e 2f 73  e sqlite3.h ../s
2df0: 71 6c 69 74 65 33 2e 68 0a 65 78 65 63 20 6d 61  qlite3.h.exec ma
2e00: 6b 65 20 63 6c 65 61 6e 20 73 71 6c 69 74 65 33  ke clean sqlite3
2e10: 2e 63 20 4f 50 54 53 3d 2d 44 53 51 4c 49 54 45  .c OPTS=-DSQLITE
2e20: 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
2e30: 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 66 69  ELETE_LIMIT=1.fi
2e40: 6c 65 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65  le rename sqlite
2e50: 33 2e 63 20 2e 2e 2f 73 71 6c 69 74 65 33 75 64  3.c ../sqlite3ud
2e60: 6c 2e 63 0a 65 78 65 63 20 6d 61 6b 65 20 63 6c  l.c.exec make cl
2e70: 65 61 6e 20 73 71 6c 69 74 65 33 2e 63 20 4f 50  ean sqlite3.c OP
2e80: 54 53 3d 2d 44 53 51 4c 49 54 45 5f 53 4d 41 4c  TS=-DSQLITE_SMAL
2e90: 4c 5f 53 54 41 43 4b 3d 31 0a 66 69 6c 65 20 72  L_STACK=1.file r
2ea0: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 2e 63 20  ename sqlite3.c 
2eb0: 2e 2e 2f 73 71 6c 69 74 65 33 73 73 2e 63 0a 63  ../sqlite3ss.c.c
2ec0: 64 20 2e 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d ...***********
2ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f10: 2a 2a 2a 2a 0a 74 30 31 3a 20 63 6f 76 2e 72 63  ****.t01: cov.rc
2f20: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2f30: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2f40: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2f50: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 33  .... Ok   (00:03
2f60: 3a 34 32 29 0a 74 30 32 3a 20 63 6f 76 2e 72 63  :42).t02: cov.rc
2f70: 20 2b 2b 53 54 41 54 34 20 2b 2b 44 45 53 45 52   ++STAT4 ++DESER
2f80: 49 41 4c 49 5a 45 20 2d 44 5f 48 41 56 45 5f 53  IALIZE -D_HAVE_S
2f90: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 2e 2e  QLITE_CONFIG_H..
2fa0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 34  .... Ok   (00:04
2fb0: 3a 34 35 29 0a 74 30 33 3a 20 76 66 73 2d 63 6f  :45).t03: vfs-co
2fc0: 76 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  v.rc............
2fd0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2fe0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2ff0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 33  .... Ok   (00:03
3000: 3a 35 39 29 0a 74 30 34 3a 20 64 65 6d 6f 2e 72  :59).t04: demo.r
3010: 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  c...............
3020: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3030: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3040: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 30  .... Ok   (00:00
3050: 3a 30 35 29 0a 74 30 37 3a 20 74 65 73 74 2e 72  :05).t07: test.r
3060: 63 20 2e 2e 2f 74 68 33 70 72 69 76 61 74 65 2f  c ../th3private/
3070: 2a 2e 74 65 73 74 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  *.test..........
3080: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3090: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 30  .... Ok   (00:00
30a0: 3a 32 31 29 0a 74 30 38 3a 20 74 65 73 74 2e 72  :21).t08: test.r
30b0: 63 20 2e 2e 2f 74 68 33 70 72 69 76 61 74 65 2f  c ../th3private/
30c0: 2a 2e 74 65 73 74 20 2b 2b 53 54 41 54 34 2e 2e  *.test ++STAT4..
30d0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
30e0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 31  .... Ok   (00:01
30f0: 3a 34 31 29 0a 74 30 35 3a 20 71 75 69 63 6b 2e  :41).t05: quick.
3100: 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  rc..............
3110: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3120: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3130: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 34  .... Ok   (00:04
3140: 3a 32 36 29 0a 74 30 39 3a 20 71 75 69 63 6b 2e  :26).t09: quick.
3150: 72 63 20 7e 54 45 53 54 5f 52 45 41 4c 4c 4f 43  rc ~TEST_REALLOC
3160: 5f 53 54 52 45 53 53 20 2d 66 75 6e 73 69 67 6e  _STRESS -funsign
3170: 65 64 2d 63 68 61 72 2e 2e 2e 2e 2e 2e 2e 2e 2e  ed-char.........
3180: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 35  .... Ok   (00:05
3190: 3a 33 39 29 0a 74 31 30 3a 20 71 75 69 63 6b 2e  :39).t10: quick.
31a0: 72 63 20 7e 54 48 52 45 41 44 53 41 46 45 3d 30  rc ~THREADSAFE=0
31b0: 20 2d 44 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59   -DLONGDOUBLE_TY
31c0: 50 45 3d 64 6f 75 62 6c 65 2e 2e 2e 2e 2e 2e 2e  PE=double.......
31d0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 33  .... Ok   (00:03
31e0: 3a 32 34 29 0a 74 30 36 3a 20 71 75 69 63 6b 2e  :24).t06: quick.
31f0: 72 63 20 65 78 74 65 6e 73 69 6f 6e 73 2e 72 63  rc extensions.rc
3200: 20 2d 44 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f   -D_HAVE_SQLITE_
3210: 43 4f 4e 46 49 47 5f 48 2e 2e 2e 2e 2e 2e 2e 2e  CONFIG_H........
3220: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 39  .... Ok   (00:09
3230: 3a 30 33 29 0a 74 31 31 3a 20 71 75 69 63 6b 2e  :03).t11: quick.
3240: 72 63 20 73 71 6c 69 74 65 33 73 73 2e 63 20 7e  rc sqlite3ss.c ~
3250: 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35  MAX_ATTACHED=125
3260: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3270: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 34  .... Ok   (00:04
3280: 3a 33 39 29 0a 74 31 32 3a 20 71 75 69 63 6b 2e  :39).t12: quick.
3290: 72 63 20 7e 42 59 54 45 4f 52 44 45 52 3d 30 20  rc ~BYTEORDER=0 
32a0: 2b 2b 52 54 52 45 45 2e 2e 2e 2e 2e 2e 2e 2e 2e  ++RTREE.........
32b0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
32c0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 37  .... Ok   (00:07
32d0: 3a 32 38 29 0a 74 31 33 3a 20 71 75 69 63 6b 2e  :28).t13: quick.
32e0: 72 63 20 7e 44 49 53 41 42 4c 45 5f 49 4e 54 52  rc ~DISABLE_INTR
32f0: 49 4e 53 49 43 20 2b 2b 52 54 52 45 45 2e 2e 2e  INSIC ++RTREE...
3300: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3310: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 37  .... Ok   (00:07
3320: 3a 33 31 29 0a 74 31 36 3a 20 71 75 69 63 6b 2e  :31).t16: quick.
3330: 72 63 20 7e 54 52 41 43 45 5f 53 49 5a 45 5f 4c  rc ~TRACE_SIZE_L
3340: 49 4d 49 54 3d 31 35 20 63 6f 76 31 2f 6d 61 69  IMIT=15 cov1/mai
3350: 6e 31 36 2e 74 65 73 74 2e 2e 2e 2e 2e 2e 2e 2e  n16.test........
3360: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 30  .... Ok   (00:00
3370: 3a 32 32 29 0a 74 31 34 3a 20 71 75 69 63 6b 2e  :22).t14: quick.
3380: 72 63 20 7e 44 49 52 45 43 54 5f 4f 56 45 52 46  rc ~DIRECT_OVERF
3390: 4c 4f 57 5f 52 45 41 44 20 2d 66 73 69 67 6e 65  LOW_READ -fsigne
33a0: 64 2d 63 68 61 72 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  d-char..........
33b0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 34  .... Ok   (00:04
33c0: 3a 33 35 29 0a 74 31 35 3a 20 71 75 69 63 6b 2e  :35).t15: quick.
33d0: 72 63 20 7e 55 4e 54 45 53 54 41 42 4c 45 20 7e  rc ~UNTESTABLE ~
33e0: 45 58 54 52 41 5f 49 46 4e 55 4c 4c 52 4f 57 2e  EXTRA_IFNULLROW.
33f0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3400: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 31  .... Ok   (00:01
3410: 3a 34 34 29 0a 74 31 37 3a 20 71 75 69 63 6b 2e  :44).t17: quick.
3420: 72 63 20 7e 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  rc ~MAX_MMAP_SIZ
3430: 45 3d 30 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  E=0.............
3440: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3450: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 34  .... Ok   (00:04
3460: 3a 34 36 29 0a 74 31 38 3a 20 71 75 69 63 6b 2e  :46).t18: quick.
3470: 72 63 20 2b 2b 4e 55 4c 4c 5f 54 52 49 4d 20 2b  rc ++NULL_TRIM +
3480: 2b 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  +OFFSET_SQL_FUNC
3490: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
34a0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 34  .... Ok   (00:04
34b0: 3a 34 37 29 0a 74 31 39 3a 20 71 75 69 63 6b 2e  :47).t19: quick.
34c0: 72 63 20 2b 2b 42 41 54 43 48 5f 41 54 4f 4d 49  rc ++BATCH_ATOMI
34d0: 43 5f 57 52 49 54 45 20 2b 2b 44 45 53 45 52 49  C_WRITE ++DESERI
34e0: 41 4c 49 5a 45 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ALIZE...........
34f0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 35  .... Ok   (00:05
3500: 3a 34 31 29 0a 74 32 30 3a 20 6c 65 61 6e 31 2e  :41).t20: lean1.
3510: 72 63 20 71 75 69 63 6b 2e 72 63 2e 2e 2e 2e 2e  rc quick.rc.....
3520: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3530: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3540: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 30 33  .... Ok   (00:03
3550: 3a 30 39 29 0a 74 32 32 3a 20 74 65 73 74 2e 72  :09).t22: test.r
3560: 63 20 61 6c 69 67 6e 6d 65 6e 74 32 2e 72 63 20  c alignment2.rc 
3570: 73 71 6c 69 74 65 33 75 64 6c 2e 63 2e 2e 2e 2e  sqlite3udl.c....
3580: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3590: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 34 34  .... Ok   (00:44
35a0: 3a 32 32 29 0a 74 32 31 3a 20 74 65 73 74 2e 72  :22).t21: test.r
35b0: 63 20 61 6c 69 67 6e 6d 65 6e 74 31 2e 72 63 2e  c alignment1.rc.
35c0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
35d0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
35e0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 30 32  .... Ok   (01:02
35f0: 3a 33 32 29 0a 74 32 33 3a 20 6d 65 6d 64 65 62  :32).t23: memdeb
3600: 75 67 31 2e 72 63 20 65 78 74 65 6e 73 69 6f 6e  ug1.rc extension
3610: 73 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  s.rc............
3620: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3630: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 34 39  .... Ok   (01:49
3640: 3a 35 38 29 0a 74 32 35 3a 20 76 61 6c 67 72 69  :58).t25: valgri
3650: 6e 64 31 2e 72 63 20 2d 4f 33 20 65 78 74 65 6e  nd1.rc -O3 exten
3660: 73 69 6f 6e 73 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e  sions.rc........
3670: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3680: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 35 36  .... Ok   (00:56
3690: 3a 30 38 29 0a 74 32 34 3a 20 6d 65 6d 64 65 62  :08).t24: memdeb
36a0: 75 67 32 2e 72 63 20 65 78 74 65 6e 73 69 6f 6e  ug2.rc extension
36b0: 73 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  s.rc............
36c0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
36d0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 34 33  .... Ok   (01:43
36e0: 3a 33 34 29 0a 74 32 37 3a 20 74 65 73 74 2d 65  :34).t27: test-e
36f0: 78 31 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  x1.rc...........
3700: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3710: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3720: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 34 35  .... Ok   (00:45
3730: 3a 30 30 29 0a 74 32 36 3a 20 76 61 6c 67 72 69  :00).t26: valgri
3740: 6e 64 32 2e 72 63 20 2d 4f 33 20 65 78 74 65 6e  nd2.rc -O3 exten
3750: 73 69 6f 6e 73 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e  sions.rc........
3760: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3770: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 30 32  .... Ok   (01:02
3780: 3a 35 32 29 0a 74 32 39 3a 20 74 65 73 74 2d 65  :52).t29: test-e
3790: 78 33 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  x3.rc...........
37a0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
37b0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
37c0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 33 31  .... Ok   (00:31
37d0: 3a 34 38 29 0a 74 32 38 3a 20 74 65 73 74 2d 65  :48).t28: test-e
37e0: 78 32 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  x2.rc...........
37f0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3800: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3810: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 31 32  .... Ok   (01:12
3820: 3a 30 33 29 0a 74 33 30 3a 20 74 65 73 74 2d 65  :03).t30: test-e
3830: 78 34 2e 72 63 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  x4.rc...........
3840: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3850: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3860: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 30 39  .... Ok   (01:09
3870: 3a 34 37 29 0a 74 33 32 3a 20 74 65 73 74 2e 72  :47).t32: test.r
3880: 63 20 61 6c 69 67 6e 6d 65 6e 74 34 2e 72 63 20  c alignment4.rc 
3890: 2d 6d 33 32 20 43 43 3d 63 6c 61 6e 67 2e 2e 2e  -m32 CC=clang...
38a0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
38b0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 34 38  .... Ok   (00:48
38c0: 3a 33 31 29 0a 74 33 31 3a 20 74 65 73 74 2e 72  :31).t31: test.r
38d0: 63 20 61 6c 69 67 6e 6d 65 6e 74 33 2e 72 63 20  c alignment3.rc 
38e0: 73 71 6c 69 74 65 33 75 64 6c 2e 63 2e 2e 2e 2e  sqlite3udl.c....
38f0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3900: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 31 3a 32 32  .... Ok   (01:22
3910: 3a 32 39 29 0a 74 33 34 3a 20 74 65 73 74 2e 72  :29).t34: test.r
3920: 63 20 61 6c 69 67 6e 6d 65 6e 74 36 2e 72 63 2e  c alignment6.rc.
3930: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3940: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3950: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 33 35  .... Ok   (00:35
3960: 3a 33 31 29 0a 74 33 33 3a 20 74 65 73 74 2e 72  :31).t33: test.r
3970: 63 20 61 6c 69 67 6e 6d 65 6e 74 35 2e 72 63 20  c alignment5.rc 
3980: 65 78 74 65 6e 73 69 6f 6e 73 2e 72 63 2e 2e 2e  extensions.rc...
3990: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
39a0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 35 39  .... Ok   (00:59
39b0: 3a 33 33 29 0a 74 33 35 3a 20 74 65 73 74 2e 72  :33).t35: test.r
39c0: 63 20 61 6c 69 67 6e 6d 65 6e 74 37 2e 72 63 2e  c alignment7.rc.
39d0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
39e0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
39f0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 34 34  .... Ok   (00:44
3a00: 3a 31 30 29 0a 74 34 30 3a 20 66 61 73 74 2e 72  :10).t40: fast.r
3a10: 63 20 61 6c 69 67 6e 6d 65 6e 74 32 2e 72 63 20  c alignment2.rc 
3a20: 73 71 6c 69 74 65 33 75 64 6c 2e 63 2e 2e 2e 2e  sqlite3udl.c....
3a30: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3a40: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 31 35  .... Ok   (00:15
3a50: 3a 34 36 29 0a 74 33 39 3a 20 66 61 73 74 2e 72  :46).t39: fast.r
3a60: 63 20 61 6c 69 67 6e 6d 65 6e 74 31 2e 72 63 20  c alignment1.rc 
3a70: 65 78 74 65 6e 73 69 6f 6e 73 2e 72 63 20 2d 6d  extensions.rc -m
3a80: 33 32 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  32..............
3a90: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 33 33  .... Ok   (00:33
3aa0: 3a 31 39 29 0a 74 33 36 3a 20 74 65 73 74 2e 72  :19).t36: test.r
3ab0: 63 20 7e 4d 55 54 41 54 49 4f 4e 5f 54 45 53 54  c ~MUTATION_TEST
3ac0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3ad0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3ae0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 33 35  .... Ok   (00:35
3af0: 3a 34 35 29 0a 74 34 32 3a 20 66 61 73 74 2e 72  :45).t42: fast.r
3b00: 63 20 61 6c 69 67 6e 6d 65 6e 74 34 2e 72 63 2e  c alignment4.rc.
3b10: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3b20: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3b30: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 31 33  .... Ok   (00:13
3b40: 3a 30 33 29 0a 74 34 33 3a 20 66 61 73 74 2e 72  :03).t43: fast.r
3b50: 63 20 61 6c 69 67 6e 6d 65 6e 74 35 2e 72 63 2e  c alignment5.rc.
3b60: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3b70: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3b80: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 31 33  .... Ok   (00:13
3b90: 3a 33 32 29 0a 74 34 34 3a 20 66 61 73 74 2e 72  :32).t44: fast.r
3ba0: 63 20 61 6c 69 67 6e 6d 65 6e 74 36 2e 72 63 2e  c alignment6.rc.
3bb0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3bc0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3bd0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 31 31  .... Ok   (00:11
3be0: 3a 34 31 29 0a 74 34 31 3a 20 66 61 73 74 2e 72  :41).t41: fast.r
3bf0: 63 20 61 6c 69 67 6e 6d 65 6e 74 33 2e 72 63 20  c alignment3.rc 
3c00: 73 71 6c 69 74 65 33 75 64 6c 2e 63 2e 2e 2e 2e  sqlite3udl.c....
3c10: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3c20: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 32 36  .... Ok   (00:26
3c30: 3a 33 31 29 0a 74 34 35 3a 20 66 61 73 74 2e 72  :31).t45: fast.r
3c40: 63 20 61 6c 69 67 6e 6d 65 6e 74 37 2e 72 63 2e  c alignment7.rc.
3c50: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3c60: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3c70: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 31 32  .... Ok   (00:12
3c80: 3a 35 37 29 0a 74 34 36 3a 20 66 61 73 74 2e 72  :57).t46: fast.r
3c90: 63 20 2d 66 73 61 6e 69 74 69 7a 65 3d 75 6e 64  c -fsanitize=und
3ca0: 65 66 69 6e 65 64 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  efined..........
3cb0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
3cc0: 2e 2e 2e 2e 20 4f 6b 20 20 20 28 30 30 3a 33 38  .... Ok   (00:38
3cd0: 3a 31 38 29 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  :18).***********
3ce0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3cf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3d00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3d10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3d20: 2a 2a 2a 2a 0a 30 20 66 61 69 6c 75 72 65 73 20  ****.0 failures 
3d30: 6f 6e 20 34 34 20 74 68 33 6d 61 6b 65 73 20 61  on 44 th3makes a
3d40: 6e 64 20 31 39 38 35 38 33 30 38 32 20 74 65 73  nd 198583082 tes
3d50: 74 73 20 69 6e 20 28 30 37 3a 31 36 3a 30 31 29  ts in (07:16:01)
3d60: 20 33 20 63 6f 72 65 73 20 6f 6e 20 62 65 6c 6c   3 cores on bell
3d70: 61 0a 53 51 4c 69 74 65 20 33 2e 32 34 2e 30 20  a.SQLite 3.24.0 
3d80: 32 30 31 38 2d 30 35 2d 31 38 20 31 37 3a 35 38  2018-05-18 17:58
3d90: 3a 33 33 20 63 36 30 37 31 61 63 39 39 63 66 61  :33 c6071ac99cfa
3da0: 34 62 36 32 37 32 61 63 34 64 37 33 39 66 63 36  4b6272ac4d739fc6
3db0: 31 61 38 35 61 63 62 35 34 34 66 36 63 31 63 32  1a85acb544f6c1c2
3dc0: 61 0a 3c 2f 63 6f 64 65 62 6c 6f 63 6b 3e 0a 0a  a.</codeblock>..
3dd0: 3c 70 3e 41 73 20 63 61 6e 20 62 65 20 73 65 65  <p>As can be see
3de0: 6e 20 61 62 6f 76 65 2c 20 61 20 73 69 6e 67 6c  n above, a singl
3df0: 65 20 72 75 6e 0a 6f 66 20 6d 75 6c 74 69 74 65  e run.of multite
3e00: 73 74 2e 74 63 6c 20 69 6e 76 6f 6b 65 73 20 74  st.tcl invokes t
3e10: 68 33 6d 61 6b 65 20 64 6f 7a 65 6e 73 20 6f 66  h3make dozens of
3e20: 20 74 69 6d 65 73 20 61 6e 64 20 74 61 6b 65 73   times and takes
3e30: 20 62 65 74 77 65 65 6e 20 31 32 20 61 6e 64 20   between 12 and 
3e40: 32 34 0a 43 50 55 20 68 6f 75 72 73 2e 20 20 54  24.CPU hours.  T
3e50: 68 65 20 6d 69 64 64 6c 65 20 73 65 63 74 69 6f  he middle sectio
3e60: 6e 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  n of the output 
3e70: 73 68 6f 77 73 20 74 68 65 20 61 72 67 75 6d 65  shows the argume
3e80: 6e 74 73 20 74 6f 20 65 61 63 68 0a 69 6e 64 69  nts to each.indi
3e90: 76 69 64 75 61 6c 20 74 68 33 6d 61 6b 65 20 72  vidual th3make r
3ea0: 75 6e 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  un and the resul
3eb0: 74 20 61 6e 64 20 65 6c 61 70 73 65 20 74 69 6d  t and elapse tim
3ec0: 65 20 66 6f 72 20 74 68 61 74 20 74 68 33 6d 61  e for that th3ma
3ed0: 6b 65 2e 0a 41 6c 6c 20 62 75 69 6c 64 20 70 72  ke..All build pr
3ee0: 6f 64 75 63 74 73 20 61 6e 64 20 6f 75 74 70 75  oducts and outpu
3ef0: 74 20 66 6f 72 20 74 68 65 20 73 65 70 61 72 61  t for the separa
3f00: 74 65 20 74 68 33 6d 61 6b 65 20 72 75 6e 73 20  te th3make runs 
3f10: 61 72 65 0a 63 61 70 74 75 72 65 73 20 69 6e 20  are.captures in 
3f20: 73 75 62 64 69 72 65 63 74 6f 72 69 65 73 20 66  subdirectories f
3f30: 6f 72 20 70 6f 73 74 2d 74 65 73 74 20 61 6e 61  or post-test ana
3f40: 6c 79 73 69 73 2e 0a 54 68 65 20 74 77 6f 2d 6c  lysis..The two-l
3f50: 69 6e 65 20 73 75 6d 6d 61 72 79 20 61 74 20 74  ine summary at t
3f60: 68 65 20 62 6f 74 74 6f 6d 20 73 68 6f 77 73 20  he bottom shows 
3f70: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
3f80: 20 6f 66 20 65 72 72 6f 72 73 20 61 6e 64 20 74   of errors and t
3f90: 65 73 74 73 0a 6f 76 65 72 20 61 6c 6c 20 74 68  ests.over all th
3fa0: 33 6d 61 6b 65 20 72 75 6e 73 20 61 6e 64 20 74  3make runs and t
3fb0: 68 65 20 74 6f 74 61 6c 20 65 6c 61 70 73 65 20  he total elapse 
3fc0: 74 69 6d 65 2c 20 74 6f 67 65 74 68 65 72 20 77  time, together w
3fd0: 69 74 68 20 74 68 65 20 0a 5b 53 51 4c 49 54 45  ith the .[SQLITE
3fe0: 5f 53 4f 55 52 43 45 5f 49 44 5d 20 69 6e 66 6f  _SOURCE_ID] info
3ff0: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  rmation for the 
4000: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
4010: 65 20 74 68 61 74 20 77 61 73 0a 74 65 73 74 65  e that was.teste
4020: 64 2e 20 20 54 68 69 73 20 73 75 6d 6d 61 72 79  d.  This summary
4030: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
4040: 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 0a  recorded in the.
4050: 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f  <a href="https:/
4060: 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
4070: 63 68 65 63 6b 6c 69 73 74 73 22 3e 72 65 6c 65  checklists">rele
4080: 61 73 65 0a 63 68 65 63 6b 6c 69 73 74 3c 2f 61  ase.checklist</a
4090: 3e 20 64 75 72 69 6e 67 20 66 69 6e 61 6c 20 74  > during final t
40a0: 65 73 74 69 6e 67 2e 0a 0a 3c 70 3e 41 62 62 72  esting...<p>Abbr
40b0: 65 76 69 61 74 69 6f 6e 73 20 61 72 65 20 61 70  eviations are ap
40c0: 70 6c 69 65 64 20 69 6e 20 74 68 65 20 6d 75 6c  plied in the mul
40d0: 74 69 74 65 73 74 2e 74 63 6c 20 6f 75 74 70 75  titest.tcl outpu
40e0: 74 20 73 6f 20 74 68 61 74 0a 65 61 63 68 20 74  t so that.each t
40f0: 68 33 6d 61 6b 65 20 69 6e 76 6f 63 61 74 69 6f  h3make invocatio
4100: 6e 20 77 69 6c 6c 20 66 69 74 20 6f 6e 20 61 20  n will fit on a 
4110: 73 69 6e 67 6c 65 20 38 30 2d 63 6f 6c 75 6d 6e  single 80-column
4120: 20 6f 75 74 70 75 74 20 6c 69 6e 65 2e 0a 54 68   output line..Th
4130: 65 20 69 6e 69 74 69 61 6c 20 22 74 68 33 6d 61  e initial "th3ma
4140: 6b 65 22 20 76 65 72 62 20 69 73 20 6f 6d 69 74  ke" verb is omit
4150: 74 65 64 2e 0a 22 7e 22 20 69 73 20 73 68 6f 72  ted.."~" is shor
4160: 74 68 61 6e 64 20 66 6f 72 20 22 2d 44 53 51 4c  thand for "-DSQL
4170: 49 54 45 5f 22 20 61 6e 64 20 22 2b 2b 22 20 69  ITE_" and "++" i
4180: 73 20 73 74 61 6e 64 73 20 66 6f 72 0a 22 2d 44  s stands for."-D
4190: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 22 2e 20  SQLITE_ENABLE". 
41a0: 20 48 65 6e 63 65 2c 20 6d 75 6c 74 69 74 65 73   Hence, multites
41b0: 74 2e 74 63 6c 20 6f 75 74 70 75 74 20 6c 69 6e  t.tcl output lin
41c0: 65 0a 0a 3c 63 6f 64 65 62 6c 6f 63 6b 3e 0a 71  e..<codeblock>.q
41d0: 75 69 63 6b 2e 72 63 20 7e 44 49 53 41 42 4c 45  uick.rc ~DISABLE
41e0: 5f 49 4e 54 52 49 4e 53 49 43 20 2b 2b 52 54 52  _INTRINSIC ++RTR
41f0: 45 45 0a 3c 2f 63 6f 64 65 62 6c 6f 63 6b 3e 0a  EE.</codeblock>.
4200: 0a 3c 70 3e 52 65 61 6c 6c 79 20 6d 65 61 6e 73  .<p>Really means
4210: 0a 0a 3c 63 6f 64 65 62 6c 6f 63 6b 3e 0a 74 68  ..<codeblock>.th
4220: 33 6d 61 6b 65 20 71 75 69 63 6b 2e 72 63 20 2d  3make quick.rc -
4230: 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  DSQLITE_DISABLE_
4240: 49 4e 54 52 49 4e 53 49 43 20 2d 44 53 51 4c 49  INTRINSIC -DSQLI
4250: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a  TE_ENABLE_RTREE.
4260: 3c 2f 63 6f 64 65 62 6c 6f 63 6b 3e 0a 0a 3c 68  </codeblock>..<h
4270: 31 3e 54 65 73 74 20 43 6f 76 65 72 61 67 65 3c  1>Test Coverage<
4280: 2f 68 31 3e 0a 0a 3c 70 3e 55 73 69 6e 67 20 6f  /h1>..<p>Using o
4290: 6e 65 20 70 61 72 74 69 63 75 6c 61 72 20 73 75  ne particular su
42a0: 62 73 65 74 20 6f 66 20 74 68 65 20 61 76 61 69  bset of the avai
42b0: 6c 61 62 6c 65 20 54 48 33 20 74 65 73 74 20 6d  lable TH3 test m
42c0: 6f 64 75 6c 65 73 20 28 74 68 65 20 22 63 6f 76  odules (the "cov
42d0: 31 22 0a 74 65 73 74 73 29 20 53 51 4c 69 74 65  1".tests) SQLite
42e0: 20 6f 62 74 61 69 6e 65 64 20 0a 5b 74 65 73 74   obtained .[test
42f0: 20 63 6f 76 65 72 61 67 65 20 7c 20 31 30 30 25   coverage | 100%
4300: 20 62 72 61 6e 63 68 20 74 65 73 74 20 63 6f 76   branch test cov
4310: 65 72 61 67 65 5d 20 61 6e 64 20 31 30 30 25 20  erage] and 100% 
4320: 5b 4d 43 2f 44 43 5d 20 61 73 20 6d 65 61 73 75  [MC/DC] as measu
4330: 72 65 64 0a 62 79 20 5b 68 74 74 70 3a 2f 2f 67  red.by [http://g
4340: 63 63 2e 67 6e 75 2e 6f 72 67 2f 6f 6e 6c 69 6e  cc.gnu.org/onlin
4350: 65 64 6f 63 73 2f 67 63 63 2f 47 63 6f 76 2e 68  edocs/gcc/Gcov.h
4360: 74 6d 6c 20 7c 20 67 63 6f 76 5d 0a 6f 6e 20 4c  tml | gcov].on L
4370: 69 6e 75 78 20 78 38 36 20 61 6e 64 20 78 38 36  inux x86 and x86
4380: 5f 36 34 20 68 61 72 64 77 61 72 65 2e 20 20 41  _64 hardware.  A
4390: 6c 6c 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53  ll releases of S
43a0: 51 4c 69 74 65 20 73 69 6e 63 65 0a 5b 76 65 72  QLite since.[ver
43b0: 73 69 6f 6e 20 33 2e 36 2e 31 37 5d 20 28 5b 64  sion 3.6.17] ([d
43c0: 61 74 65 6f 66 3a 33 2e 36 2e 31 37 5d 29 20 68  ateof:3.6.17]) h
43d0: 61 76 65 20 62 65 65 6e 20 74 65 73 74 65 64 20  ave been tested 
43e0: 74 6f 20 74 68 69 73 20 73 74 61 6e 64 61 72 64  to this standard
43f0: 2e 20 0a 54 68 65 20 53 51 4c 69 74 65 20 64 65  . .The SQLite de
4400: 76 65 6c 6f 70 65 72 73 20 0a 61 72 65 20 63 6f  velopers .are co
4410: 6d 6d 69 74 74 65 64 20 74 6f 20 6d 61 69 6e 74  mmitted to maint
4420: 61 69 6e 69 6e 67 20 31 30 30 25 20 62 72 61 6e  aining 100% bran
4430: 63 68 20 63 6f 76 65 72 61 67 65 20 61 6e 64 20  ch coverage and 
4440: 4d 43 2f 44 43 20 66 6f 72 20 61 6c 6c 20 0a 66  MC/DC for all .f
4450: 75 74 75 72 65 20 72 65 6c 65 61 73 65 73 20 6f  uture releases o
4460: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  f SQLite.</p>..<
4470: 70 3e 54 68 65 20 63 6f 76 31 20 74 65 73 74 20  p>The cov1 test 
4480: 73 65 74 20 75 73 65 64 20 74 6f 20 6f 62 74 61  set used to obta
4490: 69 6e 20 31 30 30 25 20 62 72 61 6e 63 68 20 74  in 100% branch t
44a0: 65 73 74 20 63 6f 76 65 72 61 67 65 20 61 72 65  est coverage are
44b0: 20 6f 6e 6c 79 20 61 0a 73 75 62 73 65 74 20 6f   only a.subset o
44c0: 66 20 74 68 65 20 74 65 73 74 73 20 63 75 72 72  f the tests curr
44d0: 65 6e 74 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 65  ently implemente
44e0: 64 20 75 73 69 6e 67 20 54 48 33 2e 20 20 4e 65  d using TH3.  Ne
44f0: 77 20 74 65 73 74 20 6d 6f 64 75 6c 65 73 20 61  w test modules a
4500: 72 65 0a 61 64 64 65 64 20 6f 6e 20 61 20 72 65  re.added on a re
4510: 67 75 6c 61 72 20 62 61 73 69 73 2e 3c 2f 70 3e  gular basis.</p>
4520: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
4530: 6e 74 20 6d 75 74 74 65 73 74 20 7b 6d 75 74 61  nt muttest {muta
4540: 74 69 6f 6e 20 74 65 73 74 20 73 63 72 69 70 74  tion test script
4550: 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 4d 75 74 61  }</tcl>.<h1>Muta
4560: 74 69 6f 6e 20 54 65 73 74 69 6e 67 3c 2f 68 31  tion Testing</h1
4570: 3e 0a 0a 3c 70 3e 54 68 65 20 54 48 33 20 73 6f  >..<p>The TH3 so
4580: 75 72 63 65 20 74 72 65 65 20 63 6f 6e 74 61 69  urce tree contai
4590: 6e 73 20 61 20 73 63 72 69 70 74 65 64 20 6e 61  ns a scripted na
45a0: 6d 65 0a 22 6d 75 74 61 74 69 6f 6e 2d 74 65 73  me."mutation-tes
45b0: 74 2e 74 63 6c 22 20 74 68 61 74 20 61 75 74 6f  t.tcl" that auto
45c0: 6d 61 74 65 73 20 74 68 65 20 70 72 6f 63 65 73  mates the proces
45d0: 73 20 6f 66 0a 5b 6d 75 74 61 74 69 6f 6e 20 74  s of.[mutation t
45e0: 65 73 74 69 6e 67 5d 2e 0a 0a 3c 70 3e 54 68 65  esting]...<p>The
45f0: 20 6d 75 74 61 74 69 6f 6e 2d 74 65 73 74 2e 74   mutation-test.t
4600: 63 6c 20 73 63 72 69 70 74 20 74 61 6b 65 73 20  cl script takes 
4610: 63 61 72 65 20 6f 66 20 61 6c 6c 20 6f 66 20 74  care of all of t
4620: 68 65 20 64 65 74 61 69 6c 73 20 66 6f 72 0a 72  he details for.r
4630: 75 6e 6e 69 6e 67 20 61 20 6d 75 74 61 74 69 6f  unning a mutatio
4640: 6e 20 74 65 73 74 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c  n test:..<ol>.<l
4650: 69 3e 20 54 68 65 20 73 63 72 69 70 74 20 63 6f  i> The script co
4660: 6d 70 69 6c 65 73 20 74 68 65 20 54 48 33 20 74  mpiles the TH3 t
4670: 65 73 74 20 68 61 72 6e 65 73 73 20 69 6e 74 6f  est harness into
4680: 20 6d 61 63 68 69 6e 65 20 63 6f 64 65 20 28 22   machine code ("
4690: 74 68 33 2e 6f 22 29 20 69 66 0a 20 20 20 20 20  th3.o") if.     
46a0: 6e 65 63 65 73 73 61 72 79 2e 0a 3c 6c 69 3e 20  necessary..<li> 
46b0: 54 68 65 20 73 63 72 69 70 74 20 63 6f 6d 70 69  The script compi
46c0: 6c 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 2e  les the sqlite3.
46d0: 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 69 6e  c source file in
46e0: 74 6f 20 61 73 73 65 6d 62 6c 79 20 6c 61 6e 67  to assembly lang
46f0: 75 61 67 65 0a 20 20 20 20 20 28 22 73 71 6c 69  uage.     ("sqli
4700: 74 65 33 2e 73 22 29 20 69 66 20 6e 65 63 65 73  te3.s") if neces
4710: 73 61 72 79 2e 0a 3c 6c 69 3e 20 54 68 65 20 73  sary..<li> The s
4720: 63 72 69 70 74 20 6c 6f 6f 70 73 20 74 68 72 6f  cript loops thro
4730: 75 67 68 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ugh instructions
4740: 20 69 6e 20 74 68 65 20 61 73 73 65 6d 62 6c 79   in the assembly
4750: 20 6c 61 6e 67 75 61 67 65 20 66 69 6c 65 0a 20   language file. 
4760: 20 20 20 20 74 6f 20 6c 6f 63 61 74 65 20 62 72      to locate br
4770: 61 6e 63 68 20 6f 70 65 72 61 74 69 6f 6e 73 2e  anch operations.
4780: 0a 20 20 20 20 20 3c 6f 6c 20 74 79 70 65 3d 22  .     <ol type="
4790: 61 22 3e 0a 20 20 20 20 20 3c 6c 69 3e 54 68 65  a">.     <li>The
47a0: 20 73 63 72 69 70 74 20 6d 61 6b 65 73 20 61 20   script makes a 
47b0: 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67  copy of the orig
47c0: 69 6e 61 6c 20 73 71 6c 69 74 65 33 2e 73 20 66  inal sqlite3.s f
47d0: 69 6c 65 2e 0a 20 20 20 20 20 3c 6c 69 3e 54 68  ile..     <li>Th
47e0: 65 20 63 6f 70 79 20 69 73 20 65 64 69 74 65 64  e copy is edited
47f0: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 62   to change the b
4800: 72 61 6e 63 68 20 69 6e 73 74 72 75 63 74 69 6f  ranch instructio
4810: 6e 20 69 6e 74 6f 20 65 69 74 68 65 72 0a 20 20  n into either.  
4820: 20 20 20 20 20 20 20 61 20 6e 6f 2d 6f 70 20 6f         a no-op o
4830: 72 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  r an uncondition
4840: 61 6c 20 6a 75 6d 70 2e 0a 20 20 20 20 20 3c 6c  al jump..     <l
4850: 69 3e 54 68 65 20 63 6f 70 79 20 6f 66 20 73 71  i>The copy of sq
4860: 6c 69 74 65 33 2e 73 20 69 73 20 61 73 73 65 6d  lite3.s is assem
4870: 62 6c 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65  bled into sqlite
4880: 33 2e 6f 20 74 68 65 6e 20 6c 69 6e 6b 65 64 0a  3.o then linked.
4890: 20 20 20 20 20 20 20 20 20 61 67 61 69 6e 20 74           again t
48a0: 68 33 2e 6f 20 74 6f 20 67 65 6e 65 72 61 74 65  h3.o to generate
48b0: 20 74 68 65 20 22 74 68 33 22 20 65 78 65 63 75   the "th3" execu
48c0: 74 61 62 6c 65 2e 0a 20 20 20 20 20 3c 6c 69 3e  table..     <li>
48d0: 54 68 65 20 22 74 68 33 22 20 62 69 6e 61 72 79  The "th3" binary
48e0: 20 69 73 20 72 75 6e 20 61 6e 64 20 74 68 65 20   is run and the 
48f0: 6f 75 74 70 75 74 20 63 68 65 63 6b 65 64 20 66  output checked f
4900: 6f 72 20 65 72 72 6f 72 73 2e 0a 20 20 20 20 20  or errors..     
4910: 3c 2f 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 73  </ol>.<li> The s
4920: 63 72 69 70 74 20 73 68 6f 77 73 20 70 72 6f 67  cript shows prog
4930: 72 65 73 73 20 66 6f 72 20 65 61 63 68 20 63 79  ress for each cy
4940: 63 6c 65 20 6f 66 20 74 68 65 20 70 72 65 76 69  cle of the previ
4950: 6f 75 73 20 73 74 65 70 20 74 68 65 6e 0a 20 20  ous step then.  
4960: 20 20 20 64 69 73 70 6c 61 79 73 20 61 20 73 75     displays a su
4970: 6d 6d 61 72 79 20 6f 66 20 22 73 75 72 76 69 76  mmary of "surviv
4980: 6f 72 73 22 20 61 74 20 74 68 65 20 65 6e 64 2e  ors" at the end.
4990: 20 20 41 20 22 73 75 72 76 69 76 6f 72 22 20 69    A "survivor" i
49a0: 73 20 61 0a 20 20 20 20 20 6d 75 74 61 74 69 6f  s a.     mutatio
49b0: 6e 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20 64  n that was not d
49c0: 65 74 65 63 74 65 64 20 62 79 20 54 48 33 2e 0a  etected by TH3..
49d0: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 4d 75 74 61 74 69  </ol>..<p>Mutati
49e0: 6f 6e 20 74 65 73 74 69 6e 67 20 63 61 6e 20 62  on testing can b
49f0: 65 20 73 6c 6f 77 2c 20 73 69 6e 63 65 20 65 61  e slow, since ea
4a00: 63 68 20 74 65 73 74 20 63 61 6e 20 74 61 6b 65  ch test can take
4a10: 20 75 70 20 74 6f 20 35 0a 6d 69 6e 75 74 65 73   up to 5.minutes
4a20: 20 6f 6e 20 61 20 66 61 73 74 20 77 6f 72 6b 73   on a fast works
4a30: 74 61 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 72  tation, and ther
4a40: 65 20 61 72 65 20 74 77 6f 20 74 65 73 74 73 20  e are two tests 
4a50: 66 6f 72 20 65 61 63 68 0a 62 72 61 6e 63 68 20  for each.branch 
4a60: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 61 6e  instructions, an
4a70: 64 20 6f 76 65 72 20 32 30 2c 30 30 30 20 62 72  d over 20,000 br
4a80: 61 6e 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e  anch instruction
4a90: 73 2e 20 20 45 66 66 6f 72 74 73 20 61 72 65 0a  s.  Efforts are.
4aa0: 6d 61 64 65 20 74 6f 20 65 78 70 65 64 69 74 65  made to expedite
4ab0: 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 46 6f 72   operation.  For
4ac0: 20 65 78 61 6d 70 6c 65 2c 20 54 48 33 20 69 73   example, TH3 is
4ad0: 20 63 6f 6d 70 69 6c 65 64 20 69 6e 20 73 75 63   compiled in suc
4ae0: 68 20 61 0a 77 61 79 20 74 68 61 74 20 69 74 20  h a.way that it 
4af0: 65 78 69 74 73 20 61 73 20 73 6f 6f 6e 20 61 73  exits as soon as
4b00: 20 69 74 20 66 69 6e 64 73 20 74 68 65 20 66 69   it finds the fi
4b10: 72 73 74 20 65 72 72 6f 72 2c 20 61 6e 64 20 61  rst error, and a
4b20: 73 20 6d 61 6e 79 0a 6f 66 20 74 68 65 20 6d 75  s many.of the mu
4b30: 74 61 74 69 6f 6e 73 20 61 72 65 20 65 61 73 69  tations are easi
4b40: 6c 79 20 64 65 74 65 63 74 65 64 2c 20 20 6d 61  ly detected,  ma
4b50: 6e 79 20 63 79 63 6c 65 73 20 68 61 70 70 65 6e  ny cycles happen
4b60: 20 69 6e 20 6f 6e 6c 79 0a 61 20 66 65 77 20 73   in only.a few s
4b70: 65 63 6f 6e 64 73 2e 20 20 4e 65 76 65 72 74 68  econds.  Neverth
4b80: 65 6c 65 73 73 2c 20 74 68 65 20 6d 75 74 61 74  eless, the mutat
4b90: 69 6f 6e 2d 74 65 73 74 2e 74 63 6c 20 73 63 72  ion-test.tcl scr
4ba0: 69 70 74 20 69 6e 63 6c 75 64 65 73 0a 63 6f 6d  ipt includes.com
4bb0: 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
4bc0: 73 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 72  s to limit the r
4bd0: 61 6e 67 65 20 6f 66 20 63 6f 64 65 20 6c 69 6e  ange of code lin
4be0: 65 73 20 74 65 73 74 65 64 20 73 6f 20 74 68 61  es tested so tha
4bf0: 74 0a 6d 75 74 61 74 69 6f 6e 20 74 65 73 74 69  t.mutation testi
4c00: 6e 67 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f  ng only needs to
4c10: 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 6f 6e   be performed on
4c20: 20 62 6c 6f 63 6b 73 20 6f 66 20 63 6f 64 65 20   blocks of code 
4c30: 74 68 61 74 0a 68 61 76 65 20 72 65 63 65 6e 74  that.have recent
4c40: 6c 79 20 63 68 61 6e 67 65 64 2e 0a 0a 3c 68 31  ly changed...<h1
4c50: 3e 54 48 33 20 4c 69 63 65 6e 73 65 3c 2f 68 31  >TH3 License</h1
4c60: 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 69 74 73  >..<p>SQLite its
4c70: 65 6c 66 20 69 73 20 69 6e 20 74 68 65 20 3c 61  elf is in the <a
4c80: 20 68 72 65 66 3d 22 63 6f 70 79 72 69 67 68 74   href="copyright
4c90: 2e 68 74 6d 6c 22 3e 70 75 62 6c 69 63 20 64 6f  .html">public do
4ca0: 6d 61 69 6e 3c 2f 61 3e 20 61 6e 64 0a 63 61 6e  main</a> and.can
4cb0: 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 6e 79   be used for any
4cc0: 20 70 75 72 70 6f 73 65 2e 20 20 42 75 74 20 54   purpose.  But T
4cd0: 48 33 20 69 73 20 70 72 6f 70 72 69 65 74 61 72  H3 is proprietar
4ce0: 79 20 61 6e 64 20 72 65 71 75 69 72 65 73 20 61  y and requires a
4cf0: 20 6c 69 63 65 6e 73 65 2e 0a 3c 2f 70 3e 0a 0a   license..</p>..
4d00: 3c 70 3e 45 76 65 6e 20 74 68 6f 75 67 68 20 6f  <p>Even though o
4d10: 70 65 6e 2d 73 6f 75 72 63 65 20 75 73 65 72 73  pen-source users
4d20: 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 64 69 72   do not have dir
4d30: 65 63 74 20 61 63 63 65 73 73 20 74 6f 20 54 48  ect access to TH
4d40: 33 2c 20 61 6c 6c 0a 75 73 65 72 73 20 6f 66 20  3, all.users of 
4d50: 53 51 4c 69 74 65 20 62 65 6e 65 66 69 74 20 66  SQLite benefit f
4d60: 72 6f 6d 20 54 48 33 20 69 6e 64 69 72 65 63 74  rom TH3 indirect
4d70: 6c 79 20 73 69 6e 63 65 20 65 61 63 68 20 76 65  ly since each ve
4d80: 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
4d90: 69 73 0a 76 61 6c 69 64 61 74 65 64 20 72 75 6e  is.validated run
4da0: 6e 69 6e 67 20 54 48 33 20 6f 6e 20 6d 75 6c 74  ning TH3 on mult
4db0: 69 70 6c 65 20 70 6c 61 74 66 6f 72 6d 73 20 28  iple platforms (
4dc0: 4c 69 6e 75 78 2c 20 57 69 6e 64 6f 77 73 2c 20  Linux, Windows, 
4dd0: 57 69 6e 52 54 2c 20 4d 61 63 2c 0a 4f 70 65 6e  WinRT, Mac,.Open
4de0: 42 53 44 29 20 70 72 69 6f 72 20 74 6f 20 72 65  BSD) prior to re
4df0: 6c 65 61 73 65 2e 20 20 53 6f 20 61 6e 79 6f 6e  lease.  So anyon
4e00: 65 20 75 73 69 6e 67 20 61 6e 20 6f 66 66 69 63  e using an offic
4e10: 69 61 6c 20 72 65 6c 65 61 73 65 0a 6f 66 20 53  ial release.of S
4e20: 51 4c 69 74 65 20 63 61 6e 20 64 65 70 6c 6f 79  QLite can deploy
4e30: 20 74 68 65 69 72 20 61 70 70 6c 69 63 61 74 69   their applicati
4e40: 6f 6e 20 77 69 74 68 20 74 68 65 20 63 6f 6e 66  on with the conf
4e50: 69 64 65 6e 63 65 20 6f 66 20 6b 6e 6f 77 69 6e  idence of knowin
4e60: 67 20 74 68 61 74 0a 69 74 20 68 61 73 20 62 65  g that.it has be
4e70: 65 6e 20 74 65 73 74 65 64 20 75 73 69 6e 67 20  en tested using 
4e80: 54 48 33 2e 20 20 54 68 65 79 20 73 69 6d 70 6c  TH3.  They simpl
4e90: 79 20 63 61 6e 6e 6f 74 20 72 65 72 75 6e 20 74  y cannot rerun t
4ea0: 68 6f 73 65 20 74 65 73 74 73 0a 74 68 65 6d 73  hose tests.thems
4eb0: 65 6c 76 65 73 20 77 69 74 68 6f 75 74 20 70 75  elves without pu
4ec0: 72 63 68 61 73 69 6e 67 20 61 20 54 48 33 20 6c  rchasing a TH3 l
4ed0: 69 63 65 6e 73 65 2e 3c 2f 70 3e 0a              icense.</p>.