///|
test "serialize all byte spec forms" {
  assert_str_eq(
    serialize_range(unwrap_request("bytes=0-499,500-,-100")),
    "bytes=0-499,500-,-100",
  )
}

///|
test "canonicalize lowercases bytes unit" {
  assert_str_eq(canonicalize_range("BYTES=0-9").unwrap(), "bytes=0-9")
}

///|
test "canonicalize removes OWS" {
  assert_str_eq(
    canonicalize_range(" bytes = 0-9 , 10- ").unwrap(),
    "bytes=0-9,10-",
  )
}

///|
test "canonicalize removes leading zeroes" {
  assert_str_eq(
    canonicalize_range("bytes=000-009,-001").unwrap(),
    "bytes=0-9,-1",
  )
}

///|
test "canonicalization does not merge adjacent ranges" {
  assert_str_eq(canonicalize_range("bytes=0-4,5-9").unwrap(), "bytes=0-4,5-9")
}

///|
test "unknown unit roundtrips raw set" {
  assert_str_eq(
    serialize_range(unwrap_request("widgets=alpha beta")),
    "widgets=alpha beta",
  )
}

///|
test "canonicalize is idempotent" {
  let x = canonicalize_range(" BYTES = 000-009 , -01 ").unwrap()
  assert_str_eq(canonicalize_range(x).unwrap(), x)
}

///|
test "canonicalize preserves request order" {
  assert_str_eq(
    canonicalize_range("bytes=10-19,0-9").unwrap(),
    "bytes=10-19,0-9",
  )
}