Skip to content

Commit 2de55dd

Browse files
danielleiwoodDaniWood
authored andcommitted
Closes #204
1 parent 3615a31 commit 2de55dd

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

R/awote.R

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,22 @@ awote <- function(Date = NULL,
6161
isMale = isMale,
6262
isAdult = isAdult,
6363
isOrdinary = isOrdinary) %>%
64+
.[, "ordering" := .I] %>%
6465
setkeyv(key(AWOTE_by_Date_isMale_isOrdinary_isAdult))
6566

6667
AWOTE_by_Date_isMale_isOrdinary_isAdult %>%
6768
.[input, roll = rollDate] %>%
69+
setorderv("ordering") %>%
6870
.subset2("AWOTE")
6971
}
7072

7173
awote_fy <- function(fy_year, isMale, isAdult, isOrdinary) {
7274
fy_year <- validate_fys_permitted(fy_year)
7375
input <- data.table(fy_year, isMale, isAdult, isOrdinary)
74-
setkeyv(input, names(input))
76+
77+
# Perhaps unnecessary since data.table retains order of
78+
input[, "ordering" := .I]
79+
setkey(input, fy_year, isMale, isAdult, isOrdinary)
7580
Date <- AWOTE <- NULL
7681
AWOTE_by_Date_isMale_isOrdinary_isAdult %>%
7782
.[, "fy_year" := date2fy(Date)] %>%
@@ -81,5 +86,6 @@ awote_fy <- function(fy_year, isMale, isAdult, isOrdinary) {
8186
isOrdinary,
8287
isAdult)] %>%
8388
.[input, on = c(key(.))] %>%
89+
setorderv("ordering") %>%
8490
.subset2("AWOTE")
8591
}

tests/testthat/test_awote.R

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,43 @@ test_that("AWOTE fy", {
2323
})
2424

2525
test_that("AWOTE unsorted, issue #204", {
26-
ufys <- yr2fy(2014:2015)
26+
ufys <- yr2fy(2015:2014)
2727
# Reversing inputs same as referring outputs
2828
expect_equal(awote(fy.year = rev(ufys)),
2929
rev(awote(fy.year = ufys)))
30+
31+
udates <- paste0(2015:2014, "-01-01")
32+
expect_equal(awote(Date = rev(udates)),
33+
rev(awote(Date = udates)))
34+
35+
withr::with_seed(602, {
36+
library(data.table)
37+
# Create a combination of inputs, randomly order them
38+
# and ensure the collected inputs match the inputs alone
39+
40+
DT <- CJ(fy.year = yr2fy(2013:2015),
41+
isMale = c(NA, TRUE, FALSE),
42+
isAdult = c(TRUE, FALSE),
43+
isOrdinary = c(TRUE, FALSE))
44+
DT[, awote_ordered := awote(fy.year = fy.year,
45+
isMale = isMale,
46+
isAdult = isAdult,
47+
isOrdinary = isOrdinary)]
48+
myorder <- sample(1:nrow(DT))
49+
DT2 <- DT[myorder]
50+
DT2[, this_awote := awote(fy.year = fy.year,
51+
isMale = isMale,
52+
isAdult = isAdult,
53+
isOrdinary = isOrdinary)]
54+
first_awote <- awote(fy.year = .subset2(DT2, "fy.year")[1],
55+
isMale = .subset2(DT2, "isMale")[1],
56+
isAdult = .subset2(DT2, "isAdult")[1],
57+
isOrdinary = .subset2(DT2, "isOrdinary")[1])
58+
expect_equal(first_awote, DT2[["this_awote"]][1])
59+
expect_equal(.subset2(DT2, "this_awote"),
60+
.subset2(DT2, "awote_ordered"))
61+
})
62+
63+
3064
})
3165

0 commit comments

Comments
 (0)