RazrFalcon / tiny-skia

A tiny Skia subset ported to Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Most integration tests fail on big-endian systems

jamessan opened this issue · comments

Most of the failures don't provide any useful information, since the difference is in the data field. However, the png tests show that byte-swapping is at least part of the problem.

---- png::decode_grayscale stdout ----
thread 'png::decode_grayscale' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 255, g: 0, b: 0, a: 0 }`,
 right: `PremultipliedColorU8 { r: 0, g: 0, b: 0, a: 255 }`', tests/integration/png.rs:7:5

---- png::decode_grayscale_alpha stdout ----
thread 'png::decode_grayscale_alpha' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 255, g: 0, b: 0, a: 0 }`,
 right: `PremultipliedColorU8 { r: 0, g: 0, b: 0, a: 255 }`', tests/integration/png.rs:14:5

---- png::decode_rgb stdout ----
thread 'png::decode_rgb' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 255, g: 49, b: 191, a: 36 }`,
 right: `PremultipliedColorU8 { r: 36, g: 191, b: 49, a: 255 }`', tests/integration/png.rs:21:5
Full failure list
failures:

---- clip::circle_bottom_right_aa stdout ----
thread 'clip::circle_bottom_right_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:72:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- clip::ignore_memset stdout ----
thread 'clip::ignore_memset' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:174:5

---- clip::ignore_source stdout ----
thread 'clip::ignore_source' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:198:5

---- clip::rect stdout ----
thread 'clip::rect' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:17:5

---- clip::rect_aa stdout ----
thread 'clip::rect_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:34:5

---- clip::intersect_aa stdout ----
thread 'clip::intersect_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/clip.rs:152:5

---- clip::rect_ts stdout ----
thread 'clip::rect_ts' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:54:5

---- clip::stroke stdout ----
thread 'clip::stroke' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:93:5

---- clip::skip_dest stdout ----
thread 'clip::skip_dest' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/clip.rs:128:5

---- dash::closed stdout ----
thread 'dash::closed' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/dash.rs:166:5

---- dash::cubic stdout ----
thread 'dash::cubic' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/dash.rs:63:5

---- dash::hairline stdout ----
thread 'dash::hairline' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/dash.rs:85:5

---- dash::complex stdout ----
thread 'dash::complex' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/dash.rs:113:5

---- dash::line stdout ----
thread 'dash::line' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/dash.rs:21:5

---- dash::quad stdout ----
thread 'dash::quad' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/dash.rs:42:5

---- fill::clear_aa stdout ----
thread 'fill::clear_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:554:5

---- fill::clip_cubic_1 stdout ----
thread 'fill::clip_cubic_1' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:499:5

---- dash::multi_subpaths stdout ----
thread 'dash::multi_subpaths' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/dash.rs:142:5

---- fill::clip_line_1 stdout ----
thread 'fill::clip_line_1' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:443:5

---- fill::clip_cubic_2 stdout ----
thread 'fill::clip_cubic_2' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:517:5

---- fill::clip_quad stdout ----
thread 'fill::clip_quad' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:481:5

---- fill::clip_line_2 stdout ----
thread 'fill::clip_line_2' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:464:5

---- fill::cubic_curve stdout ----
thread 'fill::cubic_curve' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:356:5

---- fill::closed_polygon stdout ----
thread 'fill::closed_polygon' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:282:5

---- fill::even_odd_star stdout ----
thread 'fill::even_odd_star' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:322:5

---- fill::fill_aa stdout ----
thread 'fill::fill_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:408:5

---- fill::fill_rect stdout ----
thread 'fill::fill_rect' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:614:5

---- fill::float_rect_aa stdout ----
thread 'fill::float_rect_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:109:5

---- fill::float_rect stdout ----
thread 'fill::float_rect' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:79:5

---- fill::float_rect_clip_bottom_right_aa stdout ----
thread 'fill::float_rect_clip_bottom_right_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:226:5

---- fill::float_rect_clip_top_left_aa stdout ----
thread 'fill::float_rect_clip_top_left_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:196:5

---- fill::float_rect_clip_top_right_aa stdout ----
thread 'fill::float_rect_clip_top_right_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:211:5

---- fill::float_rect_aa_highp stdout ----
thread 'fill::float_rect_aa_highp' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:125:5

---- fill::int_rect stdout ----
thread 'fill::int_rect' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:65:5

---- fill::int_rect_with_ts_clip_right stdout ----
thread 'fill::int_rect_with_ts_clip_right' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:240:5

---- fill::int_rect_aa stdout ----
thread 'fill::int_rect_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:94:5

---- fill::memset2d stdout ----
thread 'fill::memset2d' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:370:5

---- fill::open_polygon stdout ----
thread 'fill::open_polygon' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:260:5

---- fill::memset2d_out_of_bounds stdout ----
thread 'fill::memset2d_out_of_bounds' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:385:5

---- fill::quad_curve stdout ----
thread 'fill::quad_curve' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:339:5

---- fill::vertical_lines_merging_bug stdout ----
thread 'fill::vertical_lines_merging_bug' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:596:5

---- fill::winding_star stdout ----
thread 'fill::winding_star' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/fill.rs:302:5

---- gradients::conical_greater_radial stdout ----
thread 'gradients::conical_greater_radial' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:316:5

---- gradients::focal_on_circle_radial stdout ----
thread 'gradients::focal_on_circle_radial' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:292:5

---- gradients::global_opacity stdout ----
thread 'gradients::global_opacity' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:417:5

---- gradients::simple_radial_lq stdout ----
thread 'gradients::simple_radial_lq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:340:5

---- gradients::simple_radial_hq stdout ----
thread 'gradients::simple_radial_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:365:5

---- gradients::three_stops_evenly_spaced_hq stdout ----
thread 'gradients::three_stops_evenly_spaced_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:216:5

---- gradients::three_stops_evenly_spaced_lq stdout ----
thread 'gradients::three_stops_evenly_spaced_lq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:94:5

---- gradients::simple_radial_with_ts_hq stdout ----
thread 'gradients::simple_radial_with_ts_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:390:5

---- gradients::two_stops_linear_pad_lq stdout ----
thread 'gradients::two_stops_linear_pad_lq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:23:5

---- gradients::two_stops_linear_pad_hq stdout ----
thread 'gradients::two_stops_linear_pad_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:142:5

---- gradients::two_stops_linear_reflect_lq stdout ----
thread 'gradients::two_stops_linear_reflect_lq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:69:5

---- gradients::two_stops_linear_reflect_hq stdout ----
thread 'gradients::two_stops_linear_reflect_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:190:5

---- gradients::two_stops_linear_repeat_hq stdout ----
thread 'gradients::two_stops_linear_repeat_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:166:5

---- gradients::two_stops_linear_repeat_lq stdout ----
thread 'gradients::two_stops_linear_repeat_lq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:46:5

---- gradients::two_stops_unevenly_spaced_lq stdout ----
thread 'gradients::two_stops_unevenly_spaced_lq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:118:5

---- gradients::two_stops_unevenly_spaced_hq stdout ----
thread 'gradients::two_stops_unevenly_spaced_hq' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:241:5

---- hairline::chop_cubic_01 stdout ----
thread 'hairline::chop_cubic_01' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:226:5

---- hairline::clip_cubic_00 stdout ----
thread 'hairline::clip_cubic_00' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:238:5

---- hairline::clip_cubic_05_aa stdout ----
thread 'hairline::clip_cubic_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:232:5

---- hairline::clip_hline_bottom_aa stdout ----
thread 'hairline::clip_hline_bottom_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:113:5

---- hairline::clip_hline_top_aa stdout ----
thread 'hairline::clip_hline_top_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:107:5

---- hairline::clip_line_00 stdout ----
thread 'hairline::clip_line_00' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:80:5

---- gradients::well_behaved_radial stdout ----
thread 'gradients::well_behaved_radial' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/gradients.rs:268:5

---- hairline::clip_line_05_aa stdout ----
thread 'hairline::clip_line_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:74:5

---- hairline::clip_vline_left_aa stdout ----
thread 'hairline::clip_vline_left_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:119:5

---- hairline::clip_vline_right_aa stdout ----
thread 'hairline::clip_vline_right_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:125:5

---- hairline::clipped_circle_aa stdout ----
thread 'hairline::clipped_circle_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:256:5

---- hairline::cubic_width_00 stdout ----
thread 'hairline::cubic_width_00' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:207:5

---- hairline::cubic_width_00_aa stdout ----
thread 'hairline::cubic_width_00_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:201:5

---- hairline::cubic_width_00_round stdout ----
thread 'hairline::cubic_width_00_round' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:219:5

---- hairline::clip_line_00_v2 stdout ----
thread 'hairline::clip_line_00_v2' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 512, height: 512 }`,
 right: `Pixmap { data: "...", width: 512, height: 512 }`', tests/integration/hairline.rs:101:5

---- hairline::cubic_width_05_aa_round stdout ----
thread 'hairline::cubic_width_05_aa_round' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:213:5

---- hairline::cubic_width_05_aa stdout ----
thread 'hairline::cubic_width_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:195:5

---- hairline::cubic_width_10_aa stdout ----
thread 'hairline::cubic_width_10_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:189:5

---- hairline::hline_05_aa_round stdout ----
thread 'hairline::hline_05_aa_round' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:38:5

---- hairline::hline_05_aa stdout ----
thread 'hairline::hline_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:32:5

---- hairline::horish_05_aa stdout ----
thread 'hairline::horish_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:62:5

---- hairline::quad_width_00 stdout ----
thread 'hairline::quad_width_00' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:163:5

---- hairline::quad_width_05_aa_round stdout ----
thread 'hairline::quad_width_05_aa_round' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:157:5

---- hairline::quad_width_05_aa stdout ----
thread 'hairline::quad_width_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 100 }`,
 right: `Pixmap { data: "...", width: 200, height: 100 }`', tests/integration/hairline.rs:151:5

---- hairline::vertish_05_aa stdout ----
thread 'hairline::vertish_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:68:5

---- hairline::vline_05_aa stdout ----
thread 'hairline::vline_05_aa' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:50:5

---- hairline::vline_05_aa_round stdout ----
thread 'hairline::vline_05_aa_round' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/hairline.rs:56:5

---- pattern::filter_bilinear stdout ----
thread 'pattern::filter_bilinear' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:220:5

---- pattern::filter_nearest stdout ----
thread 'pattern::filter_nearest' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:198:5

---- pattern::filter_bicubic stdout ----
thread 'pattern::filter_bicubic' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:242:5

---- pattern::filter_nearest_no_ts stdout ----
thread 'pattern::filter_nearest_no_ts' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:176:5

---- pattern::pad_nearest stdout ----
thread 'pattern::pad_nearest' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:39:5

---- pattern::pad_bicubic stdout ----
thread 'pattern::pad_bicubic' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:108:5

---- pattern::reflect_nearest stdout ----
thread 'pattern::reflect_nearest' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:83:5

---- pattern::reflect_bicubic stdout ----
thread 'pattern::reflect_bicubic' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:154:5

---- pattern::repeat_nearest stdout ----
thread 'pattern::repeat_nearest' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:61:5

---- pixmap::clone_rect_1 stdout ----
thread 'pixmap::clone_rect_1' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 80, height: 90 }`,
 right: `Pixmap { data: "...", width: 80, height: 90 }`', tests/integration/pixmap.rs:21:5

---- pixmap::clone_rect_2 stdout ----
thread 'pixmap::clone_rect_2' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 70, height: 80 }`,
 right: `Pixmap { data: "...", width: 70, height: 80 }`', tests/integration/pixmap.rs:43:5

---- pixmap::draw_pixmap stdout ----
thread 'pixmap::draw_pixmap' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pixmap.rs:99:5

---- pattern::repeat_bicubic stdout ----
thread 'pattern::repeat_bicubic' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pattern.rs:131:5

---- pixmap::draw_pixmap_opacity stdout ----
thread 'pixmap::draw_pixmap_opacity' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pixmap.rs:170:5

---- png::decode_grayscale stdout ----
thread 'png::decode_grayscale' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 255, g: 0, b: 0, a: 0 }`,
 right: `PremultipliedColorU8 { r: 0, g: 0, b: 0, a: 255 }`', tests/integration/png.rs:7:5

---- png::decode_grayscale_alpha stdout ----
thread 'png::decode_grayscale_alpha' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 255, g: 0, b: 0, a: 0 }`,
 right: `PremultipliedColorU8 { r: 0, g: 0, b: 0, a: 255 }`', tests/integration/png.rs:14:5

---- png::decode_rgb stdout ----
thread 'png::decode_rgb' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 255, g: 49, b: 191, a: 36 }`,
 right: `PremultipliedColorU8 { r: 36, g: 191, b: 49, a: 255 }`', tests/integration/png.rs:21:5

---- pixmap::draw_pixmap_ts stdout ----
thread 'pixmap::draw_pixmap_ts' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/pixmap.rs:134:5

---- png::decode_rgba stdout ----
thread 'png::decode_rgba' panicked at 'assertion failed: `(left == right)`
  left: `PremultipliedColorU8 { r: 108, g: 70, b: 96, a: 68 }`,
 right: `PremultipliedColorU8 { r: 68, g: 96, b: 70, a: 108 }`', tests/integration/png.rs:28:5

---- stroke::circle stdout ----
thread 'stroke::circle' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/stroke.rs:43:5

---- stroke::round_cap_join stdout ----
thread 'stroke::round_cap_join' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/stroke.rs:133:5

---- stroke::zero_len_subpath_round_cap stdout ----
thread 'stroke::zero_len_subpath_round_cap' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/stroke.rs:87:5

---- stroke::zero_len_subpath_square_cap stdout ----
thread 'stroke::zero_len_subpath_square_cap' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 100, height: 100 }`,
 right: `Pixmap { data: "...", width: 100, height: 100 }`', tests/integration/stroke.rs:109:5

---- stroke::round_caps_and_large_scale stdout ----
thread 'stroke::round_caps_and_large_scale' panicked at 'assertion failed: `(left == right)`
  left: `Pixmap { data: "...", width: 200, height: 200 }`,
 right: `Pixmap { data: "...", width: 200, height: 200 }`', tests/integration/stroke.rs:26:5


failures:
    clip::circle_bottom_right_aa
    clip::ignore_memset
    clip::ignore_source
    clip::intersect_aa
    clip::rect
    clip::rect_aa
    clip::rect_ts
    clip::skip_dest
    clip::stroke
    dash::closed
    dash::complex
    dash::cubic
    dash::hairline
    dash::line
    dash::multi_subpaths
    dash::quad
    fill::clear_aa
    fill::clip_cubic_1
    fill::clip_cubic_2
    fill::clip_line_1
    fill::clip_line_2
    fill::clip_quad
    fill::closed_polygon
    fill::cubic_curve
    fill::even_odd_star
    fill::fill_aa
    fill::fill_rect
    fill::float_rect
    fill::float_rect_aa
    fill::float_rect_aa_highp
    fill::float_rect_clip_bottom_right_aa
    fill::float_rect_clip_top_left_aa
    fill::float_rect_clip_top_right_aa
    fill::int_rect
    fill::int_rect_aa
    fill::int_rect_with_ts_clip_right
    fill::memset2d
    fill::memset2d_out_of_bounds
    fill::open_polygon
    fill::quad_curve
    fill::vertical_lines_merging_bug
    fill::winding_star
    gradients::conical_greater_radial
    gradients::focal_on_circle_radial
    gradients::global_opacity
    gradients::simple_radial_hq
    gradients::simple_radial_lq
    gradients::simple_radial_with_ts_hq
    gradients::three_stops_evenly_spaced_hq
    gradients::three_stops_evenly_spaced_lq
    gradients::two_stops_linear_pad_hq
    gradients::two_stops_linear_pad_lq
    gradients::two_stops_linear_reflect_hq
    gradients::two_stops_linear_reflect_lq
    gradients::two_stops_linear_repeat_hq
    gradients::two_stops_linear_repeat_lq
    gradients::two_stops_unevenly_spaced_hq
    gradients::two_stops_unevenly_spaced_lq
    gradients::well_behaved_radial
    hairline::chop_cubic_01
    hairline::clip_cubic_00
    hairline::clip_cubic_05_aa
    hairline::clip_hline_bottom_aa
    hairline::clip_hline_top_aa
    hairline::clip_line_00
    hairline::clip_line_00_v2
    hairline::clip_line_05_aa
    hairline::clip_vline_left_aa
    hairline::clip_vline_right_aa
    hairline::clipped_circle_aa
    hairline::cubic_width_00
    hairline::cubic_width_00_aa
    hairline::cubic_width_00_round
    hairline::cubic_width_05_aa
    hairline::cubic_width_05_aa_round
    hairline::cubic_width_10_aa
    hairline::hline_05_aa
    hairline::hline_05_aa_round
    hairline::horish_05_aa
    hairline::quad_width_00
    hairline::quad_width_05_aa
    hairline::quad_width_05_aa_round
    hairline::vertish_05_aa
    hairline::vline_05_aa
    hairline::vline_05_aa_round
    pattern::filter_bicubic
    pattern::filter_bilinear
    pattern::filter_nearest
    pattern::filter_nearest_no_ts
    pattern::pad_bicubic
    pattern::pad_nearest
    pattern::reflect_bicubic
    pattern::reflect_nearest
    pattern::repeat_bicubic
    pattern::repeat_nearest
    pixmap::clone_rect_1
    pixmap::clone_rect_2
    pixmap::draw_pixmap
    pixmap::draw_pixmap_opacity
    pixmap::draw_pixmap_ts
    png::decode_grayscale
    png::decode_grayscale_alpha
    png::decode_rgb
    png::decode_rgba
    stroke::circle
    stroke::round_cap_join
    stroke::round_caps_and_large_scale
    stroke::zero_len_subpath_round_cap
    stroke::zero_len_subpath_square_cap

test result: FAILED. 36 passed; 109 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.58s

What systems do use big-endian and how can I reproduce it locally?

Such kind of bugs are expected, because I have no way of testing big-endian targets.

The easiest way is to use the cross tool, which uses docker images with everything set up to compile for and run executables on various Rust targets. mips and powerpc have big endian targets in Rust. Either should work to replicate this.

Does cross works on macos ARM? I heard that docker on mac is meh.

By the way, are those arches do support SIMD to begin with? Afaik they do no. Therefore there is no point in supporting them.

I will have to update the readme... tiny-skia is x86/aarch64 only library. And wasm, sort of.

Depends on what you mean by SIMD. PPC64 has AltiVec. Sparc64 has VIS.

I will have to update the readme... tiny-skia is x86/aarch64 only library. And wasm, sort of.

Is there anything I can do to help support operating systems outside of this? I have interest in using tiny-skia on big endian systems, and I personally think this issue can be resolved via some byte swapping.

@notgull The current solution would be to forbid everything except x86, aarch64 and wasm32.
Sure, there is probably an easy fix to endianness, but I still have to support it and make sure I would not break anything in the future. It's an additional burden I cannot take at the moment.

Also, tiny-skia without SIMD is useless. I have plans on removing scalar code completely. So it would not compile on unsupported targets to begin with.

Or, we could wait for std::simd and make it their problem. But looks like it would not be stable anytime soon.

Also, tiny-skia without SIMD is useless. I have plans on removing scalar code completely.

It seems somewhat limiting for a software drawing library to only support a few architectures. A lot of software wants to target things other than x86_64, aarch64 and wasm32, and would then need to use tiny-skia only on those targets and something else elsewhere.

I expect this would be a concern for various projects that currently depend on tiny-skia.

@ids1024 Can you name such a target? Not a hypothetical one. I'm genuinely curious.

If you're talking about embed, then tiny-skia is already an overkill because how heavy it is.

Also, this exact issue is a good illustration of why I want to limit the scope. I simply cannot test it against all possible targets. I barely have time to support x86 and aarch64.

I would also be interested in some of the more obscure targets and my code is optimized to the point where I get like 10k fps or so out of tiny-skia, meaning that it probably runs just fine without SIMD in my case too. If you don't have time to support those targets, I'm willing to help you out. I'll try to look into the big endian problems soon. (Also I have it running on CI against many of these targets, so it's at least indirectly being tested all the time)

I did some experiments and I was able to shave around 300 LOC. Not much improvement...

Yes, I would say as long as we can setup working CI for all the "supported" targets it should be fine. As of now, I don't really have an access even to x86.

Also, it seems like dropping some SSE2 code should be fine. AVX is 12 years old now. We can easily fallback to scalar for such old CPUs.

Unless there are more issues that aren't revealed by the tests, this seems to be pretty straightforward: #69.