| Type: | Package | 
| Title: | Testing for R Packages with Multiple Attempts for Noisy Tests | 
| Version: | 0.2.0 | 
| Maintainer: | Collin Erickson <collinberickson@gmail.com> | 
| Description: | Runs tests using the 'testthat' package but allows for multiple attempts for a single test. This is useful for noisy or flaky tests that generally pass but can fail due to occasional random errors, such as numeric instability or using random data. | 
| License: | GPL (≥ 3) | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.2 | 
| URL: | https://github.com/CollinErickson/testthatmulti | 
| BugReports: | https://github.com/CollinErickson/testthatmulti/issues | 
| Suggests: | testthat (≥ 3.0.0), rlang | 
| Config/testthat/edition: | 3 | 
| Language: | en-US | 
| NeedsCompilation: | no | 
| Packaged: | 2025-08-24 23:38:42 UTC; colli | 
| Author: | Collin Erickson [aut, cre] | 
| Repository: | CRAN | 
| Date/Publication: | 2025-08-24 23:50:02 UTC | 
Test that with multiple attempts
Description
Test that with multiple attempts
Usage
ttm(n, expr, verbose = 0)
Arguments
| n | Maximum number of attempts | 
| expr | Expression to evaluate | 
| verbose | Amount that should be printed | 
Value
Nothing
Examples
set.seed(0)
# 1 attempt, all pass
ttm(1, {
  ttm_expect_true(TRUE)
  ttm_expect_true(1 == 1)
  ttm_expect_true(all(1:5 == 1:5))
})
# Fails first 10 times, then passes
ttm(100, {
  x <- runif(1)
  print(x)
  ttm_expect_true(x < 0.1)
})
# Will always fail regardless of number of attempts
try({
  ttm(3, {
    ttm_expect_true(1 == 2)
  })
})
Test that multi: expect equal
Description
Test that multi: expect equal
Usage
ttm_expect_equal(
  object,
  expected,
  ...,
  tolerance = if (testthat::edition_get() >= 3) testthat::testthat_tolerance(),
  info = NULL,
  label = NULL,
  expected.label = NULL,
  verbose = 0
)
Arguments
| object | Object to check if equal to expected | 
| expected | Expected value | 
| ... | Args passed to testthat::expect_equal() | 
| tolerance | Passed to 'testthat::expect_true()'. | 
| info | Passed to 'testthat::expect_true()'. | 
| label | Passed to 'testthat::expect_true()'. | 
| expected.label | Passed to 'testthat::expect_true()'. | 
| verbose | Amount of info that should be printed. | 
Value
Test result
Examples
set.seed(0)
# 1 attempt, all pass
ttm(1, {
  ttm_expect_equal(TRUE, TRUE)
  ttm_expect_equal(1, 1)
  ttm_expect_equal(1:5, 1:5)
})
# Fails first 6 times, then passes
ttm(100, {
  x <- sample(1:6, 1)
  print(x)
  ttm_expect_equal(x, 3)
})
# Will always fail regardless of number of attempts
try({
  ttm(3, {
    ttm_expect_equal(1, 2)
  })
})
Test that multi: expect error
Description
See 'testthat::expect_error' for details.
Usage
ttm_expect_error(object, info = NULL, label = NULL, verbose = 0)
Arguments
| object | Object to test. | 
| info | Passed to 'testthat::expect_error()'. | 
| label | Passed to 'testthat::expect_error()'. | 
| verbose | Amount of info that should be printed. | 
Value
Test result
Examples
set.seed(0)
# 1 attempt, all pass
ttm(1, {
  ttm_expect_error(stop('error'))
})
# Fails first ~10 times, then passes
ttm(100, {
  ttm_expect_error({
    print(1)
    if (runif(1) < 0.1) {
      stop('give error')
    }
  })
})
# Will always fail regardless of number of attempts
try({
  ttm(3, {
    ttm_expect_error(1 == 2)
  })
})
Test that multi: expect no error
Description
See 'testthat::expect_no_error' for details.
Usage
ttm_expect_no_error(object, message = NULL, class = NULL, verbose = 0)
Arguments
| object | Object to test. | 
| message | Passed to 'testthat::expect_no_error()'. | 
| class | Passed to 'testthat::expect_no_error()'. | 
| verbose | Amount of info that should be printed. | 
Value
Test result
Examples
set.seed(0)
# 1 attempt, all pass
ttm(1, {
  ttm_expect_no_error(1)
})
# Fails first ~10 times, then passes
ttm(100, {
  ttm_expect_no_error({
    if (runif(1) > 0.1) {
      print(1)
      stop('give error')
    }
  })
})
# Will always fail regardless of number of attempts
try({
  ttm(3, {
    ttm_expect_no_error(stop('error'))
  })
})
Test that multi: expect true
Description
See 'testthat::expect_true' for details.
Usage
ttm_expect_true(object, info = NULL, label = NULL, verbose = 0)
Arguments
| object | Object to test. | 
| info | Passed to 'testthat::expect_true()'. | 
| label | Passed to 'testthat::expect_true()'. | 
| verbose | Amount of info that should be printed. | 
Value
Test result
Examples
set.seed(0)
# 1 attempt, all pass
ttm(1, {
  ttm_expect_true(TRUE)
  ttm_expect_true(1 == 1)
  ttm_expect_true(all(1:5 == 1:5))
})
# Fails first 10 times, then passes
ttm(100, {
  x <- runif(1)
  print(x)
  ttm_expect_true(x < 0.1)
})
# Will always fail regardless of number of attempts
try({
  ttm(3, {
    ttm_expect_true(1 == 2)
  })
})
Iteration count for ttm()
Description
Iteration count for ttm()
Usage
ttm_i()
Value
int for ttm iteration, starting at 1
Examples
ttm(100, {
  x <- runif(1)
  cat('ttm i =', ttm_i(), 'n =', ttm_n(), 'x =', x, '\n')
  ttm_expect_true(x < 0.1)
})
Max number of attempts for ttm()
Description
Max number of attempts for ttm()
Usage
ttm_n()
Value
int for ttm number of attempts
Examples
ttm(100, {
  x <- runif(1)
  cat('ttm i =', ttm_i(), 'n =', ttm_n(), 'x =', x, '\n')
  ttm_expect_true(x < 0.1)
})