library(testthat)
library(rpf)
#options(error = utils::recover)

context("lmp ICC")

test_that("LMP", {

  ## Check vs. 2PL from same package
  lmp.k0<-rpf.lmp(q=0)
  twopl<-rpf.drm()
  par<-c(.7,-.1)
  par2<-c(exp(.7),-.1,logit(0),logit(1))
  expect_equal(rpf.prob(lmp.k0, par, c(-1,0,1)), rpf.prob(twopl, par2, c(-1,0,1)))

  ## 3rd order polynomial
  lmp.k1 <- rpf.lmp(q=1)

  ## Response probabilities manually copied from code used for Falk & Cai
  lmp.k1.values<-matrix(c(.86737623446,.52497918748,.00005929256,
                          .1326238,.4750208,.99994070744),
                        byrow=TRUE,nrow=2)
  par<-c(.7,-.1,-2,.5)

  ## Since not obtaining above from external code, there will be some minor
  ## differences if we compare to too many decimal places
  expect_equal(lmp.k1.values,rpf.prob(lmp.k1, par, c(-1,0,1)), tolerance=1e-7)

  ## 5th order polynomial
  lmp.k2 <- rpf.lmp(q=2)

  ## Response probabilities manually copied from code used for Falk & Cai
  lmp.k2.values<-matrix(c(.9998936,.6224593,.4339060,
                          .0001063994,.3775406677,.5660940386),
                        byrow=TRUE,nrow=2)
  par<-c(.6,-.5,.4,-.2,1,-1)

  ## Since not obtaining above from external code, there will be some minor
  ## differences if we compare to too many decimal places
  expect_equal(lmp.k2.values,rpf.prob(lmp.k2, par, c(-1,0,1)), tolerance=1e-7)

})
