2 ****************************************************************************
3 * Copyright (C) 2004-2010, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 ****************************************************************************
9 package com.ibm.icu.dev.test.timescale;
11 import java.util.Random;
13 import com.ibm.icu.dev.test.TestFmwk;
14 import com.ibm.icu.math.BigDecimal;
15 import com.ibm.icu.util.UniversalTimeScale;
18 * This class tests the UniversalTimeScale class by
19 * generating ramdon values in range and making sure
20 * that they round-trip correctly.
22 public class TimeScaleMonkeyTest extends TestFmwk
26 * The default constructor.
28 public TimeScaleMonkeyTest()
32 private static final int LOOP_COUNT = 1000;
33 private static final BigDecimal longMax = new BigDecimal(Long.MAX_VALUE);
35 private Random ran = null;
41 private void initRandom(long min, long max)
43 BigDecimal interval = new BigDecimal(max).subtract(new BigDecimal(min));
53 if (interval.compareTo(longMax) < 0) {
54 ranInt = interval.longValue();
58 private final long randomInRange()
63 value = ran.nextLong() % ranInt;
72 value = ran.nextLong();
73 } while (value < ranMin || value > ranMax);
79 public void TestRoundTrip()
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);
86 initRandom(fromMin, fromMax);
88 while (i < LOOP_COUNT) {
89 long value = randomInRange();
91 long rt = UniversalTimeScale.toLong(UniversalTimeScale.from(value, scale), scale);
94 errln("Round-trip error: time scale = " + scale + ", value = " + value + ", round-trip = " + rt);
102 public static void main(String[] args)
104 new TimeScaleMonkeyTest().run(args);