tests_to_process/test-discontinuities.R

car <- data.frame(
  hp = c(
    110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123,
    180, 180, 180, 205, 215, 230, 66, 52, 65, 97, 150,
    150, 245, 175, 66, 91, 113, 264, 175, 335, 109
  )
)

test_that("Discontinuites Norm works", {
  expect_equal(
    discontinuities(dst_norm(1, 2), -Inf, Inf),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_norm(-1, 0.343), -100023, 1232),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_norm(-1, 0.343)),
    make_empty_discontinuities_df()
  )
})

test_that("Discontinuites Uniform works", {
  expect_equal(
    discontinuities(dst_unif(1, 2), -Inf, Inf),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_norm(-1, 0.343), -1, 100),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_norm(-1, 0.343)),
    make_empty_discontinuities_df()
  )
})

test_that("Discontinuites GPD works", {
  expect_equal(
    discontinuities(dst_gpd(1, 2, -1), -Inf, Inf),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_gpd(-1, 0.343, 12), 1, 1000),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_gpd(-1, 0.343, 12)),
    make_empty_discontinuities_df()
  )
})

test_that("Discontinuites Poisson works", {
  expect_equal(
    discontinuities(dst_pois(3), 0, 1),
    tibble::tibble(
      location = c(0, 1),
      size = c(dpois(0, 3), dpois(1, 3))
    )
  )

  results <- dpois(0:10, 18)
  expect_equal(
    discontinuities(dst_pois(18), 0, 10),
    tibble::tibble(
      location = 0:10,
      size = results
    )
  )
  expect_error(
    discontinuities(dst_pois(1456))
  )
  expect_error(
    discontinuities(dst_pois(1), 1, 0)
  )
})

test_that("Discontinuites Finite works", {
  expect_equal(
    discontinuities(dst_finite(1:5, rep(0.2, 5)), 1, 4),
    tibble::tibble(location = c(1, 2, 3, 4), size = rep(0.2, 4))
  )
  expect_equal(
    discontinuities(dst_empirical(hp, data = car), 58, 80),
    tibble::tibble(
      location = c(62, 65, 66),
      size = c(1 / 32, 1 / 32, 1 / 16)
    )
  )
  expect_equal(
    discontinuities(dst_empirical(hp, data = car), 52, 500),
    tibble::tibble(location = sort(unique(car$hp)), size = c(
      1 / 32, 1 / 32, 1 / 32, 2 / 32, 1 / 32, 1 / 32, 1 / 32,
      1 / 32, 1 / 32, 1 / 32, 3 / 32, 1 / 32, 2 / 32, 2 / 32,
      3 / 32, 3 / 32, 1 / 32, 1 / 32, 1 / 32, 2 / 32, 1 / 32,
      1 / 32
    ))
  )
  expect_equal(
    discontinuities(dst_finite(1:5, rep(0.2, 5)), 58, 80),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_finite(1:5, rep(0.2, 5))),
    tibble::tibble(
      location = 1:5,
      size = rep(0.2, 5)
    )
  )
})

test_that("Discontinuites Degenerate works", {
  expect_equal(
    discontinuities(dst_degenerate(1), -Inf, Inf),
    tibble::tibble(location = 1, size = 1)
  )
  expect_equal(
    discontinuities(dst_degenerate(5), 0, 456),
    tibble::tibble(location = 5, size = 1)
  )
  expect_equal(
    discontinuities(dst_degenerate(5), 5, 54),
    tibble::tibble(location = 5, size = 1)
  )
  expect_equal(
    discontinuities(dst_degenerate(45), 56, 75654),
    make_empty_discontinuities_df()
  )
  expect_equal(
    discontinuities(dst_degenerate(4546455)),
    tibble::tibble(location = 4546455, size = 1)
  )
})

test_that("Discontinuites Mix works", {
  expect_equal(
    discontinuities(mix(
      dst_norm(1, 4),
      dst_norm(1, 3)
    ), 1, 3),
    tibble::tibble(location = numeric(), size = numeric())
  )
  expect_equal(
    discontinuities(mix(
      dst_norm(1, 4),
      dst_unif(1, 3)
    ), 4, 5),
    tibble::tibble(location = numeric(), size = numeric())
  )
  expect_equal(
    discontinuities(mix(
      dst_norm(1, 4),
      dst_gpd(1, 3, 34)
    ), 7, 2342342),
    tibble::tibble(location = numeric(), size = numeric())
  )
  expect_equal(
    discontinuities(mix(
      dst_norm(1, 5),
      dst_degenerate(2)
    )),
    tibble::tibble(location = c(2), size = c(0.5))
  )
  expect_equal(
    discontinuities(mix(
      dst_finite(1:5, rep(0.2, 5)),
      dst_degenerate(2)
    ), 1, 6),
    tibble::tibble(location = 1:5, size = c(0.1, 0.6, 0.1, 0.1, 0.1))
  )
  expect_equal(
    discontinuities(mix(
      dst_finite(1:5, rep(0.2, 5)),
      dst_degenerate(2),
      dst_norm(5, 76)
    )),
    tibble::tibble(location = 1:5, size = c(
      0.2 / 3, (1 + 0.2) / 3,
      0.2 / 3, 0.2 / 3, 0.2 / 3
    ))
  )
  expect_equal(
    discontinuities(mix(
      dst_finite(1:5, rep(0.2, 5)),
      dst_degenerate(2),
      dst_empirical(hp, data = car)
    ), 1, 6),
    tibble::tibble(location = 1:5, size = c(
      0.2 / 3, (1 + 0.2) / 3,
      0.2 / 3, 0.2 / 3, 0.2 / 3
    ))
  )
  expect_equal(
    discontinuities(mix(
      dst_finite(1:5, rep(0.2, 5)),
      dst_finite(1:5, rep(0.2, 5)),
    ), 2, 6),
    tibble::tibble(location = 2:5, size = rep(0.2, 4))
  )
  expect_equal(
    discontinuities(mix(
      dst_finite(1:5, rep(0.2, 5)),
      dst_empirical(hp, data = car)
    )),
    tibble::tibble(
      location = c(1:5, sort(unique(car$hp))),
      size = c(
        rep(0.1, 5),
        1 / 64, 1 / 64, 1 / 64, 2 / 64, 1 / 64, 1 / 64, 1 / 64,
        1 / 64, 1 / 64, 1 / 64, 3 / 64, 1 / 64, 2 / 64, 2 / 64,
        3 / 64, 3 / 64, 1 / 64, 1 / 64, 1 / 64, 2 / 64, 1 / 64,
        1 / 64
      )
    )
  )
  expect_equal(
    discontinuities(
      mix(
        mix(
          dst_finite(1:5, rep(0.2, 5)),
          dst_degenerate(6)
        ),
        dst_norm(1, 5)
      ), -94, 465
    ),
    tibble::tibble(
      location = c(1:5, 6), size = c(rep(0.2 / 4, 5), 1 / 4)
    )
  )
  expect_equal(
    discontinuities(
      mix(
        mix(
          dst_finite(1:5, rep(0.2, 5)),
          dst_degenerate(6)
        ),
        dst_norm(1, 5)
      ), -94, 5
    ),
    tibble::tibble(
      location = c(1:5), size = c(rep(0.2 / 4, 5))
    )
  )
  expect_equal(
    discontinuities(
      mix(
        mix(
          dst_unif(3, 7),
          dst_gpd(6, 4, 5)
        ),
        dst_norm(1, 5)
      ), -94, 5
    ),
    tibble::tibble(
      location = numeric(), size = numeric()
    )
  )
  expect_equal(
    discontinuities(
      mix(
        dst_pois(1),
        dst_norm(1, 5)
      ), 0, 2
    ),
    tibble::tibble(
      location = 0:2,
      size = c(dpois(0, 1) / 2, dpois(1, 1) / 2, dpois(2, 1) / 2)
    )
  )
  expect_error(
    discontinuities(
      mix(
        dst_pois(14),
        dst_norm(56, 8)
      )
    )
  )
  expect_error(
    discontinuities(
      mix(
        dst_pois(14),
        dst_norm(56, 8)
      ), -1, -6
    )
  )
})

rm("car")
vincenzocoia/distplyr documentation built on March 5, 2024, 9:45 p.m.