///|
test "Accept-Ranges parses bytes" {
  assert_true(parse_accept_ranges("bytes").unwrap().supports_bytes())
}

///|
test "Accept-Ranges byte comparison is case insensitive" {
  assert_true(parse_accept_ranges("BYTES").unwrap().supports("Bytes"))
}

///|
test "Accept-Ranges parses none" {
  assert_false(parse_accept_ranges("none").unwrap().supports_bytes())
}

///|
test "Accept-Ranges parses multiple units" {
  let a = parse_accept_ranges("bytes, exampleunit").unwrap()
  assert_true(a.supports_bytes())
  assert_true(a.supports("EXAMPLEUNIT"))
}

///|
test "Accept-Ranges serializes canonical units" {
  assert_str_eq(
    serialize_accept_ranges(parse_accept_ranges("BYTES, ExampleUnit").unwrap()),
    "bytes, exampleunit",
  )
}

///|
test "Accept-Ranges rejects none mixed with units" {
  assert_true(parse_accept_ranges("none, bytes") is Err(_))
}

///|
test "Accept-Ranges rejects empty member" {
  assert_true(parse_accept_ranges("bytes,,items") is Err(_))
}

///|
test "Accept-Ranges rejects invalid token" {
  assert_true(parse_accept_ranges("bad unit") is Err(_))
}

///|
test "Accept-Ranges rejects empty input" {
  assert_true(parse_accept_ranges("") is Err(RangeError(_, EmptyInput, _, _)))
}