Main event
The detect.R
file looks like this (well, I’ve abbreviated it slightly):
#' Detect the presence or absence of a pattern in a string.
#'
#' Vectorised over `string` and `pattern`.
#'
#' @param string Input vector. Either a character vector, or something
#' coercible to one.
#' @param pattern Pattern to look for.
#'
#' @return A logical vector.
#'
#' @export
#' @examples
#' fruit <- c("apple", "banana", "pear", "pinapple")
#' str_detect(fruit, "a")
#' str_detect(fruit, "^a")
#' str_detect(fruit, "a$")
#' str_detect(fruit, "b")
#' str_detect(fruit, "[aeiou]")
<- function(string, pattern) {
str_detect switch(type(pattern),
empty = ,
bound = str_count(string, pattern) > 0,
fixed = stri_detect_fixed(string, pattern, opts_fixed = opts(pattern)),
coll = stri_detect_coll(string, pattern, opts_collator = opts(pattern)),
regex = stri_detect_regex(string, pattern, opts_regex = opts(pattern))
) }
We can make a unit tests shell file for each .R
file in the package using make_tests_shells_pkg()
:
make_tests_shells_pkg()
This outputs test-detect.R
and test-match.R
files in the tests/testthat
folder. As an example of what to do next, the test-detect.R
file has contents
test_that("`str_detect()` works", {
<- c("apple", "banana", "pear", "pinapple")
fruit expect_equal(str_detect(fruit, "a"), )
expect_equal(str_detect(fruit, "^a"), )
expect_equal(str_detect(fruit, "a$"), )
expect_equal(str_detect(fruit, "b"), )
expect_equal(str_detect(fruit, "[aeiou]"), )
expect_equal(str_detect("aecfg", letters), )
})
which can be sensibly completed as
test_that("`str_detect()` works", {
<- c("apple", "banana", "pear", "pinapple")
fruit expect_equal(str_detect(fruit, "a"), rep(TRUE, 4))
expect_equal(str_detect(fruit, "^a"), c(TRUE, rep(FALSE, 3)))
expect_equal(str_detect(fruit, "a$"), c(FALSE, TRUE, FALSE, FALSE))
expect_equal(str_detect(fruit, "b"), c(FALSE, TRUE, FALSE, FALSE))
expect_equal(str_detect(fruit, "[aeiou]"), rep(TRUE, 4))
expect_equal(
str_detect("aecfg", letters),
%in% c("a", "c", "e", "f", "g")
letters
) })
test-match.R
must similarly be completed.