aboutsummaryrefslogtreecommitdiff
path: root/tests/src/lib.rs
blob: b09335d7b87a4d53abe04c718b08f8a69d3dd757 (plain)
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,
            }
        );
    }
}