diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index c519304..d35a4a8 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -2250,6 +2250,17 @@ impl DataSet { .unwrap_or(&[]) } + /// Counts market, factor, candidate, benchmark and corporate-action rows without cloning them. + pub fn snapshot_row_counts(&self) -> (usize, usize, usize, usize, usize) { + ( + self.market_by_date.values().map(Vec::len).sum(), + self.factor_by_date.values().map(Vec::len).sum(), + self.candidate_by_date.values().map(Vec::len).sum(), + self.benchmark_by_date.len(), + self.corporate_actions_by_date.values().map(Vec::len).sum(), + ) + } + pub fn execution_quotes_on(&self, date: NaiveDate, symbol: &str) -> &[IntradayExecutionQuote] { self.execution_quotes_by_date .get(&date) @@ -5474,6 +5485,10 @@ mod tests { ) .expect("daily bundle dataset"); + let row_count = dates.len() * symbols.len(); + let expected_counts = (row_count, row_count, row_count, dates.len(), dates.len()); + assert_eq!(flat.snapshot_row_counts(), expected_counts); + assert_eq!(grouped.snapshot_row_counts(), expected_counts); assert_eq!(flat.calendar().days(), grouped.calendar().days()); assert_eq!(flat.benchmark_code(), grouped.benchmark_code()); for date in dates {