@@ -201,3 +201,90 @@ pub(crate) fn format_bytes(bytes: usize) -> String {
201
201
_ => format ! ( "{bytes} bytes" ) ,
202
202
}
203
203
}
204
+
205
+ #[ cfg( test) ]
206
+ mod tests {
207
+ use super :: * ;
208
+
209
+ #[ test]
210
+ fn test_format_bytes ( ) {
211
+ assert_eq ! ( format_bytes( 500 ) , "500 bytes" ) ;
212
+ assert_eq ! ( format_bytes( 1_000 ) , "1KB" ) ;
213
+ assert_eq ! ( format_bytes( 100_000 ) , "100KB" ) ;
214
+ assert_eq ! ( format_bytes( 999_999 ) , "999KB" ) ;
215
+ assert_eq ! ( format_bytes( 1_000_000 ) , "1MB" ) ;
216
+ assert_eq ! ( format_bytes( 25_000_000 ) , "25MB" ) ;
217
+ assert_eq ! ( format_bytes( 100_000_000 ) , "100MB" ) ;
218
+ assert_eq ! ( format_bytes( 999_999_999 ) , "999MB" ) ;
219
+ assert_eq ! ( format_bytes( 1_000_000_000 ) , "1000000000 bytes" ) ;
220
+ }
221
+
222
+ #[ test]
223
+ fn test_measurement_display ( ) {
224
+ let measurement = Measurement {
225
+ test_type : TestType :: Download ,
226
+ payload_size : 1_000_000 ,
227
+ mbit : 50.5 ,
228
+ } ;
229
+
230
+ let display_str = format ! ( "{}" , measurement) ;
231
+ assert ! ( display_str. contains( "Download" ) ) ;
232
+ assert ! ( display_str. contains( "1MB" ) ) ;
233
+ assert ! ( display_str. contains( "50.5" ) ) ;
234
+ }
235
+
236
+ #[ test]
237
+ fn test_calc_stats_empty ( ) {
238
+ assert_eq ! ( calc_stats( vec![ ] ) , None ) ;
239
+ }
240
+
241
+ #[ test]
242
+ fn test_calc_stats_single_value ( ) {
243
+ let result = calc_stats ( vec ! [ 10.0 ] ) . unwrap ( ) ;
244
+ assert_eq ! ( result, ( 10.0 , 10.0 , 10.0 , 10.0 , 10.0 , 10.0 ) ) ;
245
+ }
246
+
247
+ #[ test]
248
+ fn test_calc_stats_two_values ( ) {
249
+ let result = calc_stats ( vec ! [ 10.0 , 20.0 ] ) . unwrap ( ) ;
250
+ assert_eq ! ( result. 0 , 10.0 ) ; // min
251
+ assert_eq ! ( result. 4 , 20.0 ) ; // max
252
+ assert_eq ! ( result. 2 , 15.0 ) ; // median
253
+ assert_eq ! ( result. 5 , 15.0 ) ; // avg
254
+ }
255
+
256
+ #[ test]
257
+ fn test_calc_stats_multiple_values ( ) {
258
+ let result = calc_stats ( vec ! [ 1.0 , 2.0 , 3.0 , 4.0 , 5.0 ] ) . unwrap ( ) ;
259
+ assert_eq ! ( result. 0 , 1.0 ) ; // min
260
+ assert_eq ! ( result. 4 , 5.0 ) ; // max
261
+ assert_eq ! ( result. 2 , 3.0 ) ; // median
262
+ assert_eq ! ( result. 5 , 3.0 ) ; // avg
263
+ }
264
+
265
+ #[ test]
266
+ fn test_calc_stats_unsorted ( ) {
267
+ let result = calc_stats ( vec ! [ 5.0 , 1.0 , 3.0 , 2.0 , 4.0 ] ) . unwrap ( ) ;
268
+ assert_eq ! ( result. 0 , 1.0 ) ; // min
269
+ assert_eq ! ( result. 4 , 5.0 ) ; // max
270
+ assert_eq ! ( result. 2 , 3.0 ) ; // median
271
+ assert_eq ! ( result. 5 , 3.0 ) ; // avg
272
+ }
273
+
274
+ #[ test]
275
+ fn test_median_odd_length ( ) {
276
+ assert_eq ! ( median( & [ 1.0 , 2.0 , 3.0 ] ) , 2.0 ) ;
277
+ assert_eq ! ( median( & [ 1.0 , 2.0 , 3.0 , 4.0 , 5.0 ] ) , 3.0 ) ;
278
+ }
279
+
280
+ #[ test]
281
+ fn test_median_even_length ( ) {
282
+ assert_eq ! ( median( & [ 1.0 , 2.0 ] ) , 1.5 ) ;
283
+ assert_eq ! ( median( & [ 1.0 , 2.0 , 3.0 , 4.0 ] ) , 2.5 ) ;
284
+ }
285
+
286
+ #[ test]
287
+ fn test_median_single_value ( ) {
288
+ assert_eq ! ( median( & [ 5.0 ] ) , 5.0 ) ;
289
+ }
290
+ }
0 commit comments