Nothing
library(purrr)
library(testthat)
library(assertthat)
gmask5 <- system.file("extdata", "global_mask_v4.nii", package="neuroim2")
mask <- system.file("extdata", "global_mask2.nii.gz", package="neuroim2")
context("neurovecseq")
test_that("can construct a NeuroVecSeq", {
vec <- read_vec(gmask5)
cvec <- concat(vec,vec,vec)
vs <- NeuroVecSeq(vec,vec,vec)
expect_equal(dim(cvec), dim(vs))
expect_equal(space(cvec), space(vs))
})
test_that("can linearly index a NeuroVecSeq", {
vec <- read_vec(gmask5)
cvec <- concat(vec,vec,vec)
vs <- NeuroVecSeq(vec,vec,vec)
expect_equal(vs[1], cvec[1])
for (i in 1:20) {
idx <- sample(1:prod(dim(cvec)), 50)
expect_equal(vs[idx], cvec[idx])
}
})
test_that("can array index a NeuroVecSeq", {
vec <- read_vec(gmask5)
cvec <- concat(vec,vec,vec)
vs <- NeuroVecSeq(vec,vec,vec)
expect_equal(vs[1], cvec[1])
expect_equal(vs[1,,,], cvec[1,,,])
expect_equal(vs[1,2,,], cvec[1,2,,])
expect_equal(vs[1,2,3,], cvec[1,2,3,])
expect_equal(vs[1,2,3,4], cvec[1,2,3,4])
expect_equal(vs[1:2,2,3,4], cvec[1:2,2,3,4])
expect_equal(vs[1:2,2,3,3:4], cvec[1:2,2,3,3:4])
expect_equal(vs[1:2,2,,3:4], cvec[1:2,2,,3:4])
expect_equal(vs[1:2,,,3:4], cvec[1:2,,,3:4])
expect_equal(vs[,,,3:4], cvec[,,,3:4])
})
test_that("can extract vectors from NeuroVecSeq", {
vec <- read_vec(gmask5)
cvec <- concat(vec,vec,vec)
vs <- NeuroVecSeq(vec,vec,vec)
v1 <- vs %>% vectors()
v2 <- cvec %>% vectors()
checkind <- sample(1:length(v1), 100)
for (i in checkind) {
expect_equal(v1[[i]], v2[[i]])
}
})
test_that("can extract vols from NeuroVecSeq", {
vec <- read_vec(gmask5)
cvec <- concat(vec,vec,vec)
vs <- NeuroVecSeq(vec,vec,vec)
v1 <- vs %>% vols()
v2 <- cvec %>% vols()
for (i in length(v1)) {
expect_equal(v1[[i]], v2[[i]])
}
})
test_that("can map over vols from NeuroVecSeq", {
vec <- read_vec(gmask5)
cvec <- concat(vec,vec,vec)
vs <- NeuroVecSeq(vec,vec,vec)
out <- do.call(concat, vs %>% vols() %>% purrr::map( ~ .))
#out <- do.call(concat, vlist)
expect_true(all(as.vector(cvec) == as.vector(out)))
})
test_that("can subset a NeuroVecSeq", {
vec <- read_vec(c(gmask5, gmask5, gmask5))
vec5 <- sub_vector(vec, 1:4)
vec2 <- read_vec(gmask5)
expect_true(all(vec5[] == vec2[]))
})
test_that("can read a sparse NeuroVecSeq", {
m <- read_vol(mask)
vec <- read_vec(c(gmask5, gmask5, gmask5), mask=as.logical(m))
vec5 <- sub_vector(vec, 1:4)
vec2 <- read_vec(gmask5, mask=as.logical(m))
## TODO check that values are same
expect_true(all(dim(vec5) == dim(vec2)))
})
test_that("can use a MappedNeuroVec as elements in a NeuroVecSeq", {
vec <- read_vec(gmask5)
vs <- NeuroVecSeq(vec,vec,vec)
mvecs <- replicate(3, MappedNeuroVec(gmask5), simplify=FALSE)
vs2 <- do.call(NeuroVecSeq, mvecs)
v1 <- vs %>% vols()
v2 <- vs2 %>% vols()
for (i in 1:length(v1)) {
expect_equal(v1[[i]], v2[[i]])
}
v1 <- vs %>% vectors()
v2 <- vs2 %>% vectors()
checkind <- sample(1:length(v1), 100)
for (i in checkind) {
expect_equal(v1[[i]], v2[[i]])
}
})
test_that("series() works when NeuroVecSeq has SparseNeuroVec", {
# 1) Read a reference dense vec
dense_vec <- read_vec(gmask5) # this is your 4D reference data
# 2) Create a mask and re-read the same data => yields SparseNeuroVec
mvol <- read_vol(mask)
sparse_vec <- read_vec(gmask5, mask = as.logical(mvol)) # now a SparseNeuroVec
# 3) Build a NeuroVecSeq from repeated sparse vectors
s1 <- sparse_vec
s2 <- sparse_vec
s3 <- sparse_vec
seq_sparse <- NeuroVecSeq(s1, s2, s3)
# 4) Build a single 'concat' version as reference
concat_sparse <- concat(s1, s2, s3)
# Basic dimension checks
expect_equal(dim(seq_sparse), dim(concat_sparse))
expect_equal(space(seq_sparse), space(concat_sparse))
# 5) Test random voxel indices in 'series'
set.seed(123)
idx <- sample(seq_len(prod(dim(concat_sparse)[1:3])), 25) # 25 random voxel indices
mat_seq <- series(seq_sparse, idx)
mat_con <- series(concat_sparse, idx)
expect_equal(dim(mat_seq), dim(mat_con))
expect_equal(mat_seq, mat_con)
# 6) Check single-voxel extraction with drop=TRUE => should yield a time vector
vox <- idx[1] # pick one voxel
vec_seq <- series(seq_sparse, vox, drop=TRUE)
vec_con <- series(concat_sparse, vox, drop=TRUE)
expect_true(is.numeric(vec_seq) && is.vector(vec_seq))
expect_equal(length(vec_seq), dim(concat_sparse)[4])
expect_equal(vec_seq, vec_con)
})
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.