Skip to content

Return written image path from image.write#4

Merged
jrstrunk merged 2 commits intotinybackup:mainfrom
JonasGruenwald:return-written-path
Jul 16, 2025
Merged

Return written image path from image.write#4
jrstrunk merged 2 commits intotinybackup:mainfrom
JonasGruenwald:return-written-path

Conversation

@JonasGruenwald
Copy link
Contributor

@JonasGruenwald JonasGruenwald commented Jul 13, 2025

Closes #3

This change returns the path of the image as it was written to disk from the image.write function.

As I wanted just the path itself, without the format options appended to it, I had to separate those two out internally.

There are 2 breaking changes to the public API:

  • image.write returns a Result(String, Snag) instead of Result(Nil, Snag)
  • The Custom variant constructor now accepts separate parameters for extension and format options – I thought this made sense because I had to separate the two out internally

A side note: I get 11 failing tests (empty output) before any of my changes here locally, not sure what's up with that, may be that I'm on Elixir 1.18 instead of 1.17

@jrstrunk
Copy link
Contributor

jrstrunk commented Jul 14, 2025

This looks nice! Do you foresee wanting to suggest any other breaking changes in the near future? If so, should we release this now or wait to release a v2 with potentially more changes? I do not have anything I want to add at this point. If we merged this but didn't release it, you could still use it via a git dependency :)

Also, strange about the tests. The package works when used regularly on your system with Elixir 1.18, right?

@JonasGruenwald
Copy link
Contributor Author

I can't think of any other change right now, I'm just using it to generate resized versions of images at the moment.
Right now in my project I've got it set as a git dependency pointing to my fork with these changes, so there is no rush at all about cutting a release from my side if you'd like to hold off.

One thing I was wondering about, also regarding my change of the handling of the Custom ImageFormat variant:

I didn't know it was possible to specify format options like that, as a [wibble=wobble] string appended to the file path, I didn't see this documented for Vix, they seem to expect a keyword list of options for functions like Vix.Vips.Image.write_to_file/3 and then pass those as arguments to the NIF – I was wondering why ansel doesn't use that options argument but instead appends the options to the path as a string?
Is that a feature of the underlying libvips API that you're using, kind of bypassing Vix there? I didn't change that part because I assume there is a reason to do it this way, was just curious.

@JonasGruenwald
Copy link
Contributor Author

JonasGruenwald commented Jul 14, 2025

Also, strange about the tests. The package works when used regularly on your system with Elixir 1.18, right?

Yes but I use none of the functions in those failing tests. I'll just paste the test output here for reference:

~/Projects/ansel git:(return-written-path) ➜ gleam test
  Compiling ansel
   Compiled in 0.32s
    Running ansel_test.main
.....................................F.............FFFFFFFFFF......
Failures:

  1) image_test.composite_over_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 12, 0, 0, 0, 12, 8, 6, 0, 0, 0, 86, 117, 92, 231, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 4, 21, 89, 80, 0, 0, 0, 32, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 82, 48, 3, 136, 208, 212, 181, 195, 138, 71, 53, 32, 107, 32, 57, 88, 135, 184, 6, 0, 2, 186, 192, 60, 132, 11, 184, 148, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 12, 0, 0, 0, 12, 8, 6, 0, 0, 0, 86, 117, 92, 231, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 4, 21, 89, 80, 0, 0, 0, 33, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 82, 48, 3, 136, 208, 212, 181, 195, 138, 71, 53, 172, 71, 210, 64, 114, 176, 14, 113, 13, 0, 2, 186, 192, 60, 115, 158, 53, 168, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  2) image_test.fill_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 10, 0, 0, 0, 10, 8, 6, 0, 0, 0, 141, 50, 207, 189, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 70, 89, 205, 2, 0, 0, 0, 28, 73, 68, 65, 84, 120, 156, 99, 96, 96, 248, 255, 31, 29, 55, 52, 52, 96, 96, 134, 161, 160, 16, 155, 224, 80, 85, 8, 0, 228, 224, 237, 4, 43, 147, 88, 54, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 10, 0, 0, 0, 10, 8, 6, 0, 0, 0, 141, 50, 207, 189, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 70, 89, 205, 2, 0, 0, 0, 29, 73, 68, 65, 84, 120, 156, 99, 96, 96, 248, 255, 31, 29, 55, 52, 52, 96, 96, 134, 161, 160, 176, 1, 139, 224, 80, 85, 8, 0, 228, 224, 237, 4, 11, 48, 38, 71, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  3) image_test.outline_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 44, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 106, 98, 134, 161, 99, 160, 166, 174, 29, 81, 120, 224, 13, 196, 165, 112, 212, 192, 225, 100, 224, 224, 77, 135, 212, 194, 163, 6, 142, 4, 3, 1, 220, 145, 39, 12, 73, 241, 175, 166, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 51, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 106, 98, 134, 161, 99, 160, 166, 174, 29, 81, 120, 224, 13, 252, 143, 67, 225, 168, 129, 255, 135, 145, 129, 154, 131, 54, 29, 254, 167, 18, 102, 24, 53, 240, 255, 240, 55, 16, 0, 220, 145, 39, 12, 112, 107, 140, 78, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  4) image_test.border_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 40, 0, 0, 0, 40, 8, 6, 0, 0, 0, 140, 254, 184, 109, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 45, 56, 142, 174, 0, 0, 0, 76, 73, 68, 65, 84, 120, 156, 237, 206, 65, 17, 0, 16, 0, 4, 64, 145, 181, 16, 64, 47, 5, 68, 16, 130, 12, 102, 204, 156, 199, 62, 246, 191, 101, 214, 190, 127, 86, 210, 1, 65, 193, 116, 64, 80, 48, 29, 120, 22, 108, 99, 61, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, 19, 76, 17, 20, 76, 19, 20, 76, 251, 62, 120, 0, 203, 112, 127, 111, 15, 182, 174, 97, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 40, 0, 0, 0, 40, 8, 6, 0, 0, 0, 140, 254, 184, 109, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 45, 56, 142, 174, 0, 0, 0, 88, 73, 68, 65, 84, 120, 156, 237, 206, 65, 13, 192, 64, 12, 3, 193, 64, 54, 139, 3, 96, 94, 71, 192, 16, 10, 34, 37, 81, 41, 169, 180, 143, 249, 79, 69, 238, 205, 106, 58, 16, 130, 34, 232, 241, 68, 8, 138, 160, 255, 31, 60, 247, 249, 84, 8, 94, 130, 77, 240, 16, 20, 193, 38, 120, 8, 138, 96, 19, 12, 65, 19, 108, 130, 89, 170, 166, 3, 33, 40, 130, 30, 79, 132, 160, 8, 122, 173, 23, 203, 112, 127, 111, 255, 57, 40, 105, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  5) image_test.round_circle_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 203, 73, 68, 65, 84, 120, 156, 173, 212, 93, 10, 130, 64, 16, 192, 241, 165, 200, 235, 37, 126, 117, 165, 204, 110, 145, 216, 99, 199, 113, 203, 234, 14, 178, 189, 79, 51, 52, 3, 161, 107, 137, 59, 15, 127, 144, 197, 253, 129, 171, 142, 129, 139, 51, 158, 34, 108, 135, 53, 152, 197, 94, 156, 229, 181, 130, 239, 25, 237, 245, 97, 41, 246, 192, 224, 79, 119, 44, 249, 5, 174, 177, 227, 12, 104, 88, 133, 173, 124, 224, 18, 76, 42, 135, 96, 26, 128, 73, 177, 128, 17, 159, 71, 40, 248, 36, 203, 240, 219, 12, 197, 164, 156, 192, 179, 34, 88, 19, 120, 83, 4, 45, 129, 78, 17, 116, 218, 96, 79, 224, 85, 17, 108, 9, 108, 20, 193, 19, 129, 133, 34, 152, 17, 184, 193, 58, 5, 140, 6, 74, 36, 191, 94, 162, 0, 110, 97, 48, 28, 170, 0, 108, 15, 158, 105, 67, 35, 232, 176, 0, 43, 97, 98, 124, 73, 241, 204, 51, 237, 228, 49, 97, 98, 192, 126, 71, 47, 42, 199, 106, 172, 133, 207, 199, 239, 248, 154, 214, 50, 190, 103, 180, 247, 13, 12, 18, 82, 229, 209, 116, 241, 24, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 212, 73, 68, 65, 84, 120, 156, 173, 213, 77, 10, 194, 48, 16, 5, 224, 65, 177, 215, 83, 108, 171, 87, 82, 235, 45, 20, 93, 206, 113, 172, 63, 245, 14, 50, 238, 159, 140, 76, 54, 49, 216, 210, 204, 226, 65, 8, 225, 131, 230, 231, 149, 192, 66, 137, 20, 96, 89, 131, 229, 4, 150, 22, 44, 111, 75, 107, 115, 43, 91, 67, 113, 82, 88, 9, 150, 14, 44, 232, 201, 3, 44, 203, 127, 224, 20, 44, 251, 1, 80, 156, 6, 44, 147, 20, 56, 6, 131, 101, 27, 131, 101, 6, 6, 203, 34, 128, 133, 237, 71, 46, 248, 84, 139, 236, 52, 225, 148, 90, 193, 179, 35, 120, 84, 240, 230, 8, 182, 10, 138, 35, 40, 222, 224, 75, 193, 171, 35, 120, 33, 123, 155, 94, 224, 129, 236, 161, 123, 129, 149, 130, 51, 176, 220, 29, 176, 46, 92, 108, 178, 214, 200, 5, 231, 113, 57, 52, 25, 216, 38, 213, 54, 90, 65, 187, 17, 152, 54, 77, 178, 190, 66, 180, 53, 134, 236, 169, 174, 249, 126, 102, 95, 99, 135, 131, 170, 245, 109, 234, 221, 178, 203, 175, 209, 177, 206, 85, 182, 230, 231, 23, 240, 1, 12, 18, 82, 229, 5, 155, 252, 233, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  6) image_test.round_square_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 117, 73, 68, 65, 84, 120, 156, 237, 212, 65, 10, 128, 32, 16, 133, 225, 185, 95, 138, 135, 10, 161, 219, 116, 2, 181, 43, 149, 237, 167, 153, 112, 160, 77, 144, 240, 86, 225, 226, 223, 13, 31, 42, 56, 196, 107, 165, 86, 144, 54, 233, 148, 248, 99, 58, 91, 36, 111, 142, 97, 75, 7, 242, 86, 52, 48, 0, 48, 203, 81, 187, 38, 10, 204, 10, 86, 32, 120, 16, 16, 187, 27, 224, 0, 127, 11, 34, 191, 222, 174, 96, 1, 130, 73, 65, 15, 4, 39, 91, 176, 17, 128, 205, 252, 216, 216, 154, 147, 114, 231, 155, 234, 108, 210, 147, 153, 115, 1, 18, 207, 148, 122, 4, 242, 78, 146, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 126, 73, 68, 65, 84, 120, 156, 237, 213, 187, 9, 128, 64, 16, 132, 225, 237, 79, 197, 162, 68, 176, 155, 173, 192, 71, 75, 58, 230, 35, 3, 183, 96, 34, 40, 110, 36, 6, 147, 201, 199, 121, 193, 127, 70, 135, 149, 181, 116, 44, 116, 236, 116, 240, 230, 118, 58, 102, 58, 154, 112, 2, 27, 30, 32, 87, 235, 3, 108, 19, 48, 150, 213, 86, 126, 51, 11, 156, 4, 34, 17, 220, 44, 17, 163, 246, 131, 248, 65, 124, 20, 68, 34, 184, 90, 233, 89, 22, 56, 10, 84, 28, 179, 192, 42, 2, 171, 56, 190, 197, 186, 115, 177, 181, 90, 61, 123, 120, 167, 250, 118, 212, 201, 226, 9, 56, 0, 18, 207, 148, 122, 57, 102, 59, 89, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  7) image_test.blur_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 1, 83, 73, 68, 65, 84, 120, 156, 125, 145, 77, 79, 194, 64, 16, 134, 249, 101, 94, 140, 150, 214, 20, 250, 181, 77, 139, 45, 17, 250, 21, 145, 22, 16, 76, 148, 66, 130, 144, 80, 19, 163, 70, 227, 205, 139, 137, 198, 139, 38, 254, 196, 215, 157, 245, 98, 11, 120, 152, 204, 102, 118, 159, 119, 102, 223, 169, 61, 232, 58, 118, 197, 90, 117, 113, 173, 180, 69, 254, 91, 175, 253, 7, 229, 174, 138, 172, 173, 136, 188, 21, 186, 55, 27, 40, 152, 134, 169, 99, 32, 119, 52, 220, 176, 6, 38, 158, 138, 110, 44, 161, 31, 202, 88, 181, 154, 188, 102, 84, 32, 67, 195, 194, 176, 17, 249, 38, 186, 33, 87, 247, 100, 228, 54, 67, 234, 25, 136, 227, 38, 178, 88, 195, 204, 51, 203, 208, 154, 3, 151, 166, 143, 184, 205, 144, 132, 117, 1, 21, 58, 195, 210, 98, 56, 11, 45, 116, 250, 22, 38, 39, 172, 12, 77, 93, 7, 131, 232, 24, 249, 128, 143, 48, 172, 227, 57, 85, 240, 114, 170, 138, 152, 157, 27, 8, 70, 54, 198, 85, 136, 10, 209, 5, 87, 158, 107, 248, 88, 200, 248, 188, 149, 68, 208, 153, 106, 116, 183, 21, 34, 53, 82, 125, 157, 28, 225, 235, 78, 194, 247, 227, 33, 222, 115, 5, 171, 76, 199, 176, 103, 241, 145, 173, 50, 68, 133, 52, 96, 34, 63, 113, 247, 8, 164, 46, 52, 94, 193, 93, 91, 58, 166, 200, 37, 168, 122, 65, 143, 223, 174, 126, 255, 85, 221, 223, 198, 114, 9, 202, 185, 181, 243, 17, 23, 153, 55, 177, 234, 49, 225, 108, 97, 171, 88, 182, 100, 177, 191, 13, 136, 186, 101, 124, 204, 104, 104, 35, 225, 159, 39, 71, 23, 166, 139, 169, 95, 71, 156, 236, 35, 241, 173, 221, 157, 104, 39, 100, 14, 173, 130, 58, 141, 59, 7, 80, 51, 9, 123, 65, 128, 31, 102, 240, 114, 131, 90, 76, 31, 132, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 1, 85, 73, 68, 65, 84, 120, 156, 125, 145, 95, 79, 194, 48, 20, 197, 249, 100, 190, 24, 29, 155, 25, 108, 93, 187, 108, 184, 17, 96, 255, 34, 194, 0, 129, 68, 41, 36, 56, 18, 70, 98, 148, 104, 124, 243, 197, 68, 227, 139, 38, 126, 196, 99, 90, 95, 220, 0, 31, 110, 78, 115, 219, 95, 79, 123, 79, 101, 107, 154, 56, 84, 107, 221, 197, 173, 214, 148, 250, 183, 95, 249, 15, 226, 174, 142, 180, 169, 73, 221, 11, 61, 88, 53, 228, 204, 192, 204, 33, 224, 142, 129, 13, 171, 97, 226, 233, 232, 196, 10, 122, 161, 138, 85, 163, 142, 13, 35, 37, 136, 24, 88, 18, 27, 145, 111, 161, 19, 106, 224, 158, 10, 110, 51, 244, 61, 130, 56, 174, 35, 141, 13, 204, 61, 171, 8, 173, 137, 141, 107, 203, 71, 220, 100, 72, 194, 170, 132, 114, 147, 33, 163, 12, 151, 33, 69, 187, 71, 49, 105, 177, 34, 52, 115, 29, 12, 162, 115, 240, 1, 193, 118, 88, 197, 115, 95, 195, 203, 133, 46, 107, 126, 69, 16, 140, 108, 140, 203, 208, 184, 197, 16, 77, 25, 178, 133, 129, 143, 165, 138, 207, 59, 69, 150, 88, 139, 158, 216, 219, 11, 5, 35, 91, 222, 250, 58, 57, 195, 215, 189, 130, 239, 199, 83, 188, 115, 13, 171, 212, 196, 176, 75, 193, 61, 90, 132, 184, 71, 209, 15, 152, 212, 39, 199, 144, 160, 112, 17, 207, 203, 25, 65, 230, 88, 82, 11, 80, 121, 67, 28, 126, 187, 249, 253, 87, 57, 191, 157, 112, 5, 196, 61, 11, 139, 17, 65, 182, 168, 99, 213, 101, 114, 178, 185, 173, 35, 107, 168, 50, 191, 29, 72, 184, 165, 1, 67, 52, 180, 145, 76, 153, 156, 232, 210, 114, 49, 243, 171, 136, 147, 99, 36, 62, 61, 236, 36, 50, 17, 195, 17, 81, 8, 167, 113, 251, 4, 122, 170, 224, 40, 8, 240, 3, 102, 240, 114, 131, 241, 87, 20, 137, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  8) image_test.rotate_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 18, 0, 0, 0, 18, 8, 6, 0, 0, 0, 86, 206, 142, 87, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 47, 118, 118, 240, 0, 0, 1, 246, 73, 68, 65, 84, 120, 156, 157, 147, 203, 75, 27, 81, 20, 198, 117, 33, 184, 22, 186, 21, 92, 70, 49, 226, 27, 20, 93, 104, 52, 26, 95, 119, 156, 36, 163, 102, 166, 29, 98, 18, 124, 197, 119, 148, 137, 241, 17, 66, 124, 39, 145, 108, 68, 209, 86, 91, 20, 131, 210, 34, 45, 22, 186, 18, 215, 66, 215, 5, 183, 130, 107, 255, 129, 207, 155, 49, 147, 206, 132, 24, 163, 7, 62, 230, 194, 61, 247, 119, 207, 57, 223, 157, 156, 156, 44, 34, 194, 48, 12, 21, 168, 12, 217, 228, 167, 141, 48, 33, 66, 2, 18, 215, 35, 85, 237, 155, 33, 244, 208, 136, 10, 162, 232, 158, 170, 228, 45, 144, 57, 53, 32, 204, 16, 53, 236, 31, 173, 180, 48, 27, 72, 64, 13, 9, 17, 6, 155, 131, 213, 169, 149, 221, 82, 21, 100, 130, 236, 168, 15, 204, 10, 86, 120, 107, 252, 112, 244, 186, 96, 18, 69, 13, 44, 220, 109, 190, 222, 168, 240, 230, 165, 131, 28, 168, 19, 71, 29, 22, 148, 172, 11, 240, 240, 28, 198, 28, 77, 168, 12, 22, 99, 185, 223, 36, 239, 5, 184, 78, 12, 51, 60, 182, 234, 199, 127, 166, 66, 98, 106, 136, 203, 101, 69, 89, 80, 64, 36, 218, 129, 147, 197, 118, 44, 240, 109, 240, 217, 218, 229, 189, 37, 11, 139, 250, 21, 61, 196, 209, 6, 37, 255, 52, 14, 200, 165, 250, 158, 234, 14, 55, 209, 7, 175, 141, 69, 180, 175, 7, 191, 14, 12, 248, 38, 153, 18, 67, 103, 96, 50, 207, 193, 238, 108, 211, 228, 43, 213, 24, 211, 216, 44, 43, 14, 186, 58, 54, 224, 79, 172, 9, 71, 158, 103, 216, 118, 47, 129, 123, 170, 17, 246, 17, 171, 22, 148, 128, 177, 47, 193, 46, 119, 91, 240, 35, 218, 138, 223, 95, 155, 241, 121, 178, 3, 195, 78, 11, 74, 87, 5, 204, 138, 102, 165, 202, 135, 212, 57, 137, 114, 91, 227, 28, 28, 67, 207, 183, 93, 132, 90, 113, 190, 97, 148, 215, 123, 206, 46, 44, 238, 119, 161, 60, 192, 99, 94, 96, 149, 139, 238, 168, 244, 233, 156, 115, 47, 247, 179, 168, 243, 219, 224, 11, 119, 227, 44, 248, 127, 22, 158, 79, 102, 212, 248, 121, 248, 6, 146, 144, 191, 84, 69, 153, 222, 146, 36, 241, 44, 244, 212, 181, 169, 143, 156, 166, 205, 53, 75, 114, 125, 19, 33, 228, 195, 139, 16, 37, 104, 223, 171, 210, 128, 21, 190, 170, 128, 252, 178, 53, 115, 35, 228, 138, 126, 243, 95, 133, 36, 97, 132, 68, 67, 244, 31, 155, 152, 209, 65, 18, 140, 10, 36, 150, 53, 64, 29, 238, 193, 230, 47, 165, 107, 58, 234, 80, 75, 28, 116, 248, 46, 136, 18, 58, 251, 228, 5, 195, 78, 239, 100, 202, 121, 2, 218, 94, 135, 62, 20, 62, 81, 224, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 18, 0, 0, 0, 18, 8, 6, 0, 0, 0, 86, 206, 142, 87, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 47, 118, 118, 240, 0, 0, 2, 0, 73, 68, 65, 84, 120, 156, 157, 210, 207, 75, 27, 65, 20, 7, 240, 237, 65, 232, 185, 208, 171, 208, 99, 42, 166, 216, 31, 10, 149, 246, 160, 241, 87, 172, 58, 207, 77, 178, 209, 236, 182, 75, 76, 66, 213, 198, 159, 137, 101, 211, 88, 27, 66, 180, 106, 179, 35, 123, 41, 45, 246, 55, 45, 6, 165, 165, 180, 88, 232, 169, 120, 46, 244, 92, 232, 85, 232, 185, 255, 192, 87, 178, 113, 227, 110, 72, 99, 244, 193, 192, 192, 188, 249, 204, 155, 55, 35, 8, 117, 4, 39, 34, 78, 4, 78, 228, 17, 78, 27, 58, 99, 202, 33, 82, 28, 255, 56, 81, 219, 137, 17, 78, 52, 97, 67, 172, 177, 207, 137, 154, 78, 130, 44, 216, 1, 157, 152, 29, 251, 173, 51, 214, 88, 15, 146, 181, 35, 121, 70, 88, 27, 187, 86, 89, 217, 79, 78, 116, 174, 22, 178, 97, 223, 144, 80, 2, 72, 181, 102, 16, 25, 142, 193, 171, 170, 14, 76, 31, 244, 253, 88, 189, 156, 106, 168, 134, 108, 218, 19, 39, 35, 126, 52, 61, 86, 144, 148, 37, 220, 139, 116, 224, 74, 238, 34, 150, 70, 188, 230, 90, 86, 186, 133, 113, 146, 177, 222, 62, 245, 165, 18, 41, 216, 145, 88, 44, 128, 75, 57, 5, 220, 232, 199, 251, 197, 62, 60, 144, 123, 145, 14, 245, 153, 107, 15, 253, 34, 218, 31, 185, 161, 78, 222, 176, 242, 63, 20, 129, 51, 156, 232, 99, 229, 235, 72, 211, 65, 164, 66, 34, 140, 224, 16, 190, 110, 122, 240, 78, 43, 85, 162, 19, 193, 235, 91, 64, 56, 218, 235, 200, 183, 170, 233, 169, 242, 204, 230, 48, 130, 67, 216, 125, 227, 193, 247, 66, 7, 94, 39, 75, 216, 147, 97, 134, 248, 236, 77, 132, 39, 2, 78, 232, 16, 19, 255, 135, 125, 126, 218, 133, 79, 70, 55, 190, 189, 237, 196, 203, 153, 126, 140, 71, 253, 104, 94, 86, 144, 80, 125, 86, 149, 127, 43, 251, 164, 154, 215, 154, 146, 16, 185, 91, 58, 109, 39, 223, 141, 237, 213, 30, 115, 254, 44, 58, 128, 197, 231, 3, 104, 201, 202, 184, 175, 136, 214, 65, 127, 56, 145, 187, 218, 203, 197, 151, 70, 68, 92, 207, 132, 144, 214, 7, 177, 149, 59, 234, 69, 242, 142, 15, 173, 25, 25, 233, 209, 50, 242, 139, 19, 93, 168, 245, 151, 52, 77, 22, 225, 206, 41, 152, 189, 45, 57, 174, 185, 226, 47, 207, 247, 56, 99, 231, 143, 249, 219, 130, 160, 19, 45, 107, 163, 1, 164, 175, 102, 205, 159, 237, 232, 27, 99, 187, 156, 232, 236, 177, 72, 25, 99, 204, 200, 19, 195, 244, 188, 11, 154, 82, 234, 19, 103, 172, 80, 55, 96, 143, 248, 88, 231, 171, 230, 21, 23, 18, 106, 87, 17, 122, 113, 42, 196, 10, 87, 120, 102, 135, 196, 185, 141, 90, 73, 7, 218, 94, 135, 62, 145, 151, 119, 1, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  9) image_test.rotate90_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 107, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 42, 102, 24, 56, 77, 26, 157, 113, 40, 184, 67, 163, 243, 127, 103, 174, 6, 113, 54, 237, 94, 229, 132, 48, 40, 172, 19, 83, 19, 200, 68, 92, 154, 116, 59, 53, 192, 24, 67, 147, 97, 123, 44, 138, 224, 174, 149, 206, 40, 54, 97, 245, 19, 200, 38, 144, 34, 24, 38, 90, 19, 33, 63, 193, 156, 9, 10, 24, 176, 38, 16, 3, 159, 38, 172, 161, 135, 46, 136, 30, 236, 232, 126, 102, 192, 22, 58, 4, 35, 23, 61, 14, 136, 193, 0, 245, 201, 114, 145, 170, 211, 34, 245, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 111, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 42, 102, 24, 56, 77, 26, 157, 113, 40, 184, 67, 163, 243, 127, 103, 174, 6, 113, 54, 237, 94, 229, 132, 48, 40, 172, 19, 83, 147, 70, 103, 28, 78, 77, 186, 157, 26, 96, 140, 161, 201, 176, 61, 22, 69, 112, 215, 74, 103, 20, 155, 176, 250, 73, 163, 51, 14, 172, 8, 134, 137, 214, 212, 79, 192, 79, 48, 103, 130, 2, 6, 172, 9, 196, 192, 167, 9, 107, 232, 161, 11, 162, 7, 59, 186, 159, 25, 176, 133, 14, 193, 200, 69, 143, 3, 98, 52, 1, 0, 245, 201, 114, 145, 55, 32, 185, 140, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  10) image_test.rotate180_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 111, 73, 68, 65, 84, 120, 156, 99, 208, 8, 235, 252, 175, 219, 169, 241, 191, 63, 48, 144, 104, 204, 0, 34, 64, 154, 58, 115, 53, 254, 119, 104, 116, 254, 215, 232, 140, 3, 99, 195, 246, 88, 48, 141, 83, 19, 58, 222, 189, 202, 137, 176, 77, 52, 209, 132, 238, 76, 6, 108, 18, 187, 86, 58, 131, 49, 81, 154, 64, 54, 96, 195, 68, 217, 132, 142, 73, 210, 4, 139, 63, 80, 84, 96, 213, 4, 138, 23, 80, 92, 129, 34, 27, 89, 19, 136, 15, 18, 199, 27, 122, 196, 164, 14, 234, 104, 66, 119, 63, 54, 12, 0, 254, 80, 114, 145, 94, 19, 27, 165, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 120, 73, 68, 65, 84, 120, 156, 99, 208, 8, 235, 252, 175, 219, 169, 241, 191, 63, 48, 144, 104, 204, 0, 34, 116, 59, 53, 254, 119, 230, 106, 252, 239, 208, 232, 252, 175, 209, 25, 7, 198, 134, 237, 177, 96, 26, 167, 166, 126, 52, 188, 123, 149, 19, 97, 155, 250, 105, 161, 73, 3, 205, 153, 12, 216, 36, 118, 173, 116, 6, 99, 162, 52, 237, 94, 229, 132, 21, 19, 101, 83, 63, 26, 38, 73, 147, 46, 52, 254, 64, 81, 129, 85, 19, 40, 94, 64, 113, 5, 138, 108, 100, 77, 32, 62, 72, 28, 111, 232, 17, 147, 58, 168, 163, 9, 221, 253, 216, 52, 1, 0, 254, 80, 114, 145, 123, 101, 78, 216, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  11) image_test.rotate270_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 111, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 10, 214, 8, 235, 252, 207, 64, 138, 6, 221, 78, 13, 48, 70, 209, 100, 216, 30, 251, 95, 163, 51, 14, 5, 35, 203, 119, 230, 106, 128, 105, 6, 108, 130, 32, 188, 123, 149, 19, 134, 77, 29, 26, 157, 16, 77, 32, 6, 204, 90, 144, 123, 241, 105, 130, 217, 140, 211, 79, 32, 77, 187, 86, 58, 131, 105, 24, 38, 90, 19, 186, 159, 49, 52, 193, 156, 73, 146, 243, 8, 249, 9, 134, 49, 66, 15, 20, 48, 248, 130, 29, 175, 159, 240, 97, 250, 105, 2, 0, 140, 116, 114, 145, 36, 120, 214, 87, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 120, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 10, 214, 8, 235, 252, 207, 64, 138, 6, 221, 78, 13, 48, 70, 209, 100, 216, 30, 251, 95, 163, 51, 14, 5, 35, 203, 119, 230, 106, 128, 105, 6, 108, 130, 253, 129, 129, 255, 119, 175, 114, 194, 176, 169, 67, 163, 19, 162, 9, 196, 208, 133, 90, 11, 114, 47, 62, 77, 48, 155, 113, 250, 105, 247, 42, 167, 255, 187, 86, 58, 131, 105, 24, 38, 90, 83, 63, 154, 159, 49, 52, 233, 66, 157, 73, 146, 243, 52, 8, 248, 9, 134, 49, 66, 15, 20, 48, 248, 130, 29, 175, 159, 240, 97, 250, 105, 2, 0, 140, 116, 114, 145, 253, 19, 70, 97, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

Finished in 0.330 seconds
67 tests, 11 failures

Might also be some difference with the libvips version / OS or something like that.
I'm running this on macOS 15.5

@jrstrunk
Copy link
Contributor

Yes, the string args are bypassing vix and going straight to vips. I can't remember the exact reason why I did it that way now, but I believe it was because I was either more comfortable with the vips API, or needed an arg that was not available to vix. Although this package sits on top of vix, I am inclined to support more of the vips API over the vix API, because vips is the real thing we are using.

Using keyword args, would there be a better way of doing it in Gleam other than the Custom constructor taking an argument of List(#(String, String))? We could enumerate all vips options and strongly type them, but that would add a large maintenance burden and we still couldn't guarantee that the host system's vips package was compiled with the right encoders / decoders.

@jrstrunk
Copy link
Contributor

jrstrunk commented Jul 16, 2025

I am running on Ubuntu 24.04, but I will try to upgrade my Elixir and see if I get the failing tests too. Thanks for the help triaging!

@JonasGruenwald
Copy link
Contributor Author

I see, thanks for explaining, that sounds very reasonable to me, best to go direct to vips.

Using keyword args, would there be a better way of doing it in Gleam other than the Custom constructor taking an argument of List(#(String, String))?

I actually kind of think it would be a decent option to drop the ImageFormat type altogether and just make the write / to_bitarray functions take a single string parameter. That would also solve my problem that this PR addresses, since the user supplies the final path in that case.

I looked at some other bindings and the python ones have it like that (though they do also allow a keyword list)

https://libvips.github.io/pyvips/vimage.html?highlight=write_to_file#pyvips.Image.write_to_file

@jrstrunk
Copy link
Contributor

True! I will think about removing the ImageFormat type. In the meantime, what about also detecting when the user-supplied path ends in the image format extension, and then not adding it? Like if the user passes "output.png", then "output.png" will be written, not "output.png.png".

@JonasGruenwald
Copy link
Contributor Author

JonasGruenwald commented Jul 16, 2025

Hmm not a fan of implicitly changing the behaviour like that tbh, I'd say either document the current behaviour (I added that in this PR too btw) or accept the full path only.

https://github.com/tinybackup/ansel/pull/4/files#diff-052d60b54ac76a2822be4bb9bfa8f2efdf31029fa3b330ad5a4d41d5d38c24a9R498-R499

@jrstrunk
Copy link
Contributor

Okay, sounds good! I like the changes in this PR. Could you address the one comment I left in the code? Then we can merge it.

@JonasGruenwald
Copy link
Contributor Author

Hm, I don't see any comment, you may have forgotten to submit the review if you left a comment in review mode?

@jrstrunk
Copy link
Contributor

Oh hahaha I did, thanks!

@jrstrunk
Copy link
Contributor

Looks fantastic, thank you for the contribution! I will let this change sit a little bit, and push a v2 if no other change comes up in that period. Cheers!

@jrstrunk jrstrunk merged commit be34f7a into tinybackup:main Jul 16, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Filename paths / extensions

2 participants