tests/testthat/test_core_functionality.R

library(DivNet)
context("Test output")

set.seed(1)
n <- 6
n_taxa <- 5
my_counts <- matrix(rpois(n*n_taxa, lambda=10), nrow = n)
my_discrete_covariate <- cbind(1, rep(c(0,1), each = n/2), rep(c(0,1), n/2))
my_continuous_covariate <- rnorm(n)

test_that("errors are thrown", {
  expect_error(divnet(matrix(c(10, 20, 10, 1), nrow= 1), tuning="test"))  
  expect_error(divnet(matrix(c(10, 20, 10, 1), ncol=2), tuning="test"))
  expect_error(divnet(matrix(c(10, 20, 10, 1, 50, 0), ncol=2), tuning="test"))
  expect_is(divnet(matrix(c(10, 20, 11, 1, 50, 1), nrow=2), 
                   tuning="test"), "diversityEstimates")
})

test_that("fit_aitchison works", {
  expect_true(TRUE)  
  expect_is(fit_aitchison(my_counts, tuning = "test"), "list")
  expect_is(fit_aitchison(my_counts, my_discrete_covariate, tuning = "test"), "list")
  expect_is(fit_aitchison(my_counts, my_continuous_covariate, tuning = "test"), "list")
})

test_that("divnet works", {
  expect_is(divnet(my_counts, variance = 0, tuning="test"), 
            "diversityEstimates")
  expect_is(divnet(my_counts, my_discrete_covariate, variance = 0, tuning="test"), 
            "diversityEstimates")
  expect_is(divnet(my_counts, X = my_continuous_covariate, variance = 0, tuning="test"), 
            "diversityEstimates")
})

test_that("arguments are fine", {
  expect_is(divnet(my_counts, my_discrete_covariate,
                   base = 2, perturbation = 0.01, 
                   tuning="test"), "diversityEstimates")
  expect_is(divnet(my_counts, my_discrete_covariate,
                   base = 1, perturbation = 0.1, 
                   tuning=list(EMiter = 4, EMburn = 2, MCiter = 5, MCburn = 2)), "diversityEstimates")
})


test_that("ordering with base works as expected", {
  for (i in 1:5) {
    perturbed_counts <- my_counts
    perturbed_counts[,i] <- rpois(n, lambda=200)
    perturbed_counts
    fa1 <- fit_aitchison(perturbed_counts, tuning = "test", base=i)
    estimated_compositions <- fa1$fitted_z[1, ]
    expect_equal(which.max(estimated_compositions), i)
  }
})

test_that("diversity indices work as expected", {
  expect_equal(bray_curtis_true(c(0.4, 0.6), c(0.2, 0.8)),
               bc_fast(c(0.4, 0.6), c(0.2, 0.8)))
  expect_equal(euclidean_true(c(0.4, 0.6), c(0.2, 0.8)),
               euc_fast(c(0.4, 0.6), c(0.2, 0.8)))
  
  expect_equal(shannon_true(rep(1/2, 2)), log(2))
  expect_equal(shannon_true(rep(1/5, 5)), log(5))
  
  expect_equal(simpson_true(rep(1/2, 2)), 2*0.5^2)
  expect_equal(simpson_true(rep(1/5, 5)), 5*(0.2^2))
  
  # check errors are thrown when not given a proportion
  expect_error(shannon_true(rep(1/5, 4)))
  expect_error(simpson_true(rep(1/5, 4)))
  expect_error(bc_fast(c(0.4, 0.5), c(0.2, 0.8)))
  expect_error(euc_fast(c(0.4, 0.5), c(0.2, 0.8)))
  
})
adw96/DivNet documentation built on Oct. 2, 2023, 11:49 a.m.