Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / tests / pnm_test.c
1 /*
2  * Copyright (C) 2013 Michael Brown <mbrown@fensystems.co.uk>.
3  *
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.
8  *
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.
13  *
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
17  * 02110-1301, USA.
18  */
19
20 FILE_LICENCE ( GPL2_OR_LATER );
21
22 /** @file
23  *
24  * PNM self-tests
25  *
26  */
27
28 /* Forcibly enable assertions */
29 #undef NDEBUG
30
31 #include <string.h>
32 #include <assert.h>
33 #include <ipxe/pixbuf.h>
34 #include <ipxe/pnm.h>
35 #include <ipxe/test.h>
36 #include "pixbuf_test.h"
37
38 /** Define inline pixel data */
39 #define DATA(...) { __VA_ARGS__ }
40
41 /** PBM ASCII example (from Wikipedia) */
42 PIX ( pbm_ascii, &pnm_image_type,
43       "P1\n"
44       "# This is an example bitmap of the letter \"J\"\n"
45       "6 10\n"
46       "0 0 0 0 1 0\n"
47       "0 0 0 0 1 0\n"
48       "0 0 0 0 1 0\n"
49       "0 0 0 0 1 0\n"
50       "0 0 0 0 1 0\n"
51       "0 0 0 0 1 0\n"
52       "1 0 0 0 1 0\n"
53       "0 1 1 1 0 0\n"
54       "0 0 0 0 0 0\n"
55       "0 0 0 0 0 0\n",
56       6, 10,
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 ) );
67
68 /** PGM ASCII example (from Wikipedia) */
69 PIX ( pgm_ascii, &pnm_image_type,
70       "P2\n"
71       "# Shows the word \"FEEP\" (example from Netpbm man page on PGM)\n"
72       "24 7\n"
73       "15\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"
81       , 24, 7,
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 ) );
110
111 /** PPM ASCII example (from Wikipedia) */
112 PIX ( ppm_ascii, &pnm_image_type,
113       "P3\n"
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"
116       "3 2\n"
117       "255\n"
118       "255   0   0     0 255   0     0   0 255\n"
119       "255 255   0   255 255 255     0   0   0\n",
120       3, 2,
121       DATA ( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xffffff, 0x000000 ) );
122
123 /** PBM ASCII with no space between pixel values */
124 PIX ( pbm_ascii_no_space, &pnm_image_type,
125       "P1\n"
126       "3 3\n"
127       "001\n"
128       "010\n"
129       "111\n",
130       3, 3,
131       DATA ( 0xffffff, 0xffffff, 0x000000, 0xffffff, 0x000000, 0xffffff,
132              0x000000, 0x000000, 0x000000 ) );
133
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,
141              0x00, 0x00 ),
142       6, 10,
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 ) );
153
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,
172              0x00, 0x00, 0x00 ),
173       24, 7,
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 ) );
202
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 ),
208       3, 2,
209       DATA ( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xffffff, 0x000000 ) );
210
211 /**
212  * Perform PNM self-test
213  *
214  */
215 static void pnm_test_exec ( void ) {
216
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 );
224 }
225
226 /** PNM self-test */
227 struct self_test pnm_test __self_test = {
228         .name = "pnm",
229         .exec = pnm_test_exec,
230 };