1
+ library(cli )
2
+
1
3
# Create an epi_df and a function to test epi_slide with
2
4
test_date <- as.Date(" 2020-01-01" )
3
5
days_dt <- as.difftime(1 , units = " days" )
@@ -53,19 +55,22 @@ bad_values <- list(
53
55
" a" , 0.5 , - 1L , - 1.5 , 1.5 , NA , c(0 , 1 )
54
56
)
55
57
purrr :: map(bad_values , function (bad_value ) {
56
- test_that(" `before` and `after` in epi_slide fail on {x}" , {
57
- expect_error(
58
- epi_slide(grouped , before = bad_value , ref_time_values = test_date + 2 ),
59
- class = " epiprocess__validate_slide_window_arg"
60
- )
61
- expect_error(
62
- epi_slide(grouped , after = bad_value , ref_time_values = test_date + 2 ),
63
- class = " epiprocess__validate_slide_window_arg"
64
- )
65
- })
58
+ test_that(
59
+ format_inline(" `before` and `after` in epi_slide fail on {bad_value}" ),
60
+ {
61
+ expect_error(
62
+ epi_slide(grouped , before = bad_value , ref_time_values = test_date + 2 ),
63
+ class = " epiprocess__validate_slide_window_arg"
64
+ )
65
+ expect_error(
66
+ epi_slide(grouped , after = bad_value , ref_time_values = test_date + 2 ),
67
+ class = " epiprocess__validate_slide_window_arg"
68
+ )
69
+ }
70
+ )
66
71
})
67
72
purrr :: map(bad_values , function (bad_value ) {
68
- test_that(" `before` and `after` in epi_slide_mean fail on {x} " , {
73
+ test_that(format_inline( " `before` and `after` in epi_slide_mean fail on {bad_value} " ) , {
69
74
expect_error(
70
75
epi_slide_mean(grouped , col_names = value , before = bad_value , ref_time_values = test_date + 2 ),
71
76
class = " epiprocess__validate_slide_window_arg"
@@ -79,7 +84,7 @@ purrr::map(bad_values, function(bad_value) {
79
84
80
85
bad_values <- c(min(grouped $ time_value ) - 1 , max(grouped $ time_value ) + 1 )
81
86
purrr :: map(bad_values , function (bad_value ) {
82
- test_that(" epi_slide or epi_slide_mean : `ref_time_values` out of range for all groups generate an error " , {
87
+ test_that(format_inline( " epi_slide[_mean] : `ref_time_values` out of range for all groups {bad_value} " ) , {
83
88
expect_error(
84
89
epi_slide(grouped , f , before = 2 * days_dt , ref_time_values = bad_value ),
85
90
class = " epi_slide__invalid_ref_time_values"
@@ -142,38 +147,62 @@ test_that("epi_slide alerts if the provided f doesn't take enough args", {
142
147
})
143
148
144
149
145
- # Computation tests
146
- test_that(" epi_slide outputs list columns when desired, and unpacks unnamed computations" , {
147
- # See `toy_edf` and `basic_sum_result` definitions at top of file.
148
- expect_equal(
149
- toy_edf %> % epi_slide(before = 6 * days_dt , ~ sum(.x $ value )),
150
- basic_sum_result
151
- )
152
- expect_equal(
153
- toy_edf %> % epi_slide(before = 6 * days_dt , ~ list (rep(sum(.x $ value ), 2L ))),
154
- basic_sum_result %> % mutate(slide_value = lapply(slide_value , rep , 2L ))
155
- )
156
- expect_equal(
157
- toy_edf %> % epi_slide(before = 6 * days_dt , ~ data.frame (slide_value = sum(.x $ value ))),
158
- basic_sum_result
159
- )
160
- expect_equal(
161
- toy_edf %> % epi_slide(before = 6 * days_dt , ~ list (data.frame (slide_value = sum(.x $ value )))),
162
- basic_sum_result %> %
163
- mutate(slide_value = purrr :: map(slide_value , ~ data.frame (slide_value = .x )))
164
- )
165
- expect_identical(
166
- toy_edf %> % epi_slide(before = 6L , ~ tibble(slide_value = list (sum(.x $ value )))),
167
- basic_sum_result %> % mutate(slide_value = as.list(slide_value ))
168
- )
169
- # unnamed data-masking expression producing data frame:
170
- expect_identical(
171
- # unfortunately, we can't pass this directly as `f` and need an extra comma
172
- toy_edf %> % epi_slide(before = 6L , , data.frame (slide_value = sum(.x $ value ))),
173
- basic_sum_result
174
- )
175
- })
150
+ # Common example tests
151
+ for (rtv in list (NULL , test_date + 1 , c(test_date + 1 , test_date + 3 ))) {
152
+ test_that(format_inline(" epi_slide works with formulas, lists, and data.frame outputs with ref_time_value {rtv}" ), {
153
+ expect_equal(
154
+ toy_edf %> % epi_slide(before = 6 * days_dt , ~ sum(.x $ value ), ref_time_values = rtv ),
155
+ basic_sum_result %> %
156
+ {
157
+ if (! is.null(rtv )) dplyr :: filter(. , time_value %in% rtv ) else .
158
+ }
159
+ )
160
+ expect_equal(
161
+ toy_edf %> % epi_slide(before = 6 * days_dt , ~ list (rep(sum(.x $ value ), 2L )), ref_time_values = rtv ),
162
+ basic_sum_result %> % mutate(slide_value = lapply(slide_value , rep , 2L )) %> %
163
+ {
164
+ if (! is.null(rtv )) dplyr :: filter(. , time_value %in% rtv ) else .
165
+ }
166
+ )
167
+ expect_equal(
168
+ toy_edf %> % epi_slide(before = 6 * days_dt , ~ data.frame (slide_value = sum(.x $ value )), ref_time_values = rtv ),
169
+ basic_sum_result %> %
170
+ {
171
+ if (! is.null(rtv )) dplyr :: filter(. , time_value %in% rtv ) else .
172
+ }
173
+ )
174
+ expect_equal(
175
+ toy_edf %> % epi_slide(
176
+ before = 6 * days_dt , ~ list (data.frame (slide_value = sum(.x $ value ))),
177
+ ref_time_values = rtv
178
+ ),
179
+ basic_sum_result %> %
180
+ mutate(slide_value = purrr :: map(slide_value , ~ data.frame (slide_value = .x ))) %> %
181
+ {
182
+ if (! is.null(rtv )) dplyr :: filter(. , time_value %in% rtv ) else .
183
+ }
184
+ )
185
+ expect_identical(
186
+ toy_edf %> % epi_slide(before = 6L , ~ tibble(slide_value = list (sum(.x $ value ))), ref_time_values = rtv ),
187
+ basic_sum_result %> % mutate(slide_value = as.list(slide_value )) %> %
188
+ {
189
+ if (! is.null(rtv )) dplyr :: filter(. , time_value %in% rtv ) else .
190
+ }
191
+ )
192
+ # unnamed data-masking expression producing data frame:
193
+ expect_identical(
194
+ # unfortunately, we can't pass this directly as `f` and need an extra comma
195
+ toy_edf %> % epi_slide(before = 6L , , data.frame (slide_value = sum(.x $ value )), ref_time_values = rtv ),
196
+ basic_sum_result %> %
197
+ {
198
+ if (! is.null(rtv )) dplyr :: filter(. , time_value %in% rtv ) else .
199
+ }
200
+ )
201
+ })
202
+ }
203
+
176
204
205
+ # Edge example tests
177
206
test_that(" epi_slide can use sequential data masking expressions including NULL" , {
178
207
edf_a <- tibble :: tibble(
179
208
geo_value = 1 ,
@@ -837,7 +866,7 @@ test_that("epi_slide gets correct ref_time_value when groups have non-overlappin
837
866
838
867
time_types <- c(" days" , " weeks" , " yearmonths" , " integers" )
839
868
for (time_type in time_types ) {
840
- test_that(" epi_slide and epi_slide_mean: different before/after match for {time_type}" , {
869
+ test_that(format_inline( " epi_slide and epi_slide_mean: different before/after match for {time_type}" ) , {
841
870
set.seed(0 )
842
871
n <- 16
843
872
epi_data_no_missing <- rbind(
0 commit comments