|
1 | 1 | use core::cell::Cell;
|
| 2 | +use core::convert::TryFrom; |
2 | 3 | use core::iter::*;
|
3 | 4 | use core::{i8, i16, isize};
|
4 | 5 | use core::usize;
|
@@ -1800,6 +1801,66 @@ fn test_range_inclusive_folds() {
|
1800 | 1801 | assert!(it.is_empty());
|
1801 | 1802 | }
|
1802 | 1803 |
|
| 1804 | +#[test] |
| 1805 | +fn test_range_size_hint() { |
| 1806 | + use core::usize::MAX as UMAX; |
| 1807 | + assert_eq!((0..0usize).size_hint(), (0, Some(0))); |
| 1808 | + assert_eq!((0..100usize).size_hint(), (100, Some(100))); |
| 1809 | + assert_eq!((0..UMAX).size_hint(), (UMAX, Some(UMAX))); |
| 1810 | + |
| 1811 | + let umax = u128::try_from(UMAX).unwrap(); |
| 1812 | + assert_eq!((0..0u128).size_hint(), (0, Some(0))); |
| 1813 | + assert_eq!((0..100u128).size_hint(), (100, Some(100))); |
| 1814 | + assert_eq!((0..umax).size_hint(), (UMAX, Some(UMAX))); |
| 1815 | + assert_eq!((0..umax + 1).size_hint(), (UMAX, None)); |
| 1816 | + |
| 1817 | + use core::isize::{MAX as IMAX, MIN as IMIN}; |
| 1818 | + assert_eq!((0..0isize).size_hint(), (0, Some(0))); |
| 1819 | + assert_eq!((-100..100isize).size_hint(), (200, Some(200))); |
| 1820 | + assert_eq!((IMIN..IMAX).size_hint(), (UMAX, Some(UMAX))); |
| 1821 | + |
| 1822 | + let imin = i128::try_from(IMIN).unwrap(); |
| 1823 | + let imax = i128::try_from(IMAX).unwrap(); |
| 1824 | + assert_eq!((0..0i128).size_hint(), (0, Some(0))); |
| 1825 | + assert_eq!((-100..100i128).size_hint(), (200, Some(200))); |
| 1826 | + assert_eq!((imin..imax).size_hint(), (UMAX, Some(UMAX))); |
| 1827 | + assert_eq!((imin..imax + 1).size_hint(), (UMAX, None)); |
| 1828 | +} |
| 1829 | + |
| 1830 | +#[test] |
| 1831 | +fn test_range_inclusive_size_hint() { |
| 1832 | + use core::usize::MAX as UMAX; |
| 1833 | + assert_eq!((1..=0usize).size_hint(), (0, Some(0))); |
| 1834 | + assert_eq!((0..=0usize).size_hint(), (1, Some(1))); |
| 1835 | + assert_eq!((0..=100usize).size_hint(), (101, Some(101))); |
| 1836 | + assert_eq!((0..=UMAX - 1).size_hint(), (UMAX, Some(UMAX))); |
| 1837 | + assert_eq!((0..=UMAX).size_hint(), (UMAX, None)); |
| 1838 | + |
| 1839 | + let umax = u128::try_from(UMAX).unwrap(); |
| 1840 | + assert_eq!((1..=0u128).size_hint(), (0, Some(0))); |
| 1841 | + assert_eq!((0..=0u128).size_hint(), (1, Some(1))); |
| 1842 | + assert_eq!((0..=100u128).size_hint(), (101, Some(101))); |
| 1843 | + assert_eq!((0..=umax - 1).size_hint(), (UMAX, Some(UMAX))); |
| 1844 | + assert_eq!((0..=umax).size_hint(), (UMAX, None)); |
| 1845 | + assert_eq!((0..=umax + 1).size_hint(), (UMAX, None)); |
| 1846 | + |
| 1847 | + use core::isize::{MAX as IMAX, MIN as IMIN}; |
| 1848 | + assert_eq!((0..=-1isize).size_hint(), (0, Some(0))); |
| 1849 | + assert_eq!((0..=0isize).size_hint(), (1, Some(1))); |
| 1850 | + assert_eq!((-100..=100isize).size_hint(), (201, Some(201))); |
| 1851 | + assert_eq!((IMIN..=IMAX - 1).size_hint(), (UMAX, Some(UMAX))); |
| 1852 | + assert_eq!((IMIN..=IMAX).size_hint(), (UMAX, None)); |
| 1853 | + |
| 1854 | + let imin = i128::try_from(IMIN).unwrap(); |
| 1855 | + let imax = i128::try_from(IMAX).unwrap(); |
| 1856 | + assert_eq!((0..=-1i128).size_hint(), (0, Some(0))); |
| 1857 | + assert_eq!((0..=0i128).size_hint(), (1, Some(1))); |
| 1858 | + assert_eq!((-100..=100i128).size_hint(), (201, Some(201))); |
| 1859 | + assert_eq!((imin..=imax - 1).size_hint(), (UMAX, Some(UMAX))); |
| 1860 | + assert_eq!((imin..=imax).size_hint(), (UMAX, None)); |
| 1861 | + assert_eq!((imin..=imax + 1).size_hint(), (UMAX, None)); |
| 1862 | +} |
| 1863 | + |
1803 | 1864 | #[test]
|
1804 | 1865 | fn test_repeat() {
|
1805 | 1866 | let mut it = repeat(42);
|
|
0 commit comments