atUsesRandom
Encapsulate Use of Random Numbers in Tests
Description
Run an expression which generates random numbers and restore
the value of .Random.seed to what it was before running the
expression.  Thus assertionTest() will not complain that the test
uses random numbers.
Usage
atUsesRandom(expr)
Arguments
  
| expr | An unevaluated expression.  The expression will be taken literally,
   as with system.time(). | 
 
Details
   The current value of .Random.seed, if any, will be saved, then
   the expression will be evaluated by lazy evaluation, and finally
   the state of .Random.seed will be restored to its original value.
   assertionTest() will complain if an expression alters .Random.seed and
   atUsesRandom is the recommended way to prevent this
   complaint.  If you generate test data using a random number generator
   it is best to generate all such data for a test in one call to
   atUsesRandom(), since atUsesRandom(x<-runif(5))
   followed by atUsesRandom(y<-runif(5)) may result in x and
   y being identical.
   atUsesRandom will print a message if evaluating the expression
   does not alter .Random.seed.
   Note that if .Random.seed exists before atUsesRandom(expr) is
   called, then it will be restored to its prior value so that a second
   call to atUsesRandom(expr) will generate the same random
   numbers.  However, if .Random.seed does not exist prior to the call,
   it won't exist after the call either and the second call will use an
   independent stream of random numbers.  (We may change this in the future
   so that atUsesRandom will always or never leave a .Random.seed
   behind so that it always gives repeatable results.)
Value
   The value of the evaluated expression.
See Also
Examples
## Not run: 
# Put the following in a test file, test.t,
# and run it through assertionTest.
{atUsesRandom({
    x <- runif(5)
    y <- runif(5)})
    atOnExit(rm(x,y))
}
atExpectStop(lm(y ~ poly(x,5)), expected="degree.*must be less")
# Run example test files in assertionTest/test-ex
assertionTest(system.file(package="assertionTest","test-ex","mixed.t"))
## End(Not run)