@@ -155,12 +155,14 @@ impl CoverageCounters {
155
155
BcbCounter :: Expression { id }
156
156
}
157
157
158
- /// Variant of `make_expression` that makes `lhs` optional and assumes [`Op::Add`] .
158
+ /// Creates a counter that is the sum of the given counters .
159
159
///
160
- /// This is useful when using [`Iterator::fold`] to build an arbitrary-length sum.
161
- fn make_sum_expression ( & mut self , lhs : Option < BcbCounter > , rhs : BcbCounter ) -> BcbCounter {
162
- let Some ( lhs) = lhs else { return rhs } ;
163
- self . make_expression ( lhs, Op :: Add , rhs)
160
+ /// Returns `None` if the given list of counters was empty.
161
+ fn make_sum ( & mut self , counters : & [ BcbCounter ] ) -> Option < BcbCounter > {
162
+ counters
163
+ . iter ( )
164
+ . copied ( )
165
+ . reduce ( |accum, counter| self . make_expression ( accum, Op :: Add , counter) )
164
166
}
165
167
166
168
pub ( super ) fn num_counters ( & self ) -> usize {
@@ -322,12 +324,9 @@ impl<'a> MakeBcbCounters<'a> {
322
324
. filter ( |& to_bcb| to_bcb != expression_to_bcb)
323
325
. map ( |to_bcb| self . get_or_make_edge_counter ( from_bcb, to_bcb) )
324
326
. collect :: < Vec < _ > > ( ) ;
325
- let sum_of_all_other_out_edges: BcbCounter = other_out_edge_counters
326
- . iter ( )
327
- . copied ( )
328
- . fold ( None , |accum, edge_counter| {
329
- Some ( self . coverage_counters . make_sum_expression ( accum, edge_counter) )
330
- } )
327
+ let sum_of_all_other_out_edges: BcbCounter = self
328
+ . coverage_counters
329
+ . make_sum ( & other_out_edge_counters)
331
330
. expect ( "there must be at least one other out-edge" ) ;
332
331
333
332
// Now create an expression for the chosen edge, by taking the counter
@@ -380,12 +379,9 @@ impl<'a> MakeBcbCounters<'a> {
380
379
. copied ( )
381
380
. map ( |from_bcb| self . get_or_make_edge_counter ( from_bcb, bcb) )
382
381
. collect :: < Vec < _ > > ( ) ;
383
- let sum_of_in_edges: BcbCounter = in_edge_counters
384
- . iter ( )
385
- . copied ( )
386
- . fold ( None , |accum, edge_counter| {
387
- Some ( self . coverage_counters . make_sum_expression ( accum, edge_counter) )
388
- } )
382
+ let sum_of_in_edges: BcbCounter = self
383
+ . coverage_counters
384
+ . make_sum ( & in_edge_counters)
389
385
. expect ( "there must be at least one in-edge" ) ;
390
386
391
387
debug ! ( "{bcb:?} gets a new counter (sum of predecessor counters): {sum_of_in_edges:?}" ) ;
0 commit comments