mod common;
use std::io;
use common::{collect_single, collect_single_from, golden_digits, one_million_path, TempYcd};
use ycd_reader::YcdSeqBlockStream;
#[test]
fn seq_new_from_position_1_matches_new() {
let path = one_million_path(0);
let from_new = collect_single(&path, 1000).unwrap();
let from_new_from = collect_single_from(&path, 1000, 1).unwrap();
assert_eq!(from_new, from_new_from);
}
#[test]
fn seq_new_from_mid_file_matches_golden_suffix() {
let golden = golden_digits();
let start: i64 = 500_000;
let path = one_million_path(0);
let result = collect_single_from(&path, 1000, start).unwrap();
let expected = &golden[(start as usize - 1)..1_000_000];
assert_eq!(
result, expected,
"digits from position {start} should match golden"
);
}
#[test]
fn seq_new_from_block_boundary_position() {
let golden = golden_digits();
let start: i64 = 191;
let path = one_million_path(0);
let result = collect_single_from(&path, 19, start).unwrap();
let expected = &golden[(start as usize - 1)..1_000_000];
assert_eq!(result, expected);
}
#[test]
fn seq_new_from_mid_block_position() {
let golden = golden_digits();
let start: i64 = 100; let path = one_million_path(0);
let result = collect_single_from(&path, 100, start).unwrap();
let expected = &golden[(start as usize - 1)..1_000_000];
assert_eq!(result, expected);
}
#[test]
fn seq_new_from_last_digit() {
let golden = golden_digits();
let start: i64 = 1_000_000;
let path = one_million_path(0);
let result = collect_single_from(&path, 19, start).unwrap();
assert_eq!(result.len(), 1);
assert_eq!(result, &golden[999_999..1_000_000]);
}
#[test]
fn seq_new_from_non_zero_blockid_file() {
let golden = golden_digits();
let path = one_million_path(1);
let start: i64 = 1_500_000;
let result = collect_single_from(&path, 1000, start).unwrap();
let expected = &golden[(start as usize - 1)..2_000_000];
assert_eq!(result, expected);
}
#[test]
fn seq_new_from_generated_file_mid_block() {
let digits = "12345678901234567890123456789012345678"; let f = TempYcd::valid(digits, 38, 0, "\n", "").unwrap();
let result = collect_single_from(&f.path, 19, 5).unwrap();
assert_eq!(result, &digits[4..]);
let result = collect_single_from(&f.path, 19, 20).unwrap();
assert_eq!(result, &digits[19..]);
let result = collect_single_from(&f.path, 19, 25).unwrap();
assert_eq!(result, &digits[24..]);
}
#[test]
fn seq_new_from_errors() {
let path = one_million_path(0);
assert_eq!(
YcdSeqBlockStream::new_from(&path, 19, 0)
.unwrap_err()
.kind(),
io::ErrorKind::InvalidInput
);
assert_eq!(
YcdSeqBlockStream::new_from(&path, 19, 1_000_001)
.unwrap_err()
.kind(),
io::ErrorKind::InvalidInput
);
assert_eq!(
YcdSeqBlockStream::new_from(&path, 1, 1).unwrap_err().kind(),
io::ErrorKind::InvalidInput
);
let path2 = one_million_path(1); assert_eq!(
YcdSeqBlockStream::new_from(&path2, 19, 1)
.unwrap_err()
.kind(),
io::ErrorKind::InvalidInput
);
}