Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions R/toOrdinal_Utility_Functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,16 @@ function(cardinal_number,
# Suffix handling by language
suffix <- switch(toupper(language),
"DUTCH" = {
suffix <- if (cardinal_number %% 100 >= 11 && cardinal_number %% 100 <= 19) {
"de" # Numbers from 11 to 19 always use "de"
} else if (cardinal_number %% 10 == 1 || cardinal_number %% 10 == 8 || cardinal_number %% 10 == 0) {
"ste" # Numbers ending in 1, 8, or 0 use "ste"
} else {
"de" # All other cases use "de"
}
# Take the number formed by the last two digits of the cardinal number
tmp_2int <- cardinal_number %% 100
# Suffix defaults to 'ste' with a couple of exceptions where the suffix is 'de':
# the cardinal number is exactly 0, or
# the number formed by the last the two digits is smaller than 20, but not equal to 1 or 8.
suffix <- if ((cardinal_number == 0 || (tmp_2int > 1 && tmp_2int < 20)) && tmp_2int != 8) {
'de'
} else {
'ste'
}
},
"ENGLISH" = {
tmp <- strTail(as.character(cardinal_number), 2)
Expand Down
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ toOrdinal
# Overview

The R package **toOrdinal** contains a single function `toOrdinal` that converts a cardinal number (e.g., 9) into its ordinal counterpart (e.g., 9th).
Because such conversions are language specific, the conversions are specific to a supported language. At present, the package implements English,
Because such conversions are language specific, the conversions are specific to a supported language. At present, the package implements English, Dutch,
French, German, Spanish, and Swedish. For example,

* English: toOrdinal(1) returns '1st'
Expand Down Expand Up @@ -48,6 +48,9 @@ To install the development release of **toOrdinal** from [GitHub](https://github
> toOrdinal(5)
[1] "5th"

> toOrdinal(5, language="Dutch")
[1] "5de"

> toOrdinal(5, language="German")
[1] "5te"

Expand Down
19 changes: 14 additions & 5 deletions tests/testthat/test_toOrdinal_dutch.R
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
context("Dutch tests")

test_that("toOrdinal correctly processes integers 0-30 in Dutch", {
first_30 <- c("0ste", "1ste", "2de", "3de", "4de", "5de", "6de", "7de", "8ste",
"9de", "10ste", "11de", "12de", "13de", "14de", "15de", "16de",
"17de", "18de", "19de", "20ste", "21ste", "22de", "23de",
"24de", "25de", "26de", "27de", "28ste", "29de", "30ste")
using_toOrdinal <- sapply(0:30, "toOrdinal", "DUTCH")
first_30 <- c("0de", "1ste", "2de", "3de", "4de", "5de", "6de", "7de", "8ste",
"9de", "10de", "11de", "12de", "13de", "14de", "15de", "16de",
"17de", "18de", "19de", "20ste", "21ste", "22ste", "23ste",
"24ste", "25ste", "26ste", "27ste", "28ste", "29ste", "30ste")
using_toOrdinal <- sapply(0:30, "toOrdinal", language="DUTCH")

expect_equal(
first_30, using_toOrdinal
)
})

test_that("toOrdinal correctly processes integers 100, 101, 102, 108, 120 in Dutch", {
above_hundred <- c("100ste", "101ste", "102de", "108ste",'120ste') # 101de and 101ste are both acceptable, but 101ste is more common
using_toOrdinal <- sapply(c(100, 101, 102, 108, 120), "toOrdinal", language="DUTCH")

expect_equal(
above_hundred, using_toOrdinal
)
})

test_that("toOrdinal correctly errors when given a negative integer.",{

expect_error(
Expand Down