]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/duration/LanguageTestRoot.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / duration / LanguageTestRoot.java
1 /*\r
2 ******************************************************************************\r
3 * Copyright (C) 2007-2008, International Business Machines Corporation and   *\r
4 * others. All Rights Reserved.                                               *\r
5 ******************************************************************************\r
6 */\r
7 \r
8 // Copyright 2006 Google Inc.  All Rights Reserved.\r
9 \r
10 package com.ibm.icu.dev.test.duration;\r
11 \r
12 import com.ibm.icu.dev.test.TestFmwk;\r
13 \r
14 import com.ibm.icu.impl.duration.*;\r
15 import com.ibm.icu.impl.duration.impl.DataRecord.*;\r
16 \r
17 import java.io.BufferedReader;\r
18 import java.io.InputStream;\r
19 import java.io.InputStreamReader;\r
20 import java.io.PrintWriter;\r
21 import java.util.ArrayList;\r
22 import java.util.HashMap;\r
23 import java.util.List;\r
24 import java.util.Map;\r
25 \r
26 /**\r
27  * Test cases for en\r
28  */\r
29 public class LanguageTestRoot extends TestFmwk implements TimeUnitConstants {\r
30 \r
31     private static final TimeUnit[] units = {\r
32         TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.WEEK, TimeUnit.DAY, TimeUnit.HOUR, \r
33         TimeUnit.MINUTE, TimeUnit.SECOND, TimeUnit.MILLISECOND\r
34     };\r
35 \r
36     protected boolean inheritTargets() {\r
37         return true;\r
38     }\r
39 \r
40     private static final BasicPeriodFormatterService pfs = BasicPeriodFormatterService\r
41             .getInstance();\r
42 \r
43     private TestData data;\r
44     private String locale;\r
45 \r
46     //private DurationFormatterFactory dfFactory;\r
47     private PeriodFormatterFactory pfFactory;\r
48     private PeriodBuilderFactory pbFactory;\r
49 \r
50     private PrintWriter pw;\r
51 \r
52     private static final Map datacache = new HashMap(); // String->TestData\r
53 \r
54     private static final long[] approxDurations = {\r
55         36525L*24*60*60*10, 3045*24*60*60*10L, 7*24*60*60*1000L, 24*60*60*1000L, \r
56         60*60*1000L, 60*1000L, 1000L, 1L\r
57     };\r
58 \r
59     private static long approximateDuration(TimeUnit unit) {\r
60         return approxDurations[unit.ordinal()];\r
61     }\r
62 \r
63     private static TestData getTestData(String locale) {\r
64         // debug\r
65         if (locale.equals("testFullPluralizedForms")) {\r
66             Thread.dumpStack();\r
67         }\r
68         TestData data = (TestData) datacache.get(locale);\r
69         if (data == null) {\r
70             try {\r
71                 InputStream is = LanguageTestRoot.class\r
72                         .getResourceAsStream("testdata/testdata_" + locale\r
73                                 + ".txt");\r
74                 // debug\r
75                 if (is == null) {\r
76                     System.out.println("test data for locale '" + locale\r
77                             + "' is null");\r
78                 }\r
79                 InputStreamReader isr = new InputStreamReader(is, "UTF-8");\r
80                 data = new FileTestData(isr);\r
81             } catch (Exception e) {\r
82                 System.err.println(e.getMessage());\r
83                 // swallow any exception\r
84             }\r
85         }\r
86         return data;\r
87     }\r
88 \r
89     public LanguageTestRoot(String locale, boolean ignore) {\r
90         this(getTestData(locale), locale);\r
91     }\r
92 \r
93     public LanguageTestRoot(TestData data, String locale) {\r
94         if (data == null) {\r
95             data = DefaultData.getInstance();\r
96         }\r
97         this.data = data;\r
98         this.locale = locale;\r
99     }\r
100 \r
101     public static void writeData(PrintWriter pw, String locale)\r
102             throws Exception {\r
103         LanguageTestRoot test = new LanguageTestRoot(DefaultData.getInstance(),\r
104                 locale);\r
105         test.writeData(pw);\r
106     }\r
107 \r
108     private void writeData(PrintWriter writer) throws Exception {\r
109 /*\r
110       pw = writer;\r
111       setUp();\r
112       testFullPluralizedForms();\r
113       tearDown();\r
114       setUp();\r
115       testMediumForms();\r
116       tearDown();\r
117       setUp();\r
118       testShortForms();\r
119       tearDown();\r
120       setUp();\r
121       testCustomMinutes();\r
122       tearDown();\r
123       setUp();\r
124       testLimitedUnits();\r
125       tearDown();\r
126       setUp();\r
127       testHalfUnits();\r
128       tearDown();\r
129       setUp();\r
130       testFractionalUnits();\r
131       tearDown();\r
132       setUp();\r
133       testMultipleUnits();\r
134       tearDown();\r
135       pw = null;\r
136       writer.flush();\r
137 */\r
138     }\r
139 \r
140     protected void xAssertEquals(String msg, String[] expected, int n,\r
141             String actual) {\r
142         if (pw != null) {\r
143             pw.println(actual);\r
144         } else {\r
145             // java doesn't dump enough context to be useful, so do it myself\r
146             if (actual == null) {\r
147                 assertEquals(msg, expected[n], actual);\r
148             } else {\r
149                 if (!actual.equals(expected[n])) {\r
150                     fail("\n(!!"\r
151                             + msg\r
152                             + ") "\r
153                             + asciify("expected '" + expected[n]\r
154                                     + "' but got '" + actual + "'"));\r
155                 }\r
156             }\r
157         }\r
158     }\r
159 \r
160     protected static String timestring(Period ts) {\r
161         StringBuffer buf = new StringBuffer();\r
162         if (ts.isMoreThan()) {\r
163             buf.append("mt");\r
164         } else if (ts.isLessThan()) {\r
165             buf.append("lt");\r
166         }\r
167         for (int i = 0; i < units.length; ++i) {\r
168             TimeUnit p = units[i];\r
169             if (ts.isSet(p)) {\r
170                 buf.append(Float.toString(ts.getCount(p)));\r
171                 buf.append(p.toString().charAt(0));\r
172             }\r
173         }\r
174         buf.append(ts.isInPast() ? "p" : "f");\r
175         return buf.toString();\r
176     }\r
177 \r
178     protected static String asciify(String s) {\r
179         StringBuffer sb = null;\r
180         for (int i = 0, e = s.length(); i < e; ++i) {\r
181             char c = s.charAt(i);\r
182             if (c < 0x20 || c > 0x7e) {\r
183                 if (sb == null) {\r
184                     sb = new StringBuffer();\r
185                     sb.append(s.substring(0, i));\r
186                 }\r
187                 sb.append("\\u");\r
188                 if (c < 0x10) {\r
189                     sb.append("000");\r
190                 } else if (c < 0x100) {\r
191                     sb.append("00");\r
192                 } else if (c < 0x1000) {\r
193                     sb.append("0");\r
194                 }\r
195                 sb.append(Integer.toHexString(c));\r
196             } else {\r
197                 if (sb != null) {\r
198                     sb.append(c);\r
199                 }\r
200             }\r
201         }\r
202         if (sb != null) {\r
203             System.out.println("asciify '" + s + "' --> '" + sb.toString()\r
204                     + "'");\r
205         }\r
206         return sb == null ? s : sb.toString();\r
207     }\r
208 \r
209     private void xAssertEquals(String[] expected, int n, String actual) {\r
210         xAssertEquals(null, expected, n, actual);\r
211     }\r
212 \r
213     protected void setUp() throws Exception {\r
214         pfFactory = pfs.newPeriodFormatterFactory().setLocale(locale);\r
215         pbFactory = pfs.newPeriodBuilderFactory().setLocale(locale);\r
216     }\r
217 \r
218     public void testFullPluralizedForms() throws Exception {\r
219         setUp();\r
220         int[] counts = data.getFullPluralizedFormCounts();\r
221         String[] targets = data.getFullPluralizedFormTargets();\r
222         if (pw != null) {\r
223             pw.println("=fullPluralizedFormCounts");\r
224             for (int i = 0; i < counts.length; ++i) {\r
225                 int c = counts[i];\r
226                 pw.println(String.valueOf(c));\r
227             }\r
228             pw.println("=fullPluralizedFormTargets");\r
229         }\r
230 \r
231         int n = 0;\r
232         PeriodFormatter pf = pfFactory.getFormatter();\r
233         for (int i = 0; i < units.length; ++i) {\r
234             TimeUnit u = units[i];\r
235             // System.err.print("\nunit: " + u);\r
236             PeriodBuilder pb = pbFactory.getFixedUnitBuilder(u);\r
237             for (int j = 0; j < counts.length; ++j) {\r
238                 int c = counts[j];\r
239                 // System.err.println("\ncount[" + j + "]: " + c);\r
240                 Period p = pb.create(approximateDuration(u) * c);\r
241                 String string = pf.format(p);\r
242                 xAssertEquals(u.toString() + c, targets, n++, string);\r
243             }\r
244         }\r
245     }\r
246 \r
247     public void testMediumForms() throws Exception {\r
248         setUp();\r
249         String[] targets = data.getMediumFormTargets();\r
250 \r
251         if (pw != null) {\r
252             pw.println("=mediumFormTargets");\r
253         }\r
254 \r
255         pfFactory.setUnitVariant(EUnitVariant.MEDIUM);\r
256         pfFactory.setDisplayPastFuture(false);\r
257         PeriodFormatter pf = pfFactory.getFormatter();\r
258         int n = 0;\r
259         for (int i = 0; i < units.length; ++i) {\r
260             TimeUnit u = units[i];\r
261             PeriodBuilder pb = pbFactory.getFixedUnitBuilder(u);\r
262             Period p = pb.create(approximateDuration(u) * 3);\r
263             String string = pf.format(p);\r
264             xAssertEquals(u.toString(), targets, n++, string);\r
265         }\r
266     }\r
267 \r
268     public void testShortForms() throws Exception {\r
269         setUp();\r
270         String[] targets = data.getShortFormTargets();\r
271 \r
272         if (pw != null) {\r
273             pw.println("=shortFormTargets");\r
274         }\r
275 \r
276         pfFactory.setUnitVariant(EUnitVariant.SHORT);\r
277         pfFactory.setDisplayPastFuture(false);\r
278         PeriodFormatter pf = pfFactory.getFormatter();\r
279         int n = 0;\r
280         for (int i = 0; i < units.length; ++i) {\r
281             TimeUnit u = units[i];\r
282             PeriodBuilder pb = pbFactory.getFixedUnitBuilder(u);\r
283             Period p = pb.create(approximateDuration(u) * 3);\r
284             String string = pf.format(p);\r
285             xAssertEquals(u.toString(), targets, n++, string);\r
286         }\r
287     }\r
288 \r
289     public void testCustomMinutes() throws Exception {\r
290         setUp();\r
291         String[] targets = data.getCustomMinuteTargets();\r
292 \r
293         if (pw != null) {\r
294             pw.println("=customMinuteTargets");\r
295         }\r
296 \r
297         pfFactory.setCountVariant(ECountVariant.INTEGER_CUSTOM);\r
298         pfFactory.setDisplayPastFuture(false);\r
299         PeriodFormatter pf = pfFactory.getFormatter();\r
300 \r
301         Period p = Period.at(1, HOUR);\r
302         int n = 0;\r
303         for (int i = 1; i < 12; ++i) {\r
304             p = p.and(i * 5, MINUTE).omit(HOUR);\r
305             xAssertEquals(targets, n++, pf.format(p));\r
306             p = p.and(1, HOUR);\r
307             xAssertEquals(targets, n++, pf.format(p));\r
308         }\r
309     }\r
310 \r
311     public void testLimitedUnits() throws Exception {\r
312         setUp();\r
313         String[] targets = data.getLimitedUnitTargets();\r
314 \r
315         if (pw != null) {\r
316             pw.println("=limitedPeriodTargets");\r
317         }\r
318 \r
319         Period p = Period.at(1, MONTH);\r
320         int n = 0;\r
321         for (int i = 0; i < 3; ++i) {\r
322             switch (i) {\r
323             case 0:\r
324                 p = p.at();\r
325                 break;\r
326             case 1:\r
327                 p = p.lessThan();\r
328                 break;\r
329             case 2:\r
330                 p = p.moreThan();\r
331                 break;\r
332             }\r
333             for (int j = 0; j < 3; ++j) {\r
334                 pfFactory.setDisplayPastFuture(true);\r
335                 switch (j) {\r
336                 case 0:\r
337                     pfFactory.setDisplayPastFuture(false);\r
338                     break;\r
339                 case 1:\r
340                     p = p.inPast();\r
341                     break;\r
342                 case 2:\r
343                     p = p.inFuture();\r
344                     break;\r
345                 }\r
346 \r
347                 PeriodFormatter pf = pfFactory.getFormatter();\r
348 \r
349                 p = p.omit(WEEK).omit(DAY);\r
350                 xAssertEquals(targets, n++, pf.format(p));\r
351 \r
352                 p = p.and(2, WEEK);\r
353                 xAssertEquals(targets, n++, pf.format(p));\r
354 \r
355                 p = p.and(3, DAY);\r
356                 xAssertEquals(targets, n++, pf.format(p));\r
357             }\r
358         }\r
359 \r
360         p = p.omit(MONTH).omit(WEEK).omit(DAY).and(1, HOUR);\r
361         for (int i = 0; i < 3; ++i) {\r
362             switch (i) {\r
363             case 0:\r
364                 p = p.at();\r
365                 break;\r
366             case 1:\r
367                 p = p.lessThan();\r
368                 break;\r
369             case 2:\r
370                 p = p.moreThan();\r
371                 break;\r
372             }\r
373             for (int j = 0; j < 3; ++j) {\r
374                 pfFactory.setDisplayPastFuture(true);\r
375                 switch (j) {\r
376                 case 0:\r
377                     pfFactory.setDisplayPastFuture(false);\r
378                     break;\r
379                 case 1:\r
380                     p = p.inPast();\r
381                     break;\r
382                 case 2:\r
383                     p = p.inFuture();\r
384                     break;\r
385                 }\r
386 \r
387                 PeriodFormatter pf = pfFactory.getFormatter();\r
388 \r
389                 p = p.omit(MINUTE).omit(SECOND);\r
390                 xAssertEquals(targets, n++, pf.format(p));\r
391 \r
392                 p = p.and(2, MINUTE);\r
393                 xAssertEquals(targets, n++, pf.format(p));\r
394 \r
395                 p = p.and(3, SECOND);\r
396                 xAssertEquals(targets, n++, pf.format(p));\r
397             }\r
398         }\r
399     }\r
400 \r
401     public void testHalfUnits() throws Exception {\r
402         setUp();\r
403         int[] counts = data.getHalfUnitCounts();\r
404         String[] targets = data.getHalfUnitTargets();\r
405 \r
406         if (pw != null) {\r
407             pw.println("=halfPeriodCounts");\r
408             for (int i = 0; i < counts.length; ++i) {\r
409                 int c = counts[i];\r
410                 pw.println(String.valueOf(c));\r
411             }\r
412             pw.println("=halfPeriodTargets");\r
413         }\r
414 \r
415         pfFactory.setCountVariant(ECountVariant.HALF_FRACTION);\r
416         pfFactory.setDisplayPastFuture(false);\r
417         PeriodFormatter pf = pfFactory.getFormatter();\r
418 \r
419         int n = 0;\r
420         for (int i = 0; i < units.length; ++i) {\r
421             TimeUnit u = units[i];\r
422             for (int j = 0; j < counts.length; ++j) {\r
423                 int c = counts[j];\r
424                 Period p = Period.at(c + .5f, u);\r
425                 String string = pf.format(p);\r
426                 xAssertEquals(u.toString(), targets, n++, string);\r
427             }\r
428         }\r
429     }\r
430 \r
431     public void testFractionalUnits() throws Exception {\r
432         setUp();\r
433         float[] counts = data.getFractionalUnitCounts();\r
434         String[] targets = data.getFractionalUnitTargets();\r
435 \r
436         if (pw != null) {\r
437             pw.println("=fractionalPeriodCounts");\r
438             for (int i = 0; i < counts.length; ++i) {\r
439                 float c = counts[i];\r
440                 pw.println(String.valueOf(c));\r
441             }\r
442             pw.println("=fractionalPeriodTargets");\r
443         }\r
444 \r
445         pfFactory.setCountVariant(ECountVariant.DECIMAL2);\r
446         pfFactory.setDisplayPastFuture(false);\r
447         PeriodFormatter pf = pfFactory.getFormatter();\r
448 \r
449         int n = 0;\r
450         for (int i = 0; i < units.length; ++i) {\r
451             TimeUnit u = units[i];\r
452             for (int j = 0; j < counts.length; ++j) {\r
453                 float c = counts[j];\r
454                 Period p = Period.at(c, u);\r
455                 String string = pf.format(p);\r
456                 xAssertEquals(u.toString(), targets, n++, string);\r
457             }\r
458         }\r
459     }\r
460 \r
461     public void testMultipleUnits() throws Exception {\r
462         setUp();\r
463         String[] targets = data.getMultipleUnitTargets();\r
464 \r
465         if (pw != null) {\r
466             pw.println("=multiplePeriodTargets");\r
467         }\r
468 \r
469         pfFactory.setCountVariant(ECountVariant.INTEGER);\r
470         pfFactory.setDisplayPastFuture(false);\r
471         PeriodFormatter pf = pfFactory.getFormatter();\r
472 \r
473         int n = 0;\r
474         for (int i = 0; i < units.length - 1; ++i) {\r
475             Period p = Period.at(1, units[i]).and(2, units[i + 1]);\r
476             xAssertEquals(targets, n++, pf.format(p));\r
477             if (i < units.length - 2) {\r
478                 p = Period.at(1, units[i]).and(3, units[i + 2]);\r
479                 xAssertEquals(targets, n++, pf.format(p));\r
480                 p = Period.at(1, units[i]).and(2, units[i + 1]).and(3,\r
481                         units[i + 2]);\r
482                 xAssertEquals(targets, n++, pf.format(p));\r
483             }\r
484         }\r
485     }\r
486 \r
487     public static abstract class TestData {\r
488         abstract int[] getFullPluralizedFormCounts();\r
489         abstract String[] getFullPluralizedFormTargets();\r
490         abstract String[] getMediumFormTargets();\r
491         abstract String[] getShortFormTargets();\r
492         abstract String[] getCustomMinuteTargets();\r
493         abstract String[] getLimitedUnitTargets();\r
494         abstract int[] getHalfUnitCounts();\r
495         abstract String[] getHalfUnitTargets();\r
496         abstract float[] getFractionalUnitCounts();\r
497         abstract String[] getFractionalUnitTargets();\r
498         abstract String[] getMultipleUnitTargets();\r
499     }\r
500 \r
501 }\r
502 \r
503 class FileTestData extends LanguageTestRoot.TestData {\r
504     private int[] fullPluralizedFormCounts;\r
505     private String[] fullPluralizedFormTargets;\r
506     private String[] mediumFormTargets;\r
507     private String[] shortFormTargets;\r
508     private String[] customMinuteTargets;\r
509     private String[] limitedUnitTargets;\r
510     private int[] halfUnitCounts;\r
511     private String[] halfUnitTargets;\r
512     private float[] fractionalUnitCounts;\r
513     private String[] fractionalUnitTargets;\r
514     private String[] multipleUnitTargets;\r
515 \r
516     int[] getFullPluralizedFormCounts() {\r
517         return fullPluralizedFormCounts;\r
518     }\r
519 \r
520     String[] getFullPluralizedFormTargets() {\r
521         return fullPluralizedFormTargets;\r
522     }\r
523 \r
524     String[] getMediumFormTargets() {\r
525         return mediumFormTargets;\r
526     }\r
527 \r
528     String[] getShortFormTargets() {\r
529         return shortFormTargets;\r
530     }\r
531 \r
532     String[] getCustomMinuteTargets() {\r
533         return customMinuteTargets;\r
534     }\r
535 \r
536     String[] getLimitedUnitTargets() {\r
537         return limitedUnitTargets;\r
538     }\r
539 \r
540     int[] getHalfUnitCounts() {\r
541         return halfUnitCounts;\r
542     }\r
543 \r
544     String[] getHalfUnitTargets() {\r
545         return halfUnitTargets;\r
546     }\r
547 \r
548     float[] getFractionalUnitCounts() {\r
549         return fractionalUnitCounts;\r
550     }\r
551 \r
552     String[] getFractionalUnitTargets() {\r
553         return fractionalUnitTargets;\r
554     }\r
555 \r
556     String[] getMultipleUnitTargets() {\r
557         return multipleUnitTargets;\r
558     }\r
559 \r
560     public FileTestData(InputStreamReader isr) throws Exception {\r
561         BufferedReader br = new BufferedReader(isr);\r
562 \r
563         class Wrapup {\r
564             int[] intArray;\r
565 \r
566             float[] floatArray;\r
567 \r
568             String[] stringArray;\r
569 \r
570             void wrapup(List /* of String */list, Element element) {\r
571                 if (list == null)\r
572                     return;\r
573 \r
574                 switch (element.mode) {\r
575                 case EMode.mString:\r
576                     stringArray = (String[]) list.toArray(new String[list\r
577                             .size()]);\r
578                     break;\r
579 \r
580                 case EMode.mInt:\r
581                     intArray = new int[list.size()];\r
582                     for (int i = 0, e = intArray.length; i < e; ++i) {\r
583                         intArray[i] = Integer.parseInt((String) list.get(i));\r
584                     }\r
585                     break;\r
586 \r
587                 case EMode.mFloat:\r
588                     floatArray = new float[list.size()];\r
589                     for (int i = 0, e = floatArray.length; i < e; ++i) {\r
590                         floatArray[i] = Float.parseFloat((String) list.get(i));\r
591                     }\r
592                     break;\r
593                 }\r
594 \r
595                 switch (element.which) {\r
596                 case Element.XfullPluralizedFormCounts:\r
597                     FileTestData.this.fullPluralizedFormCounts = intArray;\r
598                     break;\r
599                 case Element.XfullPluralizedFormTargets:\r
600                     FileTestData.this.fullPluralizedFormTargets = stringArray;\r
601                     break;\r
602                 case Element.XmediumFormTargets:\r
603                     FileTestData.this.mediumFormTargets = stringArray;\r
604                     break;\r
605                 case Element.XshortFormTargets:\r
606                     FileTestData.this.shortFormTargets = stringArray;\r
607                     break;\r
608                 case Element.XcustomMinuteTargets:\r
609                     FileTestData.this.customMinuteTargets = stringArray;\r
610                     break;\r
611                 case Element.XlimitedUnitTargets:\r
612                     FileTestData.this.limitedUnitTargets = stringArray;\r
613                     break;\r
614                 case Element.XhalfUnitCounts:\r
615                     FileTestData.this.halfUnitCounts = intArray;\r
616                     break;\r
617                 case Element.XhalfUnitTargets:\r
618                     FileTestData.this.halfUnitTargets = stringArray;\r
619                     break;\r
620                 case Element.XfractionalUnitCounts:\r
621                     FileTestData.this.fractionalUnitCounts = floatArray;\r
622                     break;\r
623                 case Element.XfractionalUnitTargets:\r
624                     FileTestData.this.fractionalUnitTargets = stringArray;\r
625                     break;\r
626                 case Element.XmultipleUnitTargets:\r
627                     FileTestData.this.multipleUnitTargets = stringArray;\r
628                     break;\r
629                 }\r
630             }\r
631         }\r
632         Wrapup w = new Wrapup();\r
633 \r
634         List /* of String */list = null;\r
635         Element element = null;\r
636         String line = null;\r
637         while (null != (line = br.readLine())) {\r
638             line = line.trim();\r
639             if (line.length() == 0 || line.charAt(0) == '#')\r
640                 continue;\r
641             if (line.charAt(0) == '=') {\r
642                 w.wrapup(list, element);\r
643 \r
644                 list = new ArrayList();\r
645                 element = Element.forString(line.substring(1));\r
646             } else if (line.equals("null")) {\r
647                 list.add(null);\r
648             } else {\r
649                 list.add(line);\r
650             }\r
651         }\r
652         w.wrapup(list, element);\r
653     }\r
654 }\r
655 \r
656 class DefaultData extends LanguageTestRoot.TestData {\r
657     private static final int[] fullPluralizedFormCounts = { -3, -2, -1, 0, 1,\r
658             2, 3, 5, 10, 11, 12, 20, 21, 22, 23, 25 };\r
659 \r
660     private static final int[] halfUnitCounts = { 0, 1, 2, 5, 10, 11, 12, 20,\r
661             21, 22 };\r
662 \r
663     private static final float[] fractionalUnitCounts = { 0.025f, 1.0f, 1.205f,\r
664             2.125f, 12.05f };\r
665 \r
666     private static final DefaultData instance = new DefaultData();\r
667 \r
668     private DefaultData() {\r
669     }\r
670 \r
671     public static DefaultData getInstance() {\r
672         return instance;\r
673     }\r
674 \r
675     int[] getFullPluralizedFormCounts() {\r
676         return fullPluralizedFormCounts;\r
677     }\r
678 \r
679     String[] getFullPluralizedFormTargets() {\r
680         return null;\r
681     }\r
682 \r
683     String[] getMediumFormTargets() {\r
684         return null;\r
685     }\r
686 \r
687     String[] getShortFormTargets() {\r
688         return null;\r
689     }\r
690 \r
691     String[] getCustomMinuteTargets() {\r
692         return null;\r
693     }\r
694 \r
695     String[] getLimitedUnitTargets() {\r
696         return null;\r
697     }\r
698 \r
699     int[] getHalfUnitCounts() {\r
700         return halfUnitCounts;\r
701     }\r
702 \r
703     String[] getHalfUnitTargets() {\r
704         return null;\r
705     }\r
706 \r
707     float[] getFractionalUnitCounts() {\r
708         return fractionalUnitCounts;\r
709     }\r
710 \r
711     String[] getFractionalUnitTargets() {\r
712         return null;\r
713     }\r
714 \r
715     String[] getMultipleUnitTargets() {\r
716         return null;\r
717     }\r
718 }\r
719 \r
720 class EMode {\r
721     static final int mString = 0;\r
722     static final int mInt = 1;\r
723     static final int mFloat = 2;\r
724 }\r
725 \r
726 class Element {\r
727     final String name;\r
728     final int mode;\r
729     final int which;\r
730 \r
731     static int counter = 0;\r
732     static Element[] list = new Element[11];\r
733 \r
734     Element(String name) {\r
735         this.name = name;\r
736         mode = EMode.mString;\r
737         this.which = counter++;\r
738         list[this.which] = this;\r
739     }\r
740 \r
741     Element(String name, int mode) {\r
742         this.name = name;\r
743         this.mode = mode;\r
744         this.which = counter++;\r
745         list[this.which] = this;\r
746     }\r
747 \r
748     static final int XfullPluralizedFormCounts = 0;\r
749     static final int XfullPluralizedFormTargets = 1;\r
750     static final int XmediumFormTargets = 2;\r
751     static final int XshortFormTargets = 3;\r
752     static final int XcustomMinuteTargets = 4;\r
753     static final int XlimitedUnitTargets = 5;\r
754     static final int XhalfUnitCounts = 6;\r
755     static final int XhalfUnitTargets = 7;\r
756     static final int XfractionalUnitCounts = 8;\r
757     static final int XfractionalUnitTargets = 9;\r
758     static final int XmultipleUnitTargets = 10;\r
759 \r
760     static final Element fullPluralizedFormCounts = new Element(\r
761             "fullPluralizedFormCounts", EMode.mInt);\r
762 \r
763     static final Element fullPluralizedFormTargets = new Element(\r
764             "fullPluralizedFormTargets");\r
765 \r
766     static final Element mediumFormTargets = new Element("mediumFormTargets");\r
767 \r
768     static final Element shortFormTargets = new Element("shortFormTargets");\r
769 \r
770     static final Element customMinuteTargets = new Element(\r
771             "customMinuteTargets");\r
772 \r
773     static final Element limitedUnitTargets = new Element("limitedUnitTargets");\r
774 \r
775     static final Element halfUnitCounts = new Element("halfUnitCounts",\r
776             EMode.mInt);\r
777 \r
778     static final Element halfUnitTargets = new Element("halfUnitTargets");\r
779 \r
780     static final Element fractionalUnitCounts = new Element(\r
781             "fractionalUnitCounts", EMode.mFloat);\r
782 \r
783     static final Element fractionalUnitTargets = new Element(\r
784             "fractionalUnitTargets");\r
785 \r
786     static final Element multipleUnitTargets = new Element(\r
787             "multipleUnitTargets");\r
788 \r
789     static Element forString(String s) {\r
790         for (int i = 0; i < list.length; ++i) {\r
791             if (list[i].name.equals(s)) {\r
792                 return list[i];\r
793             }\r
794         }\r
795         return null;\r
796     }\r
797 }\r
798       \r