tests/test-base64.c: Cast size_t to unsigned long when invoking printf. Use %lu...
[gnulib.git] / tests / test-base64.c
1 /* Self tests for base64.
2    Copyright (C) 2004, 2008 Free Software Foundation, Inc.
3    Written by Simon Josefsson.
4
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #include <config.h>
19
20 #include <stddef.h>
21 #include <stdio.h>
22 #include <stdbool.h>
23 #include <string.h>
24
25 #include "base64.h"
26
27 int
28 main (int argc, char *argv[])
29 {
30   const char *in = "abcdefghijklmnop";
31   const char *b64in = "YWJjZGVmZw==";
32   char out[255];
33   size_t len;
34   bool ok;
35
36   memset (out, 0x42, sizeof (out));
37   base64_encode (in, 0, out, 0);
38   if (out[0] != '\x42')
39     fprintf (stderr, "failure\n");
40
41   memset (out, 0x42, sizeof (out));
42   base64_encode (in, 1, out, 1);
43   if (memcmp (out, "YQ==", 1) != 0)
44     {
45       out[4] = '\0';
46       fprintf (stderr, "failure (%s)\n", out);
47     }
48
49   memset (out, 0x42, sizeof (out));
50   base64_encode (in, 1, out, 2);
51   if (memcmp (out, "YQ==", 2) != 0)
52     {
53       out[4] = '\0';
54       fprintf (stderr, "failure (%s)\n", out);
55     }
56
57   memset (out, 0x42, sizeof (out));
58   base64_encode (in, 1, out, 3);
59   if (memcmp (out, "YQ==", 3) != 0)
60     {
61       out[4] = '\0';
62       fprintf (stderr, "failure (%s)\n", out);
63     }
64
65   memset (out, 0x42, sizeof (out));
66   base64_encode (in, 1, out, 4);
67   if (memcmp (out, "YQ==", 4) != 0)
68     {
69       out[4] = '\0';
70       fprintf (stderr, "failure (%s)\n", out);
71     }
72
73   memset (out, 0x42, sizeof (out));
74   base64_encode (in, 1, out, 8);
75   if (memcmp (out, "YQ==", 4) != 0)
76     {
77       out[4] = '\0';
78       fprintf (stderr, "failure (%s)\n", out);
79     }
80
81   memset (out, 0x42, sizeof (out));
82   base64_encode (in, 2, out, 4);
83   if (memcmp (out, "YWI=", 4) != 0)
84     {
85       out[4] = '\0';
86       fprintf (stderr, "failure (%s)\n", out);
87     }
88
89   memset (out, 0x42, sizeof (out));
90   base64_encode (in, 3, out, 4);
91   if (memcmp (out, "YWJj", 4) != 0)
92     {
93       out[4] = '\0';
94       fprintf (stderr, "failure (%s)\n", out);
95     }
96
97   memset (out, 0x42, sizeof (out));
98   base64_encode (in, 4, out, 5);
99   if (memcmp (out, "YWJjZA==", 5) != 0)
100     {
101       out[5] = '\0';
102       fprintf (stderr, "failure (%s)\n", out);
103     }
104
105   memset (out, 0x42, sizeof (out));
106   base64_encode (in, 4, out, 100);
107   if (memcmp (out, "YWJjZA==", 6) != 0)
108     {
109       out[6] = '\0';
110       fprintf (stderr, "failure (%s)\n", out);
111     }
112
113   /* Decode. */
114
115   memset (out, 0x42, sizeof (out));
116   len = 0;
117   ok = base64_decode (b64in, 4, out, &len);
118   if (!ok)
119     fprintf (stderr, "decode failed\n");
120   if (len != 0)
121     fprintf (stderr, "failure (%ul)\n", (unsigned long) len);
122
123   memset (out, 0x42, sizeof (out));
124   len = 1;
125   ok = base64_decode (b64in, 4, out, &len);
126   if (!ok)
127     fprintf (stderr, "decode failed\n");
128   if (len != 1 || memcmp (out, "abcdefg", 1) != 0)
129     {
130       out[2] = '\0';
131       fprintf (stderr, "failure (%ul: %s)\n", (unsigned long) len, out);
132     }
133
134   memset (out, 0x42, sizeof (out));
135   len = 2;
136   ok = base64_decode (b64in, 4, out, &len);
137   if (!ok)
138     fprintf (stderr, "decode failed\n");
139   if (len != 2 || memcmp (out, "abcdefg", 2) != 0)
140     {
141       out[3] = '\0';
142       fprintf (stderr, "failure (%ul: %s)\n", (unsigned long) len, out);
143     }
144
145   memset (out, 0x42, sizeof (out));
146   len = 3;
147   ok = base64_decode (b64in, 4, out, &len);
148   if (!ok)
149     fprintf (stderr, "decode failed\n");
150   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
151     {
152       out[4] = '\0';
153       fprintf (stderr, "failure (%ul: %s)\n", (unsigned long) len, out);
154     }
155
156   memset (out, 0x42, sizeof (out));
157   len = 4;
158   ok = base64_decode (b64in, 4, out, &len);
159   if (!ok)
160     fprintf (stderr, "decode failed\n");
161   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
162     {
163       out[3] = '\0';
164       fprintf (stderr, "failure (%ul: %s)\n", (unsigned long) len, out);
165     }
166
167   memset (out, 0x42, sizeof (out));
168   len = 100;
169   ok = base64_decode (b64in, strlen (b64in), out, &len);
170   if (!ok)
171     fprintf (stderr, "decode failed\n");
172   if (len != 7 || memcmp (out, "abcdefg", 7) != 0)
173     {
174       out[7] = '\0';
175       fprintf (stderr, "failure (%ul: %s)\n", (unsigned long) len, out);
176     }
177
178   return 0;
179 }