Skip to content

Commit

Permalink
mudancas e testes da padronizar_ceps()
Browse files Browse the repository at this point in the history
  • Loading branch information
dhersz committed Jan 24, 2024
1 parent d143007 commit 7069c29
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 9 deletions.
25 changes: 20 additions & 5 deletions R/padronizar_ceps.R
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
#' Padronizar CEPs
#'
#' Padroniza CEPs.
#' Padroniza um vetor de CEPs. Veja a seção *Detalhes* para mais informações
#' sobre a padronização.
#'
#' @param ceps Um vetor de caracteres ou números. Os CEPs a serem padronizados.
#'
#' @return Um vetor de caracteres com os CEPs padronizados.
#'
#' @section Detalhes:
#' Operações realizadas durante a padronização:
#'
#' 1. conversão para caracter, se o input for numérico;
#' 2. adição de zeros à esquerda, se o input contiver menos de 8 dígitos;
#' 3. remoção de espaços em branco, pontos e vírgulas;
#' 4. adição de traço separando o radical (5 primeiros dígitos) do sufixo (3
#' últimos digitos).
#'
#' @examples
#' ceps <- c("22290-140", "22.290-140", "22290 140", "22290140")
#' padronizar_ceps(ceps)
Expand All @@ -22,21 +32,26 @@ padronizar_ceps <- function(ceps) {
)

# alguns ceps podem vir vazios e devem permanecer vazios ao final. nesse caso,
# a chamada da str_pad() abaixo faz com que esses ceps virem "00000000". para
# a chamada da str_pad() abaixo faz com que esses ceps virem '00000000'. para
# evitar que o resultado contenha esses valores, identificamos o indice dos
# ceps vazios para ao final "reesvazia-los"

indice_cep_vazio <- which(ceps == "" | is.na(ceps))

ceps_padrao <- if (is.numeric(ceps)) {
format(ceps, scientific = FALSE)
formatC(ceps, width = 8, format = "d", flag = 0)
} else {
ceps
}

ceps_padrao <- stringr::str_squish(ceps_padrao)
ceps_padrao <- stringr::str_replace_all(ceps_padrao, "\\.|-|,| ", "")
ceps_padrao <- stringr::str_pad(ceps_padrao, width = 8, pad = "0")
ceps_padrao <- stringr::str_replace_all(
ceps_padrao,
c(
"\\.|,| " = "",
"(\\d{5})(\\d{3})" = "\\1-\\2"
)
)

ceps_padrao[indice_cep_vazio] <- ""

Expand Down
15 changes: 14 additions & 1 deletion man/padronizar_ceps.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions tests/testthat/test-padronizar_ceps.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
test_that("da erro com inputs != de caracteres e numeros", {
expect_error(padronizar_ceps(as.factor(22290140)))
})

test_that("padroniza corretamente", {
expect_equal(padronizar_ceps("22290-140"), "22290-140")
expect_equal(padronizar_ceps("22290 140"), "22290-140")
expect_equal(padronizar_ceps("22290- 140"), "22290-140")
expect_equal(padronizar_ceps("22.290-140"), "22290-140")
expect_equal(padronizar_ceps(22290140), "22290-140")
expect_equal(padronizar_ceps(" 22290 140 "), "22290-140")
expect_equal(padronizar_ceps("01000-000"), "01000-000")
expect_equal(padronizar_ceps("1000000"), "01000-000")
expect_equal(padronizar_ceps(1000000), "01000-000")
expect_equal(padronizar_ceps(NA_character_), "")
expect_equal(padronizar_ceps(NA_integer_), "")

expect_equal(
padronizar_ceps(c(22290140, 1000000)),
c("22290-140", "01000-000")
)
})

test_that("lida com vetores vazios corretamente", {
expect_equal(padronizar_ceps(character(0)), character(0))
expect_equal(padronizar_ceps(integer(0)), character(0))
expect_equal(padronizar_ceps(numeric(0)), character(0))
})
3 changes: 0 additions & 3 deletions tests/testthat/test-placeholder.R

This file was deleted.

0 comments on commit 7069c29

Please sign in to comment.