Nothing
library(hedgehog)
context("Hedgehog self-check")
test_that("forall is a true expectation", {
expect_failure (
forall (F, function(x) expect_true(x))
)
expect_success (
forall (T, function(x) expect_true(x))
)
})
test_that("forall inception expectation", {
forall (F, function(x)
expect_failure ( expect_true(x) )
)
forall (T, function(x)
expect_success ( expect_true(x) )
)
})
test_that("Discarding 20% will reach test limit before discard limit and succeed", {
forall (gen.int(10), function(x) if (x > 8) discard() else expect_true(T))
})
test_that("Discarding 80% will reach discard limit and fail", {
expect_failure (
forall (gen.int(10), function(x) if (x > 2) discard() else expect_true(T))
)
})
test_that("The same generator really makes different values", {
g <- gen.int(10)
expect_failure (
forall (g, function(x) expect_true(x < 5))
)
expect_failure (
forall (g, function(x) expect_true(x > 5))
)
})
test_that("forall fails if no expectations are given", {
expect_failure (
forall (NULL, function(x) {})
)
})
test_that("error handling inside foralls", {
expect_success (
forall (NULL, function(x) {
warning("unheeded warning")
succeed("ok")
})
)
expect_success (
forall (NULL, function(x) {
message("unheeded message")
succeed("ok")
})
)
expect_failure (
forall (NULL, function(x) {
stop("Ouch")
succeed("ok")
})
)
})
test_that("forall permits multiple expectations", {
expect_failure (
forall (NULL, function(x) {
expect_true(T)
expect_true(F)
})
)
expect_success (
forall (NULL, function(x) {
expect_true(T)
expect_true(T)
})
)
})
test_that("generator compositions work", {
g <- gen.int(100)
gx <- generate(for (i in g) {
gen.c(3, of = i)
})
forall (gx, function(x) {
expect_equal(unique(x), 3)
})
})
#####################
# Generator testing #
#####################
context("Hedgehog Generator testing")
test_that("gen.pure returns the value", {
forall (gen.pure(10), function(x) {
expect_equal(x, 10)
})
})
test_that("gen.sized respects the size parameter", {
sgen <- gen.sized(function(s) gen.int(s))
forall (sgen, function(x) {
expect_true(x <= 10)
}, size.limit = 10)
expect_failure(
forall (sgen, function(x) {
expect_true(x <= 10)
}, size.limit = 20)
)
})
test_that("gen.int only contains good values", {
forall (gen.int(10), function(x) {
expect_true(x <= 10 && x >= 0)
})
})
test_that("gen.sample.int returns subsets", {
forall(generate(for (i in gen.int(10)) gen.sample.int(10, i)), function(x) {
expect_true(all(x %in% 1:10))
})
})
test_that("gen.element only contains good values", {
forall (gen.element(5:10), function(x) {
expect_true(x <= 10 && x >= 5)
})
})
test_that("gen.element produces single values from a list", {
forall (gen.element(1:10), function(x) {
expect_true(x <= 10 && x >= 1)
})
})
test_that("gen.subsequence produces subsequences", {
forall (gen.subsequence(c()), function(x) {
expect_identical(x, c())
})
forall (gen.subsequence(1:10), function(x) {
expect_identical(x, sort(x))
expect_identical(x, intersect(x, 1:10))
})
})
test_that("generators shrink soundly", {
forall (
list( u = gen.unif( 0,10 )
, g = gen.gamma( shape = 2 )
, b = gen.beta( 1,2 )
)
, function(u,g,b) expect_true(T)
)
expect_failure(
forall (
list( u = gen.unif( 0,10 )
, g = gen.gamma( shape = 2 )
, b = gen.beta( 1,2 )
)
, function(u,g,b) expect_true(F)
)
)
})
test_that("can mix pure and generative in a list",
forall (list( lower = 2, higher = gen.element(5:10)), function(lower, higher) {
expect_less_than(lower, higher)
})
)
test_that("can build data frames with structure", {
g <- gen.structure (
list ( gen.c( of = 4, gen.element(2:10))
, gen.c( of = 4, gen.element(2:10))
, c('a', 'b', 'c', 'd')
)
, names = c("a","b", "constant")
, class = "data.frame"
, row.names = c("1", "2", "3", "4" ))
forall( g, function(x) expect_equal(nrow(x), 4))
})
test_that("can build data frames with data.map", {
g <- gen.map ( as.data.frame,
list ( as = gen.c( of = 4, gen.element(2:10))
, bs = gen.c( of = 4, gen.element(2:10))
, cs = c('a', 'b', 'c', 'd')
))
forall( g, function(x) expect_equal(nrow(x), 4))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.