1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#[cfg(test)]
mod tests {
use generate_random::GenerateRandom;
fn rng() -> impl rand::Rng {
use rand::SeedableRng;
rand_chacha::ChaCha8Rng::from(rand_chacha::ChaCha8Core::from_seed([37; 32]))
}
fn repeat<T>(count: usize, f: impl FnMut() -> T) -> Vec<T> {
std::iter::repeat_with(f).take(count).collect()
}
#[derive(GenerateRandom, PartialEq, Eq, Debug)]
enum TestEnumUnit {
Left,
#[weight(2)]
Right,
}
#[derive(GenerateRandom, PartialEq, Eq, Debug)]
enum TestEnumUnnamed {
Left(u8),
#[weight(2)]
Right(bool),
}
#[derive(GenerateRandom, PartialEq, Eq, Debug)]
enum TestEnumNamed {
Left {
x: u8,
},
#[weight(2)]
Right {
y: bool,
},
}
#[derive(GenerateRandom, PartialEq, Eq, Debug)]
struct TestStructUnit;
#[derive(GenerateRandom, PartialEq, Eq, Debug)]
struct TestStructUnnamed(u8, i32);
#[derive(GenerateRandom, PartialEq, Eq, Debug)]
struct TestStructNamed {
x: u8,
y: i32,
}
#[test]
fn test_enum_unit() {
let mut rng = rng();
assert_eq!(
repeat(6, || TestEnumUnit::generate_random(&mut rng),),
vec![
TestEnumUnit::Right,
TestEnumUnit::Right,
TestEnumUnit::Left,
TestEnumUnit::Right,
TestEnumUnit::Right,
TestEnumUnit::Right,
]
);
}
#[test]
fn test_enum_unnamed() {
let mut rng = rng();
assert_eq!(
repeat(6, || TestEnumUnnamed::generate_random(&mut rng),),
vec![
TestEnumUnnamed::Right(false),
TestEnumUnnamed::Left(142),
TestEnumUnnamed::Right(false),
TestEnumUnnamed::Right(true),
TestEnumUnnamed::Right(false),
TestEnumUnnamed::Left(19),
]
);
}
#[test]
fn test_enum_named() {
let mut rng = rng();
assert_eq!(
repeat(6, || TestEnumNamed::generate_random(&mut rng),),
vec![
TestEnumNamed::Right { y: false },
TestEnumNamed::Left { x: 142 },
TestEnumNamed::Right { y: false },
TestEnumNamed::Right { y: true },
TestEnumNamed::Right { y: false },
TestEnumNamed::Left { x: 19 },
]
);
}
#[test]
fn test_struct_unit() {
let mut rng = rng();
assert_eq!(TestStructUnit::generate_random(&mut rng), TestStructUnit);
}
#[test]
fn test_struct_unnamed() {
let mut rng = rng();
assert_eq!(
TestStructUnnamed::generate_random(&mut rng),
TestStructUnnamed(55, -896102575)
);
}
#[test]
fn test_struct_named() {
let mut rng = rng();
assert_eq!(
TestStructNamed::generate_random(&mut rng),
TestStructNamed {
x: 55,
y: -896102575,
}
);
}
}
|