r_parse_eval <- function(x, env = caller_env()) {
  .Call(ffi_test_parse_eval, x, env)
}

nms_are_duplicated <- function(nms, from_last = FALSE) {
  .Call(ffi_nms_are_duplicated, nms, from_last)
}

r_lgl_sum <- function(x, na_true) {
  stopifnot(is_logical(x), is_bool(na_true))
  .Call(ffi_test_lgl_sum, x, na_true)
}

r_lgl_which <- function(x, na_propagate) {
  stopifnot(is_logical(x), is_bool(na_propagate))
  .Call(ffi_test_lgl_which, x, na_propagate)
}

r_obj_encode_utf8 <- function(x) {
  .Call(ffi_test_obj_encode_utf8, x)
}
test_encodings <- function() {
  string <- "\u00B0C"

  utf8 <- iconv(string, from = Encoding(string), to = "UTF-8")
  unknown <- iconv(string, from = Encoding(string), to = "", mark = FALSE)
  latin1 <- iconv(string, from = Encoding(string), to = "latin1")

  list(utf8 = utf8, unknown = unknown, latin1 = latin1)
}
expect_utf8_encoded <- function(object) {
  expect_identical(Encoding(object), rep("UTF-8", length(object)))
}
expect_latin1_encoded <- function(object) {
  expect_identical(Encoding(object), rep("latin1", length(object)))
}
