Test structural matching for all range types

Adds structural match tests for all range types.

Note: also adds the otherwise unrelated test `test_range_to_inclusive` for completeness
This commit is contained in:
Christiaan Dirkx 2020-11-07 01:02:15 +01:00
parent a601302ff0
commit 6728240f36

View file

@ -1,4 +1,4 @@
use core::ops::{Bound, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo};
use core::ops::{Bound, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};
// Test the Range structs and syntax.
@ -59,6 +59,12 @@ fn test_range_inclusive() {
assert_eq!(r.next(), None);
}
#[test]
fn test_range_to_inclusive() {
// Not much to test.
let _ = RangeToInclusive { end: 42 };
}
#[test]
fn test_range_is_empty() {
assert!(!(0.0..10.0).is_empty());
@ -151,3 +157,43 @@ fn test_range_syntax_in_return_statement() {
}
// Not much to test.
}
#[test]
fn range_structural_match() {
// test that all range types can be structurally matched upon
const RANGE: Range<usize> = 0..1000;
match RANGE {
RANGE => {}
_ => unreachable!(),
}
const RANGE_FROM: RangeFrom<usize> = 0..;
match RANGE_FROM {
RANGE_FROM => {}
_ => unreachable!(),
}
const RANGE_FULL: RangeFull = ..;
match RANGE_FULL {
RANGE_FULL => {}
}
const RANGE_INCLUSIVE: RangeInclusive<usize> = 0..=999;
match RANGE_INCLUSIVE {
RANGE_INCLUSIVE => {}
_ => unreachable!(),
}
const RANGE_TO: RangeTo<usize> = ..1000;
match RANGE_TO {
RANGE_TO => {}
_ => unreachable!(),
}
const RANGE_TO_INCLUSIVE: RangeToInclusive<usize> = ..=999;
match RANGE_TO_INCLUSIVE {
RANGE_TO_INCLUSIVE => {}
_ => unreachable!(),
}
}