#-*- Makefile -*- # # ${R_HOME}/tests/Makefile.common ## If you add test scripts here, review ../src/library/tools/R/testing.R <<<<<<<<<<<< test-src-gct = \ eval-etc.R \ simple-true.R \ arith-true.R \ arith.R \ lm-tests.R \ ok-errors.R \ method-dispatch.R \ any-all.R \ structure.R test-src-strict-1 = \ $(test-src-gct) \ d-p-q-r-tests.R test-src-strict-auto = test-src-sloppy-a = \ complex.R \ print-tests.R \ lapack.R \ datasets.R \ datetime.R \ iec60559.R ## set in Makefile.{in,win} as requires recommended packages ##test-src-sloppy-b = eval-etc-2.R test-src-sloppy-1 = $(test-src-sloppy-a) $(test-src-sloppy-b) test-src-sloppy-auto = test-src-1 = $(test-src-strict-1) $(test-src-sloppy-1) test-src-auto = $(test-src-strict-auto) $(test-src-sloppy-auto) \ ${test-src-isas} ${test-src-segfault} test-src-sloppy = $(test-src-sloppy-1) $(test-src-sloppy-auto) test-src-strict = $(test-src-strict-1) $(test-src-strict-auto) test-src = $(test-src-strict) $(test-src-sloppy) test-src-dt = datetime2.R datetime3.R datetime4.R datetime5.R test-src-demo = demos.R demos2.R test-src-internet = internet.R test-src-internet2 = internet2.R libcurl.R test-src-CRANtools = CRANtools.R test-src-large = reg-large.R test-src-isas = isas-tests.R test-src-primitive = primitives.R test-src-random = p-r-random-tests.R test-src-regexp = utf8-regex.R PCRE.R test-src-segfault = no-segfault.R test-src-tz = timezone.R test-src-cond = conditions.R test-src-reg-1 = array-subset.R \ reg-tests-1a.R reg-tests-1b.R reg-tests-1c.R reg-tests-1d.R \ reg-tests-1e.R reg-tests-2.R \ reg-examples1.R reg-examples2.R reg-packages.R \ p-qbeta-strict-tst.R d-p-q-r-tst-2.R \ r-strict-tst.R \ reg-IO.R reg-IO2.R reg-plot.R reg-S4-examples.R reg-BLAS.R ## added to in Makefile.win test-src-reg-1e = test-src-reg = $(test-src-reg-1) $(test-src-reg-1e) ## overridden in Makefile if recommended packages are not installed. ## *-src-reg3 are sloppy (*.Rout may differ from *.Rout.save): ## reg-S4 has to be a sloppy test, as output differs if Matrix is absent. test-src-reg3 = reg-tests-3.R reg-examples3.R reg-plot-latin1.R reg-S4.R test-out-strict = $(test-src-strict:.R=.Rout) test-out-sloppy = $(test-src-sloppy:.R=.Rout) test-out-gct = $(test-src-gct:.R=.Rout-gct) test-out-valgct = $(test-src-gct:.R=.Rout-valgct) test-out-CRANtools = $(test-src-CRANtools:.R=.Rout) test-out-dt = $(test-src-dt:.R=.Rout) test-out-demo = $(test-src-demo:.R=.Rout) test-out-internet = $(test-src-internet:.R=.Rout) test-out-internet2 = $(test-src-internet2:.R=.Rout) test-out-isas = $(test-src-isas:.R=.Rout) test-out-primitive = $(test-src-primitive:.R=.Rout) test-out-large = $(test-src-large:.R=.Rout) test-out-random = $(test-src-random:.R=.Rout) test-out-reg = $(test-src-reg:.R=.Rout) test-out-regexp = $(test-src-regexp:.R=.Rout) test-out-reg3 = $(test-src-reg3:.R=.Rout) test-out-segfault = $(test-src-segfault:.R=.Rout) test-out-tz = $(test-src-tz:.R=.Rout) test-out-cond = $(test-src-cond:.R=.Rout) ## This macro is used only for dependencies and for distclean test-out = $(test-src:.R=.Rout) $(test-out-demo) $(test-out-gct) \ $(test-out-internet) \ $(test-out-random) $(test-out-reg) $(test-out-reg3) \ $(test-out-segfault) $(test-out-isas) $(test-out-internet2) \ $(test-out-CRANtools) $(test-out-large) $(test-out-primitive) $(test-out-dt) \ utf8-regex.Rout PCRE.Rout utf8.Rout .SUFFIXES: .SUFFIXES: .R .Rin .Rout .Rout-gct .Rout-valgct .trin .tsin .log ## This ensures "they" always re-run [a big WASTE for parallel make -j !] $(test-out): FORCE FORCE: .Rin.R: @$(ECHO) "creating '$@'" @$(R) < $< > /dev/null .R.Rout: @rm -f $@ $@.fail $@.log @$(ECHO) $(ECHO_N) "running code in '$<' ...$(ECHO_C)" > $@.log @$(R) < $< > $@.fail 2>&1 || (cat $@.log && rm $@.log && exit 1) @$(ECHO) "$(ECHO_T) OK" >> $@.log @if test -f $(srcdir)/$@.save ; then \ $(ECHO) $(ECHO_N) \ " comparing '$@' to '$(srcdir)/$@.save' ...$(ECHO_C)" >> $@.log; \ $(RDIFF) $@.fail $(srcdir)/$@.save $(RVAL_IF_DIFF) >> $@.log \ || (cat $@.log && rm $@.log && exit 1) || exit 1; \ mv $@.fail $@; \ $(ECHO) "$(ECHO_T) OK" >> $@.log; \ else \ mv $@.fail $@; \ fi @cat $@.log; rm $@.log reg-plot.Rout: reg-plot.R @rm -f $@ $@.fail $@.log @$(ECHO) $(ECHO_N) "running code in '$<' ...$(ECHO_C)" > $@.log @$(R) < $< > $@ 2>&1 || (mv $@ $@.fail && cat $@.log && rm $@.log && exit 1) @$(ECHO) "$(ECHO_T) OK" >> $@.log @$(ECHO) $(ECHO_N) \ " comparing 'reg-plot.pdf' to '$(srcdir)/reg-plot.pdf.save' ...$(ECHO_C)" >> $@.log @$(RDIFF) reg-plot.pdf $(srcdir)/reg-plot.pdf.save >> $@.log @$(ECHO) "$(ECHO_T) OK" >> $@.log @cat $@.log; rm $@.log ## Using $(R2) (whenever LC_ALL=C is not needed - so LANGUAGE can work) reg-translation.Rout: reg-translation.R @rm -f $@ $@.fail $@.log @$(ECHO) $(ECHO_N) "running code in '$<' ...$(ECHO_C)" > $@.log @LANGUAGE=fr $(R2) < $< > $@ 2>&1 || (mv $@ $@.fail && cat $@.log && rm $@.log && exit 1) @$(ECHO) "$(ECHO_T) OK" >> $@.log @cat $@.log; rm $@.log ## allow this to fail, as it may if the locale does not support Latin-1 chars reg-plot-latin1.Rout: reg-plot-latin1.R @rm -f $@ $@.fail @$(ECHO) "running tests of plotting Latin-1" @$(ECHO) " expect failure or some differences if not in a Latin-1 or UTF-8 locale" @$(ECHO) $(ECHO_N) "running code in '$<' ...$(ECHO_C)" @$(R2) < $< > $@ 2>&1 || mv $@ $@.fail @if test -f $@.fail; then \ $(ECHO) "$(ECHO_T) FAILED"; \ else \ $(ECHO) "$(ECHO_T) OK"; \ $(ECHO) $(ECHO_N) \ " comparing 'reg-plot-latin1.pdf' to '$(srcdir)/reg-plot-latin1.pdf.save' ...$(ECHO_C)"; \ $(RDIFF) reg-plot-latin1.pdf $(srcdir)/reg-plot-latin1.pdf.save; \ $(ECHO) "$(ECHO_T) OK"; \ fi .R.Rout-gct: @$(ECHO) "running gctorture() + '$<'" @($(ECHO) '.ptime <- proc.time(); gctorture()' ; \ cat $< $(srcdir)/gct-foot.R) | $(R) > $@ 2>&1 @mv $@ $@.fail; Ro=`basename $@ .Rout-gct`.Rout; \ if test ! -r $${Ro}; then $(MK) $${Ro}; fi; \ $(ECHO) $(ECHO_N) " comparing '$@' to '$${Ro}' ...$(ECHO_C)"; \ grep -v 'gctorture()' $@.fail | $(RDIFF) - $${Ro} 1 || exit 1; \ mv $@.fail $@; \ $(ECHO) "$(ECHO_T) OK" R-valgrind = $(R) --debugger="valgrind --tool=memcheck" .R.Rout-valgct: @$(ECHO) "running gctorture() + valgrind + '$<'" @($(ECHO) '.ptime <- proc.time(); gctorture()' ; \ cat $< $(srcdir)/gct-foot.R) | $(R-valgrind) > $@ 2>&1 grep "==[0-9]*==" $@ ## The definitions for Internet are in Makefile.{in,win}. ## (That's historical: they are currently the same.) all-basic-tests = Examples Specific Reg Internet test-all-basics: @for name in $(all-basic-tests); do \ $(MK) test-$${name} || exit 1; \ done ## if you change this, also edit Makefile.install ## The definitions for Standalone are in Makefile.{in,win}. all-devel-tests = DateTime Docs IsAs Random Demo Primitive Regexp Translation \ Internet2 CRANtools Segfault Standalone Conditions Packages test-all-devel: @for name in $(all-devel-tests); do \ $(MK) test-$${name} || exit 1; \ done test-Examples: @(cd Examples && $(MK) $@) test-Examples-Recommended: @(cd Examples && $(MK) $@) test-Specific-strict: $(test-out-strict) test-Specific-sloppy: $(test-out-sloppy) test-Specific: @$(ECHO) "running strict specific tests" @$(MK) test-Specific-strict RVAL_IF_DIFF=1 @$(ECHO) "running sloppy specific tests" @$(MK) test-Specific-sloppy RVAL_IF_DIFF=0 @$(MK) test-TimeZone test-Packages: @if test -n "${TEST_MC_CORES}"; then \ $(ECHO) "Using ${TEST_MC_CORES} cores to check packages"; \ $(MK) -j ${TEST_MC_CORES} test-Packages2; \ else \ $(MK) test-Packages1; \ fi ## R_PKGS_BASE is from ../share/make/vars.mk test-Packages1: @for p in $(R_PKGS_BASE); do \ $(ECHO) "checking package '$${p}'"; \ _R_CHECK_FF_CALLS_=registration \ _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_=true \ $(top_builddir)/bin/R CMD check --install=skip --no-build-vignettes \ $(top_srcdir)/src/library/$${p} || $(ECHO); \ done PKG_OBJECTS = $(R_PKGS_BASE:=.log) test-Packages2: @for p in $(R_PKGS_BASE); do \ touch $${p}.tsin; \ done +@$(MK) stamp-Packages @rm -f *.tsin stamp-Packages: $(PKG_OBJECTS) .tsin.log: @$(ECHO) "begin checking package '`basename $@ .log`'" @rm -f $@ @_R_CHECK_FF_CALLS_=registration \ _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_=true \ $(top_builddir)/bin/R CMD check --install=skip --no-build-vignettes \ $(top_srcdir)/src/library/`basename $@ .log` > $@ 2>&1 @cat $@ test-Gct: $(test-out-gct) test-Vgct: $(test-out-valgct) test-DateTime: @$(ECHO) "running tests of date-time printing" @$(ECHO) " expect platform-specific differences" @$(RM) -f $(test-out-dt) @$(MK) $(test-out-dt) RVAL_IF_DIFF=0 ## This should be allowed to fail, visibly. test-TimeZone: @$(ECHO) "checking Sys.timezone ..." @$(RM) -f $(test-out-tz) @$(MK) $(test-out-tz) || $(ECHO) " Sys.timezone() appears unknown" test-Docs: @$(ECHO) "running tests of documentation examples" @cp ${top_srcdir}/doc/manual/*.R . @$(MK) R-intro.Rout RVAL_IF_DIFF=0 @cp ${top_srcdir}/doc/manual/R-exts.c . @$(top_builddir)/bin/R CMD SHLIB R-exts.c @$(MK) R-exts.Rout @rm R-exts.* test-Demo: @$(ECHO) "running demos from base and stats" @$(MK) $(test-out-demo) RVAL_IF_DIFF=0 test-IsAs: @$(ECHO) "running tests of consistency of as/is.*" @$(MK) $(test-out-isas) RVAL_IF_DIFF=1 ## As for test-Internet, allow to fail, possibly slowly test-Internet2: @$(ECHO) "running more Internet and socket tests" -@$(MK) $(test-out-internet2) RVAL_IF_DIFF=0 test-CRANtools: @$(ECHO) "running tests of CRAN tools" @$(ECHO) " (can be slow unless mirror is local)" @$(MK) $(test-out-CRANtools) RVAL_IF_DIFF=0 test-Large: @$(ECHO) "running tests needing large amounts of processor memory" @$(ECHO) " (is slow, notably when memory is available)" @$(MK) $(test-out-large) RVAL_IF_DIFF=0 test-Primitive: @$(ECHO) "running tests of primitives" @$(MK) $(test-out-primitive) RVAL_IF_DIFF=0 test-Random: @$(ECHO) "running tests of random deviate generation" @$(MK) $(test-out-random) RVAL_IF_DIFF=1 test-Reg: @$(ECHO) "running regression tests ..." @if test -n "${TEST_MC_CORES}"; then \ $(MK) -j ${TEST_MC_CORES} $(test-out-reg) RVAL_IF_DIFF=1; \ else \ $(MK) $(test-out-reg) RVAL_IF_DIFF=1; \ fi @$(MK) $(test-out-reg3) RVAL_IF_DIFF=0 test-Regexp: @$(ECHO) "running regexp regression tests" @$(R2) < $(srcdir)/utf8-regex.R > utf8-regex.Rout 2>&1 || (mv utf8-regex.Rout utf8-regex.Rout.fail && exit 1) @$(R2) < $(srcdir)/PCRE.R > PCRE.Rout 2>&1 || (mv PCRE.Rout PCRE.Rout.fail && exit 1) test-Segfault: @$(ECHO) "running tests to possibly trigger segfaults" @$(MK) $(test-out-segfault) RVAL_IF_DIFF=0 -@rm -Rf data dumpdata.R ./-package.Rd ./-Ex.R .Rd F.Rd [a-z]*0.Rd Rprof.out Rplots* \ PACKAGES PACKAGES.gz [A-Za-z]*-package.Rd FALSE.* mirrors.html test-Translation: @$(ECHO) "running tests of translation" @rm -f reg-translation.Rout @$(MK) reg-translation.Rout RVAL_IF_DIFF=0 ## Not run by any other target test-UTF-8: @$(ECHO) "running regression tests for UTF-8 <--> int conversion (slow)" @$(R2) < $(srcdir)/utf8.R > utf8.Rout 2>&1 || (mv utf8.Rout utf8.Rout.fail && exit 1) test-Iconv: @$(ECHO) "running regression tests for iconv()" @$(R2) < $(srcdir)/iconv.R > iconv.Rout 2>&1 || (mv iconv.Rout iconv.Rout.fail && exit 1) test-Conditions: @$(ECHO) "running unit tests for the condition system" @rm -f $(test-out-cond) @$(MK) $(test-out-cond) RVAL_IF_DIFF=0 ## Avoid site library, which could be very large no-segfault.Rout: no-segfault.R @rm -f $@ $@.fail @$(ECHO) $(ECHO_N) "running code in '$<' ...$(ECHO_C)" @R_LIBS_SITE=no-such-dir $(R) < $< > $@ 2>&1 || (mv $@ $@.fail && exit 1) @$(ECHO) "$(ECHO_T) OK" ## Not run by any other target test-Rd: @$(ECHO) "testing Rd conversion" @for name in testit ver20; do \ $(RDCONV) -t txt -o $${name}.txt $(srcdir)/$${name}.Rd || exit 1; \ $(RDCONV) -t html -o $${name}.html $(srcdir)/$${name}.Rd || exit 1; \ $(RDCONV) -t latex -o $${name}.tex $(srcdir)/$${name}.Rd || exit 1; \ $(RDCONV) -t example -o $${name}-Ex.R $(srcdir)/$${name}.Rd || exit 1; \ diff -U 0 -b $(srcdir)/$${name}.txt.save $${name}.txt || $(ECHO); \ diff -U 0 -b $(srcdir)/$${name}.html.save $${name}.html || $(ECHO); \ diff -U 0 -b $(srcdir)/$${name}.tex.save $${name}.tex || $(ECHO); \ diff -U 0 -b $(srcdir)/$${name}-Ex.R.save $${name}-Ex.R || $(ECHO); \ done @$(ECHO) "running Rd2pdf" @for name in testit ver20; do \ $(RD2PDF) -o $${name}.pdf $(srcdir)/$${name}.Rd || exit 1; \ done @$(RD2PDF) --no-index --output=Rd2.pdf $(srcdir)/Pkgs/pkgC/man \ && rm -f Rd2.pdf || exit 1 ## The following 6 tests are covered by test-Packages test-DocFiles: @$(ECHO) "checking Rd usage sections" @for p in $(R_PKGS_BASE); do \ $(ECHO) $(ECHO_N) "package '$${p}' ...$(ECHO_C)"; \ out=`($(ECHO) "library(\"tools\")"; \ $(ECHO) "checkDocFiles(package = \"$${p}\")") | \ $(R) -q | sed '/^>/d'`; \ if test -n "$${out}"; then \ $(ECHO) "$(ECHO_T) WARNING"; \ $(ECHO); \ $(ECHO) "$${out}"; \ $(ECHO); \ else \ $(ECHO) "$(ECHO_T) OK"; \ fi; \ done test-DocStyle: @$(ECHO) "checking S3 method documentation style" @for p in $(R_PKGS_BASE); do \ $(ECHO) $(ECHO_N) "package '$${p}' ...$(ECHO_C)"; \ out=`($(ECHO) "library(\"tools\")"; \ $(ECHO) "checkDocStyle(package = \"$${p}\")") | \ $(R) -q | sed '/^>/d'`; \ if test -n "$${out}"; then \ $(ECHO) "$(ECHO_T) WARNING"; \ $(ECHO); \ $(ECHO) "$${out}"; \ $(ECHO); \ else \ $(ECHO) "$(ECHO_T) OK"; \ fi; \ done test-FF: @$(ECHO) "checking foreign function calls" @for p in $(R_PKGS_BASE); do \ $(ECHO) $(ECHO_N) "package '$${p}' ...$(ECHO_C)"; \ out=`($(ECHO) "library(\"tools\")"; \ $(ECHO) "checkFF(package = \"$${p}\")") | \ $(R) -q | sed '/^>/d'`; \ if test -n "$${out}"; then \ $(ECHO) "$(ECHO_T) WARNING"; \ $(ECHO) "$${out}"; \ else \ $(ECHO) "$(ECHO_T) OK"; \ fi; \ done test-S3methods: @$(ECHO) "checking for S3 generic/method consistency" @for p in $(R_PKGS_BASE); do \ $(ECHO) $(ECHO_N) "package '$${p}' ...$(ECHO_C)"; \ out=`($(ECHO) "library(\"tools\")"; \ $(ECHO) "checkS3methods(package = \"$${p}\")") | \ $(R) -q | sed '/^>/d'`; \ if test -n "$${out}"; then \ $(ECHO) "$(ECHO_T) WARNING"; \ $(ECHO); \ $(ECHO) "$${out}"; \ $(ECHO); \ else \ $(ECHO) "$(ECHO_T) OK"; \ fi; \ done test-codoc: @$(ECHO) "checking for code/documentation mismatches in functions" @for p in $(R_PKGS_BASE); do \ $(ECHO) $(ECHO_N) "package '$${p}' ...$(ECHO_C)"; \ out=`($(ECHO) "library(\"tools\")"; \ $(ECHO) "codoc(package = \"$${p}\")") | \ $(R) -q | sed '/^>/d'`; \ if test -n "$${out}"; then \ $(ECHO) "$(ECHO_T) WARNING"; \ $(ECHO); \ $(ECHO) "$${out}"; \ $(ECHO); \ else \ $(ECHO) "$(ECHO_T) OK"; \ fi; \ done test-undoc: @$(ECHO) "checking for missing documentation entries" @for p in $(R_PKGS_BASE); do \ $(ECHO) $(ECHO_N) "package '$${p}' ...$(ECHO_C)"; \ out=`($(ECHO) "library(\"tools\")"; \ $(ECHO) "undoc(package = \"$${p}\")") | \ $(R) -q | sed '/^>/d'`; \ if test -n "$${out}"; then \ $(ECHO) "$(ECHO_T) WARNING"; \ $(ECHO) "$${out}"; \ else \ $(ECHO) "$(ECHO_T) OK"; \ fi; \ done test-Packages-Recommended: @if test -n "${TEST_MC_CORES}"; then \ $(ECHO) "Using ${TEST_MC_CORES} cores to check packages"; \ $(MK) -j ${TEST_MC_CORES} test-Packages2-Recommended; \ else \ $(MK) test-Packages1-Recommended; \ fi test-Packages1-Recommended: @test -d RecPackages || mkdir RecPackages @for p in $(R_PKGS_RECOMMENDED); do \ rm -Rf RecPackages/$${p}; \ gzip -dc "$(top_srcdir)/src/library/Recommended/$${p}.tgz" | \ (cd RecPackages && $(TAR) -x -f -) ; \ $(ECHO) "checking package '$${p}'"; \ R_LIBS="$(top_builddir)/library:$${R_LIBS}" \ _R_CHECK_FORCE_SUGGESTS_=FALSE $(R3) --install=skip \ --library="$(top_builddir)/library" RecPackages/$${p} || $(ECHO); \ done PKG_ROBJECTS = $(R_PKGS_RECOMMENDED:=.log) test-Packages2-Recommended: @test -d RecPackages || mkdir RecPackages @for p in $(R_PKGS_RECOMMENDED); do \ touch $${p}.trin; \ done +@$(MK) stamp-Packages2 @rm -f *.trin stamp-Packages2: $(PKG_ROBJECTS) .trin.log: @p=`basename $@ .log`; \ rm -Rf RecPackages/$${p}; \ gzip -dc "$(top_srcdir)/src/library/Recommended/$${p}.tgz" | \ (cd RecPackages && $(TAR) -x -f -) ; \ $(ECHO) "begin checking package '$${p}'"; \ R_LIBS="$(top_builddir)/library:$${R_LIBS}" \ _R_CHECK_FORCE_SUGGESTS_=FALSE $(R3) --install=skip \ --library="$(top_builddir)/library" RecPackages/$${p} > $@ 2>&1 @cat $@ INSTFILES = README \ $(test-src-strict-1) $(test-src-strict-1:.R=.Rout.save) \ $(test-src-sloppy-1) $(test-src-sloppy-1:.R=.Rout.save) \ $(test-src-auto:.R=.Rin) isas-tests.Rout.save \ $(test-src-dt) datetime2.Rout.save datetime4.Rout.save datetime5.Rout.save \ $(test-src-demo) demos.Rout.save \ $(test-src-internet) $(test-src-internet2) internet.Rout.save \ $(test-src-primitive) \ $(test-src-random) p-r-random-tests.Rout.save \ $(test-src-reg) $(test-src-reg3) \ reg-S4.Rout.save \ reg-IO.Rout.save reg-IO2.Rout.save \ reg-plot.pdf.save reg-tests-2.Rout.save reg-tests-3.Rout.save \ reg-examples3.Rout.save reg-plot-latin1.pdf.save \ encodings.R utf8-regex.R PCRE.R CRANtools.R \ timezone.R conditions.R iconv.R \ nanbug.rda WinUnicode.dat arima.rda EmbeddedNuls.csv