///|
test "audit flags unknown unit" {
  assert_true(
    has_finding(
      audit_range_request(unwrap_request("items=1-2")),
      UnknownRangeUnit,
    ),
  )
}

///|
test "audit flags zero suffix" {
  assert_true(
    has_finding(
      audit_range_request(unwrap_request("bytes=-0")),
      ZeroLengthSuffix,
    ),
  )
}

///|
test "audit flags large numeric value" {
  assert_true(
    has_finding(
      audit_range_request(unwrap_request("bytes=1000000000001-")),
      LargeNumericValue,
    ),
  )
}

///|
test "audit flags many small ranges" {
  assert_true(
    has_finding(
      audit_range_request(
        unwrap_request("bytes=0-0,2-2,4-4,6-6"),
        representation_length=10L,
      ),
      ManySmallRanges,
    ),
  )
}

///|
test "audit flags descending ranges" {
  assert_true(
    has_finding(
      audit_range_request(
        unwrap_request("bytes=50-59,0-9"),
        representation_length=100L,
      ),
      DescendingOrder,
    ),
  )
}

///|
test "audit flags duplicate ranges" {
  assert_true(
    has_finding(
      audit_range_request(
        unwrap_request("bytes=0-9,0-9"),
        representation_length=100L,
      ),
      DuplicateRanges,
    ),
  )
}

///|
test "audit flags overlapping ranges" {
  assert_true(
    has_finding(
      audit_range_request(
        unwrap_request("bytes=0-9,5-15"),
        representation_length=100L,
      ),
      OverlappingRanges,
    ),
  )
}

///|
test "audit flags adjacent ranges" {
  assert_true(
    has_finding(
      audit_range_request(
        unwrap_request("bytes=0-9,10-19"),
        representation_length=100L,
      ),
      AdjacentRanges,
    ),
  )
}

///|
test "audit reports large header" {
  let raw = "bytes=" + "0-0,".repeat(300) + "1-1"
  let request = unwrap_request("bytes=0-0")
  assert_true(
    has_finding(audit_range_request(request, raw_input=raw), LargeHeader),
  )
}

///|
test "ordinary range audit is clean" {
  assert_true(
    audit_range_request(
      unwrap_request("bytes=0-499"),
      representation_length=1_000L,
    ).is_clean(),
  )
}