lets_expect_assertions/
partial_ord.rs1use std::{
2 fmt::Debug,
3 ops::{Add, Sub},
4};
5
6use colored::Colorize;
7use lets_expect_core::assertions::{
8 assertion_error::AssertionError, assertion_result::AssertionResult,
9};
10
11pub fn be_greater_than<R>(expected: R) -> impl Fn(&R) -> AssertionResult
12where
13 R: Debug + PartialOrd,
14{
15 move |received| {
16 if expected < *received {
17 Ok(())
18 } else {
19 let expected = format!("{:?}", expected).green().bold();
20 let received = format!("{:?}", received).red().bold();
21 Err(AssertionError {
22 message: vec![format!(
23 "Expected {} to be greater than {}",
24 received, expected
25 )],
26 })
27 }
28 }
29}
30
31pub fn be_greater_or_equal_to<R>(expected: R) -> impl Fn(&R) -> AssertionResult
32where
33 R: Debug + PartialOrd,
34{
35 move |received| {
36 if expected <= *received {
37 Ok(())
38 } else {
39 let expected = format!("{:?}", expected).green().bold();
40 let received = format!("{:?}", received).red().bold();
41 Err(AssertionError {
42 message: vec![format!(
43 "Expected {} to be greater or equal to {}",
44 received, expected
45 )],
46 })
47 }
48 }
49}
50
51pub fn be_less_than<R>(expected: R) -> impl Fn(&R) -> AssertionResult
52where
53 R: Debug + PartialOrd,
54{
55 move |received| {
56 if expected > *received {
57 Ok(())
58 } else {
59 let expected = format!("{:?}", expected).green().bold();
60 let received = format!("{:?}", received).red().bold();
61 Err(AssertionError {
62 message: vec![format!(
63 "Expected {} to be less than {}",
64 received, expected
65 )],
66 })
67 }
68 }
69}
70
71pub fn be_less_or_equal_to<R>(expected: R) -> impl Fn(&R) -> AssertionResult
72where
73 R: Debug + PartialOrd,
74{
75 move |received| {
76 if expected >= *received {
77 Ok(())
78 } else {
79 let expected = format!("{:?}", expected).green().bold();
80 let received = format!("{:?}", received).red().bold();
81 Err(AssertionError {
82 message: vec![format!(
83 "Expected {} to be less or equal to {}",
84 received, expected
85 )],
86 })
87 }
88 }
89}
90
91pub fn be_between<R>(lower: R, upper: R) -> impl Fn(&R) -> AssertionResult
92where
93 R: Debug + PartialOrd,
94{
95 move |received| {
96 if lower <= *received && *received <= upper {
97 Ok(())
98 } else {
99 let lower = format!("{:?}", lower).green().bold();
100 let upper = format!("{:?}", upper).green().bold();
101 let received = format!("{:?}", received).red().bold();
102 Err(AssertionError {
103 message: vec![format!(
104 "Expected {} to be between {} and {}",
105 received, lower, upper
106 )],
107 })
108 }
109 }
110}
111
112pub fn be_close_to<R>(expected: R, delta: R) -> impl Fn(&R) -> AssertionResult
113where
114 R: Debug + PartialOrd + Sub<Output = R> + Add<Output = R> + Clone,
115{
116 move |received| {
117 if expected.clone() - delta.clone() <= *received
118 && *received <= expected.clone() + delta.clone()
119 {
120 Ok(())
121 } else {
122 let expected = format!("{:?}", expected).green().bold();
123 let delta = format!("{:?}", delta).green().bold();
124 let received = format!("{:?}", received).red().bold();
125 Err(AssertionError {
126 message: vec![format!(
127 "Expected {} to be close to {} with a delta of {}",
128 received, expected, delta
129 )],
130 })
131 }
132 }
133}
134
135#[cfg(test)]
136mod tests {
137 use colored::control::set_override;
138
139 use crate::expected_err::expected_err;
140
141 use super::*;
142
143 #[test]
144 fn be_greater_than_ok() {
145 assert_eq!(be_greater_than(1)(&2), Ok(()));
146 }
147
148 #[test]
149 fn be_greater_than_err() {
150 set_override(false);
151 assert_eq!(
152 be_greater_than(2)(&1),
153 expected_err(vec!["Expected 1 to be greater than 2"])
154 );
155 }
156
157 #[test]
158 fn be_greater_or_equal_to_ok() {
159 assert_eq!(be_greater_or_equal_to(1)(&1), Ok(()));
160 }
161
162 #[test]
163 fn be_greater_or_equal_to_err() {
164 set_override(false);
165 assert_eq!(
166 be_greater_or_equal_to(2)(&1),
167 expected_err(vec!["Expected 1 to be greater or equal to 2"])
168 );
169 }
170
171 #[test]
172 fn be_less_than_ok() {
173 assert_eq!(be_less_than(2)(&1), Ok(()));
174 }
175
176 #[test]
177 fn be_less_than_err() {
178 set_override(false);
179 assert_eq!(
180 be_less_than(1)(&2),
181 expected_err(vec!["Expected 2 to be less than 1"])
182 );
183 }
184
185 #[test]
186 fn be_less_or_equal_to_ok() {
187 assert_eq!(be_less_or_equal_to(2)(&2), Ok(()));
188 }
189
190 #[test]
191 fn be_less_or_equal_to_err() {
192 set_override(false);
193 assert_eq!(
194 be_less_or_equal_to(1)(&2),
195 expected_err(vec!["Expected 2 to be less or equal to 1"])
196 );
197 }
198
199 #[test]
200 fn be_between_ok() {
201 assert_eq!(be_between(1, 3)(&2), Ok(()));
202 }
203
204 #[test]
205 fn be_between_err() {
206 set_override(false);
207 assert_eq!(
208 be_between(1, 3)(&4),
209 expected_err(vec!["Expected 4 to be between 1 and 3"])
210 );
211 }
212
213 #[test]
214 fn be_close_to_ok() {
215 assert_eq!(be_close_to(1f32, 0.5)(&1.5), Ok(()));
216 }
217
218 #[test]
219 fn be_close_to_err() {
220 set_override(false);
221 assert_eq!(
222 be_close_to(1f64, 0.5)(&2.5),
223 expected_err(vec!["Expected 2.5 to be close to 1.0 with a delta of 0.5"])
224 );
225 }
226}