]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/timescale/TimeScaleMonkeyTest.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / timescale / TimeScaleMonkeyTest.java
1 /*\r
2  **************************************************************************\r
3  * Copyright (C) 2004, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                           *\r
5  **************************************************************************\r
6  *\r
7  */\r
8 \r
9 package com.ibm.icu.dev.test.timescale;\r
10 \r
11 import com.ibm.icu.dev.test.TestFmwk;\r
12 import com.ibm.icu.util.UniversalTimeScale;\r
13 import com.ibm.icu.math.BigDecimal;\r
14 import java.util.Random;\r
15 \r
16 /**\r
17  * This class tests the UniversalTimeScale class by\r
18  * generating ramdon values in range and making sure\r
19  * that they round-trip correctly.\r
20  */\r
21 public class TimeScaleMonkeyTest extends TestFmwk\r
22 {\r
23 \r
24     /**\r
25      * The default constructor.\r
26      */\r
27     public TimeScaleMonkeyTest()\r
28     {\r
29     }\r
30     \r
31     private static final int LOOP_COUNT = 1000;\r
32     private static final BigDecimal longMax = new BigDecimal(Long.MAX_VALUE);\r
33     \r
34     private Random ran = null;\r
35     \r
36     private long ranInt;\r
37     private long ranMin;\r
38     private long ranMax;\r
39     \r
40     private void initRandom(long min, long max)\r
41     {\r
42         BigDecimal interval = new BigDecimal(max).subtract(new BigDecimal(min));\r
43         \r
44         ranMin = min;\r
45         ranMax = max;\r
46         ranInt = 0;\r
47         \r
48         if (ran == null) {\r
49             ran = createRandom();\r
50         }\r
51         \r
52         if (interval.compareTo(longMax) < 0) {\r
53             ranInt = interval.longValue();\r
54         }\r
55     }\r
56     \r
57     private final long randomInRange()\r
58     {\r
59         long value;\r
60         \r
61         if (ranInt != 0) {\r
62             value = ran.nextLong() % ranInt;\r
63             \r
64             if (value < 0) {\r
65                 value = -value;\r
66             }\r
67             \r
68             value += ranMin;\r
69         } else {\r
70             do {\r
71                 value = ran.nextLong();\r
72             } while (value < ranMin || value > ranMax);\r
73         }\r
74         \r
75         return value;\r
76     }\r
77     \r
78     public void TestRoundTrip()\r
79     {\r
80         for (int scale = 0; scale < UniversalTimeScale.MAX_SCALE; scale += 1) {\r
81             long fromMin = UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.FROM_MIN_VALUE);\r
82             long fromMax = UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.FROM_MAX_VALUE);\r
83             int i = 0;\r
84             \r
85             initRandom(fromMin, fromMax);\r
86             \r
87             while (i < LOOP_COUNT) {\r
88                 long value = randomInRange();\r
89                                 \r
90                 long rt = UniversalTimeScale.toLong(UniversalTimeScale.from(value, scale), scale);\r
91                 \r
92                 if (rt != value) {\r
93                     errln("Round-trip error: time scale = " + scale + ", value = " + value + ", round-trip = " + rt);\r
94                 }\r
95                 \r
96                 i += 1;\r
97             }\r
98         }\r
99     }\r
100 \r
101     public static void main(String[] args)\r
102     {\r
103         new TimeScaleMonkeyTest().run(args);\r
104     }\r
105 }\r