///|
test "uri validator accepts https absolute uri" {
  assert_true(
    validate_uri_reference("https://example.com/problems/x")
    .unwrap()
    .is_absolute(),
  )
}

///|
test "uri validator accepts urn" {
  assert_true(
    validate_uri_reference("urn:example:problem").unwrap().is_absolute(),
  )
}

///|
test "uri validator accepts tag uri" {
  assert_true(
    validate_uri_reference("tag:example.com,2026:error").unwrap().is_absolute(),
  )
}

///|
test "uri validator accepts about blank" {
  assert_true(validate_uri_reference("about:blank").unwrap().is_absolute())
}

///|
test "uri validator accepts absolute path reference" {
  assert_true(
    validate_uri_reference("/about/problem/123").unwrap().is_relative(),
  )
}

///|
test "uri validator accepts empty reference" {
  assert_true(validate_uri_reference("").unwrap().is_relative())
}

///|
test "uri validator rejects spaces" {
  assert_true(
    validate_uri_reference("bad uri")
    is Err(ProblemError(_, InvalidUriReference, _, _)),
  )
}

///|
test "uri validator rejects controls" {
  assert_true(validate_uri_reference("x\n") is Err(_))
}

///|
test "uri validator rejects short percent encoding" {
  assert_true(
    validate_uri_reference("/x%2")
    is Err(ProblemError(_, InvalidPercentEncoding, _, _)),
  )
}

///|
test "uri validator rejects nonhex percent encoding" {
  assert_true(validate_uri_reference("/x%zz") is Err(_))
}

///|
test "uri validator rejects a digit-starting scheme" {
  assert_true(validate_uri_reference("1http:x") is Err(_))
}

///|
test "uri validator accepts scheme punctuation" {
  assert_true(is_absolute_uri_reference("web+demo.test:x"))
}