Skip to content

Commit

Permalink
fuzz_data_order feature
Browse files Browse the repository at this point in the history
  • Loading branch information
arnodb committed Feb 10, 2025
1 parent b9d40b3 commit b982875
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
3 changes: 3 additions & 0 deletions quirky_binder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@ thiserror = "1"
truc = { git = "https://github.com/arnodb/truc.git" }
which = "4"

[features]
fuzz_data_order = []

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage,coverage_nightly)'] }
27 changes: 25 additions & 2 deletions quirky_binder/src/graph/builder/update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,8 @@ impl<'g, R: TypeResolver + Copy, Extra> OutputBuilderForUpdate<'_, '_, 'g, R, Ex
}

pub fn build(self) -> &'g RefCell<RecordDefinitionBuilder<R>> {
let variant_id = self.record_definition.borrow_mut().close_record_variant();
let variant_id = close_record_variant_internal(&mut self.record_definition.borrow_mut());

self.streams.outputs.push(NodeStream::new(
self.record_type,
variant_id,
Expand All @@ -353,6 +354,7 @@ impl<'g, R: TypeResolver + Copy, Extra> OutputBuilderForUpdate<'_, '_, 'g, R, Ex
self.is_output_main_stream,
self.facts,
));

self.record_definition
}
}
Expand Down Expand Up @@ -475,7 +477,8 @@ impl<R: TypeResolver, Extra> SubStreamBuilderForUpdate<'_, R, Extra> {
}

pub fn close_record_variant(self, _facts: FactsFullyUpdated<()>) -> NodeSubStream {
let variant_id = self.record_definition.borrow_mut().close_record_variant();
let variant_id = close_record_variant_internal(&mut self.record_definition.borrow_mut());

NodeSubStream::new(self.record_type, variant_id, self.sub_streams, self.facts)
}
}
Expand All @@ -485,3 +488,23 @@ impl<R: TypeResolver> SubStreamBuilderForUpdate<'_, R, DerivedExtra> {
self.extra.input_variant_id
}
}

fn close_record_variant_internal<R>(builder: &mut RecordDefinitionBuilder<R>) -> RecordVariantId
where
R: TypeResolver,
{
#[cfg(not(feature = "fuzz_data_order"))]
let variant_id = builder.close_record_variant();

#[cfg(feature = "fuzz_data_order")]
let variant_id = match std::env::var("FUZZ_DATA_ORDER") {
Ok(_) => {
use truc::record::definition::builder::variant::append_data_reverse;
// With this one, it is almost assured that record data have an unexpected order
builder.close_record_variant_with(append_data_reverse)
}
Err(_) => builder.close_record_variant(),
};

variant_id
}
3 changes: 3 additions & 0 deletions tests/quirky_binder_tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@ truc_runtime = { git = "https://github.com/arnodb/truc.git" }

[build-dependencies]
quirky_binder_tests_source = { path = "../quirky_binder_tests_source" }

[features]
fuzz_data_order = ["quirky_binder_tests_source/fuzz_data_order"]
3 changes: 3 additions & 0 deletions tests/quirky_binder_tests_source/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ quirky_binder_csv = { path = "../../contrib/quirky_binder_csv" }
quirky_binder_lang = { path = "../../quirky_binder_lang" }
serde = { version = "1", features = ["derive"] }
truc = { git = "https://github.com/arnodb/truc.git" }

[features]
fuzz_data_order = ["quirky_binder/fuzz_data_order"]

0 comments on commit b982875

Please sign in to comment.