perf: retain faster stable universe sort
This commit is contained in:
@@ -9214,17 +9214,6 @@ impl PlatformExprStrategy {
|
|||||||
.0
|
.0
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn eligible_universe_market_cap_order(
|
|
||||||
left: &EligibleUniverseSnapshot,
|
|
||||||
right: &EligibleUniverseSnapshot,
|
|
||||||
) -> std::cmp::Ordering {
|
|
||||||
left.market_cap_bn
|
|
||||||
.partial_cmp(&right.market_cap_bn)
|
|
||||||
.unwrap_or(std::cmp::Ordering::Equal)
|
|
||||||
.then_with(|| left.symbol.cmp(&right.symbol))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn selection_universe_and_risk_decisions_with_options(
|
fn selection_universe_and_risk_decisions_with_options(
|
||||||
&self,
|
&self,
|
||||||
ctx: &StrategyContext<'_>,
|
ctx: &StrategyContext<'_>,
|
||||||
@@ -9307,7 +9296,12 @@ impl PlatformExprStrategy {
|
|||||||
free_float_cap_bn,
|
free_float_cap_bn,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
rows.sort_unstable_by(Self::eligible_universe_market_cap_order);
|
rows.sort_by(|left, right| {
|
||||||
|
left.market_cap_bn
|
||||||
|
.partial_cmp(&right.market_cap_bn)
|
||||||
|
.unwrap_or(std::cmp::Ordering::Equal)
|
||||||
|
.then_with(|| left.symbol.cmp(&right.symbol))
|
||||||
|
});
|
||||||
(rows, decisions)
|
(rows, decisions)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14262,36 +14256,6 @@ mod tests {
|
|||||||
assert!(!PlatformExprStrategy::new(cfg).rank_reuses_market_cap_order());
|
assert!(!PlatformExprStrategy::new(cfg).rank_reuses_market_cap_order());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn eligible_universe_unstable_sort_preserves_market_cap_symbol_total_order() {
|
|
||||||
let mut rows = vec![
|
|
||||||
EligibleUniverseSnapshot {
|
|
||||||
symbol: "000003.SZ".to_string(),
|
|
||||||
market_cap_bn: 2.0,
|
|
||||||
free_float_cap_bn: 1.0,
|
|
||||||
},
|
|
||||||
EligibleUniverseSnapshot {
|
|
||||||
symbol: "000002.SZ".to_string(),
|
|
||||||
market_cap_bn: 1.0,
|
|
||||||
free_float_cap_bn: 1.0,
|
|
||||||
},
|
|
||||||
EligibleUniverseSnapshot {
|
|
||||||
symbol: "000001.SZ".to_string(),
|
|
||||||
market_cap_bn: 1.0,
|
|
||||||
free_float_cap_bn: 1.0,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
rows.sort_unstable_by(PlatformExprStrategy::eligible_universe_market_cap_order);
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
rows.iter()
|
|
||||||
.map(|row| (row.market_cap_bn, row.symbol.as_str()))
|
|
||||||
.collect::<Vec<_>>(),
|
|
||||||
vec![(1.0, "000001.SZ"), (1.0, "000002.SZ"), (2.0, "000003.SZ"),]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn current_rolling_helpers_do_not_load_factor_maps_or_decision_rollings() {
|
fn current_rolling_helpers_do_not_load_factor_maps_or_decision_rollings() {
|
||||||
let mut cfg = PlatformExprStrategyConfig::microcap_rotation();
|
let mut cfg = PlatformExprStrategyConfig::microcap_rotation();
|
||||||
|
|||||||
Reference in New Issue
Block a user