2 using System.Globalization;
4 using Uni = Mono.Globalization.Unicode.MSCompatUnicodeTable;
6 namespace Mono.Globalization.Unicode
10 SimpleCollator coll = new SimpleCollator (CultureInfo.InvariantCulture);
14 static void Main (string [] args)
16 if (args.Length > 0 && args [0] == "--generate")
17 new TestDriver ().Generate ();
18 if (args.Length > 0 && args [0] == "--check")
19 new TestDriver ().CheckCultures ();
21 new TestDriver ().Run ();
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));
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 Compare ("\u30D0\u30FC\u30B9", "\uFF8A\uFF9E\uFF70\uFF7D", CompareOptions.IgnoreNonSpace);
41 DumpSortKey ("\u00C6");
42 DumpSortKey ("ABCABC", 5, 1, CompareOptions.IgnoreCase);
45 DumpSortKey ("A-B-C");
46 DumpSortKey ("A\u0304");
47 DumpSortKey ("\u0100");
51 Compare ("A", "a", CompareOptions.IgnoreCase);
52 Compare ("\uFF10", "0", CompareOptions.IgnoreWidth);
53 Compare ("\uFF21", "a", CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
55 Compare ("AE", "\u00C6");
56 Compare ("AB\u01c0C", "A\u01c0B\u01c0C", CompareOptions.IgnoreSymbols);
57 Compare ("A\u0304", "\u0100"); // diacritical weight addition
58 Compare ("ABCABC", 5, 1, "c", 0, 1, CompareOptions.IgnoreCase);
59 Compare ("-d:NET_1_1", 0, 1, "-", 0, 1, CompareOptions.None);
61 IndexOf ("ABC", '1', CompareOptions.None);
62 IndexOf ("ABCABC", 'c', CompareOptions.IgnoreCase);
63 IndexOf ("ABCABC", '\uFF22', CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
64 IndexOf ("ABCDE", '\u0117', CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
65 IndexOf ("ABCABC", 'B', 1, 5, CompareOptions.IgnoreCase);
66 IndexOf ("\u00E6", 'a', CompareOptions.None);
68 LastIndexOf ("ABC", '1', CompareOptions.None);
69 LastIndexOf ("ABCABC", 'c', CompareOptions.IgnoreCase);
70 LastIndexOf ("ABCABC", '\uFF22', CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
71 LastIndexOf ("ABCDE", '\u0117', CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
73 IsPrefix ("ABC", "c", CompareOptions.IgnoreCase);
74 IsPrefix ("BC", "c", CompareOptions.IgnoreCase);
75 IsPrefix ("C", "c", CompareOptions.IgnoreCase);
76 IsPrefix ("EDCBA", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
77 IsPrefix ("ABC", "AB", CompareOptions.IgnoreCase);
78 IsPrefix ("ae", "\u00E6", CompareOptions.None);
79 IsPrefix ("\u00E6", "ae", CompareOptions.None);
80 IsPrefix ("\u00E6", "a", CompareOptions.None);
81 IsPrefix ("\u00E6s", "ae", CompareOptions.None);
82 IsPrefix ("\u00E6", "aes", CompareOptions.None);
83 IsPrefix ("--start", "--", CompareOptions.None);
84 IsPrefix ("-d:NET_1_1", "-", CompareOptions.None);
85 IsPrefix ("-d:NET_1_1", "@", CompareOptions.None);
87 IsSuffix ("ABC", "c", CompareOptions.IgnoreCase);
88 IsSuffix ("BC", "c", CompareOptions.IgnoreCase);
89 IsSuffix ("CBA", "c", CompareOptions.IgnoreCase);
90 IsSuffix ("ABCDE", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
91 IsSuffix ("\u00E6", "a", CompareOptions.None);
92 IsSuffix ("\u00E6", "e", CompareOptions.None);
93 IsSuffix ("\u00E6", "ae", CompareOptions.None);
94 IsSuffix ("ae", "\u00E6", CompareOptions.None);
95 IsSuffix ("e", "\u00E6", CompareOptions.None);
97 IndexOf ("ABC", "1", CompareOptions.None);
98 IndexOf ("ABCABC", "c", CompareOptions.IgnoreCase);
99 IndexOf ("ABCABC", "\uFF22", CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
100 IndexOf ("ABCDE", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
101 IndexOf ("ABCABC", "BC", CompareOptions.IgnoreCase);
102 IndexOf ("BBCBBC", "BC", CompareOptions.IgnoreCase);
103 IndexOf ("ABCDEF", "BCD", 0, 3, CompareOptions.IgnoreCase);
104 IndexOf ("-ABC", "-", CompareOptions.None);
105 IndexOf ("--ABC", "--", CompareOptions.None);
107 LastIndexOf ("ABC", "1", CompareOptions.None);
108 LastIndexOf ("ABCABC", "c", CompareOptions.IgnoreCase);
109 LastIndexOf ("ABCABC", "\uFF22", CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth);
110 LastIndexOf ("ABCDE", "\u0117", CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
111 LastIndexOf ("ABCABC", "BC", CompareOptions.IgnoreCase);
112 LastIndexOf ("BBCBBC", "BC", CompareOptions.IgnoreCase);
113 LastIndexOf ("original", "rig", CompareOptions.None);
114 LastIndexOf ("\u00E6", "ae", CompareOptions.None);
115 LastIndexOf ("-ABC", "-", CompareOptions.None);
116 LastIndexOf ("--ABC", "--", CompareOptions.None);
119 coll = new SimpleCollator (new CultureInfo ("hu"));
120 DumpSortKey ("ZSAZS1");
121 IsSuffix ("zs", "z", CompareOptions.None);
122 IsSuffix ("zs", "s", CompareOptions.None);
123 IsSuffix ("zs", "zs", CompareOptions.None);
124 IsSuffix ("sz", "z", CompareOptions.None);
125 IsSuffix ("sz", "s", CompareOptions.None);
126 IsSuffix ("--ABC", "--", CompareOptions.None);
127 IsSuffix ("ABC--", "--", CompareOptions.None);
130 coll = new SimpleCollator (new CultureInfo (""));
131 Compare ("c\u00F4te", "cot\u00E9");
132 DumpSortKey ("c\u00F4te");
133 DumpSortKey ("cot\u00E9");
134 coll = new SimpleCollator (new CultureInfo ("fr"));
135 Compare ("c\u00F4te", "cot\u00E9");
136 DumpSortKey ("c\u00F4te");
137 DumpSortKey ("cot\u00E9");
143 // dump sortkey for every single character.
144 for (int i = 0; i <= char.MaxValue; i++) {
145 byte [] data = coll.GetSortKey (new string ((char) i, 1), CompareOptions.StringSort).KeyData;
146 if (data.Length == 5 && data [0] == 1 && data [1] == 1 &&
147 data [2] == 1 && data [3] == 1 && data [4] == 0)
149 foreach (byte b in data)
150 Console.Write ("{0:X02} ", b);
151 Console.WriteLine (" : {0:X04}, {1}",
152 i, Char.GetUnicodeCategory ((char) i));
156 void Compare (string s1, string s2)
158 Compare (s1, s2, CompareOptions.None);
161 void Compare (string s1, string s2, CompareOptions opt)
163 Console.Error.WriteLine ("compare ({3}): {0} {1} / {2}",
164 coll.Compare (s1, s2, opt), s1, s2, opt);
167 void Compare (string s1, int idx1, int len1, string s2, int idx2, int len2, CompareOptions opt)
169 Console.Error.WriteLine ("compare ({3} {4} {5} {6} {7}): {0} {1} / {2}",
170 coll.Compare (s1, idx1, len1, s2, idx2, len2, opt), s1, s2,
171 opt, idx1, len1, idx2, len2);
174 void IndexOf (string s, char c, CompareOptions opt)
176 IndexOf (s, c, 0, s.Length, opt);
179 void IndexOf (string s, char c, int idx, int len, CompareOptions opt)
181 Console.Error.WriteLine ("cIndex ({3} {4} {5}): {0} {1} / {2}",
182 coll.IndexOf (s, c, idx, len, opt), s, c, opt, idx, len);
185 void IndexOf (string s1, string s2, CompareOptions opt)
187 IndexOf (s1, s2, 0, s1.Length, opt);
190 void IndexOf (string s1, string s2, int idx, int len, CompareOptions opt)
192 Console.Error.WriteLine ("sIndex ({3} {4} {5}): {0} {1} / {2}",
193 coll.IndexOf (s1, s2, idx, len, opt), s1, s2, opt, idx, len);
196 void IsPrefix (string s1, string s2, CompareOptions opt)
198 Console.Error.WriteLine ("prefix ({3}): {0} {1} / {2}",
199 coll.IsPrefix (s1, s2, opt), s1, s2, opt);
202 void LastIndexOf (string s, char c, CompareOptions opt)
204 Console.Error.WriteLine ("cLast ({3}): {0} {1} / {2}",
205 coll.LastIndexOf (s, c, opt), s, c, opt);
208 void LastIndexOf (string s1, string s2, CompareOptions opt)
210 Console.Error.WriteLine ("sLast ({3}): {0} {1} / {2}",
211 coll.LastIndexOf (s1, s2, opt), s1, s2, opt);
214 void LastIndexOf (string s1, string s2, int idx, int len, CompareOptions opt)
216 Console.Error.WriteLine ("sLast ({3},{4},{5}): {0} {1} / {2}",
217 coll.LastIndexOf (s1, s2, idx, len, opt), s1, s2, opt, idx, len);
220 void IsSuffix (string s1, string s2, CompareOptions opt)
222 Console.Error.WriteLine ("suffix ({3}): {0} {1} / {2}",
223 coll.IsSuffix (s1, s2, opt), s1, s2, opt);
226 void DumpSortKey (string s)
228 DumpSortKey (s, 0, s.Length, CompareOptions.None);
231 void DumpSortKey (string s, int idx, int len, CompareOptions opt)
233 byte [] data = coll.GetSortKey (s, idx, len, opt).KeyData;
234 foreach (byte b in data)
235 Console.Error.Write ("{0:X02} ", b);
236 Console.Error.WriteLine (" : {0} ({1} {2} {3})", s, opt, idx, len);