There is a hierarchy of check targets:

     make check

for all builders.  If this works one can be reasonably happy R is working
and do `make install' (or the equivalent).

    make check-devel

for people changing the code: this runs things like the demos and
no-segfault which might be broken by code changes, and checks on the
documentation (effectively R CMD check on each of the base packages).
This needs recommended packages installed.

    make check-all

runs all the checks, those in check-devel plus tests of the recommended
packages.

Note that for complete testing you will need a number of other
packages installed and available, so if you have a CRAN installation,
set R_LIBS (perhaps in ~/.R/check.Renviron) to include it before
running these tests.  For example, some of the tests on 'nlme' depend
on 'Hmisc', and there are a number of cross references from help pages
to CRAN packages.

If a check fails there will almost always be a .Rout.fail file with
the problematic output, so looking at the tail of that file should
help pinpoint the problem.

The \dontest sections of the examples can be run by

     make check TEST_DONTTEST=TRUE

(but expect some differences from the reference ouput).  This requires
functional Tcl/Tk, e.g. for X11-based versions DISPLAY must be set to
a usable X server.


	---------- Historical Information -----------

In this directory, various tests on R are run automatically.
This is the recommended way to check if R has been built successfully on
your architecture.

	make check

does

	make test-Examples

runs all the examples from the help files (*.Rd) of all core packages
(base, ctest, ..., ts) -- which can take quite long (a few minutes,
depending on your environment).

	make test-Specific

The "fast" part of the tests is `test-Specific' which runs the *.R
files in this (./tests) directory (tolerantly) compares the result
*.Rout file with the prespecified *.Rout.save (if that exists).

	make test-Reg

runs regression tests, that is tests that ensure that things which have been
changed (perhaps as a result of bug reports) stay fixed.

	make test-Internet
	make test-Internet2

runs tests which need access to the Internet and/or sockets and so may
not run on every machine.  You will see some differences in the
output, but no test should fail if you do have sockets and Internet
access.  test-Internet2 is part of 'make check-devel' and checks less
commonly-used options.


Further tests are run by the target `make check-devel', including


	make test-Demo

runs all the demos in packages base and stats (but not tcltk), except
demo(lm.glm) which is run by example(demo) and so not run again.


	make test-Random

runs a series of tests on the distribution of random variates generated
by the rxxxx() functions.  The test is a large deviation bound on the 
Kolmogorov statistic, so also provides a test of the cumulative distribution
functions pxxxx().  Because rare events do happen, this test suite
will be failed in about 1 in 50 runs.


	make test-Segfault

runs a test abusing all the functions in the base packages via
no-segfault.R, and that can be quite slow (a minute or more).


A target not run by anything else is

	make test-System

which checks options in system[2]() calls.


A rarely-used target is

	make test-Gct

runs a subset of the specific tests with gctorture turned on.  This is slow,
taking an hour or two.


Martin Maechler for the R Core Team.
