{"record":{"id":"d3c7d7a106caf4eb","repo":"a-b-street/abstreet","slug":"traversable","errorCode":null,"errorMessage":"{} != {}","messagePattern":"\\{\\} != \\{\\}","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"map_model/src/traversable.rs","lineNumber":360,"sourceCode":"fn assert_approx_eq(s1: Speed, s2: Speed) {\n    if (s1.inner_meters_per_second() - s2.inner_meters_per_second()).abs() > 0.1 {\n        // Print in mph without rounding\n        panic!(\n            \"{} != {}\",\n            2.23694 * s1.inner_meters_per_second(),\n            2.23694 * s2.inner_meters_per_second()\n        );\n    }\n}","sourceCodeStart":342,"sourceCodeEnd":368,"githubUrl":"https://github.com/a-b-street/abstreet/blob/0964f29315820c91b171b585eb51e300164e9197/map_model/src/traversable.rs#L342-L368","documentation":"Test-only helper in traversable.rs: assert_approx_eq compares two Speed values in meters/second and panics when they differ by more than 0.1 m/s (values printed as mph). This is a sentinel assertion, not a runtime error — it fires when walking_speed_on_incline or bike speed logic regresses beyond tolerance in test_walking_speed_on_incline or test_bike_speed_on_incline.","triggerScenarios":"Thrown at map_model/src/traversable.rs:360 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Update the expected speeds in the tests if the incline-speed model was intentionally changed","Fix the regression in walking_speed_on_incline / bike speed calculation","Widen the tolerance only if the new behavior is legitimately within acceptable drift"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0964f29315820c91b171b585eb51e300164e9197","analyzedAt":"2026-09-13T18:02:03.421Z","contentChangedAt":"2026-09-13T18:02:03.421Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}