errorFunction = function(value) {
  if(is.function(value)) {
    value = "You returned a function, not a numerical value."
  }
  return(value)
}
  


testFunction = function(stud, fun_name, args, q_num=1, correct_answer, round=FALSE) {
  env = stud$env
  run_fun = try(do.call(fun_name, args, envir=env), TRUE)

  if(is.numeric(round))
    correct_answer = signif(correct_answer, round)
  ##run_fun = try(evalq(MyMean(x),  ringed_env), TRUE)
  tests = stud[["tests"]][[fun_name]][[q_num]]
  tests$correct_answer = correct_answer
  tests$args = args
  if(class(run_fun) == "try-error") {
    tests$run_error = run_fun[1]
    tests$can_run = FALSE
    tests$mark = 0
  } else {
    tests$your_answer = errorFunction(run_fun)
    
    if(is.numeric(tests$your_answer) && is.numeric(round))
      tests$your_answer = signif(tests$your_answer, round)
    
    tests$compare = compare(tests$your_answer,
      tests$correct_answer, round=round)
    tests$is_correct = tests$compare$result
    if(tests$is_correct){
      tests$mark = 0
    }
  }
  stud[["tests"]][[fun_name]][[q_num]]  = tests
  return(stud)
}
