2 * Copyright (C) 2013 Michael Brown <mbrown@fensystems.co.uk>.
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of the
7 * License, or any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 FILE_LICENCE ( GPL2_OR_LATER );
28 /* Forcibly enable assertions */
33 #include <ipxe/pixbuf.h>
35 #include <ipxe/test.h>
36 #include "pixbuf_test.h"
38 /** Define inline pixel data */
39 #define DATA(...) { __VA_ARGS__ }
41 /** PBM ASCII example (from Wikipedia) */
42 PIX ( pbm_ascii, &pnm_image_type,
44 "# This is an example bitmap of the letter \"J\"\n"
57 DATA ( 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
58 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
59 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
60 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
61 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
62 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
63 0x000000, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
64 0xffffff, 0x000000, 0x000000, 0x000000, 0xffffff, 0xffffff,
65 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
66 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff ) );
68 /** PGM ASCII example (from Wikipedia) */
69 PIX ( pgm_ascii, &pnm_image_type,
71 "# Shows the word \"FEEP\" (example from Netpbm man page on PGM)\n"
74 "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
75 "0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0\n"
76 "0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0\n"
77 "0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0\n"
78 "0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0\n"
79 "0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0\n"
80 "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
82 DATA ( 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
83 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
84 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
85 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
86 0x000000, 0x333333, 0x333333, 0x333333, 0x333333, 0x000000,
87 0x000000, 0x777777, 0x777777, 0x777777, 0x777777, 0x000000,
88 0x000000, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0x000000,
89 0x000000, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000,
90 0x000000, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000,
91 0x000000, 0x777777, 0x000000, 0x000000, 0x000000, 0x000000,
92 0x000000, 0xbbbbbb, 0x000000, 0x000000, 0x000000, 0x000000,
93 0x000000, 0xffffff, 0x000000, 0x000000, 0xffffff, 0x000000,
94 0x000000, 0x333333, 0x333333, 0x333333, 0x000000, 0x000000,
95 0x000000, 0x777777, 0x777777, 0x777777, 0x000000, 0x000000,
96 0x000000, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0x000000, 0x000000,
97 0x000000, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000,
98 0x000000, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000,
99 0x000000, 0x777777, 0x000000, 0x000000, 0x000000, 0x000000,
100 0x000000, 0xbbbbbb, 0x000000, 0x000000, 0x000000, 0x000000,
101 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0x000000,
102 0x000000, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000,
103 0x000000, 0x777777, 0x777777, 0x777777, 0x777777, 0x000000,
104 0x000000, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0x000000,
105 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0x000000,
106 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
107 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
108 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
109 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 ) );
111 /** PPM ASCII example (from Wikipedia) */
112 PIX ( ppm_ascii, &pnm_image_type,
114 "# The P3 means colors are in ASCII, then 3 columns and 2 rows,\n"
115 "# then 255 for max color, then RGB triplets\n"
118 "255 0 0 0 255 0 0 0 255\n"
119 "255 255 0 255 255 255 0 0 0\n",
121 DATA ( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xffffff, 0x000000 ) );
123 /** PBM ASCII with no space between pixel values */
124 PIX ( pbm_ascii_no_space, &pnm_image_type,
131 DATA ( 0xffffff, 0xffffff, 0x000000, 0xffffff, 0x000000, 0xffffff,
132 0x000000, 0x000000, 0x000000 ) );
134 /** PBM binary example (converted from Wikipedia) */
135 PIX ( pbm_binary, &pnm_image_type,
136 DATA ( 0x50, 0x34, 0x0a, 0x23, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4f,
137 0x52, 0x3a, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x20, 0x50, 0x4e, 0x4d,
138 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x56, 0x65, 0x72,
139 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x31, 0x0a, 0x36, 0x20,
140 0x31, 0x30, 0x0a, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88, 0x70,
143 DATA ( 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
144 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
145 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
146 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
147 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
148 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
149 0x000000, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff,
150 0xffffff, 0x000000, 0x000000, 0x000000, 0xffffff, 0xffffff,
151 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
152 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff ) );
154 /** PGM binary example (converted from Wikipedia) */
155 PIX ( pgm_binary, &pnm_image_type,
156 DATA ( 0x50, 0x35, 0x0a, 0x32, 0x34, 0x20, 0x37, 0x0a, 0x31, 0x35, 0x0a,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x07, 0x07,
160 0x07, 0x07, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x0f,
161 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00,
164 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b,
165 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x03, 0x00,
166 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
168 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x00,
169 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174 DATA ( 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
175 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
176 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
177 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
178 0x000000, 0x333333, 0x333333, 0x333333, 0x333333, 0x000000,
179 0x000000, 0x777777, 0x777777, 0x777777, 0x777777, 0x000000,
180 0x000000, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0x000000,
181 0x000000, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000,
182 0x000000, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000,
183 0x000000, 0x777777, 0x000000, 0x000000, 0x000000, 0x000000,
184 0x000000, 0xbbbbbb, 0x000000, 0x000000, 0x000000, 0x000000,
185 0x000000, 0xffffff, 0x000000, 0x000000, 0xffffff, 0x000000,
186 0x000000, 0x333333, 0x333333, 0x333333, 0x000000, 0x000000,
187 0x000000, 0x777777, 0x777777, 0x777777, 0x000000, 0x000000,
188 0x000000, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0x000000, 0x000000,
189 0x000000, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000,
190 0x000000, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000,
191 0x000000, 0x777777, 0x000000, 0x000000, 0x000000, 0x000000,
192 0x000000, 0xbbbbbb, 0x000000, 0x000000, 0x000000, 0x000000,
193 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0x000000,
194 0x000000, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000,
195 0x000000, 0x777777, 0x777777, 0x777777, 0x777777, 0x000000,
196 0x000000, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0x000000,
197 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0x000000,
198 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
199 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
200 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
201 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 ) );
203 /** PPM binary example (converted from Wikipedia) */
204 PIX ( ppm_binary, &pnm_image_type,
205 DATA ( 0x50, 0x36, 0x0a, 0x33, 0x20, 0x32, 0x0a, 0x32, 0x35, 0x35, 0x0a,
206 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
207 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 ),
209 DATA ( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xffffff, 0x000000 ) );
212 * Perform PNM self-test
215 static void pnm_test_exec ( void ) {
217 pixbuf_ok ( &pbm_ascii );
218 pixbuf_ok ( &pgm_ascii );
219 pixbuf_ok ( &ppm_ascii );
220 pixbuf_ok ( &pbm_ascii_no_space );
221 pixbuf_ok ( &pbm_binary );
222 pixbuf_ok ( &pgm_binary );
223 pixbuf_ok ( &ppm_binary );
227 struct self_test pnm_test __self_test = {
229 .exec = pnm_test_exec,