Skip to content

Commit 514ddc1

Browse files
committed
add fallback to equal-metrics comparison
1 parent 28dee31 commit 514ddc1

2 files changed

Lines changed: 15 additions & 6 deletions

File tree

src/simulation/investment.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ use std::fmt::Display;
1919
pub mod appraisal;
2020
use appraisal::coefficients::calculate_coefficients_for_assets;
2121
use appraisal::{
22-
AppraisalOutput, appraise_investment, sort_appraisal_outputs_by_investment_priority,
22+
AppraisalOutput, appraise_investment, count_equal_and_best_appraisal_outputs,
23+
sort_appraisal_outputs_by_investment_priority,
2324
};
2425

2526
/// A map of demand across time slices for a specific market
@@ -661,11 +662,7 @@ fn warn_on_equal_appraisal_outputs(
661662
return;
662663
}
663664

664-
// Count the number of identical (or nearly identical) appraisal outputs
665-
let num_identical = outputs[1..]
666-
.iter()
667-
.take_while(|output| outputs[0].compare_metric(output).is_eq())
668-
.count();
665+
let num_identical = count_equal_and_best_appraisal_outputs(outputs);
669666

670667
if num_identical > 0 {
671668
let asset_details = outputs[..=num_identical]

src/simulation/investment/appraisal.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,18 @@ pub fn sort_appraisal_outputs_by_investment_priority(outputs_for_opts: &mut Vec<
378378
});
379379
}
380380

381+
/// Counts the number of top appraisal outputs in a sorted slice that are indistinguishable
382+
/// by both metric and fallback ordering.
383+
pub fn count_equal_and_best_appraisal_outputs(outputs: &[AppraisalOutput]) -> usize {
384+
outputs[1..]
385+
.iter()
386+
.take_while(|output| {
387+
output.compare_metric(&outputs[0]).is_eq()
388+
&& compare_asset_fallback(&output.asset, &outputs[0].asset).is_eq()
389+
})
390+
.count()
391+
}
392+
381393
#[cfg(test)]
382394
mod tests {
383395
use super::*;

0 commit comments

Comments
 (0)