test_that("Shift array with different types", { x0 <- as.integer(1:10) x <- matrix(x0, nrow = 2, byrow = TRUE) z <- shift_array(x, 2, 1, c(1,2)) y <- NA * x y[1,1:4] <- x[1,2:5] y[2,1:3] <- x[2,3:5] expect_identical(y, z) x0 <- as.double(1:10) x <- matrix(x0, nrow = 2, byrow = TRUE) z <- shift_array(x, 2, 1, c(-2,1)) y <- NA * x y[1,3:5] <- x[1,1:3] y[2,1:4] <- x[2,2:5] expect_identical(y, z) x0 <- as.complex(1:10) x <- matrix(x0, nrow = 2, byrow = TRUE) z <- shift_array(x, 2, 1, c(-2,1)) y <- NA * x y[1,3:5] <- x[1,1:3] y[2,1:4] <- x[2,2:5] expect_identical(y, z) x0 <- sample(c(TRUE, FALSE), 10, replace = TRUE) x <- matrix(x0, nrow = 2, byrow = TRUE) z <- shift_array(x, 2, 1, c(1,2)) y <- x y[] <- NA y[1,1:4] <- x[1,2:5] y[2,1:3] <- x[2,3:5] expect_identical(y, z) }) test_that("Shift array with different arrays", { dim <- c(4,15,10) x <- array(rnorm(prod(dim)), dim) shift_amount <- c(2,10,-3,NA) z <- shift_array(x, along_margin = 3, unit_margin = 1, shift_amount = shift_amount) y <- x * NA for(ii in 1:3){ idx <- shift_amount[ii] + 1:10 sel <- idx >= 1 & idx <= 10 y[ii,, sel] <- x[ii, , idx[sel]] } y[4,,] <- NA expect_identical(y, z) shift_amount <- sample(c(-5:5, NA, NA), size = 15, replace = TRUE) z <- shift_array(x, along_margin = 1, unit_margin = 2, shift_amount = shift_amount) y <- x * NA for(ii in 1:15){ idx <- shift_amount[ii] + 1:4 if(!is.na(shift_amount[ii])){ sel <- idx >= 1 & idx <= 4 y[sel,ii,] <- x[idx[sel], ii,] } } expect_identical(y, z) })