///|
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)
}
}