Nothing
context("parse: inplace")
test_that("can't use integer inplace for update()", {
expect_error(odin_parse({
q[] <- user()
p[] <- q[i] / sum(q)
initial(x[]) <- 0
update(x[]) <- rmultinom(5, p)
dim(p) <- 5
dim(q) <- 5
dim(x) <- 5
}),
"Can't use inplace integer expression in update",
class = "odin_error")
})
test_that("can't use multiline inplace", {
expect_error(odin_parse({
q[] <- user()
p[] <- q[i] / sum(q)
initial(x[]) <- 0
update(x[]) <- y[i]
y[] <- rmultinom(5, p)
y[1] <- 0
dim(p) <- 5
dim(q) <- 5
dim(x) <- 5
dim(y) <- 5
}),
"in-place equations may only be used on a single-line array",
class = "odin_error")
})
test_that("rmultinom is integer", {
ir <- odin_parse({
q[] <- user()
p[] <- q[i] / sum(q)
initial(x[]) <- 0
update(x[]) <- y[i]
y[] <- rmultinom(5, p)
dim(p) <- 5
dim(q) <- 5
dim(x) <- 5
dim(y) <- 5
})
dat <- ir_deserialise(ir)
expect_equal(dat$data$elements$y$storage_type, "int")
expect_equal(dat$data$elements$y$rank, 1)
})
test_that("rmhyper is integer", {
ir <- odin_parse({
x0[] <- user()
dim(x0) <- user()
n <- user()
nk <- length(x0)
tmp[] <- rmhyper(n, x0)
dim(tmp) <- nk
initial(x[]) <- 0
update(x[]) <- tmp[i]
dim(x) <- nk
})
dat <- ir_deserialise(ir)
expect_equal(dat$data$elements$tmp$storage_type, "int")
expect_equal(dat$data$elements$tmp$rank, 1)
})
test_that("rmultinom argument validation", {
expect_error(odin_parse({
update(x) <- 1
initial(x) <- 1
p[] <- 0.2
dim(p) <- 5
dim(y) <- 5
y[] <- rmultinom(p, 5)
}),
"Function 'rmultinom' requires array as argument 2",
class = "odin_error")
})
test_that("in place expressions must be simple", {
expect_error(
odin_parse({
update(x) <- 1
initial(x) <- 1
y <- rmultinom(5 + 2, x)
}),
"At present, inplace function 'rmultinom' must use no functions",
class = "odin_error")
})
test_that("in place expressions must return an array", {
expect_error(
odin_parse({
update(x) <- 1
initial(x) <- 1
y <- rmultinom(2, x)
}),
"Expected an array on the lhs of inplace function 'rmultinom'",
class = "odin_error")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.