# GIF Suite Image List

Test GIF images are displayed in the leftmost column. Where they contain multiple frames, each frame is rendered as a reference PNG in subsequent columns, exactly as it should appear. Any differences indicate a bug in the GIF decoder.

Image | Frame 1 | Frame 2 | Frame 3 | Frame 4 | Notes
--- | --- | --- | --- | --- | ---
|  | N/A | N/A | N/A | Static gif with no animation, no transparency
|  |  |  |  | Animated gif with 4 frames, no loop, no transparency
|  |  |  |  | Animated gif with 4 frames, looping forever, no transparency
|  |  |  |  | Interlaced gif with 4 frames, looping forever, no transparency
|  |  |  |  | Animated gif with 4 frames, looping forever, no transparency, shorter delay between frames 2 and 3
|  | N/A | N/A | N/A | Static transparent gif with no animation
|  |  |  |  | Transparent gif with 4 frames, loops forever
|  |  |  |  | Transparent gif with 4 frames, loops forever, restore previous
|  |  |  |  | Transparent gif with 4 frames, loops forever, first frame restore previous
|  |  |  |  | Transparent gif with 4 transparent frames, loops forever, no dispose
|  |  |  |  | Transparent gif with 4 transparent frames, loops forever, restore background
|  |  |  |  | Transparent gif with 4 transparent frames, loops forever, restore previous

Erroneous test case: frame out-of-bounds. The first frame is located at offset (200,0) and so is wholly outside of the bounds of the 100x100 GIF. The last frame is partially out of bounds, located at (60,60) and of size (50,50).

Note that the GIF specification is unclear on what to do if a frame extends past the logical screen of the GIF, therefore different renderers behave differently here:

- Firefox, ImageMagick: don't expand logical screen, render unwritten pixels as transparent (this is what the reference frames show)
- Chrome, Edge, IE11: expand logical screen, render unwritten pixels as transparent
- Safari: don't expand logical screen, render unwritten pixels as GIF background colour

| N/A | N/A | N/A | N/A | Erroneous test case:. Final frame contains bad LZW data and will fail to decode. Decoder implementations are not under any obligation to render anything useful here, however they should fail gracefully and not crash.