-
check()failed to set the future plan when the specified plan contained the word "plan", e.g.--test-plan=planned::foo. -
subset_tests(args, defaults)ignored the arguments of the tests. -
along_test_plans()dropped errors andNULLresults. Errors are now returned as the result for the plan, and evaluation continues. -
check_plan(defaults = list())silently skipped tests without arguments. -
run_tests(defaults = NULL)failed with an error. -
make_test()accepted a missing title (NA). -
check(timeout = <seconds>)no longer leaves optionfuture.tests.timeoutset after returning. -
check()ignored command-line options--session-infoand--debug.
-
Now asserting that immediate conditions are relayed, where possible.
-
The test for
cancel()andvalue()now asserts thatvalue()on a canceled future signals aFutureCanceledError, which inherits fromFutureInterruptError, also when canceled withinterrupt = FALSE, when the backend does not support interrupts, and for lazy futures. A new test asserts the same for a future that has already been collected. The new assertions are skipped when testing against a version of the future package that does not yet include the corresponding bug fix. -
Add tests for
value()on lists of futures asserting that (i) argumentinitofreduce, and argumentsstdoutandsignal, are respected also withinorder = FALSE, (ii) an error cancels and resolves the remaining futures, without launching lazy ones, (iii) a future that returns an error object is not mistaken for a failed future, and (iv) standard output and messages of all futures are relayed in order also withdrop = TRUE. -
Add test asserting that
futureCall()passes language objects, e.g. symbols and calls, in argumentargsas-is toFUN. -
The above tests are skipped when testing against a version of the future package that does not yet include the corresponding bug fix.
-
Add tests for (i) globals specified as a character vector with attributes
addandignore, (ii) unused variables not being exported as globals, (iii) a global...together with a global...future.FUN(), (iv) switching plan while a future is running, (v) repeatedvalue()on an interrupted future, (vi) launching many futures without leaving unused connections behind, (vii) immediate conditions not being re-signaled, and (viii)makeClusterFuture()passing language objects as-is and supportingclusterEvalQ()that only attaches packages. -
Add tests for (i)
future(..., packages = "missing-package")signaling an error, (ii)value(<listenv>, idxs), (iii)value(<list>, reduce = structure("+", init = 42)), (iv)result()on a canceled and interrupted future, and (v) errors from amakeClusterFuture()cluster being signaled as by other clusters.
check()produced garbled output with interleaved spinner frames and test titles when standard output or standard error was not a terminal, e.g. when the output was piped or written to a log file. The in-place progress is now only shown when both are terminals, which can be overridden by optionfuture.tests.progress.
- Package utils is now declared as an imported package instead of just a suggested package.
- Changed the package license to permissive Apache License (>= 2).
-
Add logical R option
future.tests.devel, which can be set by environment variableR_FUTURE_TESTS_DEVEL. This controls whether tests with a"devel"("under development") tag will be included. -
check()reports on future version.
-
Add tests for
cancel(). -
Assert that
plan()accepts argumentinterrupts. -
Remove tests on
future(..., earlySignal = FALSE/TRUE), because that is about to be deprecated in the future package. -
Relax assertions in test of
resolved()with lazy futures.
- Tests on
plan()adjusting argumentworkerswere not skipped if the plan tested already sets argumentworkersto a fixed value, e.g.plan(cluster, workers = cl).
- Now the test code is displayed if there is a check error.
-
Now
load_tests()returns a named list, where the names corresponds to the test titles. -
Now
future.tests::check("mirai::daemons(2); plan(future.mirai::mirai_cluster)")works.
- Remove
plan()test on legacyconstantbackend.
-
Tests asserting correctness of
nbrOfWorkers()could produce an "invalid format '%d'; use format %f, %e, %g or %a for numeric objects" error when trying to produce an assertion error onnbrOfWorkers()having an incorrect value. This could happen ifnbrOfWorkers()returned a non-integer value, e.g.+Inf. -
Test asserting that the
workersargument can be a function would not always work if testing with a hardcoded number of workers according toplan(). -
Test asserting that the
workersargument can be a function would not work if the backend's default value was non-numeric, e.g. theclusterbackend defaults to the character vectorparallelly::availableWorkers(). -
Test asserting that lazy futures would be automatically launched and resolved relied on a legacy version of the Future API, where calling
resolved()on a lazy future could leave it in a lazy state, which is no longer correct. A lazy future will always be launched if one callsresolved()on it. -
Test asserting that the ff package worked across multiple futures assumed that the package is loaded automatically by the future, which it is not. The could cause the test to fail for some future backends.
-
Now tests can be formally skipped by calling
future.tests::skip_test()from within the test. Skipped tests are counted and reported in the summary. -
Now
check_plan()outputs the reason for a test being skipped. -
Now
check_plan()outputs also the error message, error class, the call, and any standard output, whenever there is a test error. -
Now
check_plan()outputs also the test iteration index. -
Added
Rscript -e future.tests::check --version.
- Some tests assume that the future strategy tested has a
workersargument, which is not true for all future backends. For example, 'sequential' does not take argumentworkers. Previously, we avoided this problem by only testing if the evaluator inheritedmultiprocess, but that is not sufficient, e.g. upcomingfuture.redis::redisinheritsmultiprocess, but still does not have aworkersargument. Now we check for theworkersargument instead.
- Assert that none of
future(),run(),result()andvalue()update the RNG state.
-
Assert that
rm(a)in a future expression only removes a local variablea, but never a global variablea. -
Assert that packages data.table and ff are not affected when a future resets the R options on the worker when resolved.
-
Assert that a global that is a copy of a non-exported package object (e.g.
utils:::str2logical()) is not dropped because it belongs to a package namespace. -
Assert that
...can be exported as a global to a future, and used as-is inside a function that does not have...arguments.
-
check()andcheck_plan()gained argumentlocal, which is passed down torun_test(). -
check()gained argumentenvir, which is passed down torun_test().
-
The TestResult class did not record whether the test was evaluated in a local environment or not.
-
A too strict internal assertion would give
Error in evaluate_expr(test$expr, envir = envir, local = FALSE, output = output, : identical(Sys.getenv(), old$envvars) is not TRUEfor R 4.2.x and R-devel on MS Windows. This was because it is not possible to remove environment variables on MS Windows; they can only be set to an empty value.
-
Assert that
future()doesn't change the RNG kind. -
Assert that
future(..., conditions = character(0L))muffles all conditions.
-
For robustness, using explicit
stringsAsFactors = FALSEinternally. -
evaluate_expr(), which is used for running all tests, now reset options, environment variables, the RNG kind, and the random seed afterward to what it was before being called. -
Added package vignettes.
- Tests on
resolve()would use deprecated argumentvalue.
-
Update the package description to use single quotes.
-
Add example to
check().
- First version released on CRAN.
- Assert that
resolved()will launch lazy futures.
-
In non-interactive mode,
check()will quit R with an exit code that reflects whether all tests passed (0) or not (1). -
check()gained arguments so that it can be easily called from R too.
- Created package stub.