Skip to content

Commit e6dbbec

Browse files
committed
Feat: Add generators for String type
Update README with string generators no longer missing.
1 parent 298ec89 commit e6dbbec

File tree

4 files changed

+82
-2
lines changed

4 files changed

+82
-2
lines changed

DOCUMENTATION.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,14 +214,21 @@ let some_longs = gens::i64::ranged(10..=20);
214214
let mostly_true = gens::bool::with_ratio(1,20);
215215
```
216216

217-
Various generators for `char` type:
217+
Various generators for types `char` and `String`:
218218

219219
```rust
220220
use monkey_test::*;
221221
let same_as_unicode = gens::char::any();
222222
let unicode = gens::char::unicode();
223223
let alpha_lower = gens::char::alpha_lower();
224224
let alpha_numeric = gens::char::alpha_numeric();
225+
226+
let alpha_upper_string = gens::string::alpha_upper();
227+
let any_string_starting_with_a_of_length_5 =
228+
gens::string::any().of_size(4..=4).map(
229+
|str_suffix| format!("A{}", str_suffix),
230+
|str_with_prefix_a| str_with_prefix_a.clone()[1..].to_string(),
231+
);
225232
```
226233

227234
There are also specialized generators:

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ Currently, in versions 0.x.y, the library is in active development.
5959
It is currently missing some parts, primarily built in generators
6060
and shrinkers for:
6161

62-
* Strings.
6362
* Commonly used data structures besides `Vec`.
6463
* Recursive data structures.
6564

src/gens.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ mod of_size;
1616
mod other_shrink;
1717
mod pick;
1818
pub mod sized;
19+
pub mod string;
1920
pub mod vec;
2021
mod zip;
2122

src/gens/string.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
//! Generators for String type.
2+
3+
use crate::BoxGen;
4+
use crate::MapWithGen;
5+
6+
/// Build String generator from char generator.
7+
fn strings_from_chars(chars: BoxGen<char>) -> BoxGen<String> {
8+
crate::gens::vec::any(chars)
9+
.map(|v| v.into_iter().collect(), |s| s.chars().collect())
10+
}
11+
12+
/// Strings of any possible Rust `char` value, that is any valid unicode scalar
13+
/// value.
14+
///
15+
/// For implementation details, see [crate::gens::char::unicode].
16+
pub fn unicode() -> BoxGen<String> {
17+
strings_from_chars(crate::gens::char::unicode())
18+
}
19+
20+
/// Shorthand for [unicode].
21+
pub fn any() -> BoxGen<String> {
22+
unicode()
23+
}
24+
25+
/// Strings of any arabic numeral 0..9.
26+
///
27+
/// For implementation details, see [crate::gens::char::number].
28+
pub fn number() -> BoxGen<String> {
29+
strings_from_chars(crate::gens::char::number())
30+
}
31+
32+
/// Strings of any alpha upper char.
33+
///
34+
/// For implementation details, see [crate::gens::char::alpha_upper].
35+
pub fn alpha_upper() -> BoxGen<String> {
36+
strings_from_chars(crate::gens::char::alpha_upper())
37+
}
38+
39+
/// Strings of any alpha lower char.
40+
///
41+
/// For implementation details, see [crate::gens::char::alpha_lower].
42+
pub fn alpha_lower() -> BoxGen<String> {
43+
strings_from_chars(crate::gens::char::alpha_lower())
44+
}
45+
46+
/// Strings of any alpha char.
47+
///
48+
/// For implementation details, see [crate::gens::char::alpha].
49+
pub fn alpha() -> BoxGen<String> {
50+
strings_from_chars(crate::gens::char::alpha())
51+
}
52+
53+
/// Strings of any alpha numeric char.
54+
///
55+
/// For implementation details, see [crate::gens::char::alpha_numeric].
56+
pub fn alpha_numeric() -> BoxGen<String> {
57+
strings_from_chars(crate::gens::char::alpha_numeric())
58+
}
59+
60+
/// Strings of any ASCII printable character.
61+
///
62+
/// For implementation details, see [crate::gens::char::ascii_printable].
63+
pub fn ascii_printable() -> BoxGen<String> {
64+
strings_from_chars(crate::gens::char::ascii_printable())
65+
}
66+
67+
/// Strings of any ASCII character, including both printable and non-printable
68+
/// characters.
69+
///
70+
/// For implementation details, see [crate::gens::char::ascii].
71+
pub fn ascii() -> BoxGen<String> {
72+
strings_from_chars(crate::gens::char::ascii())
73+
}

0 commit comments

Comments
 (0)