inst/tinytest/test_c_udf_reg_multi_array.R

# ================================================================
# See comments on test_delayed_1.R regarding filenames for these test cases.
# ================================================================

if ((namespaceToCharge <- Sys.getenv("TILEDB_REST_UNIT_TEST_NAMESPACE_TO_CHARGE")) == "") {
    exit_file("No TILEDB_REST_UNIT_TEST_NAMESPACE_TO_CHARGE in environment")
}

library(tiledbcloud)
library(tinytest)

# ----------------------------------------------------------------
if (!tiledbcloud:::.logged_in()) exit_file("not logged in")

# ----------------------------------------------------------------
make_udf_name <- function(base) {
  paste(base, floor(as.numeric(Sys.time())), floor(runif(1, min = 100000, max = 999999)), sep="_")
}

# ================================================================
udfname <- make_udf_name('udf-registration-test-multi-array')

myfunc <- function(df1, df2, attrname) {
  vec1 <- as.vector(df1[[attrname]])
  vec2 <- as.vector(df2[[attrname]])
  list(
    len=length(vec1) + length(vec2),
    min=min(vec1) + min(vec2),
    med=median(vec1) + median(vec2),
    max=max(vec1) + max(vec2)
  )
}

tiledbcloud::register_udf(namespace=namespaceToCharge, name=udfname, type='multi_array', func=myfunc)

info <- tiledbcloud::get_udf_info(namespace=namespaceToCharge, name=udfname)
expect_equal(info$name, udfname)

tiledbcloud::update_udf_info(namespace=namespaceToCharge, name=udfname, type='multi_array', func=myfunc, tags=list("testing", "udf", "upload"), readme='Here is the README text', version='2.0')

info <- tiledbcloud::get_udf_info(namespace=namespaceToCharge, name=udfname)
expect_equal(info$name, udfname)
expect_equal(info$readme, 'Here is the README text')
# Written as list(...), read back as c(...) -- this is expected.
expect_equal(info$tags, c("testing", "udf", "upload"))

# ----------------------------------------------------------------
details1 <- tiledbcloud::UDFArrayDetails$new(
  uri="tiledb://TileDB-Inc/quickstart_dense",
  ranges=QueryRanges$new(
    layout=Layout$new('row-major'),
    ranges=list(cbind(1,4),cbind(1,4))
  ),
  buffers=list("a")
)

details2 <- tiledbcloud::UDFArrayDetails$new(
  uri="tiledb://TileDB-Inc/quickstart_sparse",
  ranges=QueryRanges$new(
    layout=Layout$new('row-major'),
    ranges=list(cbind(1,2),cbind(1,4))
  ),
  buffers=list("a")
)

registered_udf_name=paste(namespaceToCharge, udfname, sep='/')
# TODO: debug failure
# result <- tiledbcloud::execute_multi_array_udf(
#   array_list=list(details1, details2),
#   registered_udf_name=registered_udf_name,
#   args=list(attrname="a"),
#   namespace=namespaceToCharge
# )

# Deregister the temp name before checking the result, in case of failure,
# so we don't leave temp names dangling.
tiledbcloud::deregister_udf(namespace=namespaceToCharge, name=udfname)

# expect_equal(result, list(len=19, min=2, med=10.5, max=19))
TileDB-Inc/TileDB-Cloud-R documentation built on July 18, 2024, 3:33 p.m.