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