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 on
nbrOfWorkers()
having an incorrect value. This could happen
if nbrOfWorkers()
returned a non-integer value,
e.g. +Inf
.
Test asserting that the workers
argument can be a
function would not always work if testing with a hardcoded number of
workers according to plan()
.
Test asserting that the workers
argument can be a
function would not work if the backend’s default value was non-numeric,
e.g. the cluster
backend defaults to the character vector
parallelly::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
calls resolved()
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 is
being skipped.
Now check_plan()
outputs also the error message,
error class, the call, and any standard output, whenever there’s is a
test error.
Now check_plan()
outputs also the test iteration
index.
Add
Rscript -e future.tests::check --version
.
workers
argument, which is not true for all future
backends. For example, ‘sequential’ does not take argument
workers
. Previously, we avoided this problem by only
testing if the evaluator inherited multiprocess
, but that
is not sufficient, e.g. upcoming future.redis::redis
inherits multiprocess
, but still does not have a
workers
argument. Now we check for the workers
argument instead.future()
, run()
,
result()
and value()
update the RNG
state.Assert that rm(a)
in a future expression only
removes a local variable a
, but never a global variable
a
.
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()
and check_plan()
gained
argument local
, which is passed down to
run_test()
.
check()
gained argument envir
, which is
passed down to run_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 TRUE
for 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 = FALSE
internally.
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 a package vignettes.
resolve()
would use deprecated argument
value
.Update the package description to use single quotes.
Add example to check()
.
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.