Add license.
[gnulib.git] / tests / test-base64.c
1 /* Recode strings between character sets, using iconv.
2    Copyright (C) 2004 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 2, or (at your option)
8    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 along
16    with this program; if not, write to the Free Software Foundation,
17    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
18
19 #include "base64.h"
20
21 #include <stdio.h>
22 #include <string.h>
23
24 int
25 main (int argc, char *argv[])
26 {
27   const char *in = "abcdefghijklmnop";
28   const char *b64in = "YWJjZGVmZw==";
29   char out[255];
30   char *p;
31   size_t len;
32   bool ok;
33
34   memset (out, 0x42, sizeof (out));
35   base64_encode (in, 0, out, 0);
36   if (out[0] != '\x42')
37     fprintf (stderr, "failure\n");
38
39   memset (out, 0x42, sizeof (out));
40   base64_encode (in, 1, out, 1);
41   if (memcmp (out, "YQ==", 1) != 0)
42     {
43       out[4] = '\0';
44       fprintf (stderr, "failure (%s)\n", out);
45     }
46
47   memset (out, 0x42, sizeof (out));
48   base64_encode (in, 1, out, 2);
49   if (memcmp (out, "YQ==", 2) != 0)
50     {
51       out[4] = '\0';
52       fprintf (stderr, "failure (%s)\n", out);
53     }
54
55   memset (out, 0x42, sizeof (out));
56   base64_encode (in, 1, out, 3);
57   if (memcmp (out, "YQ==", 3) != 0)
58     {
59       out[4] = '\0';
60       fprintf (stderr, "failure (%s)\n", out);
61     }
62
63   memset (out, 0x42, sizeof (out));
64   base64_encode (in, 1, out, 4);
65   if (memcmp (out, "YQ==", 4) != 0)
66     {
67       out[4] = '\0';
68       fprintf (stderr, "failure (%s)\n", out);
69     }
70
71   memset (out, 0x42, sizeof (out));
72   base64_encode (in, 1, out, 8);
73   if (memcmp (out, "YQ==", 4) != 0)
74     {
75       out[4] = '\0';
76       fprintf (stderr, "failure (%s)\n", out);
77     }
78
79   memset (out, 0x42, sizeof (out));
80   base64_encode (in, 2, out, 4);
81   if (memcmp (out, "YWI=", 4) != 0)
82     {
83       out[4] = '\0';
84       fprintf (stderr, "failure (%s)\n", out);
85     }
86
87   memset (out, 0x42, sizeof (out));
88   base64_encode (in, 3, out, 4);
89   if (memcmp (out, "YWJj", 4) != 0)
90     {
91       out[4] = '\0';
92       fprintf (stderr, "failure (%s)\n", out);
93     }
94
95   memset (out, 0x42, sizeof (out));
96   base64_encode (in, 4, out, 5);
97   if (memcmp (out, "YWJjZA==", 5) != 0)
98     {
99       out[5] = '\0';
100       fprintf (stderr, "failure (%s)\n", out);
101     }
102
103   memset (out, 0x42, sizeof (out));
104   base64_encode (in, 4, out, 100);
105   if (memcmp (out, "YWJjZA==", 6) != 0)
106     {
107       out[6] = '\0';
108       fprintf (stderr, "failure (%s)\n", out);
109     }
110
111   /* Decode. */
112
113   memset (out, 0x42, sizeof (out));
114   len = 0;
115   ok = base64_decode (b64in, 4, out, &len);
116   if (!ok)
117     fprintf (stderr, "decode failed\n");
118   if (len != 0)
119     fprintf (stderr, "failure (%d)\n", len);
120
121   memset (out, 0x42, sizeof (out));
122   len = 1;
123   ok = base64_decode (b64in, 4, out, &len);
124   if (!ok)
125     fprintf (stderr, "decode failed\n");
126   if (len != 1 || memcmp (out, "abcdefg", 1) != 0)
127     {
128       out[2] = '\0';
129       fprintf (stderr, "failure (%d: %s)\n", len, out);
130     }
131
132   memset (out, 0x42, sizeof (out));
133   len = 2;
134   ok = base64_decode (b64in, 4, out, &len);
135   if (!ok)
136     fprintf (stderr, "decode failed\n");
137   if (len != 2 || memcmp (out, "abcdefg", 2) != 0)
138     {
139       out[3] = '\0';
140       fprintf (stderr, "failure (%d: %s)\n", len, out);
141     }
142
143   memset (out, 0x42, sizeof (out));
144   len = 3;
145   ok = base64_decode (b64in, 4, out, &len);
146   if (!ok)
147     fprintf (stderr, "decode failed\n");
148   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
149     {
150       out[4] = '\0';
151       fprintf (stderr, "failure (%d: %s)\n", len, out);
152     }
153
154   memset (out, 0x42, sizeof (out));
155   len = 4;
156   ok = base64_decode (b64in, 4, out, &len);
157   if (!ok)
158     fprintf (stderr, "decode failed\n");
159   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
160     {
161       out[3] = '\0';
162       fprintf (stderr, "failure (%d: %s)\n", len, out);
163     }
164
165   memset (out, 0x42, sizeof (out));
166   len = 100;
167   ok = base64_decode (b64in, strlen (b64in), out, &len);
168   if (!ok)
169     fprintf (stderr, "decode failed\n");
170   if (len != 7 || memcmp (out, "abcdefg", 7) != 0)
171     {
172       out[7] = '\0';
173       fprintf (stderr, "failure (%d: %s)\n", len, out);
174     }
175
176   return 0;
177 }