#[cfg(test)]
mod tests {
use std::io::Cursor;
use ez_input::{inputln, Scanner, ScannerExt, ReadNext};
#[test]
fn test_scanner_basic() {
let data = "42 3.14 hello";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
let i: i32 = sc.next();
let f: f64 = sc.next();
let s: String = sc.next();
assert_eq!(i, 42);
assert_eq!(f, 3.14);
assert_eq!(s, "hello");
}
#[test]
fn test_scanner_multiline() {
let data = "3 5\n1 2 3 4 5\n6 7 8 9 10\n11 12 13 14 15\n";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
let rows: i32 = sc.next();
let cols: i32 = sc.next();
assert_eq!(rows, 3);
assert_eq!(cols, 5);
let matrix: Vec<Vec<i32>> = (0..rows)
.map(|_| (0..cols).map(|_| sc.next()).collect())
.collect();
assert_eq!(matrix[0][0], 1);
assert_eq!(matrix[0][4], 5);
assert_eq!(matrix[2][4], 15);
}
#[test]
fn test_scanner_ext() {
let data = "1 2 3 4 5";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
let vec: Vec<i32> = sc.next_vec(5);
assert_eq!(vec, vec![1, 2, 3, 4, 5]);
}
#[test]
fn test_read_next() {
let data = "42 100 3.14";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
assert_eq!(sc.next_i32(), 42);
assert_eq!(sc.next_usize(), 100);
assert_eq!(sc.next_f64(), 3.14);
}
#[test]
fn test_has_next() {
let data = "1 2";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
assert!(sc.has_next());
let _: i32 = sc.next();
assert!(sc.has_next());
let _: i32 = sc.next();
assert!(!sc.has_next());
}
#[test]
fn test_iterator() {
let data = "1 2 3 4 5";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
let sum: i32 = sc.iter::<i32>().sum();
assert_eq!(sum, 15);
}
#[test]
fn test_next_line() {
let data = "hello\nworld\n";
let cursor = Cursor::new(data);
let mut sc = Scanner::new(cursor);
assert_eq!(sc.next_line(), "hello");
assert_eq!(sc.next_line(), "world");
}
}