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