Nothing
#############################################################################
##
## Copyright 2016 Novartis Institutes for BioMedical Research Inc.
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
#############################################################################
context("HDF5 Reference objects")
test_that("Subsetting raw vector with c code", {
## test reading and writing of a subset of a raw vector using C code
subset_test <- as.raw(0:255)
index <- c(1:5, 9)
## item_size 16
subset_read <- .Call("R_read_raw_subset_generic", subset_test, index, 16, PACKAGE = "hdf5r")
subset_write <- .Call("R_write_raw_subset_generic", subset_test, as.raw(0:95), index, 16, PACKAGE = "hdf5r")
expect_equal(subset_read, subset_test[1:16 + 16 * rep(index, each=16)])
subset_test_write <- subset_test
subset_test_write[1:16 + 16 * rep(index, each=16)] <- as.raw(0:95)
expect_equal(subset_write, subset_test_write)
## item_size 8
subset_read <- .Call("R_read_raw_subset_generic", subset_test, index, 8, PACKAGE = "hdf5r")
subset_write <- .Call("R_write_raw_subset_generic", subset_test, as.raw(0:47), index, 8, PACKAGE = "hdf5r")
expect_equal(subset_read, subset_test[1:8 + 8 * rep(index, each=8)])
subset_test_write <- subset_test
subset_test_write[1:8 + 8 * rep(index, each=8)] <- as.raw(0:47)
expect_equal(subset_write, subset_test_write)
## item_size 4
subset_read <- .Call("R_read_raw_subset_generic", subset_test, index, 4, PACKAGE = "hdf5r")
subset_write <- .Call("R_write_raw_subset_generic", subset_test, as.raw(0:23), index, 4, PACKAGE = "hdf5r")
expect_equal(subset_read, subset_test[1:4 + 4 * rep(index, each=4)])
subset_test_write <- subset_test
subset_test_write[1:4 + 4 * rep(index, each=4)] <- as.raw(0:23)
expect_equal(subset_write, subset_test_write)
## item_size 1
subset_read <- .Call("R_read_raw_subset_generic", subset_test, index, 1, PACKAGE = "hdf5r")
subset_write <- .Call("R_write_raw_subset_generic", subset_test, as.raw(0:5), index, 1, PACKAGE = "hdf5r")
expect_equal(subset_read, subset_test[index + 1])
subset_test_write <- subset_test
subset_test_write[1 + index] <- as.raw(0:5)
expect_equal(subset_write, subset_test_write)
})
test_that("Subsetting reference vector", {
test_file <- tempfile(fileext=".h5")
## open a new one, truncate if it exists
file.h5 <- H5File$new(test_file, mode="w")
ref_obj <- H5R_OBJECT$new(id=file.h5)
ref_obj$ref <- as.raw(0:191)
ref_obj_vector <- ref_obj$clone()
ref_obj_vector$names <- LETTERS[1:24]
expect_equal(ref_obj_vector$length, 24)
## now test various ways of subsetting
expect_equal(ref_obj_vector$subset_read(c("A", "C")), ref_obj_vector$subset_read(c(1, 3)))
expect_equal(ref_obj_vector$subset_read(c("A", "C"))$ref, c(as.raw(0:7), as.raw(16:23)))
expect_equal(ref_obj_vector$subset_read(c("A", "C"))$names, c("A", "C"))
expect_equal(ref_obj_vector[c("A", "C")], ref_obj_vector$subset_read(c(1, 3)))
## test the subsetting as an array
ref_obj_array <- ref_obj$clone()
ref_obj_array$dim <- c(4,6)
ref_obj_array$dimnames <- list(LETTERS[1:4], tolower(LETTERS[1:6]))
expect_equal(ref_obj_array$length, 24)
expect_equal(ref_obj_array$subset_read(list(c("A", "C"), "a")), ref_obj_array$subset_read(list(c(1, 3), 1)))
expect_equal(ref_obj_array$subset_read(list(c("A", "C"), "a"))$ref, c(as.raw(0:7), as.raw(16:23)))
expect_equal(ref_obj_array$subset_read(list(c("A", "C"), "a"))$dim, NULL)
expect_equal(ref_obj_array$subset_read(list(c("A", "C"), "a"), drop=FALSE)$dim, c(2,1))
expect_equal(ref_obj_array[c("A", "C"), "a"], ref_obj_array$subset_read(list(c(1, 3), 1)))
## test assigning data into the vector
## vector to insert into the other objects
ref_inserted <- ref_obj$ref
obj_to_insert <- as.raw(100:115)
ref_inserted[c(1:8, 17:24)] <- obj_to_insert
ref_obj_vector_inserted <- ref_obj_vector$clone()
ref_obj_vector_inserted$ref <- ref_inserted
ref_obj_array_inserted <- ref_obj_array$clone()
ref_obj_array_inserted$ref <- ref_inserted
## Vector
expect_equal(ref_obj_vector$clone()$subset_assign(c("A", "C"), value=obj_to_insert ), ref_obj_vector_inserted)
expect_equal(ref_obj_vector$clone()$subset_assign(c(1,3), value=obj_to_insert), ref_obj_vector_inserted)
## [<-
ref_obj_vector_cloned <- ref_obj_vector$clone()
ref_obj_vector_cloned[c("A", "C")] <- obj_to_insert
expect_equal(ref_obj_vector_cloned, ref_obj_vector_inserted)
## Array
expect_equal(ref_obj_array$clone()$subset_assign(list(c("A", "C"), "a"), value=obj_to_insert ), ref_obj_array_inserted)
expect_equal(ref_obj_array$clone()$subset_assign(list(c(1,3), 1), value=obj_to_insert), ref_obj_array_inserted)
## [<-
ref_obj_array_cloned <- ref_obj_array$clone()
ref_obj_array_cloned[c("A", "C"), "a"] <- obj_to_insert
expect_equal(ref_obj_array_cloned, ref_obj_array_inserted)
ref_obj <- H5R_DATASET_REGION$new(id=file.h5)
ref_obj$ref <- as.raw(0:191)
expect_equal(ref_obj$length, 16)
## test one item subsetting and writing
ref_obj_subsetted <- H5R_OBJECT$new(id=file.h5)
ref_obj_subsetted$ref <- ref_obj$ref[25:32]
ref_obj_written <- ref_obj_vector$clone()
ref_obj_written$ref[25:32] <- as.raw(0:7)
expect_equal(ref_obj_vector$subset2_read(4), ref_obj_subsetted)
expect_equal(ref_obj_vector$subset2_read("D"), ref_obj_subsetted)
## not doing [[, but [ as [[ is used by R6 itself
## [[
ref_obj_vector_elemD <- ref_obj_vector["D"]
ref_obj_vector_elemD$names <- NULL
expect_equal(ref_obj_vector_elemD, ref_obj_subsetted)
expect_equal(ref_obj_vector$clone()$subset2_assign(4, value=as.raw(0:7)), ref_obj_written)
expect_equal(ref_obj_vector$clone()$subset2_assign("D", value=as.raw(0:7)), ref_obj_written)
## [[<-
ref_obj_vector_cloned <- ref_obj_vector$clone()
ref_obj_vector_cloned["D"] <- as.raw(0:7)
expect_equal(ref_obj_vector_cloned, ref_obj_written)
## test that [i] and [i,] give different results
expect_equal(ref_obj_array[1,]$length, 6)
expect_equal(ref_obj_array[1]$length, 1)
## test setting of a dim attribute using the C-function
.Call("set_dim_attribute", ref_obj_array, c(6, 4), PACKAGE = "hdf5r")
expect_equal(ref_obj_array$dim, c(6, 4))
file.h5$close_all()
file.remove(test_file)
})
test_that("UI functions for reference vector", {
test_file <- tempfile(fileext=".h5")
## open a new one, truncate if it exists
file.h5 <- H5File$new(test_file, mode="w")
r1 <- H5R_OBJECT$new(id=file.h5)
r1$ref <- as.raw(0:31)
r1$names <- c("A", "B", "C", "D")
r2 <- H5R_OBJECT$new(id=file.h5)
r2$ref <- as.raw(8:23)
r3 <- H5R_OBJECT$new(id=file.h5)
r3$ref <- as.raw(16:31)
r3$names <- c("E", "F")
## concatenate
r_concat <- c(r1, r2, r3)
r_concat_compare <- H5R_OBJECT$new(id=file.h5)
r_concat_compare$ref <- c(r1$ref, r2$ref, r3$ref)
r_concat_compare$names <- c("A", "B", "C", "D", "", "", "E", "F")
expect_equal(r_concat, r_concat_compare)
## make them all to matrices
r1$dim <- c(2, 2)
r2$dim <- c(2, 1)
r3$dim <- c(2, 1)
## assign dimnames to the first one
r1$dimnames <- list(c("A", "B"), c("C", "D"))
## bind them together by columns
r_cbind <- cbind(r1, r2, r3)
## transpose them and row bind them
r1_t <- t(r1)
r2_t <- t(r2)
r3_t <- t(r3)
r1_t_cmp <- cbind(r1[1,], r1[2,])
dimnames(r1_t_cmp) <- dimnames(r1_t)
expect_equal(r1_t, r1_t_cmp)
r_rbind <- rbind(r1_t, r2_t, r3_t)
expect_equal(t(r_rbind), r_cbind)
## put them into a data-frame
r_df <- data.frame(r1=r1, r2=r2, r3=r3)
expect_equal(dim(r_df), c(2,4))
file.h5$close_all()
file.remove(test_file)
})
test_that("Create and dereference references; save in a dataset", {
test_file <- tempfile(fileext=".h5")
## open a new one, truncate if it exists
file.h5 <- H5File$new(test_file, mode="w")
grp1 <- file.h5$create_group("test1")
## test an object reference
ref <- grp1$create_reference()
grp1_ref <- ref$dereference()[[1]]
expect_equal(grp1$obj_info(), grp1_ref$obj_info())
## test a dataset region reference
grp1[["test_data"]] <- matrix(1:40, ncol=4)
ds <- grp1[["test_data"]]
ds_space <- ds$get_space()
ds_space <- ds_space[2:5, 1:2]
ds_ref_1 <- ds$create_reference(2:5, 1:2)
ds_ref_2 <- grp1$create_reference("test_data", ds_space)
## now de-reference again
ds_ref_1$dereference()
ds_ref_1$dereference(get_value=TRUE)
expect_equal(ds_ref_1$dereference(get_value=TRUE)[[1]], ds[2:5, 1:2])
expect_equal(ds_ref_2$dereference(get_value=TRUE)[[1]], ds[2:5, 1:2])
## now save them in a dataset and read them back out
file.h5[["obj_ref_dataset"]] <- ref
file.h5[["dset_ref_dataset"]] <- ds_ref_1
ref_read <- file.h5[["obj_ref_dataset"]][]
ds_ref_read <- file.h5[["dset_ref_dataset"]][]
expect_equal(ref_read$dereference()[[1]]$obj_info(), grp1$obj_info())
expect_equal(ds_ref_read$dereference(get_value=TRUE)[[1]], ds[2:5, 1:2])
file.h5$close_all()
file.remove(test_file)
})
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.