///|
test "parse known Content-Range" {
  assert_str_eq(
    serialize_content_range(parse_content_range("bytes 0-499/1234").unwrap()),
    "bytes 0-499/1234",
  )
}

///|
test "parse second Content-Range example" {
  assert_str_eq(
    serialize_content_range(parse_content_range("bytes 500-999/1234").unwrap()),
    "bytes 500-999/1234",
  )
}

///|
test "parse unknown complete length" {
  assert_str_eq(
    serialize_content_range(parse_content_range("bytes 42-1233/*").unwrap()),
    "bytes 42-1233/*",
  )
}

///|
test "parse unsatisfied Content-Range" {
  assert_str_eq(
    serialize_content_range(parse_content_range("bytes */1234").unwrap()),
    "bytes */1234",
  )
}

///|
test "Content-Range unit is case insensitive" {
  assert_str_eq(
    serialize_content_range(parse_content_range("BYTES 0-0/1").unwrap()),
    "bytes 0-0/1",
  )
}

///|
test "Content-Range rejects last before first" {
  assert_true(
    parse_content_range("bytes 10-9/20")
    is Err(RangeError(_, LastBeforeFirst, _, _)),
  )
}

///|
test "Content-Range rejects too small complete length" {
  assert_true(
    parse_content_range("bytes 0-499/499")
    is Err(RangeError(_, InvalidCompleteLength, _, _)),
  )
}

///|
test "Content-Range allows exact containing length" {
  assert_true(parse_content_range("bytes 0-499/500") is Ok(_))
}

///|
test "unsatisfied Content-Range requires known length" {
  assert_true(parse_content_range("bytes */*") is Err(_))
}

///|
test "unknown Content-Range unit preserves response" {
  assert_str_eq(
    serialize_content_range(parse_content_range("items 1-2/10").unwrap()),
    "items 1-2/10",
  )
}

///|
test "416 helper creates bytes unsatisfied value" {
  assert_str_eq(
    serialize_content_range(unsatisfied_content_range(1234L).unwrap()),
    "bytes */1234",
  )
}

///|
test "416 helper rejects negative length" {
  assert_true(unsatisfied_content_range(-1L) is Err(_))
}

///|
test "Content-Range rejects missing slash" {
  assert_true(parse_content_range("bytes 0-1") is Err(_))
}

///|
test "Content-Range rejects overflow" {
  assert_true(
    parse_content_range("bytes 0-9223372036854775808/*")
    is Err(RangeError(_, IntegerOverflow, _, _)),
  )
}