]> git.draconx.ca Git - dxcommon.git/blob - t/copysym.c
DX_C_ALIGNAS: Work around bash-5 parsing bug.
[dxcommon.git] / t / copysym.c
1 /*
2  * Copyright © 2023-2024 Nick Bowler
3  *
4  * Tests for the copyright_symbol function.
5  *
6  * License WTFPL2: Do What The Fuck You Want To Public License, version 2.
7  * This is free software: you are free to do what the fuck you want to.
8  * There is NO WARRANTY, to the extent permitted by law.
9  */
10
11 #include <string.h>
12 #include "tap.h"
13
14 #define ENABLE_NLS 1
15 #include "copysym.h"
16
17 static const char *format_str(const char *s)
18 {
19         static char buf[100];
20         size_t pos = 0;
21
22         for (; *s && pos < sizeof buf - 4; s++) {
23                 if (*s == '(' || *s == 'C' || *s == ')') {
24                         buf[pos++] = *s;
25                 } else {
26                         static const char xdigits[16] = "0123456789abcdef";
27                         unsigned char c = *s;
28
29                         buf[pos++] = '\\';
30                         buf[pos++] = 'x';
31                         buf[pos++] = xdigits[(c >> 4) & 0xf];
32                         buf[pos++] = xdigits[c & 0xf];
33                 }
34         }
35
36         buf[pos] = 0;
37         return buf;
38 }
39
40 static void do_test(const char *charset, char *expected)
41 {
42         const char *sym = copyright_symbol(charset);
43         char *quote = charset ? "\"" : "";
44
45         if (!tap_result(!strcmp(sym, expected), "copyright_symbol(%s%s%s)",
46                         quote, charset ? charset : "NULL", quote))
47         {
48                 tap_diag("Failed, unexpected result");
49                 tap_diag("   Received:  %s", format_str(sym));
50                 tap_diag("   Expected:  %s", format_str(expected));
51         }
52 }
53
54 int main(void)
55 {
56         do_test(NULL, "(C)");
57         do_test("ANSI_X3.4-1968", "(C)");
58         do_test("ARMSCII-8", "(C)");
59         do_test("ASCII", "(C)");
60         do_test("BIG5", "(C)");
61         do_test("BIG5-HKSCS", "(C)");
62         do_test("CP1046", "(C)");
63         do_test("CP1124", "(C)");
64         do_test("CP1125", "(C)");
65         do_test("CP1129", "\xa9");
66         do_test("CP1131", "(C)");
67         do_test("CP1250", "\xa9");
68         do_test("CP1251", "\xa9");
69         do_test("CP1252", "\xa9");
70         do_test("CP1253", "\xa9");
71         do_test("CP1254", "\xa9");
72         do_test("CP1255", "\xa9");
73         do_test("CP1256", "\xa9");
74         do_test("CP1257", "\xa9");
75         do_test("CP437", "(C)");
76         do_test("CP775", "\xa8");
77         do_test("CP850", "\xb8");
78         do_test("CP852", "(C)");
79         do_test("CP855", "(C)");
80         do_test("CP856", "\xb8");
81         do_test("CP857", "\xb8");
82         do_test("CP861", "(C)");
83         do_test("CP862", "(C)");
84         do_test("CP864", "(C)");
85         do_test("CP865", "(C)");
86         do_test("CP866", "(C)");
87         do_test("CP869", "\x97");
88         do_test("CP874", "(C)");
89         do_test("CP922", "\xa9");
90         do_test("CP932", "(C)");
91         do_test("CP943", "(C)");
92         do_test("CP949", "(C)");
93         do_test("CP950", "(C)");
94         do_test("DEC-HANYU", "(C)");
95         do_test("DEC-KANJI", "(C)");
96         do_test("EUC-JP", "\x8f\xa2\xed");
97         do_test("EUC-KR", "(C)");
98         do_test("EUC-TW", "(C)");
99         do_test("GB18030", "\x81\x30\x84\x38");
100         do_test("GB2312", "(C)");
101         do_test("GBK", "(C)");
102         do_test("GEORGIAN-PS", "\xa9");
103         do_test("HP-ARABIC8", "(C)");
104         do_test("HP-GREEK8", "(C)");
105         do_test("HP-HEBREW8", "(C)");
106         do_test("HP-KANA8", "(C)");
107         do_test("HP-ROMAN8", "(C)");
108         do_test("HP-TURKISH8", "(C)");
109         do_test("ISO-8859-1", "\xa9");
110         do_test("ISO-8859-10", "(C)");
111         do_test("ISO-8859-11", "(C)");
112         do_test("ISO-8859-13", "\xa9");
113         do_test("ISO-8859-14", "\xa9");
114         do_test("ISO-8859-15", "\xa9");
115         do_test("ISO-8859-2", "(C)");
116         do_test("ISO-8859-3", "(C)");
117         do_test("ISO-8859-4", "(C)");
118         do_test("ISO-8859-5", "(C)");
119         do_test("ISO-8859-6", "(C)");
120         do_test("ISO-8859-7", "\xa9");
121         do_test("ISO-8859-8", "\xa9");
122         do_test("ISO-8859-9", "\xa9");
123         do_test("JOHAB", "(C)");
124         do_test("KOI8-R", "\xbf");
125         do_test("KOI8-T", "\xbf");
126         do_test("KOI8-U", "\xbf");
127         do_test("PT154", "\xa9");
128         do_test("SHIFT_JIS", "(C)");
129         do_test("TCVN5712-1", "(C)");
130         do_test("TIS-620", "(C)");
131         do_test("UTF-8", "\xc2\xa9");
132         do_test("VISCII", "(C)");
133
134         do_test("CP1026", "(C)"); /* EBCDIC B4 */
135         do_test("CP1047", "(C)"); /* EBCDIC B4 */
136         do_test("CP1112", "(C)"); /* EBCDIC B4 */
137         do_test("CP1122", "(C)"); /* EBCDIC B4 */
138         do_test("CP1130", "(C)"); /* EBCDIC B4 */
139         do_test("CP1140", "(C)"); /* EBCDIC B4 */
140         do_test("CP1141", "(C)"); /* EBCDIC B4 */
141         do_test("CP1142", "(C)"); /* EBCDIC B4 */
142         do_test("CP1143", "(C)"); /* EBCDIC B4 */
143         do_test("CP1144", "(C)"); /* EBCDIC B4 */
144         do_test("CP1145", "(C)"); /* EBCDIC B4 */
145         do_test("CP1146", "(C)"); /* EBCDIC B4 */
146         do_test("CP1147", "(C)"); /* EBCDIC B4 */
147         do_test("CP1148", "(C)"); /* EBCDIC B4 */
148         do_test("CP1149", "(C)"); /* EBCDIC B4 */
149         do_test("CP1155", "(C)"); /* EBCDIC B4 */
150         do_test("CP1156", "(C)"); /* EBCDIC B4 */
151         do_test("CP1157", "(C)"); /* EBCDIC B4 */
152         do_test("CP1164", "(C)"); /* EBCDIC B4 */
153         do_test("CP273",  "(C)"); /* EBCDIC B4 */
154         do_test("CP277",  "(C)"); /* EBCDIC B4 */
155         do_test("CP278",  "(C)"); /* EBCDIC B4 */
156         do_test("CP280",  "(C)"); /* EBCDIC B4 */
157         do_test("CP284",  "(C)"); /* EBCDIC B4 */
158         do_test("CP285",  "(C)"); /* EBCDIC B4 */
159         do_test("CP297",  "(C)"); /* EBCDIC B4 */
160         do_test("CP424",  "(C)"); /* EBCDIC B4 */
161         do_test("CP500",  "(C)"); /* EBCDIC B4 */
162         do_test("CP871",  "(C)"); /* EBCDIC B4 */
163         do_test("CP875",  "(C)"); /* EBCDIC FB */
164
165         tap_done();
166 }