context("test parsing of R expressions into Stan code")
test_that("Inavlid expressions are detected and errors triggered in function exp_to_stan",{
expect_error(exp_to_stan(quote(c[10]), 5, 5), "Parameter c\\[10\\] goes beyond the number of parameters specified.")
expect_error(exp_to_stan(quote(c[7]), 5, 5), "Parameter c\\[7\\] goes beyond the number of parameters specified.")
expect_error(exp_to_stan(quote(c[0]), 5, 5), "Parameter c\\[0\\] goes beyond the number of parameters specified.")
expect_error(exp_to_stan(quote(x[10]), 5, 5), "Variable x\\[10\\] goes beyond the number of dependent variables specified.")
expect_error(exp_to_stan(quote(x[7]), 5, 5), "Variable x\\[7\\] goes beyond the number of dependent variables specified.")
expect_error(exp_to_stan(quote(x[0]), 5, 5), "Variable x\\[0\\] goes beyond the number of dependent variables specified.")
expect_error(exp_to_stan(quote(c[6] + x[-1]), 6, 5), "Invalid expression: x\\[-1\\]")
expect_error(exp_to_stan(quote(c[-6] + x[3]), 6, 5), "Invalid expression: c\\[-6\\]")
expect_error(exp_to_stan(quote(c[abcd]), 1, 1), "Invalid expression: c\\[abcd\\]")
expect_error(exp_to_stan(quote(c[]), 6, 5), "Invalid expression: c\\[\\]")
expect_error(exp_to_stan(quote(c[4]*a[5]), 6, 5), "Invalid expression: a\\[5\\]")
expect_error(exp_to_stan(quote(c[1+1]), 6, 5), "Invalid expression: c\\[1 \\+ 1\\]")
expect_error(exp_to_stan(quote(c[3] + c11), 6, 5), "Invalid expression: c11")
expect_error(exp_to_stan(quote(c[[3]]), 6, 5), "Invalid expression: c\\[\\[3\\]\\]")
expect_error(exp_to_stan(quote("hi mom"), 6, 5), "Invalid expression: \"hi mom\"")
expect_error(exp_to_stan(quote(x[2] & c[3]), 6, 5), "Invalid expression: x\\[2\\] & c\\[3\\]")
expect_error(exp_to_stan(quote(c(1)), 6, 5), "Invalid expression: c\\(1\\)")
expect_error(exp_to_stan(quote(exp(c[1],c[3])), 6, 5), "log and exp take only one parameter")
expect_error(exp_to_stan(quote(exp(c[1],c[3], c[2])), 6, 5), "log and exp take only one parameter")
expect_error(exp_to_stan(quote(sin(x[1])), 6, 5), "Invalid expression: sin\\(x\\[1\\]\\)")
})
test_that("Inavlid expressions are detected and errors triggered in function check_valid",{
expect_error(check_valid(quote(c[10]), 5, 5), "Parameter c\\[10\\] goes beyond the number of parameters specified.")
expect_error(check_valid(quote(c[7]), 5, 5), "Parameter c\\[7\\] goes beyond the number of parameters specified.")
expect_error(check_valid(quote(c[0]), 5, 5), "Parameter c\\[0\\] goes beyond the number of parameters specified.")
expect_error(check_valid(quote(x[10]), 5, 5), "Variable x\\[10\\] goes beyond the number of dependent variables specified.")
expect_error(check_valid(quote(x[7]), 5, 5), "Variable x\\[7\\] goes beyond the number of dependent variables specified.")
expect_error(check_valid(quote(x[0]), 5, 5), "Variable x\\[0\\] goes beyond the number of dependent variables specified.")
expect_error(check_valid(quote(c[6] + x[-1]), 6, 5), "Invalid expression: x\\[-1\\]")
expect_error(check_valid(quote(c[-6] + x[3]), 6, 5), "Invalid expression: c\\[-6\\]")
expect_error(check_valid(quote(c[abcd]), 1, 1), "Invalid expression: c\\[abcd\\]")
expect_error(check_valid(quote(c[]), 6, 5), "Invalid expression: c\\[\\]")
expect_error(check_valid(quote(c[4]*a[5]), 6, 5), "Invalid expression: a\\[5\\]")
expect_error(check_valid(quote(c[1+1]), 6, 5), "Invalid expression: c\\[1 \\+ 1\\]")
expect_error(check_valid(quote(c[3] + c11), 6, 5), "Invalid expression: c11")
expect_error(check_valid(quote(c[[3]]), 6, 5), "Invalid expression: c\\[\\[3\\]\\]")
expect_error(check_valid(quote("hi mom"), 6, 5), "Invalid expression: \"hi mom\"")
expect_error(check_valid(quote(x[2] & c[3]), 6, 5), "Invalid expression: x\\[2\\] & c\\[3\\]")
expect_error(check_valid(quote(c(1)), 6, 5), "Invalid expression: c\\(1\\)")
expect_error(check_valid(quote(exp(c[1],c[3])), 6, 5), "log and exp take only one parameter")
expect_error(check_valid(quote(exp(c[1],c[3], c[2])), 6, 5), "log and exp take only one parameter")
expect_error(check_valid(quote(sin(x[1])), 6, 5), "Invalid expression: sin\\(x\\[1\\]\\)")
})
test_that("Valid expressions are correctly translated to Stan by exp_to_stan",{
expect_equal(exp_to_stan(quote(c[1]), 5, 5), "Theta1")
expect_equal(exp_to_stan(quote(x[5]), 5, 5), "function_var[i,5]")
expect_equal(exp_to_stan(quote(exp(c[3]) + log(x[2])), 5, 5), "( exp(Theta3) ) + ( log(function_var[i,2]) )")
expect_equal(exp_to_stan(quote(log(x[4])*(c[5]*(c[4]*x[1]))),5,5), "( log(function_var[i,4]) ) * ( ( Theta5 ) * ( ( Theta4 ) * ( function_var[i,1] ) ) )")
expect_equal(exp_to_stan(quote(c[1]*exp(x[1]*x[2])), 5, 5), "( Theta1 ) * ( exp(( function_var[i,1] ) * ( function_var[i,2] )) )")
})
test_that("Valid expressions are not flagged by the validator", {
expect_silent(check_valid(quote(c[1]), 5, 5))
expect_silent(check_valid(quote(x[5]), 5, 5))
expect_silent(check_valid(quote(exp(c[3]) + log(x[2])), 5, 5))
expect_silent(check_valid(quote(log(x[4])*(c[5]*(c[4]*x[1]))),5,5))
expect_silent(check_valid(quote(c[1]*exp(x[1]*x[2])), 5, 5))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.