tests/testthat/test_isRollingLDA.R

context("as.RollingLDA and Getter")

data("economy_texts")
data("economy_dates")

roll_lda = RollingLDA(economy_texts, economy_dates, "quarter", "6 month",
                      init = 20, K = 5, type = "lda")

test_that("various messages", {
  a = 12
  class(a) = "RollingLDA"
  expect_false(is.RollingLDA(a))
  expect_message(is.RollingLDA(a, verbose = TRUE), "object is not a list")

  tmp = roll_lda
  names(tmp) = ""
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Must have names")

  tmp = roll_lda
  tmp$id = 2L
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "May only contain the following types: \\{character,LDA,list,Date,character,data.table,list\\},")

  tmp = roll_lda
  names(tmp)[names(tmp) == "id"] = "ID"
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "set \\{'id','lda','docs','dates','vocab','chunks','param'\\}")

  tmp = roll_lda
  tmp$lda = NULL
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "\\{'id','lda','docs','dates','vocab','chunks','param'\\}")

  # id
  tmp = roll_lda
  tmp$id = c("id1", "id2")
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "not a character of length 1")

  # lda
  tmp = roll_lda
  class(tmp$lda) = "not LDA"
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "not an \"LDA\" object")

  # docs
  tmp = roll_lda
  tmp$docs = "not list"
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Must be of type 'list', not 'character'")

  tmp = roll_lda
  names(tmp$docs)[2] = names(tmp$docs)[1]
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "not same names as \"docs\"")
  # error comes from dates, because getDocs returns all docs, that matches names in dates

  tmp = roll_lda
  tmp$docs[[2]] = "not matrix"
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "May only contain the following types: \\{matrix\\}")

  tmp = roll_lda
  tmp$docs[[2]] = matrix(0, ncol = 1, nrow = 5)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "not all elements have two rows")

  tmp = roll_lda
  tmp$docs[[2]] = matrix(0, ncol = 1, nrow = 2)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "not all values in the second row equal 1")

  # dates
  tmp = roll_lda
  tmp$dates[1] = NA_Date_
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Contains missing values")

  tmp = roll_lda
  tmp_dates = as.character(tmp$dates)
  names(tmp_dates) = names(tmp$dates) # only for fedora...
  tmp$dates = tmp_dates
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Must be of class 'Date'")

  tmp = roll_lda
  names(tmp$dates)[2] = names(tmp$dates)[1]
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Must have unique names")
  # error comes from docs, because getNames return names from dates and matches
  # with names from docs

  tmp = roll_lda
  tmp$docs = append(tmp$docs, list(matrix(c(1,1), nrow = 2)))
  #names(tmp$docs)[length(tmp$docs)] = "ID_X"
  expect_true(is.RollingLDA(tmp))
  # does not return FALSE, because getDocs returns the subsetted docs

  tmp = roll_lda
  tmp$dates = append(tmp$dates, Sys.Date())
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "not same names as \"docs\"")

  # vocab
  tmp = roll_lda
  tmp$vocab = c(getVocab(tmp), getVocab(tmp)[1])
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Contains duplicated values")

  tmp = roll_lda
  tmp$vocab = c(getVocab(tmp), NA_character_)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Contains missing values")

  tmp = roll_lda
  tmp$vocab = list(12)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "Must be of type 'character'")

  # chunks
  tmp = roll_lda
  tmp$chunks = list()
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "not a data.table with standard parameters")

  tmp = roll_lda
  tmp$chunks = getChunks(tmp)[, -"chunk.id"]
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "not a data.table with standard parameters")

  # chunk.id
  tmp = roll_lda
  tmp$chunks$chunk.id[2] = tmp$chunks$chunk.id[1]
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "duplicated \"chunk.id\"")

  tmp = roll_lda
  tmp$chunks$chunk.id[1] = 0
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"chunk.id\" is not an integer")

  tmp = roll_lda
  tmp$chunks$chunk.id[1] = NA_integer_
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "NA\\(s\\) in \"chunk.id\"")

  # n
  tmp = roll_lda
  tmp$chunks$n[1] = 0
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"n\" is not an integer")

  tmp = roll_lda
  tmp$chunks$n[1] = NA_integer_
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "NA\\(s\\) in \"n\"")

  # n.discarded
  tmp = roll_lda
  tmp$chunks$n.discarded[1] = 0
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"n.discarded\" is not an integer")

  # n.memory
  tmp = roll_lda
  tmp$chunks$n.memory[1] = 0
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"n.memory\" is not an integer")

  # n.vocab
  tmp = roll_lda
  tmp$chunks$n.vocab[1] = 0
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"n.vocab\" is not an integer")

  tmp = roll_lda
  tmp$chunks$n.vocab[1] = NA_integer_
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "NA\\(s\\) in \"n.vocab\"")

  tmp = roll_lda
  tmp$vocab = c(getVocab(roll_lda), "ABC")
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "max of \"n.vocab\" does not match number of vocabularies")

  tmp = roll_lda
  tmp$chunks$n.vocab = rev(tmp$chunks$n.vocab)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "\"n.vocab\" is not monotonously increasing")

  # start.date
  tmp = roll_lda
  tmp$chunks$start.date = as.character(tmp$chunks$start.date)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"start.date\" is not a Date object")

  tmp = roll_lda
  tmp$chunks$start.date[1] = NA_Date_
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "NA\\(s\\) in \"start.date\"")

  tmp = roll_lda
  tmp$chunks$start.date[1] = as.character(Sys.Date())
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "minimum of \"start.date\" is larger than minimum of text's dates")

  # end.date
  tmp = roll_lda
  tmp$chunks$end.date = as.character(tmp$chunks$end.date)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"end.date\" is not a Date object")

  tmp = roll_lda
  tmp$chunks$end.date[1] = NA_Date_
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "NA\\(s\\) in \"end.date\"")

  tmp = roll_lda
  tmp$chunks$end.date[nrow(getChunks(tmp))] = tmp$chunks$end.date[nrow(getChunks(tmp))]-1
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "maximum of \"end.date\" is smaller than maximum of text's dates")

  # memory
  tmp = roll_lda
  tmp$chunks$memory = as.character(tmp$chunks$memory)
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"memory\" is not a Date object")

  # param
  tmp = roll_lda
  tmp$param = getParam(roll_lda)[-1]
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE),
                 "\\{'vocab.abs','vocab.rel','vocab.fallback','doc.abs'\\}")

  tmp = roll_lda
  tmp$param$vocab.abs = -1
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"vocab.abs\" is smaller than 0")

  tmp = roll_lda
  tmp$param$vocab.rel = -1
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"vocab.rel\" is smaller than 0")

  tmp = roll_lda
  tmp$param$vocab.fallback = -1
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"vocab.fallback\" is smaller than 0")

  tmp = roll_lda
  tmp$param$doc.abs = -1
  expect_false(is.RollingLDA(tmp))
  expect_message(is.RollingLDA(tmp, verbose = TRUE), "\"doc.abs\" is smaller than 0")

})

Try the rollinglda package in your browser

Any scripts or data that you put into this service are public.

rollinglda documentation built on Oct. 1, 2022, 9:06 a.m.