///|
test "800 deterministic semantic roundtrip and canonical fixed point cases" {
  let mut state = 0x13579BDF
  for case = 0; case < 800; case = case + 1 {
    state = state * 1_103_515_245 + 12_345
    let code = 400 + ((state >> 8) & 127)
    let title = "case-\{case}-\{state & 65535}"
    let builder = ProblemBuilder::new()
      .status(code)
      .title(title)
      .type_uri(
        if case % 2 == 0 {
          "urn:test:\{case}"
        } else {
          "/types/\{case}"
        },
      )
      .extension("case_id", Json::number(case.to_double()))
      .extension(
        "flags",
        Json::array([Json::boolean(case % 2 == 0), Json::null()]),
      )
    let original = unwrap_build(builder.build())
    let canonical = serialize_problem(original)
    let reparsed = unwrap_problem(canonical)
    assert_str_eq(reparsed.effective_type(), original.effective_type())
    assert_true(reparsed.title() == original.title())
    assert_true(reparsed.status() == original.status())
    assert_int_eq(
      reparsed.extensions().length(),
      original.extensions().length(),
    )
    assert_str_eq(serialize_problem(reparsed), canonical)
  }
}