MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / arb_relation_desc_diff

Function arb_relation_desc_diff

src/repr/src/relation.rs:2014–2097  ·  view source on GitHub ↗
(
    source: &RelationDesc,
)

Source from the content-addressed store, hash-verified

2012/// Generates a set of [`PropRelationDescDiff`]s based on some source [`RelationDesc`].
2013#[cfg(any(test, feature = "proptest"))]
2014pub fn arb_relation_desc_diff(
2015 source: &RelationDesc,
2016) -> impl Strategy<Value = Vec<PropRelationDescDiff>> + use<> {
2017 let source = Rc::new(source.clone());
2018 let num_source_columns = source.typ.columns().len();
2019
2020 let num_add_columns = Union::new_weighted(vec![(100, Just(0..8)), (1, Just(8..64))]);
2021 let add_columns_strat = num_add_columns
2022 .prop_flat_map(|num_columns| {
2023 proptest::collection::vec((any::<ColumnName>(), any::<SqlColumnType>()), num_columns)
2024 })
2025 .prop_map(|cols| {
2026 cols.into_iter()
2027 .map(|(name, typ)| PropRelationDescDiff::AddColumn { name, typ })
2028 .collect::<Vec<_>>()
2029 });
2030
2031 // If the source RelationDesc is empty there is nothing else to do.
2032 if num_source_columns == 0 {
2033 return add_columns_strat.boxed();
2034 }
2035
2036 let source_ = Rc::clone(&source);
2037 let drop_columns_strat = (0..num_source_columns).prop_perturb(move |num_columns, mut rng| {
2038 let mut set = BTreeSet::default();
2039 for _ in 0..num_columns {
2040 let col_idx = rng.random_range(0..num_source_columns);
2041 set.insert(source_.get_name(col_idx).clone());
2042 }
2043 set.into_iter()
2044 .map(|name| PropRelationDescDiff::DropColumn { name })
2045 .collect::<Vec<_>>()
2046 });
2047
2048 let source_ = Rc::clone(&source);
2049 let toggle_nullability_strat =
2050 (0..num_source_columns).prop_perturb(move |num_columns, mut rng| {
2051 let mut set = BTreeSet::default();
2052 for _ in 0..num_columns {
2053 let col_idx = rng.random_range(0..num_source_columns);
2054 set.insert(source_.get_name(col_idx).clone());
2055 }
2056 set.into_iter()
2057 .map(|name| PropRelationDescDiff::ToggleNullability { name })
2058 .collect::<Vec<_>>()
2059 });
2060
2061 let source_ = Rc::clone(&source);
2062 let change_type_strat = (0..num_source_columns)
2063 .prop_perturb(move |num_columns, mut rng| {
2064 let mut set = BTreeSet::default();
2065 for _ in 0..num_columns {
2066 let col_idx = rng.random_range(0..num_source_columns);
2067 set.insert(source_.get_name(col_idx).clone());
2068 }
2069 set
2070 })
2071 .prop_flat_map(|cols| {

Calls 9

cloneFunction · 0.85
boxedMethod · 0.80
cloneMethod · 0.45
lenMethod · 0.45
columnsMethod · 0.45
mapMethod · 0.45
into_iterMethod · 0.45
insertMethod · 0.45
get_nameMethod · 0.45

Tested by

no test coverage detected