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