tests/testthat/testappend.R

context("testappend")

test_that("CGGPappend works", {
  SG <- CGGPcreate(d=3, batchsize=100, corr='GAUSS')
  f <- function(x){x[1]*x[3]+x[2]^2}
  y <- apply(SG$design, 1, f)
  SG <- CGGPfit(SG, Y=y)
  for (i in c("UCB", "MAP", "TS", "Oldest", "Random", "Lowest")) {
    lastN <- nrow(SG$design)
    SG <- CGGPappend(CGGP=SG, batchsize=20, selectionmethod = i)
    expect_is(SG, "CGGP")
    expect_gt(nrow(SG$design), lastN)
    y <- apply(SG$design, 1, f)
    SG <- CGGPfit(SG, Y=y)
  }
  # Error, UC is not an option.
  expect_error(CGGPappend(SG, 20, selectionmethod = "UC"))
  
  # # Can append after append without fitting between
  # expect_error(SG <- CGGPappend(SG, 20), NA)
  # expect_error(SG <- CGGPappend(SG, 20), NA)
  
  # Can append with supp data
  xsup <- matrix(runif(3*10), ncol=3)
  ysup <- apply(xsup, 1, f)
  SG <- CGGPfit(SG, SG$Y, Xs=xsup, Ys=ysup, corr='m32')
  for (sel.method in c("UCB", "TS", "MAP")) {
    expect_error(CGGPappend(SG, 30, sel.method), NA)
  }
})

test_that("CGGPappend works with large number", {
  # Start it small
  SG <- CGGPcreate(d=3, batchsize=20)
  f <- function(x){x[1]+log(x[1]+.1)+sin(2*pi*4*x[2]^2) + cos(2*pi*5*x[3])}
  y <- apply(SG$design, 1, f)
  SG <- CGGPfit(SG, Y=y)
  lastN <- nrow(SG$design)
  
  # Adding 2000 will force it to increase ML and add rows to uo, pila, pala, etc.
  # But it doesn't show as working on codecov? Try 4000
  expect_error(SG <- CGGPappend(CGGP=SG, batchsize=2*2000, selectionmethod="MAP"), NA)
  expect_is(SG, "CGGP")
  expect_gt(nrow(SG$design), lastN)
  # y <- apply(SG$design, 1, f)
  # SG <- CGGPfit(SG, Y=y)
  # expect_error(CGGPappend(SG, 20, selectionmethod = "UC"))
  
  # Do we want prediction to work before fit is run? If yes, below should not give an error, but it does now.
  # ypred <- CGGPpred(SG$design, SG)
  
  # Check that prediction is still exact after adding rows to uo, pila, w, etc.
  # This gets inaccurate since there's so much data, so I'll remove it.
  # y <- apply(SG$design, 1, f)
  # SG <- CGGPfit(SG, Y=y)
  # ypred <- CGGPpred(SG, SG$design)
  # expect_equal(y, c(ypred$mean), tol=1e-2)
})

test_that("CGGPappend gives warning if it can't add any data", {
  
  SG <- CGGPcreate(d=3, batchsize=20, corr="cauchySQ")
  f <- function(x){x[1]+log(x[1]+.1)+sin(2*pi*4*x[2]^2) + cos(2*pi*5*x[3])}
  y <- apply(SG$design, 1, f)
  SG <- CGGPfit(SG, Y=y)
  
  expect_warning(CGGPappend(CGGP=SG, batchsize=1, selectionmethod="MAP"))
})
CollinErickson/CGGP documentation built on Feb. 6, 2024, 2:24 a.m.