1test_that("can request NAs sorted first", {
2  expect_equal(vec_order(c(1, NA), "asc", "largest"), 1:2)
3  expect_equal(vec_order(c(1, NA), "desc", "largest"), 2:1)
4
5  expect_equal(vec_order(c(1, NA), "asc", "smallest"), 2:1)
6  expect_equal(vec_order(c(1, NA), "desc", "smallest"), 1:2)
7})
8
9test_that("can order complex vectors", {
10  x <- complex(real = c(1, 2, 2, 3, 3), imaginary = c(5, 4, 3, 2, NA))
11
12  expect_equal(vec_order(x, direction = "asc", na_value = "largest"), c(1, 3, 2, 4, 5))
13  expect_equal(vec_order(x, direction = "desc", na_value = "largest"), rev(c(1, 3, 2, 4, 5)))
14  expect_equal(vec_order(x, direction = "asc", na_value = "smallest"), c(5, 1, 3, 2, 4))
15  expect_equal(vec_order(x, direction = "desc", na_value = "smallest"), rev(c(5, 1, 3, 2, 4)))
16})
17
18test_that("can sort data frames", {
19  df <- data.frame(x = c(1, 2, 1), y = c(1, 2, 2))
20
21  out1 <- vec_sort(df)
22  expect_equal(out1, data.frame(x = c(1, 1, 2), y = c(1, 2, 2)))
23
24  out2 <- vec_sort(df, "desc")
25  expect_equal(out2, data.frame(x = c(2, 1, 1), y = c(2, 2, 1)))
26})
27
28test_that("can sort empty data frames (#356)", {
29  df1 <- data.frame()
30  expect_equal(vec_sort(df1), df1)
31
32  df2 <- data.frame(x = numeric(), y = integer())
33  expect_equal(vec_sort(df2), df2)
34})
35
36test_that("can order tibbles that contain non-comparable objects", {
37  expect_equal(vec_order(data_frame(x = list(10, 2, 1))), 1:3)
38})
39
40test_that("can order matrices and arrays (#306)", {
41  x <- matrix(c(1, 1, 1, 1, 2, 1), ncol = 2)
42  expect_identical(vec_order(x), c(1L, 3L, 2L))
43
44  x <- array(1:8, c(2, 2, 2))
45  x[2] <- 1
46  x[3] <- 5
47  expect_identical(vec_order(x), 2:1)
48})
49
50test_that("can order empty data frames (#356)", {
51  df1 <- data.frame()
52  expect_equal(vec_order(df1), integer())
53
54  df2 <- data.frame(x = numeric(), y = integer())
55  expect_equal(vec_order(df2), integer())
56})
57
58test_that("can order data frames with data frame columns (#527)", {
59  expect_equal(
60    vec_order(iris),
61    vec_order(data_frame(iris = iris))
62  )
63})
64
65test_that("can order data frames (and subclasses) with matrix columns", {
66  df <- new_data_frame(n = 2L)
67
68  df$x <- new_data_frame(list(y = matrix(1:2, 2)))
69  expect_identical(vec_order(df), 1:2)
70
71  df$x <- tibble::tibble(y = matrix(1:2, 2))
72  expect_identical(vec_order(df), 1:2)
73})
74
75test_that("classed proxies do not affect performance (tidyverse/dplyr#5423)", {
76  skip_on_cran()
77  x <- glue::glue("{1:10000}")
78  expect_time_lt(vec_order(x), 0.2)
79})
80
81test_that("can order data frames that don't allow removing the column names (#1298)", {
82  skip_if_not_installed("withr")
83
84  local_methods(
85    `names<-.vctrs_foobar` = function(x, value) {
86      if (is.null(value)) {
87        abort("Cannot remove names.")
88      }
89      NextMethod()
90    }
91  )
92
93  df <- foobar(data.frame(x = 1, y = 2))
94
95  expect_silent(expect_identical(vec_order(df), 1L))
96})
97