Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-core/src/frame/proptest.rs
7884 views
1
use std::ops::RangeInclusive;
2
use std::rc::Rc;
3
4
use proptest::prelude::*;
5
6
use crate::prelude::{Column, DataFrame};
7
use crate::series::proptest::{SeriesArbitraryOptions, series_strategy};
8
9
pub struct DataFrameArbitraryOptions {
10
pub series_options: SeriesArbitraryOptions,
11
pub num_columns: RangeInclusive<usize>,
12
}
13
14
impl Default for DataFrameArbitraryOptions {
15
fn default() -> Self {
16
Self {
17
series_options: SeriesArbitraryOptions::default(),
18
num_columns: 0..=5,
19
}
20
}
21
}
22
23
pub fn dataframe_strategy(
24
options: Rc<DataFrameArbitraryOptions>,
25
nesting_level: usize,
26
) -> impl Strategy<Value = DataFrame> {
27
options
28
.series_options
29
.series_length_range
30
.clone()
31
.prop_flat_map(move |series_length| {
32
let mut opts = options.series_options.clone();
33
opts.series_length_range = series_length..=series_length;
34
35
prop::collection::vec(
36
series_strategy(Rc::new(opts), nesting_level),
37
options.num_columns.clone(),
38
)
39
})
40
.prop_map(|series| DataFrame::new(series.into_iter().map(Column::from).collect()).unwrap())
41
}
42
43