use proptest::prelude::*;
use proptest::strategy::BoxedStrategy;
use crate::tests::property_tests::generators::extensions::arb_type_system_extension;
use crate::tests::property_tests::generators::operations::arb_executable_definition;
use crate::tests::property_tests::generators::operations::arb_named_executable_definition;
use crate::tests::property_tests::generators::schema_types::arb_type_system_definition;
use crate::tests::property_tests::generators::whitespace::arb_separator;
use crate::tests::property_tests::generators::whitespace::join_items;
pub fn arb_schema_document(depth: usize) -> BoxedStrategy<String> {
prop::collection::vec((arb_schema_doc_definition(depth), arb_separator()), 1..5)
.prop_map(|pairs| join_items(&pairs))
.boxed()
}
pub fn arb_executable_document(depth: usize) -> BoxedStrategy<String> {
prop::collection::vec((arb_executable_definition(depth), arb_separator()), 1..5)
.prop_map(|pairs| join_items(&pairs))
.boxed()
}
pub fn arb_mixed_document(depth: usize) -> BoxedStrategy<String> {
prop::collection::vec((arb_any_definition(depth), arb_separator()), 1..5)
.prop_map(|pairs| join_items(&pairs))
.boxed()
}
fn arb_schema_doc_definition(depth: usize) -> BoxedStrategy<String> {
prop_oneof![
3 => arb_type_system_definition(depth),
1 => arb_type_system_extension(depth),
]
.boxed()
}
fn arb_any_definition(depth: usize) -> BoxedStrategy<String> {
prop_oneof![
2 => arb_type_system_definition(depth),
1 => arb_type_system_extension(depth),
2 => arb_named_executable_definition(depth),
]
.boxed()
}