Add base64.
[gnulib.git] / tests / test-base64.c
1 #include "base64.h"
2
3 #include <stdio.h>
4 #include <string.h>
5
6 int
7 main (int argc, char *argv[])
8 {
9   const char *in = "abcdefghijklmnop";
10   const char *b64in = "YWJjZGVmZw==";
11   char out[255];
12   char *p;
13   size_t len;
14   bool ok;
15
16   memset (out, 0x42, sizeof (out));
17   base64_encode (in, 0, out, 0);
18   if (out[0] != '\x42')
19     fprintf (stderr, "failure\n");
20
21   memset (out, 0x42, sizeof (out));
22   base64_encode (in, 1, out, 1);
23   if (memcmp (out, "YQ==", 1) != 0)
24     {
25       out[4] = '\0';
26       fprintf (stderr, "failure (%s)\n", out);
27     }
28
29   memset (out, 0x42, sizeof (out));
30   base64_encode (in, 1, out, 2);
31   if (memcmp (out, "YQ==", 2) != 0)
32     {
33       out[4] = '\0';
34       fprintf (stderr, "failure (%s)\n", out);
35     }
36
37   memset (out, 0x42, sizeof (out));
38   base64_encode (in, 1, out, 3);
39   if (memcmp (out, "YQ==", 3) != 0)
40     {
41       out[4] = '\0';
42       fprintf (stderr, "failure (%s)\n", out);
43     }
44
45   memset (out, 0x42, sizeof (out));
46   base64_encode (in, 1, out, 4);
47   if (memcmp (out, "YQ==", 4) != 0)
48     {
49       out[4] = '\0';
50       fprintf (stderr, "failure (%s)\n", out);
51     }
52
53   memset (out, 0x42, sizeof (out));
54   base64_encode (in, 1, out, 8);
55   if (memcmp (out, "YQ==", 4) != 0)
56     {
57       out[4] = '\0';
58       fprintf (stderr, "failure (%s)\n", out);
59     }
60
61   memset (out, 0x42, sizeof (out));
62   base64_encode (in, 2, out, 4);
63   if (memcmp (out, "YWI=", 4) != 0)
64     {
65       out[4] = '\0';
66       fprintf (stderr, "failure (%s)\n", out);
67     }
68
69   memset (out, 0x42, sizeof (out));
70   base64_encode (in, 3, out, 4);
71   if (memcmp (out, "YWJj", 4) != 0)
72     {
73       out[4] = '\0';
74       fprintf (stderr, "failure (%s)\n", out);
75     }
76
77   memset (out, 0x42, sizeof (out));
78   base64_encode (in, 4, out, 5);
79   if (memcmp (out, "YWJjZA==", 5) != 0)
80     {
81       out[5] = '\0';
82       fprintf (stderr, "failure (%s)\n", out);
83     }
84
85   memset (out, 0x42, sizeof (out));
86   base64_encode (in, 4, out, 100);
87   if (memcmp (out, "YWJjZA==", 6) != 0)
88     {
89       out[6] = '\0';
90       fprintf (stderr, "failure (%s)\n", out);
91     }
92
93   /* Decode. */
94
95   memset (out, 0x42, sizeof (out));
96   len = 0;
97   ok = base64_decode (b64in, 4, out, &len);
98   if (!ok)
99     fprintf (stderr, "decode failed\n");
100   if (len != 0)
101     fprintf (stderr, "failure (%d)\n", len);
102
103   memset (out, 0x42, sizeof (out));
104   len = 1;
105   ok = base64_decode (b64in, 4, out, &len);
106   if (!ok)
107     fprintf (stderr, "decode failed\n");
108   if (len != 1 || memcmp (out, "abcdefg", 1) != 0)
109     {
110       out[2] = '\0';
111       fprintf (stderr, "failure (%d: %s)\n", len, out);
112     }
113
114   memset (out, 0x42, sizeof (out));
115   len = 2;
116   ok = base64_decode (b64in, 4, out, &len);
117   if (!ok)
118     fprintf (stderr, "decode failed\n");
119   if (len != 2 || memcmp (out, "abcdefg", 2) != 0)
120     {
121       out[3] = '\0';
122       fprintf (stderr, "failure (%d: %s)\n", len, out);
123     }
124
125   memset (out, 0x42, sizeof (out));
126   len = 3;
127   ok = base64_decode (b64in, 4, out, &len);
128   if (!ok)
129     fprintf (stderr, "decode failed\n");
130   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
131     {
132       out[4] = '\0';
133       fprintf (stderr, "failure (%d: %s)\n", len, out);
134     }
135
136   memset (out, 0x42, sizeof (out));
137   len = 4;
138   ok = base64_decode (b64in, 4, out, &len);
139   if (!ok)
140     fprintf (stderr, "decode failed\n");
141   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
142     {
143       out[3] = '\0';
144       fprintf (stderr, "failure (%d: %s)\n", len, out);
145     }
146
147   memset (out, 0x42, sizeof (out));
148   len = 100;
149   ok = base64_decode (b64in, strlen (b64in), out, &len);
150   if (!ok)
151     fprintf (stderr, "decode failed\n");
152   if (len != 7 || memcmp (out, "abcdefg", 7) != 0)
153     {
154       out[7] = '\0';
155       fprintf (stderr, "failure (%d: %s)\n", len, out);
156     }
157
158   return 0;
159 }