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