library(testit)

assert('assert works', {
  (1 == 1)
})

# Okay, that is kind of cheating
assert('assert() should signal an error if a condition does not hold', {
  (has_error(assert('this should produce an error', 1 == 2)))
})

# a meaningless test in terms of R (failure is irrelevant to Frequentist or Bayesian)
has_error(assert('Frequentists must be correct (http://xkcd.com/1132/): the sun has exploded!', {
  (sample(6, 2) == c(6, 6))
}))

# fail logical(0)
assert('assert() should stop on logical(0)', {
  (has_error(assert('1 equals integer(0)', 1 == integer(0))))
})

assert('the infix operator %==% works', {
  (1 %==% 1)
  (!silence(1 %==% 1L))
})

assert('has_warning() works', {
  (has_warning(warning('An intentional warning')))
  (has_warning((function() {1:2 + 1:3})()))
})

assert('has_error() works', {
  (has_error(stop('An intentional error')))
  (has_error(1 + 'a'))
})

assert('has_error() can suppress error message', {
  (has_error(stop('An intentional error'), silent = TRUE))
  (has_error(1 + 'a', silent = FALSE))
})

assert('tests can be written in () in a single {}', {

  (1 == 1L)

  z = 1:10
  (rev(z) %==% 10:1)

  !!TRUE

})
