test(svg): cover extreme number and transform serialization

This commit is contained in:
ldm0
2026-10-13 14:13:25 +08:00
committed by Donough Liu
parent fc19126d45
commit 7ffb0e86b5
+43
View File
@@ -51,6 +51,29 @@ mod tests {
segments_for_element(SvgGeometryElement::Path { d: raw.to_owned() })
}
#[test]
fn svg_transform_serialization_preserves_function_and_rotation_center() {
for value in [
SvgTransform::matrix(SvgMatrixComponents {
a: 2.0,
b: 3.0,
c: 4.0,
d: 5.0,
e: 1e20,
f: -1e20,
}),
SvgTransform::translate(0.1, 1e20),
SvgTransform::scale(2.5, 3.5),
SvgTransform::rotate(0.0, 13.0, 17.0),
SvgTransform::rotate(90.0, 13.0, 17.0),
SvgTransform::skew_x(45.0),
SvgTransform::skew_y(-45.0),
] {
let parsed = parse_transform_attribute(&value.serialize()).unwrap();
assert_eq!(parsed, vec![value]);
}
}
#[test]
fn point_list_parser_rejects_invalid_tokens_and_truncates_incomplete_pairs() {
assert_eq!(
@@ -573,6 +596,26 @@ mod tests {
assert!(parse_number_list("10 nope 20").is_none());
}
#[test]
fn serialized_svg_numbers_round_trip_large_finite_values_and_signed_zero() {
for value in [
1e20_f64,
-1e20,
f64::MAX,
f64::MIN_POSITIVE,
f64::from(f32::MAX),
f64::from(f32::from_bits(1)),
-0.0,
] {
let serialized = serialize_number(value);
assert_eq!(
serialized.parse::<f64>().unwrap().to_bits(),
value.to_bits(),
"{serialized} must preserve {value}"
);
}
}
#[test]
fn circle_and_ellipse_geometry_are_bezier_paths() {
let circle = segments_for_element(SvgGeometryElement::Circle {