File: range.rs

package info (click to toggle)
rust-garde 0.22.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 940 kB
  • sloc: makefile: 2
file content (128 lines) | stat: -rw-r--r-- 2,406 bytes parent folder | download | duplicates (2)
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
126
127
128
use super::util;

#[derive(Debug, garde::Validate)]
struct Test<'a> {
    #[garde(range(min = 10, max = 100))]
    field: u64,
    #[garde(range(min = 0, max = self.field))]
    refers_to_field: u64,
    #[garde(inner(range(min = 10, max = 100)))]
    inner: &'a [u64],
    #[garde(range(min = 0., max = 100.))]
    float_field: f32,
}

#[test]
fn range_valid() {
    util::check_ok(
        &[Test {
            field: 50,
            refers_to_field: 10,
            inner: &[50],
            float_field: 10.,
        }],
        &(),
    )
}

#[test]
fn range_invalid() {
    util::check_fail!(
        &[
            Test {
                field: 9,
                refers_to_field: 10,
                inner: &[9],
                float_field: -12.
            },
            Test {
                field: 101,
                refers_to_field: 200,
                inner: &[101],
                float_field: 1204.
            }
        ],
        &()
    )
}

#[derive(Debug, garde::Validate)]
struct Exact<'a> {
    #[garde(range(equal = 2))]
    field: u64,
    #[garde(inner(range(equal = 2)))]
    inner: &'a [i32],
}

#[test]
fn exact_length_valid() {
    util::check_ok(
        &[Exact {
            field: 2,
            inner: &[2],
        }],
        &(),
    )
}

#[test]
fn exact_length_invalid() {
    util::check_fail!(
        &[
            Exact {
                field: 0,
                inner: &[0]
            },
            Exact {
                field: 1,
                inner: &[1]
            },
            Exact {
                // 'a' * 3
                field: 3,
                inner: &[3]
            },
        ],
        &()
    )
}

#[derive(Debug, garde::Validate)]
struct MinMaxEqual {
    #[garde(range(min = 40, max = 40))]
    min_max: u64,
    #[garde(range(equal = 40))]
    equal: u64,
}

#[test]
fn min_max_equal_length_valid() {
    util::check_ok(
        &[MinMaxEqual {
            min_max: 40,
            equal: 40,
        }],
        &(),
    )
}

#[test]
fn min_max_equal_length_invalid() {
    util::check_fail!(
        &[
            MinMaxEqual {
                min_max: 0,
                equal: 0
            },
            MinMaxEqual {
                min_max: 39,
                equal: 39
            },
            MinMaxEqual {
                min_max: 41,
                equal: 41
            },
        ],
        &()
    )
}