dplyr join functions internally use vec_match() now, but vec_match() always match NA, we need some way to implement *_join(..., na_matches = "never")
test_that("NAs match in joins only with na_matches = 'na' (#2033)", {
skip("until vctrs can power na_matches = 'never'")
df1 <- tibble(a = NA)
df2 <- tibble(a = NA, b = 1:3)
for (na_matches in c("na", "never")) {
accept_na_match <- (na_matches == "na")
expect_equal(inner_join(df1, df2, na_matches = na_matches) %>% nrow(), 0 + 3 * accept_na_match)
expect_equal(left_join(df1, df2, na_matches = na_matches) %>% nrow(), 1 + 2 * accept_na_match)
expect_equal(right_join(df2, df1, na_matches = na_matches) %>% nrow(), 1 + 2 * accept_na_match)
expect_equal(full_join(df1, df2, na_matches = na_matches) %>% nrow(), 4 - accept_na_match)
expect_equal(anti_join(df1, df2, na_matches = na_matches) %>% nrow(), 1 - accept_na_match)
expect_equal(semi_join(df1, df2, na_matches = na_matches) %>% nrow(), 0 + accept_na_match)
}
})
dplyrjoin functions internally usevec_match()now, butvec_match()always match NA, we need some way to implement*_join(..., na_matches = "never")