+impl<T: GenerateRandom> GenerateRandom for Vec<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ let len = rng.gen_range(0..8);
+ (0..len).map(|_| T::generate_random(rng)).collect()
+ }
+}
+
+impl<T> GenerateRandom for std::collections::HashSet<T>
+where
+ T: GenerateRandom + std::cmp::Eq + std::hash::Hash,
+{
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ let len = rng.gen_range(0..8);
+ (0..len).map(|_| T::generate_random(rng)).collect()
+ }
+}
+
+impl<K, V> GenerateRandom for std::collections::HashMap<K, V>
+where
+ K: GenerateRandom + std::cmp::Eq + std::hash::Hash,
+ V: GenerateRandom,
+{
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ let len = rng.gen_range(0..8);
+ (0..len)
+ .map(|_| (K::generate_random(rng), V::generate_random(rng)))
+ .collect()
+ }
+}
+
+impl<T: GenerateRandom> GenerateRandom for Box<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ Box::new(T::generate_random(rng))
+ }
+}
+
+impl<T: GenerateRandom> GenerateRandom for std::ops::Range<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ T::generate_random(rng)..T::generate_random(rng)
+ }
+}
+
+impl<T: GenerateRandom> GenerateRandom for std::ops::RangeFrom<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ T::generate_random(rng)..
+ }
+}
+
+impl GenerateRandom for std::ops::RangeFull {
+ fn generate_random<R: rand::Rng + ?Sized>(_rng: &mut R) -> Self {
+ ..
+ }
+}
+
+impl<T: GenerateRandom> GenerateRandom for std::ops::RangeInclusive<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ T::generate_random(rng)..=T::generate_random(rng)
+ }
+}
+
+impl<T: GenerateRandom> GenerateRandom for std::ops::RangeTo<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ ..T::generate_random(rng)
+ }
+}
+impl<T: GenerateRandom> GenerateRandom for std::ops::RangeToInclusive<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ ..=T::generate_random(rng)
+ }
+}
+
+#[cfg(feature = "enumset")]
+impl<T: enumset::EnumSetType + GenerateRandom> GenerateRandom for enumset::EnumSet<T> {
+ fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+ let max = enumset::EnumSet::<T>::variant_count() * 2;
+ let len = rng.gen_range(0..max);
+
+ (0..len).map(|_| T::generate_random(rng)).collect()
+ }
+}
+