Skip to content

Commit fb95c7a

Browse files
committed
Add tests for AssetCapacity comparisons
1 parent f60f62a commit fb95c7a

1 file changed

Lines changed: 107 additions & 0 deletions

File tree

src/asset/capacity.rs

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,111 @@ mod tests {
222222
let got = orig.apply_limit_factor(factor);
223223
assert_eq!(got, AssetCapacity::Discrete(expected_units, unit_size));
224224
}
225+
226+
#[rstest]
227+
#[case::less(
228+
AssetCapacity::Continuous(Capacity(4.0)),
229+
AssetCapacity::Continuous(Capacity(6.0)),
230+
Some(Ordering::Less)
231+
)]
232+
#[case::equal(
233+
AssetCapacity::Continuous(Capacity(4.0)),
234+
AssetCapacity::Continuous(Capacity(4.0)),
235+
Some(Ordering::Equal)
236+
)]
237+
#[case::greater(
238+
AssetCapacity::Continuous(Capacity(6.0)),
239+
AssetCapacity::Continuous(Capacity(4.0)),
240+
Some(Ordering::Greater)
241+
)]
242+
fn partial_cmp_continuous(
243+
#[case] left: AssetCapacity,
244+
#[case] right: AssetCapacity,
245+
#[case] expected: Option<Ordering>,
246+
) {
247+
assert_eq!(left.partial_cmp(&right), expected);
248+
assert_eq!(left == right, expected == Some(Ordering::Equal));
249+
}
250+
251+
#[rstest]
252+
#[case::less(
253+
AssetCapacity::Discrete(2, Capacity(3.0)),
254+
AssetCapacity::Discrete(4, Capacity(3.0)),
255+
Some(Ordering::Less)
256+
)]
257+
#[case::equal(
258+
AssetCapacity::Discrete(4, Capacity(3.0)),
259+
AssetCapacity::Discrete(4, Capacity(3.0)),
260+
Some(Ordering::Equal)
261+
)]
262+
#[case::greater(
263+
AssetCapacity::Discrete(5, Capacity(3.0)),
264+
AssetCapacity::Discrete(4, Capacity(3.0)),
265+
Some(Ordering::Greater)
266+
)]
267+
fn partial_cmp_discrete_with_matching_unit_size(
268+
#[case] left: AssetCapacity,
269+
#[case] right: AssetCapacity,
270+
#[case] expected: Option<Ordering>,
271+
) {
272+
assert_eq!(left.partial_cmp(&right), expected);
273+
assert_eq!(left == right, expected == Some(Ordering::Equal));
274+
}
275+
276+
#[rstest]
277+
#[case::mixed_types(
278+
AssetCapacity::Continuous(Capacity(4.0)),
279+
AssetCapacity::Discrete(4, Capacity(1.0))
280+
)]
281+
#[case::different_unit_sizes(
282+
AssetCapacity::Discrete(4, Capacity(1.0)),
283+
AssetCapacity::Discrete(4, Capacity(2.0))
284+
)]
285+
#[case::nan_continuous(
286+
AssetCapacity::Continuous(Capacity(f64::NAN)),
287+
AssetCapacity::Continuous(Capacity(4.0))
288+
)]
289+
fn partial_cmp_returns_none_for_invalid_comparisons(
290+
#[case] left: AssetCapacity,
291+
#[case] right: AssetCapacity,
292+
) {
293+
assert_eq!(left.partial_cmp(&right), None);
294+
assert!(left != right);
295+
}
296+
297+
#[rstest]
298+
#[case::continuous(
299+
AssetCapacity::Continuous(Capacity(4.0)),
300+
AssetCapacity::Continuous(Capacity(6.0)),
301+
AssetCapacity::Continuous(Capacity(4.0))
302+
)]
303+
#[case::discrete(
304+
AssetCapacity::Discrete(2, Capacity(3.0)),
305+
AssetCapacity::Discrete(4, Capacity(3.0)),
306+
AssetCapacity::Discrete(2, Capacity(3.0))
307+
)]
308+
fn min_returns_smaller_capacity(
309+
#[case] left: AssetCapacity,
310+
#[case] right: AssetCapacity,
311+
#[case] expected: AssetCapacity,
312+
) {
313+
assert_eq!(left.min(right), expected);
314+
}
315+
316+
#[rstest]
317+
#[case::mixed_types(
318+
AssetCapacity::Continuous(Capacity(4.0)),
319+
AssetCapacity::Discrete(4, Capacity(1.0))
320+
)]
321+
#[case::different_unit_sizes(
322+
AssetCapacity::Discrete(4, Capacity(1.0)),
323+
AssetCapacity::Discrete(4, Capacity(2.0))
324+
)]
325+
#[should_panic(expected = "Comparing invalid AssetCapacity values")]
326+
fn min_panics_for_invalid_comparisons(
327+
#[case] left: AssetCapacity,
328+
#[case] right: AssetCapacity,
329+
) {
330+
let _ = left.min(right);
331+
}
225332
}

0 commit comments

Comments
 (0)