1
- # Shared summary validation function
2
- test_summary_output <- function (summary_x ) {
3
- expect_s3_class(summary_x , " tbl_df" )
4
- expect_equal(ncol(summary_x ), 7 )
5
- expect_named(summary_x , c(" Design" , " N" , " Events" , " Time" , " Bound" , " alpha" , " Power" ), ignore.order = TRUE )
6
-
7
- # Ensure values are within expected ranges
8
- expect_true(all(summary_x $ N > 0 ))
9
- expect_true(all(summary_x $ Events > 0 ))
10
- expect_true(all(summary_x $ Time > 0 ))
11
- expect_true(all(summary_x $ alpha > 0 & summary_x $ alpha < 1 ))
12
- expect_true(all(summary_x $ Power > 0 & summary_x $ Power < = 1 ))
13
- }
14
-
15
- # Create shared test fixtures
16
- create_test_design <- function (design_fn , extra_args = list ()) {
1
+ # Create common fixed designs
2
+ create_fixed_design <- function (design_fn , extra_args = list ()) {
17
3
base_args <- list (
18
4
alpha = 0.025 ,
19
5
power = 0.9 ,
@@ -32,8 +18,8 @@ create_test_design <- function(design_fn, extra_args = list()) {
32
18
do.call(design_fn , args )
33
19
}
34
20
35
- # Shared validation function
36
- validate_design_output <- function (result ) {
21
+ # Validate fixed design outputs
22
+ check_fixed_design_output <- function (result ) {
37
23
# Common checks
38
24
expect_s3_class(result , " fixed_design" )
39
25
expect_equal(result $ analysis $ n , round(result $ analysis $ n ))
@@ -55,22 +41,36 @@ validate_design_output <- function(result) {
55
41
expect_true(result $ input $ study_duration > 0 )
56
42
}
57
43
58
- # Parameterized tests for different design types
59
- test_that(" to_integer works correctly for different design types" , {
44
+ # Validate fixed design summary
45
+ check_fixed_design_summary <- function (summary_x ) {
46
+ expect_s3_class(summary_x , " tbl_df" )
47
+ expect_equal(ncol(summary_x ), 7 )
48
+ expect_named(summary_x , c(" Design" , " N" , " Events" , " Time" , " Bound" , " alpha" , " Power" ), ignore.order = TRUE )
49
+
50
+ # Ensure values are within expected ranges
51
+ expect_true(all(summary_x $ N > 0 ))
52
+ expect_true(all(summary_x $ Events > 0 ))
53
+ expect_true(all(summary_x $ Time > 0 ))
54
+ expect_true(all(summary_x $ alpha > 0 & summary_x $ alpha < 1 ))
55
+ expect_true(all(summary_x $ Power > 0 & summary_x $ Power < = 1 ))
56
+ }
57
+
58
+ # Parameterized tests for different fixed design types
59
+ test_that(" to_integer works correctly for different fixed design types" , {
60
60
designs <- list (
61
61
list (fn = fixed_design_ahr , name = " ahr" , extra_args = list ()),
62
62
list (fn = fixed_design_fh , name = " fh" , extra_args = list (rho = 0.5 , gamma = 0.5 , ratio = 1 )),
63
63
list (fn = fixed_design_mb , name = " mb" , extra_args = list (tau = 4 , ratio = 1 ))
64
64
)
65
65
66
66
for (design in designs ) {
67
- x <- create_test_design (design $ fn , design $ extra_args ) % > % to_integer()
68
- validate_design_output (x )
67
+ x <- create_fixed_design (design $ fn , design $ extra_args ) | > to_integer()
68
+ check_fixed_design_output (x )
69
69
expect_equal(x $ design , design $ name )
70
70
71
71
# Check summary output
72
72
summary_x <- summary(x )
73
- test_summary_output (summary_x )
73
+ check_fixed_design_summary (summary_x )
74
74
}
75
75
})
76
76
@@ -84,7 +84,7 @@ test_that("fixed_design_ahr handles invalid inputs", {
84
84
hr = c(1 , .6 ), dropout_rate = .001
85
85
),
86
86
study_duration = 36
87
- ), " must have 0 < alpha < 1 - beta < 1! " )
87
+ ), " must have 0 < alpha < 1 - beta < 1" )
88
88
89
89
expect_error(fixed_design_ahr(
90
90
alpha = 0.025 , power = 1.1 ,
@@ -94,7 +94,7 @@ test_that("fixed_design_ahr handles invalid inputs", {
94
94
hr = c(1 , .6 ), dropout_rate = .001
95
95
),
96
96
study_duration = 36
97
- ), " must have 0 < alpha < 1 - beta < 1! " )
97
+ ), " must have 0 < alpha < 1 - beta < 1" )
98
98
99
99
expect_error(fixed_design_ahr(
100
100
alpha = 0.025 , power = 0.9 ,
@@ -104,25 +104,7 @@ test_that("fixed_design_ahr handles invalid inputs", {
104
104
hr = c(1 , .6 ), dropout_rate = .001
105
105
),
106
106
study_duration = - 36
107
- ), " The input argument `analysis_times` must be NULL a numeric vector with positive increasing values!" )
108
- })
109
-
110
- # Test to_integer with fixed_design_ahr
111
- test_that(" to_integer with fixed_design_ahr returns correct results" , {
112
- x <- create_test_design(fixed_design_ahr ) %> % to_integer()
113
- validate_design_output(x )
114
- })
115
-
116
- # Test to_integer with fixed_design_fh
117
- test_that(" to_integer with fixed_design_fh returns correct results" , {
118
- x <- create_test_design(fixed_design_fh , extra_args = list (rho = 0.5 , gamma = 0.5 , ratio = 1 )) %> % to_integer()
119
- validate_design_output(x )
120
- })
121
-
122
- # Test to_integer with fixed_design_mb
123
- test_that(" to_integer with fixed_design_mb returns correct results" , {
124
- x <- create_test_design(fixed_design_mb , extra_args = list (tau = 4 , ratio = 1 )) %> % to_integer()
125
- validate_design_output(x )
107
+ ), " The input argument `analysis_times` must be NULL a numeric vector with positive increasing values" )
126
108
})
127
109
128
110
test_that(" to_integer.gs_design rounds events and sample sizes correctly for AHR" , {
@@ -147,7 +129,6 @@ test_that("to_integer.gs_design rounds events and sample sizes correctly for AHR
147
129
expect_true(all(abs(rounded_sample_sizes - result $ analysis $ n ) < 0.5 ))
148
130
})
149
131
150
-
151
132
test_that(" to_integer.gs_design handles WLR correctly" , {
152
133
# Create a mock gs_design object with WLR class
153
134
design_wlr <- gs_design_wlr(
@@ -170,7 +151,6 @@ test_that("to_integer.gs_design handles WLR correctly", {
170
151
expect_true(all(abs(rounded_sample_sizes - result $ analysis $ n ) < 0.5 ))
171
152
})
172
153
173
-
174
154
test_that(" to_integer.gs_design handles RD class correctly" , {
175
155
# Create a mock gs_design object with RD class
176
156
design_rd <- gs_design_rd(
@@ -193,7 +173,6 @@ test_that("to_integer.gs_design handles RD class correctly", {
193
173
expect_true(all(abs(rounded_sample_sizes - result $ analysis $ n ) < 0.5 ))
194
174
})
195
175
196
-
197
176
test_that(" to_integer.gs_design handles calendar-based spending correctly" , {
198
177
# Create a mock gs_design object with calendar-based spending
199
178
design_ahr <- gs_design_ahr(
@@ -233,6 +212,6 @@ test_that("to_integer.gs_design performs correctly with large sample sizes", {
233
212
result $ analysis $ n <- round(result $ analysis $ n )
234
213
235
214
# Check that rounding and transformations work as expected
236
- expect_true(all(result $ analysis $ event %% 1 == 0 )) # Ensure events are integers
237
- expect_true(all(result $ analysis $ n %% 1 == 0 )) # Ensure sample sizes are integers
215
+ expect_true(all(result $ analysis $ event %% 1 == 0 )) # Ensure events are integers
216
+ expect_true(all(result $ analysis $ n %% 1 == 0 )) # Ensure sample sizes are integers
238
217
})
0 commit comments