2005-07-14 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / corlib / Mono.Globalization.Unicode / TestDriver.cs
1 using System;
2 using System.Globalization;
3
4 using Uni = Mono.Globalization.Unicode.MSCompatUnicodeTable;
5
6 namespace Mono.Globalization.Unicode
7 {
8         class TestDriver
9         {
10                 SimpleCollator coll = new SimpleCollator (CultureInfo.InvariantCulture);
11
12                 #region Testing bits
13
14                 static void Main (string [] args)
15                 {
16                         if (args.Length > 0 && args [0] == "--generate")
17                                 new TestDriver ().Generate ();
18                         if (args.Length > 0 && args [0] == "--check")
19                                 new TestDriver ().CheckCultures ();
20                         else
21                                 new TestDriver ().Run ();
22                 }
23
24                 void CheckCultures ()
25                 {
26                         foreach (CultureInfo ci in CultureInfo.GetCultures (
27                                 CultureTypes.AllCultures))
28                                 Console.WriteLine ("Culture {0}({1}) : OK: {2}", ci.LCID, ci.Name, new SimpleCollator (ci));
29                 }
30
31                 void Run ()
32                 {
33 //IsSuffix ("\u00E6", "ae", CompareOptions.None);
34 IsSuffix ("ae", "\u00E6", CompareOptions.None);
35 //LastIndexOf ("AE", "A", 1, 2, CompareOptions.None);
36 //LastIndexOf ("\u00C6", "AE", CompareOptions.None);
37 return;
38                         /*
39                         DumpSortKey ("AE");
40                         DumpSortKey ("\u00C6");
41                         DumpSortKey ("ABCABC", 5, 1, CompareOptions.IgnoreCase);
42                         DumpSortKey ("-");
43                         DumpSortKey ("--");
44                         DumpSortKey ("A-B-C");
45                         DumpSortKey ("A\u0304");
46                         DumpSortKey ("\u0100");
47
48                         Compare ("1", "2");
49                         Compare ("A", "a");
50                         Compare ("A", "a", CompareOptions.IgnoreCase);
51                         Compare ("\uFF10", "0", CompareOptions.IgnoreWidth);
52                         Compare ("\uFF21", "a", CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
53                         Compare ("12", "1");
54                         Compare ("AE", "\u00C6");
55                         Compare ("AB\u01c0C", "A\u01c0B\u01c0C", CompareOptions.IgnoreSymbols);
56                         Compare ("A\u0304", "\u0100"); // diacritical weight addition
57                         Compare ("ABCABC", 5, 1, "c", 0, 1, CompareOptions.IgnoreCase);
58                         Compare ("-d:NET_1_1", 0, 1, "-", 0, 1, CompareOptions.None);
59
60                         IndexOf ("ABC", '1', CompareOptions.None);
61                         IndexOf ("ABCABC", 'c', CompareOptions.IgnoreCase);
62                         IndexOf ("ABCABC", '\uFF22', CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
63                         IndexOf ("ABCDE", '\u0117', CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
64                         IndexOf ("ABCABC", 'B', 1, 5, CompareOptions.IgnoreCase);
65                         IndexOf ("\u00E6", 'a', CompareOptions.None);
66
67                         LastIndexOf ("ABC", '1', CompareOptions.None);
68                         LastIndexOf ("ABCABC", 'c', CompareOptions.IgnoreCase);
69                         LastIndexOf ("ABCABC", '\uFF22', CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
70                         LastIndexOf ("ABCDE", '\u0117', CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
71
72                         IsPrefix ("ABC", "c", CompareOptions.IgnoreCase);
73                         IsPrefix ("BC", "c", CompareOptions.IgnoreCase);
74                         IsPrefix ("C", "c", CompareOptions.IgnoreCase);
75                         IsPrefix ("EDCBA", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
76                         IsPrefix ("ABC", "AB", CompareOptions.IgnoreCase);
77                         IsPrefix ("ae", "\u00E6", CompareOptions.None);
78                         IsPrefix ("\u00E6", "ae", CompareOptions.None);
79                         IsPrefix ("\u00E6", "a", CompareOptions.None);
80                         IsPrefix ("\u00E6s", "ae", CompareOptions.None);
81                         IsPrefix ("\u00E6", "aes", CompareOptions.None);
82                         IsPrefix ("--start", "--", CompareOptions.None);
83                         IsPrefix ("-d:NET_1_1", "-", CompareOptions.None);
84                         IsPrefix ("-d:NET_1_1", "@", CompareOptions.None);
85
86                         IsSuffix ("ABC", "c", CompareOptions.IgnoreCase);
87                         IsSuffix ("BC", "c", CompareOptions.IgnoreCase);
88                         IsSuffix ("CBA", "c", CompareOptions.IgnoreCase);
89                         IsSuffix ("ABCDE", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
90                         IsSuffix ("\u00E6", "a", CompareOptions.None);
91                         IsSuffix ("\u00E6", "e", CompareOptions.None);
92                         IsSuffix ("\u00E6", "ae", CompareOptions.None);
93                         IsSuffix ("ae", "\u00E6", CompareOptions.None);
94                         IsSuffix ("e", "\u00E6", CompareOptions.None);
95
96                         IndexOf ("ABC", "1", CompareOptions.None);
97                         IndexOf ("ABCABC", "c", CompareOptions.IgnoreCase);
98                         IndexOf ("ABCABC", "\uFF22", CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
99                         IndexOf ("ABCDE", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
100                         IndexOf ("ABCABC", "BC", CompareOptions.IgnoreCase);
101                         IndexOf ("BBCBBC", "BC", CompareOptions.IgnoreCase);
102                         IndexOf ("ABCDEF", "BCD", 0, 3, CompareOptions.IgnoreCase);
103                         IndexOf ("-ABC", "-", CompareOptions.None);
104                         IndexOf ("--ABC", "--", CompareOptions.None);
105
106                         LastIndexOf ("ABC", "1", CompareOptions.None);
107                         LastIndexOf ("ABCABC", "c", CompareOptions.IgnoreCase);
108                         LastIndexOf ("ABCABC", "\uFF22", CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
109                         LastIndexOf ("ABCDE", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
110                         LastIndexOf ("ABCABC", "BC", CompareOptions.IgnoreCase);
111                         LastIndexOf ("BBCBBC", "BC", CompareOptions.IgnoreCase);
112                         LastIndexOf ("original", "rig", CompareOptions.None);
113                         LastIndexOf ("\u00E6", "ae", CompareOptions.None);
114                         LastIndexOf ("-ABC", "-", CompareOptions.None);
115                         LastIndexOf ("--ABC", "--", CompareOptions.None);
116                         */
117
118                         coll = new SimpleCollator (new CultureInfo ("hu"));
119                         DumpSortKey ("ZSAZS1");
120                         IsSuffix ("zs", "z", CompareOptions.None);
121                         IsSuffix ("zs", "s", CompareOptions.None);
122                         IsSuffix ("zs", "zs", CompareOptions.None);
123                         IsSuffix ("sz", "z", CompareOptions.None);
124                         IsSuffix ("sz", "s", CompareOptions.None);
125                         IsSuffix ("--ABC", "--", CompareOptions.None);
126                         IsSuffix ("ABC--", "--", CompareOptions.None);
127
128 /*
129                         coll = new SimpleCollator (new CultureInfo (""));
130                         Compare ("c\u00F4te", "cot\u00E9");
131                         DumpSortKey ("c\u00F4te");
132                         DumpSortKey ("cot\u00E9");
133                         coll = new SimpleCollator (new CultureInfo ("fr"));
134                         Compare ("c\u00F4te", "cot\u00E9");
135                         DumpSortKey ("c\u00F4te");
136                         DumpSortKey ("cot\u00E9");
137 */
138                 }
139
140                 void Generate ()
141                 {
142                         // dump sortkey for every single character.
143                         for (int i = 0; i <= char.MaxValue; i++) {
144                                 byte [] data = coll.GetSortKey (new string ((char) i, 1), CompareOptions.StringSort).KeyData;
145                                 if (data.Length == 5 && data [0] == 1 && data [1] == 1 &&
146                                         data [2] == 1 && data [3] == 1 && data [4] == 0)
147                                         continue;
148                                 foreach (byte b in data)
149                                         Console.Write ("{0:X02} ", b);
150                                 Console.WriteLine (" : {0:X04}, {1}",
151                                         i, Char.GetUnicodeCategory ((char) i));
152                         }
153                 }
154
155                 void Compare (string s1, string s2)
156                 {
157                         Compare (s1, s2, CompareOptions.None);
158                 }
159
160                 void Compare (string s1, string s2, CompareOptions opt)
161                 {
162                         Console.Error.WriteLine ("compare ({3}): {0} {1} / {2}",
163                                 coll.Compare (s1, s2, opt), s1, s2, opt);
164                 }
165
166                 void Compare (string s1, int idx1, int len1, string s2, int idx2, int len2, CompareOptions opt)
167                 {
168                         Console.Error.WriteLine ("compare ({3} {4} {5} {6} {7}): {0} {1} / {2}",
169                                 coll.Compare (s1, idx1, len1, s2, idx2, len2, opt), s1, s2,
170                                         opt, idx1, len1, idx2, len2);
171                 }
172
173                 void IndexOf (string s, char c, CompareOptions opt)
174                 {
175                         IndexOf (s, c, 0, s.Length, opt);
176                 }
177
178                 void IndexOf (string s, char c, int idx, int len, CompareOptions opt)
179                 {
180                         Console.Error.WriteLine ("cIndex ({3} {4} {5}): {0} {1} / {2}",
181                                 coll.IndexOf (s, c, idx, len, opt), s, c, opt, idx, len);
182                 }
183
184                 void IndexOf (string s1, string s2, CompareOptions opt)
185                 {
186                         IndexOf (s1, s2, 0, s1.Length, opt);
187                 }
188
189                 void IndexOf (string s1, string s2, int idx, int len, CompareOptions opt)
190                 {
191                         Console.Error.WriteLine ("sIndex ({3} {4} {5}): {0} {1} / {2}",
192                                 coll.IndexOf (s1, s2, idx, len, opt), s1, s2, opt, idx, len);
193                 }
194
195                 void IsPrefix (string s1, string s2, CompareOptions opt)
196                 {
197                         Console.Error.WriteLine ("prefix ({3}): {0} {1} / {2}",
198                                 coll.IsPrefix (s1, s2, opt), s1, s2, opt);
199                 }
200
201                 void LastIndexOf (string s, char c, CompareOptions opt)
202                 {
203                         Console.Error.WriteLine ("cLast ({3}): {0} {1} / {2}",
204                                 coll.LastIndexOf (s, c, opt), s, c, opt);
205                 }
206
207                 void LastIndexOf (string s1, string s2, CompareOptions opt)
208                 {
209                         Console.Error.WriteLine ("sLast ({3}): {0} {1} / {2}",
210                                 coll.LastIndexOf (s1, s2, opt), s1, s2, opt);
211                 }
212
213                 void LastIndexOf (string s1, string s2, int idx, int len, CompareOptions opt)
214                 {
215                         Console.Error.WriteLine ("sLast ({3},{4},{5}): {0} {1} / {2}",
216                                 coll.LastIndexOf (s1, s2, idx, len, opt), s1, s2, opt, idx, len);
217                 }
218
219                 void IsSuffix (string s1, string s2, CompareOptions opt)
220                 {
221                         Console.Error.WriteLine ("suffix ({3}): {0} {1} / {2}",
222                                 coll.IsSuffix (s1, s2, opt), s1, s2, opt);
223                 }
224
225                 void DumpSortKey (string s)
226                 {
227                         DumpSortKey (s, 0, s.Length, CompareOptions.None);
228                 }
229
230                 void DumpSortKey (string s, int idx, int len, CompareOptions opt)
231                 {
232                         byte [] data = coll.GetSortKey (s, idx, len, opt).KeyData;
233                         foreach (byte b in data)
234                                 Console.Error.Write ("{0:X02} ", b);
235                         Console.Error.WriteLine (" : {0} ({1} {2} {3})", s, opt, idx, len);
236                 }
237
238                 #endregion
239         }
240 }