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