@@ -17,6 +17,7 @@ pub struct Stats {
1717 functions_max : usize ,
1818 closures_min : usize ,
1919 closures_max : usize ,
20+ space_count : usize ,
2021}
2122impl Default for Stats {
2223 fn default ( ) -> Self {
@@ -29,6 +30,7 @@ impl Default for Stats {
2930 functions_max : 0 ,
3031 closures_min : usize:: MAX ,
3132 closures_max : 0 ,
33+ space_count : 1 ,
3234 }
3335 }
3436}
@@ -37,10 +39,13 @@ impl Serialize for Stats {
3739 where
3840 S : Serializer ,
3941 {
40- let mut st = serializer. serialize_struct ( "nom" , 7 ) ?;
42+ let mut st = serializer. serialize_struct ( "nom" , 10 ) ?;
4143 st. serialize_field ( "functions" , & self . functions_sum ( ) ) ?;
4244 st. serialize_field ( "closures" , & self . closures_sum ( ) ) ?;
45+ st. serialize_field ( "functions_average" , & self . functions_average ( ) ) ?;
46+ st. serialize_field ( "closures_average" , & self . closures_average ( ) ) ?;
4347 st. serialize_field ( "total" , & self . total ( ) ) ?;
48+ st. serialize_field ( "average" , & self . average ( ) ) ?;
4449 st. serialize_field ( "functions_min" , & self . functions_min ( ) ) ?;
4550 st. serialize_field ( "functions_max" , & self . functions_max ( ) ) ?;
4651 st. serialize_field ( "closures_min" , & self . closures_min ( ) ) ?;
@@ -55,14 +60,20 @@ impl fmt::Display for Stats {
5560 f,
5661 "functions: {}, \
5762 closures: {}, \
63+ functions_average: {}, \
64+ closures_average: {}, \
5865 total: {} \
66+ average: {} \
5967 functions_min: {} \
6068 functions_max: {} \
6169 closures_min: {} \
6270 closures_max: {}",
6371 self . functions_sum( ) ,
6472 self . closures_sum( ) ,
73+ self . functions_average( ) ,
74+ self . closures_average( ) ,
6575 self . total( ) ,
76+ self . average( ) ,
6677 self . functions_min( ) ,
6778 self . functions_max( ) ,
6879 self . closures_min( ) ,
@@ -80,6 +91,7 @@ impl Stats {
8091 self . closures_max = self . closures_max . max ( other. closures_max ) ;
8192 self . functions_sum += other. functions_sum ;
8293 self . closures_sum += other. closures_sum ;
94+ self . space_count += other. space_count ;
8395 }
8496
8597 /// Counts the number of function definitions in a scope
@@ -108,6 +120,24 @@ impl Stats {
108120 self . closures_sum as f64
109121 }
110122
123+ /// Returns the average number of function definitions over all spaces
124+ #[ inline( always) ]
125+ pub fn functions_average ( & self ) -> f64 {
126+ self . functions_sum ( ) / self . space_count as f64
127+ }
128+
129+ /// Returns the average number of closures over all spaces
130+ #[ inline( always) ]
131+ pub fn closures_average ( & self ) -> f64 {
132+ self . closures_sum ( ) / self . space_count as f64
133+ }
134+
135+ /// Returns the average number of function definitions and closures over all spaces
136+ #[ inline( always) ]
137+ pub fn average ( & self ) -> f64 {
138+ self . total ( ) / self . space_count as f64
139+ }
140+
111141 /// Counts the number of function definitions in a scope
112142 #[ inline( always) ]
113143 pub fn functions_min ( & self ) -> f64 {
@@ -202,6 +232,11 @@ mod tests {
202232 ( functions_min, 0 , usize ) ,
203233 ( closures_min, 0 , usize ) ,
204234 ( closures_max, 1 , usize ) ,
235+ ] ,
236+ [
237+ ( functions_average, 0.75 ) , // number of spaces = 4
238+ ( closures_average, 0.25 ) ,
239+ ( average, 1.0 )
205240 ]
206241 ) ;
207242 }
@@ -223,6 +258,11 @@ mod tests {
223258 ( functions_min, 0 , usize ) ,
224259 ( closures_min, 0 , usize ) ,
225260 ( closures_max, 1 , usize ) ,
261+ ] ,
262+ [
263+ ( functions_average, 0.5 ) , // number of spaces = 4
264+ ( closures_average, 0.25 ) ,
265+ ( average, 0.75 )
226266 ]
227267 ) ;
228268 }
@@ -246,6 +286,11 @@ mod tests {
246286 ( functions_min, 0 , usize ) ,
247287 ( closures_min, 0 , usize ) ,
248288 ( closures_max, 0 , usize ) ,
289+ ] ,
290+ [
291+ ( functions_average, 0.5 ) , // number of spaces = 2
292+ ( closures_average, 0.0 ) ,
293+ ( average, 0.5 )
249294 ]
250295 ) ;
251296 }
@@ -269,6 +314,11 @@ mod tests {
269314 ( functions_min, 0 , usize ) ,
270315 ( closures_min, 0 , usize ) ,
271316 ( closures_max, 1 , usize ) ,
317+ ] ,
318+ [
319+ ( functions_average, 0.5 ) , // number of spaces = 4
320+ ( closures_average, 0.25 ) ,
321+ ( average, 0.75 )
272322 ]
273323 ) ;
274324 }
@@ -300,6 +350,11 @@ mod tests {
300350 ( functions_min, 0 , usize ) ,
301351 ( closures_min, 0 , usize ) ,
302352 ( closures_max, 1 , usize ) ,
353+ ] ,
354+ [
355+ ( functions_average, 0.6 ) , // number of spaces = 5
356+ ( closures_average, 0.2 ) ,
357+ ( average, 0.8 )
303358 ]
304359 ) ;
305360 }
@@ -321,6 +376,11 @@ mod tests {
321376 ( functions_min, 0 , usize ) ,
322377 ( closures_min, 0 , usize ) ,
323378 ( closures_max, 0 , usize ) ,
379+ ] ,
380+ [
381+ ( functions_average, 0.5 ) , // number of spaces = 2
382+ ( closures_average, 0.0 ) ,
383+ ( average, 0.5 )
324384 ]
325385 ) ;
326386 }
@@ -340,6 +400,11 @@ mod tests {
340400 ( functions_min, 0 , usize ) ,
341401 ( closures_min, 0 , usize ) ,
342402 ( closures_max, 0 , usize ) ,
403+ ] ,
404+ [
405+ ( functions_average, 0.5 ) , // number of spaces = 2
406+ ( closures_average, 0.0 ) ,
407+ ( average, 0.5 )
343408 ]
344409 ) ;
345410 }
@@ -361,6 +426,11 @@ mod tests {
361426 ( functions_min, 0 , usize ) ,
362427 ( closures_min, 0 , usize ) ,
363428 ( closures_max, 0 , usize ) ,
429+ ] ,
430+ [
431+ ( functions_average, 0.5 ) , // number of spaces = 2
432+ ( closures_average, 0.0 ) ,
433+ ( average, 0.5 )
364434 ]
365435 ) ;
366436 }
@@ -382,6 +452,11 @@ mod tests {
382452 ( functions_min, 0 , usize ) ,
383453 ( closures_min, 0 , usize ) ,
384454 ( closures_max, 0 , usize ) ,
455+ ] ,
456+ [
457+ ( functions_average, 0.5 ) , // number of spaces = 2
458+ ( closures_average, 0.0 ) ,
459+ ( average, 0.5 )
385460 ]
386461 ) ;
387462 }
@@ -405,6 +480,11 @@ mod tests {
405480 ( functions_min, 0 , usize ) ,
406481 ( closures_min, 0 , usize ) ,
407482 ( closures_max, 0 , usize ) ,
483+ ] ,
484+ [
485+ ( functions_average, 0.5 ) , // number of spaces = 2
486+ ( closures_average, 0.0 ) ,
487+ ( average, 0.5 )
408488 ]
409489 ) ;
410490 }
@@ -428,6 +508,11 @@ mod tests {
428508 ( functions_min, 0 , usize ) ,
429509 ( closures_min, 0 , usize ) ,
430510 ( closures_max, 1 , usize ) ,
511+ ] ,
512+ [
513+ ( functions_average, 0.0 ) , // number of spaces = 3
514+ ( closures_average, 0.6666666666666666 ) ,
515+ ( average, 0.6666666666666666 )
431516 ]
432517 ) ;
433518 }
@@ -449,6 +534,11 @@ mod tests {
449534 ( functions_min, 0 , usize ) ,
450535 ( closures_min, 0 , usize ) ,
451536 ( closures_max, 1 , usize ) ,
537+ ] ,
538+ [
539+ ( functions_average, 0.3333333333333333 ) , // number of spaces = 3
540+ ( closures_average, 0.3333333333333333 ) ,
541+ ( average, 0.6666666666666666 )
452542 ]
453543 ) ;
454544 }
@@ -468,6 +558,11 @@ mod tests {
468558 ( functions_min, 0 , usize ) ,
469559 ( closures_min, 0 , usize ) ,
470560 ( closures_max, 0 , usize ) ,
561+ ] ,
562+ [
563+ ( functions_average, 0.5 ) , // number of spaces = 2
564+ ( closures_average, 0.0 ) ,
565+ ( average, 0.5 )
471566 ]
472567 ) ;
473568 }
@@ -487,6 +582,11 @@ mod tests {
487582 ( functions_min, 0 , usize ) ,
488583 ( closures_min, 0 , usize ) ,
489584 ( closures_max, 1 , usize ) ,
585+ ] ,
586+ [
587+ ( functions_average, 0.0 ) , // number of spaces = 2
588+ ( closures_average, 0.5 ) ,
589+ ( average, 0.5 )
490590 ]
491591 ) ;
492592 }
@@ -508,6 +608,11 @@ mod tests {
508608 ( functions_min, 0 , usize ) ,
509609 ( closures_min, 0 , usize ) ,
510610 ( closures_max, 1 , usize ) ,
611+ ] ,
612+ [
613+ ( functions_average, 0.0 ) , // number of spaces = 2
614+ ( closures_average, 0.5 ) ,
615+ ( average, 0.5 )
511616 ]
512617 ) ;
513618 }
0 commit comments