tests/testthat/test-rotate3d.R

test_that("We can rotate a 2D matrix", {
  slice <- matrix(seq.int(9), nrow = 3, byrow = TRUE)
  slice_rot_90 <- rotate2D(slice, degrees = 90)
  slice_rot_180 <- rotate2D(slice, degrees = 180)
  slice_rot_270 <- rotate2D(slice, degrees = 270)

  expected_result_90 <- matrix(c(7, 4, 1, 8, 5, 2, 9, 6, 3), nrow = 3, byrow = TRUE)
  expected_result_180 <- matrix(seq.int(9, 1), nrow = 3, byrow = TRUE)
  expected_result_270 <- matrix(c(3, 6, 9, 2, 5, 8, 1, 4, 7), nrow = 3, byrow = TRUE)

  expect_equal(rotate2D(slice, degrees = 0), slice)
  expect_equal(rotate2D(slice, degrees = 360), slice)
  expect_equal(slice_rot_90, expected_result_90)
  expect_equal(slice_rot_180, expected_result_180)
  expect_equal(slice_rot_270, expected_result_270)

  expect_equal(rotate2D(seq.int(5)), seq.int(5)) # returned as is

  expect_error(rotate2D(slice, degrees = 77)) # degrees not a multiple of 90
  expect_error(rotate2D(array(seq(8), dim = c(2, 2, 2)))) # 3D array not allowed
})


test_that("We can flip a 2D matrix", {
  slice <- matrix(seq.int(9), nrow = 3, byrow = TRUE)

  flipped_h <- flip2D(slice, how = "horizontally")
  flipped_v <- flip2D(slice, how = "vertically")

  expected_h <- matrix(c(7, 8, 9, 4, 5, 6, 1, 2, 3), nrow = 3, byrow = TRUE)
  expected_v <- matrix(c(3, 2, 1, 6, 5, 4, 9, 8, 7), nrow = 3, byrow = TRUE)

  expect_equal(flipped_h, expected_h)
  expect_equal(flipped_v, expected_v)
  expect_equal(flip2D(slice, how = NULL), slice)

  expect_equal(flip2D(seq.int(5)), seq.int(5)) # returned as is

  expect_error(flip2D(array(seq(8), dim = c(2, 2, 2)))) # 3D array not allowed
  expect_error(flip2D(slice, how = "dunno")) # invalid how
})


test_that("We can flip a 3D matrix", {
  vdim <- c(1, 2, 3)
  volume <- array(seq(6), dim = vdim)

  flipped_1_h <- flip3D(volume, axis = 1, how = "horizontally")
  flipped_1_v <- flip3D(volume, axis = 1, how = "vertically")
  flipped_2_h <- flip3D(volume, axis = 2, how = "h")
  flipped_2_v <- flip3D(volume, axis = 2, how = "v")
  flipped_3_h <- flip3D(volume, axis = 3, how = "horizontally")
  flipped_3_v <- flip3D(volume, axis = 3, how = "vertically")

  # dimensions must never change when flipping values
  expect_equal(dim(flipped_1_h), vdim)
  expect_equal(dim(flipped_1_v), vdim)
  expect_equal(dim(flipped_2_h), vdim)
  expect_equal(dim(flipped_2_v), vdim)
  expect_equal(dim(flipped_3_h), vdim)
  expect_equal(dim(flipped_3_v), vdim)

  expect_error(flip3D(seq.int(5))) # not a matrix
  expect_error(flip3D(volume, how = "dunno")) # invalid how
  expect_error(flip3D(volume, axis = 4)) # invalid axis
})


test_that("We can rotate a 3D matrix", {
  vdim <- c(1, 2, 3)
  volume <- array(seq(6), dim = vdim)

  rotated_1_90 <- rotate3D(volume, axis = 1, degrees = 90L)
  rotated_1_180 <- rotate3D(volume, axis = 1, degrees = 180L)
  rotated_2_90 <- rotate3D(volume, axis = 2, degrees = 90L)
  rotated_2_180 <- rotate3D(volume, axis = 2, degrees = 180L)
  rotated_3_90 <- rotate3D(volume, axis = 3, degrees = 90L)
  rotated_3_180 <- rotate3D(volume, axis = 3, degrees = 180L)

  # dimensions may change when rotating values
  expect_equal(dim(rotated_1_90), c(1, 3, 2))
  expect_equal(dim(rotated_1_180), vdim)
  expect_equal(dim(rotated_2_90), c(3, 2, 1))
  expect_equal(dim(rotated_2_180), vdim)
  expect_equal(dim(rotated_3_90), c(2, 1, 3))
  expect_equal(dim(rotated_3_180), vdim)

  expect_error(rotate3D(seq.int(5))) # not a matrix
  expect_error(rotate3D(volume, axis = "dunno")) # invalid axis
  expect_error(rotate3D(volume, axis = 4)) # invalid axis
  expect_error(rotate3D(volume, degrees = 77)) # invalid degrees
})

Try the freesurferformats package in your browser

Any scripts or data that you put into this service are public.

freesurferformats documentation built on Sept. 25, 2026, 1:07 a.m.