From acfab5f7025676683b56f0a0465470e5adc5b6e6 Mon Sep 17 00:00:00 2001 From: Leonidas Zhak <70497898+LeonidasZhak@users.noreply.github.com> Date: Sun, 7 Jun 2026 10:39:18 +0800 Subject: [PATCH] tests: add edge-case tests for str_count() - NA input returns NA_integer_ - Empty string returns 0L - Empty character vector returns integer() - NA pattern errors with informative message - Non-overlapping regex match counting - Multibyte character counting --- tests/testthat/test-count.R | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/testthat/test-count.R b/tests/testthat/test-count.R index ea73f608..708a4ca6 100644 --- a/tests/testthat/test-count.R +++ b/tests/testthat/test-count.R @@ -37,3 +37,28 @@ test_that("str_count() preserves names when pattern and string have same length" p2 <- c("a", "c") expect_equal(names(str_count(x2, p2)), names(x2)) }) + +test_that("str_count() handles NA values", { + expect_equal(str_count(NA, "a"), NA_integer_) + expect_equal(str_count(c("a", NA, "b"), "a"), c(1L, NA_integer_, 0L)) +}) + +test_that("str_count() handles empty strings", { + expect_equal(str_count("", "a"), 0L) + expect_equal(str_count(character(), "a"), integer()) +}) + +test_that("str_count() errors on NA pattern", { + expect_error(str_count("abc", NA_character_), "can not contain NAs") +}) + +test_that("str_count() counts non-overlapping regex matches", { + expect_equal(str_count("aaa", regex("aa")), 1L) + expect_equal(str_count("aaaa", regex("aa")), 2L) + expect_equal(str_count("ababab", "ab"), 3L) +}) + +test_that("str_count() handles multibyte characters", { + expect_equal(str_count("\u00e9\u00e8\u00ea", regex("[\u00e9\u00e8\u00ea]")), 3L) + expect_equal(str_count("\u4e2d\u6587\u6d4b\u8bd5", "\u6587"), 1L) +})