1 2test_that("wk_xy class works", { 3 expect_s3_class(xy(), "wk_xy") 4 expect_output(print(xy(1, 2)), "\\(1 2\\)") 5 expect_identical(xy_dims(xy()), c("x", "y")) 6 7 expect_identical(as_xy(xy()), xy()) 8 expect_identical(as_xy(xy(), dims = NULL), xy()) 9 expect_identical(as_xy(xy(), dims = c("x", "y")), xy()) 10 expect_identical(as_xy(xy(), dims = c("x", "y", "z")), xyz()) 11 expect_identical(as_xy(xy(), dims = c("x", "y", "m")), xym()) 12 expect_identical(as_xy(xy(), dims = c("x", "y", "z", "m")), xyzm()) 13 14 expect_identical(as_xy(xy(1, 2), dims = NULL), xy(1, 2)) 15 expect_identical(as_xy(xy(1, 2), dims = c("x", "y")), xy(1, 2)) 16 expect_identical(as_xy(xy(1, 2), dims = c("x", "y", "z")), xyz(1, 2, NA)) 17 expect_identical(as_xy(xy(1, 2), dims = c("x", "y", "m")), xym(1, 2, NA)) 18 expect_identical(as_xy(xy(1, 2), dims = c("x", "y", "z", "m")), xyzm(1, 2, NA, NA)) 19}) 20 21test_that("wk_xyz class works", { 22 expect_s3_class(xyz(), "wk_xyz") 23 expect_s3_class(xyz(), "wk_xy") 24 expect_output(print(xyz(1, 2, 3)), "Z \\(1 2 3\\)") 25 expect_identical(xy_dims(xyz()), c("x", "y", "z")) 26 27 expect_identical(as_xy(xyz()), xyz()) 28 expect_identical(as_xy(xyz(), dims = NULL), xyz()) 29 expect_identical(as_xy(xyz(), dims = c("x", "y")), xy()) 30 expect_identical(as_xy(xyz(), dims = c("x", "y", "z")), xyz()) 31 expect_identical(as_xy(xyz(), dims = c("x", "y", "m")), xym()) 32 expect_identical(as_xy(xyz(), dims = c("x", "y", "z", "m")), xyzm()) 33 34 expect_identical(as_xy(xyz(1, 2, 3), dims = NULL), xyz(1, 2, 3)) 35 expect_identical(as_xy(xyz(1, 2, 3), dims = c("x", "y")), xy(1, 2)) 36 expect_identical(as_xy(xyz(1, 2, 3), dims = c("x", "y", "z")), xyz(1, 2, 3)) 37 expect_identical(as_xy(xyz(1, 2, 3), dims = c("x", "y", "m")), xym(1, 2, NA)) 38 expect_identical(as_xy(xyz(1, 2, 3), dims = c("x", "y", "z", "m")), xyzm(1, 2, 3, NA)) 39}) 40 41test_that("wk_xym class works", { 42 expect_s3_class(xym(), "wk_xym") 43 expect_s3_class(xym(), "wk_xy") 44 expect_output(print(xym(1, 2, 3)), "M \\(1 2 3\\)") 45 expect_identical(xy_dims(xym()), c("x", "y", "m")) 46 47 expect_identical(as_xy(xym()), xym()) 48 expect_identical(as_xy(xym(), dims = NULL), xym()) 49 expect_identical(as_xy(xym(), dims = c("x", "y")), xy()) 50 expect_identical(as_xy(xym(), dims = c("x", "y", "z")), xyz()) 51 expect_identical(as_xy(xym(), dims = c("x", "y", "m")), xym()) 52 expect_identical(as_xy(xym(), dims = c("x", "y", "z", "m")), xyzm()) 53 54 expect_identical(as_xy(xym(1, 2, 3), dims = NULL), xym(1, 2, 3)) 55 expect_identical(as_xy(xym(1, 2, 3), dims = c("x", "y")), xy(1, 2)) 56 expect_identical(as_xy(xym(1, 2, 3), dims = c("x", "y", "z")), xyz(1, 2, NA)) 57 expect_identical(as_xy(xym(1, 2, 3), dims = c("x", "y", "m")), xym(1, 2, 3)) 58 expect_identical(as_xy(xym(1, 2, 3), dims = c("x", "y", "z", "m")), xyzm(1, 2, NA, 3)) 59}) 60 61test_that("wk_xyzm class works", { 62 expect_s3_class(xyzm(), "wk_xyzm") 63 expect_s3_class(xyzm(), "wk_xyz") 64 expect_s3_class(xyzm(), "wk_xym") 65 expect_s3_class(xyzm(), "wk_xy") 66 expect_output(print(xyzm(1, 2, 3, 4)), "ZM \\(1 2 3 4\\)") 67 expect_identical(xy_dims(xyzm()), c("x", "y", "z", "m")) 68 69 expect_identical(as_xy(xyzm()), xyzm()) 70 expect_identical(as_xy(xyzm(), dims = NULL), xyzm()) 71 expect_identical(as_xy(xyzm(), dims = c("x", "y")), xy()) 72 expect_identical(as_xy(xyzm(), dims = c("x", "y", "z")), xyz()) 73 expect_identical(as_xy(xyzm(), dims = c("x", "y", "m")), xym()) 74 expect_identical(as_xy(xyzm(), dims = c("x", "y", "z", "m")), xyzm()) 75 76 expect_identical(as_xy(xyzm(1, 2, 3, 4), dims = NULL), xyzm(1, 2, 3, 4)) 77 expect_identical(as_xy(xyzm(1, 2, 3, 4), dims = c("x", "y")), xy(1, 2)) 78 expect_identical(as_xy(xyzm(1, 2, 3, 4), dims = c("x", "y", "z")), xyz(1, 2, 3)) 79 expect_identical(as_xy(xyzm(1, 2, 3, 4), dims = c("x", "y", "m")), xym(1, 2, 4)) 80 expect_identical(as_xy(xyzm(1, 2, 3, 4), dims = c("x", "y", "z", "m")), xyzm(1, 2, 3, 4)) 81}) 82 83test_that("wk_xy* are vctrs", { 84 expect_true(vctrs::vec_is(xy())) 85 expect_true(vctrs::vec_is(xyz())) 86 expect_true(vctrs::vec_is(xym())) 87 expect_true(vctrs::vec_is(xyzm())) 88}) 89 90test_that("wk_xy* vectors can be constructed from matrices/data.frames", { 91 expect_identical(as_xy(data.frame(x = 1, y = 2, z = 3, m = 4), dims = NULL), xyzm(1, 2, 3, 4)) 92 expect_identical(as_xy(data.frame(x = 1, y = 2, z = 3, m = 4), dims = c("x", "y")), xy(1, 2)) 93 expect_identical(as_xy(data.frame(x = 1, y = 2, z = 3, m = 4), dims = c("x", "y", "z")), xyz(1, 2, 3)) 94 expect_identical(as_xy(data.frame(x = 1, y = 2, z = 3, m = 4), dims = c("x", "y", "m")), xym(1, 2, 4)) 95 expect_identical(as_xy(data.frame(x = 1, y = 2, z = 3, m = 4), dims = c("x", "y", "z", "m")), xyzm(1, 2, 3, 4)) 96 97 expect_identical(as_xy(data.frame(x = 1, y = 2), dims = NULL), xy(1, 2)) 98 expect_identical(as_xy(data.frame(x = 1, y = 2), dims = c("x", "y")), xy(1, 2)) 99 expect_identical(as_xy(data.frame(x = 1, y = 2), dims = c("x", "y", "z")), xyz(1, 2, NA)) 100 expect_identical(as_xy(data.frame(x = 1, y = 2), dims = c("x", "y", "m")), xym(1, 2, NA)) 101 expect_identical(as_xy(data.frame(x = 1, y = 2), dims = c("x", "y", "z", "m")), xyzm(1, 2, NA, NA)) 102 103 expect_error(as_xy(data.frame(x = 1, y = 2), dims = "L"), "Unknown dims") 104 105 expect_identical( 106 as_xy(as.matrix(data.frame(x = 1, y = 2, z = 3, m = 4))), 107 xyzm(1, 2, 3, 4) 108 ) 109 expect_identical( 110 as_xy(matrix(1:2, nrow = 1)), 111 xy(1, 2) 112 ) 113 expect_identical( 114 as_xy(matrix(1:3, nrow = 1)), 115 xyz(1, 2, 3) 116 ) 117 expect_identical( 118 as_xy(matrix(1:4, nrow = 1)), 119 xyzm(1, 2, 3, 4) 120 ) 121 122 expect_identical( 123 as_xy(matrix(1:2, nrow = 1, dimnames = list(NULL, c("x", "y")))), 124 xy(1, 2) 125 ) 126 expect_identical( 127 as_xy(matrix(1:3, nrow = 1, dimnames = list(NULL, c("x", "y", "m")))), 128 xym(1, 2, 3) 129 ) 130 131 expect_error(as_xy(matrix(1:10, nrow = 1)), "Can't guess dimensions") 132 133 weird_matrix <- matrix(1:9, ncol = 3) 134 colnames(weird_matrix) <- c("tim", "suzie", "bill") 135 expect_error(as_xy(weird_matrix), "Can't guess dimensions") 136 colnames(weird_matrix) <- c("x", "y", "bill") 137 expect_identical(as_xy(weird_matrix), xy(1:3, 4:6)) 138}) 139 140test_that("coercion to wk* vectors works", { 141 expect_identical(as_wkt(xy(1, 2)), wkt("POINT (1 2)")) 142 expect_identical(as_wkb(xy(1, 2)), as_wkb("POINT (1 2)")) 143}) 144 145test_that("coercion from wk* vectors works", { 146 expect_identical(as_xy(wkt("POINT (1 2)")), xy(1, 2)) 147 expect_identical(as_xy(wkt("POINT Z (1 2 3)")), xyz(1, 2, 3)) 148 expect_identical(as_xy(wkt("POINT M (1 2 4)")), xym(1, 2, 4)) 149 expect_identical(as_xy(wkt("POINT ZM (1 2 3 4)")), xyzm(1, 2, 3, 4)) 150 expect_identical(as_xy(wkt("POINT (1 2)"), dims = c("x", "y", "z", "m")), xyzm(1, 2, NA, NA)) 151 152 expect_identical(as_xy(as_wkb("POINT (1 2)")), xy(1, 2)) 153 154 expect_error(as_xy(wkt("POINT (1 2)"), dims = "L"), "Unknown dims") 155}) 156 157test_that("subset-assign works for wk_xy", { 158 x <- xyzm(1:2, 2, 3, 4) 159 x[2] <- xy(10, 20) 160 expect_identical(x[2], xyzm(10, 20, NA, NA)) 161 x[[2]] <- xy(11, 21) 162 expect_identical(x[2], xyzm(11, 21, NA, NA)) 163}) 164 165test_that("xy() propagates CRS", { 166 x <- xy(1, 2) 167 wk_crs(x) <- 1234 168 169 expect_identical(wk_crs(x[1]), 1234) 170 expect_identical(wk_crs(c(x, x)), 1234) 171 expect_identical(wk_crs(rep(x, 2)), 1234) 172 173 expect_error(x[1] <- wk_set_crs(x, NULL), "are not equal") 174 x[1] <- wk_set_crs(x, 1234L) 175 expect_identical(wk_crs(x), 1234) 176}) 177