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
|
#![cfg(feature = "parse")]
use lexical_util::iterator::{AsBytes, Bytes, BytesIter};
#[test]
#[cfg(not(feature = "format"))]
fn digits_iterator_test() {
use lexical_util::format::STANDARD;
type Digits<'a> = Bytes<'a, { STANDARD }>;
assert!(Digits::IS_CONTIGUOUS);
let digits = b"12345";
let mut byte1 = Digits::new(digits);
let mut byte2 = Digits::new(digits);
assert!(byte1.integer_iter().eq(byte2.integer_iter()));
let mut byte = digits.bytes::<{ STANDARD }>();
let mut iter = byte.integer_iter();
assert_eq!(iter.as_slice(), &digits[..]);
assert_eq!(iter.as_ptr(), digits.as_ptr());
assert_eq!(iter.is_consumed(), false);
assert_eq!(iter.is_done(), false);
assert_eq!(u32::from_le(iter.read::<u32>().unwrap()), 0x34333231);
assert_eq!(iter.length(), 5);
assert_eq!(iter.cursor(), 0);
assert_eq!(iter.current_count(), 0);
unsafe {
iter.step_by_unchecked(4);
}
assert_eq!(iter.length(), 5);
assert_eq!(iter.cursor(), 4);
assert_eq!(iter.current_count(), 4);
assert_eq!(unsafe { iter.peek_unchecked() }, &b'5');
assert_eq!(iter.peek(), Some(&b'5'));
assert_eq!(iter.next(), Some(&b'5'));
assert_eq!(iter.peek(), None);
assert_eq!(iter.next(), None);
let mut byte = digits.bytes::<{ STANDARD }>();
let mut iter = byte.integer_iter();
assert_eq!(iter.read::<u64>(), None);
assert_eq!(iter.nth(4).unwrap(), &b'5');
assert_eq!(iter.as_slice(), &digits[digits.len()..]);
assert_eq!(iter.as_ptr(), digits[digits.len()..].as_ptr());
let mut byte = digits.bytes::<{ STANDARD }>();
let mut iter = byte.integer_iter();
assert_eq!(iter.peek(), Some(&b'1'));
unsafe {
iter.step_unchecked();
}
assert_eq!(iter.peek(), Some(&b'2'));
unsafe {
iter.step_unchecked();
}
}
#[test]
#[cfg(feature = "format")]
fn skip_iterator_test() {
use core::num;
use lexical_util::format::{NumberFormat, NumberFormatBuilder};
use static_assertions::const_assert;
pub const FORMAT: u128 = NumberFormatBuilder::new()
.digit_separator(num::NonZeroU8::new(b'_'))
.digit_separator_flags(true)
.build();
const_assert!(NumberFormat::<{ FORMAT }> {}.is_valid());
type Digits<'a> = Bytes<'a, { FORMAT }>;
assert!(!Digits::IS_CONTIGUOUS);
let digits = b"123_45";
let mut byte1 = Digits::new(digits);
let mut byte2 = Digits::new(digits);
assert!(byte1.integer_iter().eq(byte2.integer_iter()));
let mut byte = digits.bytes::<{ FORMAT }>();
let mut iter = byte.integer_iter();
assert_eq!(iter.as_slice(), &digits[..]);
assert_eq!(iter.as_ptr(), digits.as_ptr());
assert_eq!(iter.is_consumed(), false);
assert_eq!(iter.is_done(), false);
assert_eq!(iter.length(), 6);
assert_eq!(iter.cursor(), 0);
assert_eq!(iter.current_count(), 0);
unsafe { iter.step_unchecked() };
assert_eq!(iter.cursor(), 1);
assert_eq!(iter.current_count(), 1);
iter.next();
assert_eq!(iter.cursor(), 2);
assert_eq!(iter.current_count(), 2);
let mut byte = digits.bytes::<{ FORMAT }>();
let mut iter = byte.integer_iter();
assert_eq!(unsafe { iter.peek_unchecked() }, &b'1');
assert_eq!(iter.peek(), Some(&b'1'));
assert_eq!(iter.next(), Some(&b'1'));
assert_eq!(iter.next(), Some(&b'2'));
assert_eq!(iter.next(), Some(&b'3'));
assert_eq!(iter.cursor(), 3);
assert_eq!(iter.current_count(), 3);
assert_eq!(iter.next(), Some(&b'4'));
assert_eq!(iter.cursor(), 5);
assert_eq!(iter.current_count(), 4);
assert_eq!(iter.next(), Some(&b'5'));
assert_eq!(iter.next(), None);
let mut byte = digits.bytes::<{ FORMAT }>();
let mut iter = byte.integer_iter();
assert_eq!(iter.nth(4).unwrap(), &b'5');
assert_eq!(iter.as_slice(), &digits[digits.len()..]);
assert_eq!(iter.as_ptr(), digits[digits.len()..].as_ptr());
}
|