///|
test "900 deterministic Range parse serialize resolve and coalesce cases" {
let mut state = 0x2468ACE
for case = 0; case < 900; case = case + 1 {
state = state * 1_103_515_245 + 12_345
let length = 1L + ((state >> 8) & 4095).to_int64()
let first = ((state >> 3) & 2047).to_int64() % length
let span = 1L + ((state >> 13) & 255).to_int64()
let requested_last = first + span
let text = if case % 3 == 0 {
"bytes=\{first}-\{requested_last},-\{1L + first % 17L}"
} else if case % 3 == 1 {
"BYTES=\{first}-"
} else {
"bytes=\{first}-\{requested_last}"
}
let request = unwrap_request(text)
let canonical = serialize_range(request)
assert_str_eq(serialize_range(unwrap_request(canonical)), canonical)
let resolved = resolve_byte_ranges(request, length).unwrap()
for range in resolved.ranges() {
assert_true(range.first() >= 0L)
assert_true(range.last() >= range.first())
assert_true(range.last() < length)
}
let merged = coalesce_ranges(resolved.ranges())
for i = 1; i < merged.length(); i = i + 1 {
assert_true(merged[i - 1].last() < merged[i].first())
}
}
}