-
Notifications
You must be signed in to change notification settings - Fork 2
/
test_timeops.R
180 lines (132 loc) · 4.99 KB
/
test_timeops.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
context("timeops")
test_that("k by", {
idx <- seq(as.POSIXct("2019-01-01 03:02:01"), as.POSIXct("2020-01-01 03:02:01"), by = "month")
new_k <- k_by(k = "2 months", idx = idx, param = "k")
expected <- as.POSIXct(
c("2018-11-01 03:02:01", "2018-12-01 03:02:01", "2019-01-01 03:02:01",
"2019-02-01 03:02:01", "2019-03-01 03:02:01", "2019-04-01 03:02:01",
"2019-05-01 03:02:01", "2019-06-01 03:02:01", "2019-07-01 03:02:01",
"2019-08-01 03:02:01", "2019-09-01 03:02:01", "2019-10-01 03:02:01",
"2019-11-01 03:02:01")
)
expect_equal(idx - new_k, expected)
idx <- seq(as.POSIXct("2019-01-01 03:02:01"), as.POSIXct("2020-01-01 03:02:01"), by = "month")
new_k <- k_by(k = "month", idx = idx, param = "k")
expected <- as.POSIXct(
c("2018-12-01 03:02:01", "2019-01-01 03:02:01",
"2019-02-01 03:02:01", "2019-03-01 03:02:01", "2019-04-01 03:02:01",
"2019-05-01 03:02:01", "2019-06-01 03:02:01", "2019-07-01 03:02:01",
"2019-08-01 03:02:01", "2019-09-01 03:02:01", "2019-10-01 03:02:01",
"2019-11-01 03:02:01", "2019-12-01 03:02:01")
)
expect_equal(idx - new_k, expected)
idx <- seq(as.POSIXct("2019-01-01 03:02:01"), as.POSIXct("2020-01-01 03:02:01"), by = "month")
new_k <- k_by(k = "month", idx = idx, param = "lag")
expected <- as.POSIXct(
c("2018-12-01 03:02:01", "2019-01-01 03:02:01",
"2019-02-01 03:02:01", "2019-03-01 03:02:01", "2019-04-01 03:02:01",
"2019-05-01 03:02:01", "2019-06-01 03:02:01", "2019-07-01 03:02:01",
"2019-08-01 03:02:01", "2019-09-01 03:02:01", "2019-10-01 03:02:01",
"2019-11-01 03:02:01", "2019-12-01 03:02:01")
)
expect_equal(idx - new_k, expected)
idx <- seq(as.POSIXct("2019-01-01 03:02:01"), as.POSIXct("2020-01-01 03:02:01"), by = "month")
new_k <- k_by(k = "-1 month", idx = idx, param = "lag")
expected <- as.POSIXct(
c("2019-02-01 03:02:01", "2019-03-01 03:02:01", "2019-04-01 03:02:01",
"2019-05-01 03:02:01", "2019-06-01 03:02:01", "2019-07-01 03:02:01",
"2019-08-01 03:02:01", "2019-09-01 03:02:01", "2019-10-01 03:02:01",
"2019-11-01 03:02:01", "2019-12-01 03:02:01", "2020-01-01 03:02:01",
"2020-02-01 03:02:01")
)
expect_equal(idx - new_k, expected)
idx <- seq(as.POSIXct("2020-01-01 03:02:01"), as.POSIXct("2020-02-01 03:02:01"), by = "month")
new_k <- k_by(k = c("-1 month", "1 week"), idx = idx, param = "lag")
expected <- as.POSIXct(
c("2020-02-01 03:02:01", "2020-01-25 03:02:01")
)
expect_equal(idx - new_k, expected)
expect_equal(
k_by(k = "1 weeks", idx = idx, param = "lag"),
k_by(k = as.difftime(1, unit = "weeks"), idx = idx, param = "lag")
)
expect_equal(
k_by(k = "2 weeks", idx = idx, param = "k"),
k_by(k = as.difftime(2, units = "weeks"), idx = idx, param = "k")
)
expect_equal(
k_by(k = as.difftime(-2, units = "weeks"), idx = idx, param = "lag"),
k_by(k = "-2 weeks", idx = idx, param = "lag"),
)
expect_equal(
k_by(k = as.difftime(2, units = "weeks"), idx = idx, param = "lag"),
k_by(k = "2 weeks", idx = idx, param = "lag"),
)
idx <- seq(as.POSIXct("2019-01-01 03:02:01"), as.POSIXct("2020-01-01 03:02:01"), by = "month")
expect_error(
k_by(k = "-1 month", idx = idx, param = "k"),
"k can't be negative"
)
expect_error(
k_by(k = as.difftime(-2, units = "weeks"), idx = idx, param = "k"),
"`k` can't be negative"
)
})
test_that("reformat k", {
expect_equal(
reformat_k("day", only_positive = TRUE),
"-1 days"
)
expect_equal(
reformat_k("2 days", only_positive = TRUE),
"-2 days"
)
expect_equal(
reformat_k(c("2 days", "2 months"), only_positive = TRUE),
c("-2 days", "-2 months")
)
expect_equal(
reformat_k("2 days", only_positive = FALSE),
"-2 days"
)
expect_equal(
reformat_k(c("day", "-2 days", "2 days"), only_positive = FALSE),
c("-1 days", "2 days", "-2 days")
)
expect_equal(
reformat_k("2 days", only_positive = FALSE),
"-2 days"
)
expect_error(
reformat_k("-2 days", only_positive = TRUE),
"k can't be negative"
)
expect_error(
reformat_k(c("2 days","-2 days"), only_positive = TRUE),
"k can't be negative"
)
})
test_that("seq_at", {
idx <- seq(as.POSIXct("2019-01-01 03:02:01"), as.POSIXct("2020-01-01 03:02:01"), by = "month")
out <- seq_at(at = "2 months", idx = idx)
expected <- as.POSIXct(
c("2019-01-01 03:02:01", "2019-03-01 03:02:01", "2019-05-01 03:02:01",
"2019-07-01 03:02:01", "2019-09-01 03:02:01", "2019-11-01 03:02:01",
"2020-01-01 03:02:01")
)
expect_equal(out, expected)
out <- seq_at(at = "-2 months", idx = idx)
expect_equal(out, rev(expected))
expect_error(
seq_at(at = "-2 months", idx = integer(0)),
"`idx` can't be empty while specifying `at`"
)
expect_identical(
seq_at(at = "2 weeks", idx = idx),
seq_at(at = as.difftime(2, units = "weeks"), idx = idx)
)
expect_identical(
seq_at(at = "-2 weeks", idx = idx),
seq_at(at = as.difftime(-2, units = "weeks"), idx = idx)
)
})