blob: b21fa7d1ad2bc08f744ac7eb74512b4594bc3fc3 [file] [log] [blame]
Calin Juravle8f0d92b2013-08-01 17:26:00 +01001/*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 * Pat Fisher, Mike Judd.
7 */
8
9package jsr166;
10
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010011import static java.util.concurrent.TimeUnit.DAYS;
12import static java.util.concurrent.TimeUnit.HOURS;
13import static java.util.concurrent.TimeUnit.MICROSECONDS;
14import static java.util.concurrent.TimeUnit.MILLISECONDS;
15import static java.util.concurrent.TimeUnit.MINUTES;
16import static java.util.concurrent.TimeUnit.NANOSECONDS;
17import static java.util.concurrent.TimeUnit.SECONDS;
18
Calin Juravle8f0d92b2013-08-01 17:26:00 +010019import java.util.concurrent.CountDownLatch;
20import java.util.concurrent.TimeUnit;
21
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010022import junit.framework.Test;
23import junit.framework.TestSuite;
24
Calin Juravle8f0d92b2013-08-01 17:26:00 +010025public class TimeUnitTest extends JSR166TestCase {
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010026 // android-note: Removed because the CTS runner does a bad job of
27 // retrying tests that have suite() declarations.
28 //
29 // public static void main(String[] args) {
30 // main(suite(), args);
31 // }
32 // public static Test suite() {
Przemyslaw Szczepaniakb8b75112016-03-11 15:59:10 +000033 // return new TestSuite(TimeUnitTest.class);
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010034 // }
Calin Juravle8f0d92b2013-08-01 17:26:00 +010035
36 // (loops to 88888 check increments at all time divisions.)
37
38 /**
39 * convert correctly converts sample values across the units
40 */
41 public void testConvert() {
42 for (long t = 0; t < 88888; ++t) {
43 assertEquals(t*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010044 SECONDS.convert(t, DAYS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010045 assertEquals(t*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010046 SECONDS.convert(t, HOURS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010047 assertEquals(t*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010048 SECONDS.convert(t, MINUTES));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010049 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010050 SECONDS.convert(t, SECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010051 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010052 SECONDS.convert(1000L*t, MILLISECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010053 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010054 SECONDS.convert(1000000L*t, MICROSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010055 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010056 SECONDS.convert(1000000000L*t, NANOSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010057
58 assertEquals(1000L*t*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010059 MILLISECONDS.convert(t, DAYS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010060 assertEquals(1000L*t*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010061 MILLISECONDS.convert(t, HOURS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010062 assertEquals(1000L*t*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010063 MILLISECONDS.convert(t, MINUTES));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010064 assertEquals(1000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010065 MILLISECONDS.convert(t, SECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010066 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010067 MILLISECONDS.convert(t, MILLISECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010068 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010069 MILLISECONDS.convert(1000L*t, MICROSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010070 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010071 MILLISECONDS.convert(1000000L*t, NANOSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010072
73 assertEquals(1000000L*t*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010074 MICROSECONDS.convert(t, DAYS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010075 assertEquals(1000000L*t*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010076 MICROSECONDS.convert(t, HOURS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010077 assertEquals(1000000L*t*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010078 MICROSECONDS.convert(t, MINUTES));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010079 assertEquals(1000000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010080 MICROSECONDS.convert(t, SECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010081 assertEquals(1000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010082 MICROSECONDS.convert(t, MILLISECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010083 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010084 MICROSECONDS.convert(t, MICROSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010085 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010086 MICROSECONDS.convert(1000L*t, NANOSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010087
88 assertEquals(1000000000L*t*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010089 NANOSECONDS.convert(t, DAYS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010090 assertEquals(1000000000L*t*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010091 NANOSECONDS.convert(t, HOURS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010092 assertEquals(1000000000L*t*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010093 NANOSECONDS.convert(t, MINUTES));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010094 assertEquals(1000000000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010095 NANOSECONDS.convert(t, SECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010096 assertEquals(1000000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010097 NANOSECONDS.convert(t, MILLISECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +010098 assertEquals(1000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +010099 NANOSECONDS.convert(t, MICROSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100100 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100101 NANOSECONDS.convert(t, NANOSECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100102 }
103 }
104
105 /**
106 * toNanos correctly converts sample values in different units to
107 * nanoseconds
108 */
109 public void testToNanos() {
110 for (long t = 0; t < 88888; ++t) {
111 assertEquals(t*1000000000L*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100112 DAYS.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100113 assertEquals(t*1000000000L*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100114 HOURS.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100115 assertEquals(t*1000000000L*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100116 MINUTES.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100117 assertEquals(1000000000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100118 SECONDS.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100119 assertEquals(1000000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100120 MILLISECONDS.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100121 assertEquals(1000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100122 MICROSECONDS.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100123 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100124 NANOSECONDS.toNanos(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100125 }
126 }
127
128 /**
129 * toMicros correctly converts sample values in different units to
130 * microseconds
131 */
132 public void testToMicros() {
133 for (long t = 0; t < 88888; ++t) {
134 assertEquals(t*1000000L*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100135 DAYS.toMicros(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100136 assertEquals(t*1000000L*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100137 HOURS.toMicros(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100138 assertEquals(t*1000000L*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100139 MINUTES.toMicros(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100140 assertEquals(1000000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100141 SECONDS.toMicros(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100142 assertEquals(1000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100143 MILLISECONDS.toMicros(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100144 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100145 MICROSECONDS.toMicros(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100146 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100147 NANOSECONDS.toMicros(t*1000L));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100148 }
149 }
150
151 /**
152 * toMillis correctly converts sample values in different units to
153 * milliseconds
154 */
155 public void testToMillis() {
156 for (long t = 0; t < 88888; ++t) {
157 assertEquals(t*1000L*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100158 DAYS.toMillis(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100159 assertEquals(t*1000L*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100160 HOURS.toMillis(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100161 assertEquals(t*1000L*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100162 MINUTES.toMillis(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100163 assertEquals(1000L*t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100164 SECONDS.toMillis(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100165 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100166 MILLISECONDS.toMillis(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100167 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100168 MICROSECONDS.toMillis(t*1000L));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100169 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100170 NANOSECONDS.toMillis(t*1000000L));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100171 }
172 }
173
174 /**
175 * toSeconds correctly converts sample values in different units to
176 * seconds
177 */
178 public void testToSeconds() {
179 for (long t = 0; t < 88888; ++t) {
180 assertEquals(t*60*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100181 DAYS.toSeconds(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100182 assertEquals(t*60*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100183 HOURS.toSeconds(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100184 assertEquals(t*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100185 MINUTES.toSeconds(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100186 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100187 SECONDS.toSeconds(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100188 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100189 MILLISECONDS.toSeconds(t*1000L));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100190 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100191 MICROSECONDS.toSeconds(t*1000000L));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100192 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100193 NANOSECONDS.toSeconds(t*1000000000L));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100194 }
195 }
196
197 /**
198 * toMinutes correctly converts sample values in different units to
199 * minutes
200 */
201 public void testToMinutes() {
202 for (long t = 0; t < 88888; ++t) {
203 assertEquals(t*60*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100204 DAYS.toMinutes(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100205 assertEquals(t*60,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100206 HOURS.toMinutes(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100207 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100208 MINUTES.toMinutes(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100209 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100210 SECONDS.toMinutes(t*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100211 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100212 MILLISECONDS.toMinutes(t*1000L*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100213 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100214 MICROSECONDS.toMinutes(t*1000000L*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100215 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100216 NANOSECONDS.toMinutes(t*1000000000L*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100217 }
218 }
219
220 /**
221 * toHours correctly converts sample values in different units to
222 * hours
223 */
224 public void testToHours() {
225 for (long t = 0; t < 88888; ++t) {
226 assertEquals(t*24,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100227 DAYS.toHours(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100228 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100229 HOURS.toHours(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100230 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100231 MINUTES.toHours(t*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100232 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100233 SECONDS.toHours(t*60*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100234 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100235 MILLISECONDS.toHours(t*1000L*60*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100236 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100237 MICROSECONDS.toHours(t*1000000L*60*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100238 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100239 NANOSECONDS.toHours(t*1000000000L*60*60));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100240 }
241 }
242
243 /**
244 * toDays correctly converts sample values in different units to
245 * days
246 */
247 public void testToDays() {
248 for (long t = 0; t < 88888; ++t) {
249 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100250 DAYS.toDays(t));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100251 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100252 HOURS.toDays(t*24));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100253 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100254 MINUTES.toDays(t*60*24));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100255 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100256 SECONDS.toDays(t*60*60*24));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100257 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100258 MILLISECONDS.toDays(t*1000L*60*60*24));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100259 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100260 MICROSECONDS.toDays(t*1000000L*60*60*24));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100261 assertEquals(t,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100262 NANOSECONDS.toDays(t*1000000000L*60*60*24));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100263 }
264 }
265
266 /**
267 * convert saturates positive too-large values to Long.MAX_VALUE
268 * and negative to LONG.MIN_VALUE
269 */
270 public void testConvertSaturate() {
271 assertEquals(Long.MAX_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100272 NANOSECONDS.convert(Long.MAX_VALUE / 2, SECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100273 assertEquals(Long.MIN_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100274 NANOSECONDS.convert(-Long.MAX_VALUE / 4, SECONDS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100275 assertEquals(Long.MAX_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100276 NANOSECONDS.convert(Long.MAX_VALUE / 2, MINUTES));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100277 assertEquals(Long.MIN_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100278 NANOSECONDS.convert(-Long.MAX_VALUE / 4, MINUTES));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100279 assertEquals(Long.MAX_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100280 NANOSECONDS.convert(Long.MAX_VALUE / 2, HOURS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100281 assertEquals(Long.MIN_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100282 NANOSECONDS.convert(-Long.MAX_VALUE / 4, HOURS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100283 assertEquals(Long.MAX_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100284 NANOSECONDS.convert(Long.MAX_VALUE / 2, DAYS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100285 assertEquals(Long.MIN_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100286 NANOSECONDS.convert(-Long.MAX_VALUE / 4, DAYS));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100287 }
288
289 /**
290 * toNanos saturates positive too-large values to Long.MAX_VALUE
291 * and negative to LONG.MIN_VALUE
292 */
293 public void testToNanosSaturate() {
294 assertEquals(Long.MAX_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100295 MILLISECONDS.toNanos(Long.MAX_VALUE / 2));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100296 assertEquals(Long.MIN_VALUE,
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100297 MILLISECONDS.toNanos(-Long.MAX_VALUE / 3));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100298 }
299
300 /**
301 * toString returns name of unit
302 */
303 public void testToString() {
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100304 assertEquals("SECONDS", SECONDS.toString());
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100305 }
306
307 /**
308 * name returns name of unit
309 */
310 public void testName() {
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100311 assertEquals("SECONDS", SECONDS.name());
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100312 }
313
314 /**
315 * Timed wait without holding lock throws
316 * IllegalMonitorStateException
317 */
318 public void testTimedWait_IllegalMonitorException() {
319 Thread t = newStartedThread(new CheckedRunnable() {
320 public void realRun() throws InterruptedException {
321 Object o = new Object();
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100322 TimeUnit tu = MILLISECONDS;
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100323
324 try {
325 tu.timedWait(o, LONG_DELAY_MS);
326 threadShouldThrow();
327 } catch (IllegalMonitorStateException success) {}
328 }});
329
330 awaitTermination(t);
331 }
332
333 /**
334 * timedWait throws InterruptedException when interrupted
335 */
336 public void testTimedWait_Interruptible() {
337 final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
338 Thread t = newStartedThread(new CheckedRunnable() {
339 public void realRun() throws InterruptedException {
340 Object o = new Object();
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100341 TimeUnit tu = MILLISECONDS;
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100342
343 Thread.currentThread().interrupt();
344 try {
345 synchronized (o) {
346 tu.timedWait(o, LONG_DELAY_MS);
347 }
348 shouldThrow();
349 } catch (InterruptedException success) {}
350 assertFalse(Thread.interrupted());
351
352 pleaseInterrupt.countDown();
353 try {
354 synchronized (o) {
355 tu.timedWait(o, LONG_DELAY_MS);
356 }
357 shouldThrow();
358 } catch (InterruptedException success) {}
359 assertFalse(Thread.interrupted());
360 }});
361
362 await(pleaseInterrupt);
363 assertThreadStaysAlive(t);
364 t.interrupt();
365 awaitTermination(t);
366 }
367
368 /**
369 * timedJoin throws InterruptedException when interrupted
370 */
371 public void testTimedJoin_Interruptible() {
372 final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
373 final Thread s = newStartedThread(new CheckedInterruptedRunnable() {
374 public void realRun() throws InterruptedException {
375 Thread.sleep(LONG_DELAY_MS);
376 }});
377 final Thread t = newStartedThread(new CheckedRunnable() {
378 public void realRun() throws InterruptedException {
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100379 TimeUnit tu = MILLISECONDS;
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100380 Thread.currentThread().interrupt();
381 try {
382 tu.timedJoin(s, LONG_DELAY_MS);
383 shouldThrow();
384 } catch (InterruptedException success) {}
385 assertFalse(Thread.interrupted());
386
387 pleaseInterrupt.countDown();
388 try {
389 tu.timedJoin(s, LONG_DELAY_MS);
390 shouldThrow();
391 } catch (InterruptedException success) {}
392 assertFalse(Thread.interrupted());
393 }});
394
395 await(pleaseInterrupt);
396 assertThreadStaysAlive(t);
397 t.interrupt();
398 awaitTermination(t);
399 s.interrupt();
400 awaitTermination(s);
401 }
402
403 /**
404 * timedSleep throws InterruptedException when interrupted
405 */
406 public void testTimedSleep_Interruptible() {
407 final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
408 Thread t = newStartedThread(new CheckedRunnable() {
409 public void realRun() throws InterruptedException {
Narayan Kamath8e9a0e92015-04-28 11:40:00 +0100410 TimeUnit tu = MILLISECONDS;
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100411 Thread.currentThread().interrupt();
412 try {
413 tu.sleep(LONG_DELAY_MS);
414 shouldThrow();
415 } catch (InterruptedException success) {}
416 assertFalse(Thread.interrupted());
417
418 pleaseInterrupt.countDown();
419 try {
420 tu.sleep(LONG_DELAY_MS);
421 shouldThrow();
422 } catch (InterruptedException success) {}
423 assertFalse(Thread.interrupted());
424 }});
425
426 await(pleaseInterrupt);
427 assertThreadStaysAlive(t);
428 t.interrupt();
429 awaitTermination(t);
430 }
431
432 /**
433 * a deserialized serialized unit is the same instance
434 */
435 public void testSerialization() throws Exception {
Przemyslaw Szczepaniakb8b75112016-03-11 15:59:10 +0000436 for (TimeUnit x : TimeUnit.values())
437 assertSame(x, serialClone(x));
Calin Juravle8f0d92b2013-08-01 17:26:00 +0100438 }
439
440}