1 #pragma once 2 3 #include "rapidcheck/Seq.h" 4 5 namespace rc { 6 namespace shrink { 7 8 /// Tries to shrink the given container by removing successively smaller 9 /// consecutive chunks of it. 10 /// 11 /// `Container` must support the following: 12 /// - `RandomAccessIterator begin(Container)` 13 /// - `RandomAccessIterator end(Container)` 14 /// - `Container::insert(It, It, It)` 15 /// - `Container::reserve(std::size_t)` 16 template <typename Container> 17 Seq<Container> removeChunks(Container elements); 18 19 /// Tries to shrink each element of the given container using the given 20 /// callable to create sequences of shrinks for that element. 21 /// 22 /// `Container` must support `begin(Container)` and `end(Container)` which must 23 /// return random access iterators. 24 /// 25 /// @param elements The collection whose elements to shrink. 26 /// @param shrink A callable which returns a `Seq<T>` given an element 27 /// to shrink. 28 template <typename Container, typename Shrink> 29 Seq<Container> eachElement(Container elements, Shrink shrink); 30 31 /// Shrinks an integral value towards another integral value. 32 /// 33 /// @param value The value to shrink. 34 /// @param target The integer to shrink towards. 35 template <typename T> 36 Seq<T> towards(T value, T target); 37 38 /// Shrinks an arbitrary integral value. 39 template <typename T> 40 Seq<T> integral(T value); 41 42 /// Shrinks an arbitrary real value. 43 template <typename T> 44 Seq<T> real(T value); 45 46 /// Shrinks an arbitrary boolean value. 47 inline Seq<bool> boolean(bool value); 48 49 /// Shrinks a text character. 50 template <typename T> 51 Seq<T> character(T value); 52 53 } // namespace shrink 54 } // namespace rc 55 56 #include "Shrink.hpp" 57