Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/TimeUtilTest.java

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 14 matching lines...) Expand all
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 package com.google.protobuf.util; 31 package com.google.protobuf.util;
32 32
33 import com.google.protobuf.Duration; 33 import com.google.protobuf.Duration;
34 import com.google.protobuf.Timestamp; 34 import com.google.protobuf.Timestamp;
35
36 import junit.framework.TestCase;
37
38 import org.junit.Assert;
39
35 import java.text.ParseException; 40 import java.text.ParseException;
36 import java.util.ArrayList; 41 import java.util.ArrayList;
37 import java.util.List; 42 import java.util.List;
38 import junit.framework.TestCase;
39 import org.junit.Assert;
40 43
41 /** Unit tests for {@link TimeUtil}. */ 44 /** Unit tests for {@link TimeUtil}. */
42 public class TimeUtilTest extends TestCase { 45 public class TimeUtilTest extends TestCase {
43 public void testTimestampStringFormat() throws Exception { 46 public void testTimestampStringFormat() throws Exception {
44 Timestamp start = TimeUtil.parseTimestamp("0001-01-01T00:00:00Z"); 47 Timestamp start = TimeUtil.parseTimestamp("0001-01-01T00:00:00Z");
45 Timestamp end = TimeUtil.parseTimestamp("9999-12-31T23:59:59.999999999Z"); 48 Timestamp end = TimeUtil.parseTimestamp("9999-12-31T23:59:59.999999999Z");
46 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MIN, start.getSeconds()); 49 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MIN, start.getSeconds());
47 assertEquals(0, start.getNanos()); 50 assertEquals(0, start.getNanos());
48 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MAX, end.getSeconds()); 51 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MAX, end.getSeconds());
49 assertEquals(999999999, end.getNanos()); 52 assertEquals(999999999, end.getNanos());
(...skipping 24 matching lines...) Expand all
74 value = TimeUtil.parseTimestamp("1970-01-01T00:00:00.010-08:00"); 77 value = TimeUtil.parseTimestamp("1970-01-01T00:00:00.010-08:00");
75 assertEquals("1970-01-01T08:00:00.010Z", TimeUtil.toString(value)); 78 assertEquals("1970-01-01T08:00:00.010Z", TimeUtil.toString(value));
76 } 79 }
77 80
78 private volatile boolean stopParsingThreads = false; 81 private volatile boolean stopParsingThreads = false;
79 private volatile String errorMessage = ""; 82 private volatile String errorMessage = "";
80 83
81 private class ParseTimestampThread extends Thread { 84 private class ParseTimestampThread extends Thread {
82 private final String[] strings; 85 private final String[] strings;
83 private final Timestamp[] values; 86 private final Timestamp[] values;
84
85 public ParseTimestampThread(String[] strings, Timestamp[] values) { 87 public ParseTimestampThread(String[] strings, Timestamp[] values) {
86 this.strings = strings; 88 this.strings = strings;
87 this.values = values; 89 this.values = values;
88 } 90 }
89 91
90 @Override 92 @Override
91 public void run() { 93 public void run() {
92 int index = 0; 94 int index = 0;
93 while (!stopParsingThreads) { 95 while (!stopParsingThreads) {
94 Timestamp result; 96 Timestamp result;
95 try { 97 try {
96 result = TimeUtil.parseTimestamp(strings[index]); 98 result = TimeUtil.parseTimestamp(strings[index]);
97 } catch (ParseException e) { 99 } catch (ParseException e) {
98 errorMessage = "Failed to parse timestamp: " + strings[index]; 100 errorMessage = "Failed to parse timestamp: " + strings[index];
99 break; 101 break;
100 } 102 }
101 if (result.getSeconds() != values[index].getSeconds() 103 if (result.getSeconds() != values[index].getSeconds()
102 || result.getNanos() != values[index].getNanos()) { 104 || result.getNanos() != values[index].getNanos()) {
103 errorMessage = 105 errorMessage = "Actual result: " + result.toString() + ", expected: "
104 "Actual result: " + result.toString() + ", expected: " + values[in dex].toString(); 106 + values[index].toString();
105 break; 107 break;
106 } 108 }
107 index = (index + 1) % strings.length; 109 index = (index + 1) % strings.length;
108 } 110 }
109 } 111 }
110 } 112 }
111 113
112 public void testTimestampConcurrentParsing() throws Exception { 114 public void testTimestampConcurrentParsing() throws Exception {
113 String[] timestampStrings = 115 String[] timestampStrings = new String[]{
114 new String[] { 116 "0001-01-01T00:00:00Z",
115 "0001-01-01T00:00:00Z", 117 "9999-12-31T23:59:59.999999999Z",
116 "9999-12-31T23:59:59.999999999Z", 118 "1970-01-01T00:00:00Z",
117 "1970-01-01T00:00:00Z", 119 "1969-12-31T23:59:59.999Z",
118 "1969-12-31T23:59:59.999Z", 120 };
119 };
120 Timestamp[] timestampValues = new Timestamp[timestampStrings.length]; 121 Timestamp[] timestampValues = new Timestamp[timestampStrings.length];
121 for (int i = 0; i < timestampStrings.length; i++) { 122 for (int i = 0; i < timestampStrings.length; i++) {
122 timestampValues[i] = TimeUtil.parseTimestamp(timestampStrings[i]); 123 timestampValues[i] = TimeUtil.parseTimestamp(timestampStrings[i]);
123 } 124 }
124 125
125 final int THREAD_COUNT = 16; 126 final int THREAD_COUNT = 16;
126 final int RUNNING_TIME = 5000; // in milliseconds. 127 final int RUNNING_TIME = 5000; // in milliseconds.
127 final List<Thread> threads = new ArrayList<Thread>(); 128 final List<Thread> threads = new ArrayList<Thread>();
128 129
129 stopParsingThreads = false; 130 stopParsingThreads = false;
130 errorMessage = ""; 131 errorMessage = "";
131 for (int i = 0; i < THREAD_COUNT; i++) { 132 for (int i = 0; i < THREAD_COUNT; i++) {
132 Thread thread = new ParseTimestampThread(timestampStrings, timestampValues ); 133 Thread thread = new ParseTimestampThread(
134 timestampStrings, timestampValues);
133 thread.start(); 135 thread.start();
134 threads.add(thread); 136 threads.add(thread);
135 } 137 }
136 Thread.sleep(RUNNING_TIME); 138 Thread.sleep(RUNNING_TIME);
137 stopParsingThreads = true; 139 stopParsingThreads = true;
138 for (Thread thread : threads) { 140 for (Thread thread : threads) {
139 thread.join(); 141 thread.join();
140 } 142 }
141 Assert.assertEquals("", errorMessage); 143 Assert.assertEquals("", errorMessage);
142 } 144 }
143 145
144 public void testTimetampInvalidFormat() throws Exception { 146 public void testTimetampInvalidFormat() throws Exception {
145 try { 147 try {
146 // Value too small. 148 // Value too small.
147 Timestamp value = 149 Timestamp value = Timestamp.newBuilder()
148 Timestamp.newBuilder().setSeconds(TimeUtil.TIMESTAMP_SECONDS_MIN - 1). build(); 150 .setSeconds(TimeUtil.TIMESTAMP_SECONDS_MIN - 1).build();
149 TimeUtil.toString(value); 151 TimeUtil.toString(value);
150 Assert.fail("Exception is expected."); 152 Assert.fail("Exception is expected.");
151 } catch (IllegalArgumentException e) { 153 } catch (IllegalArgumentException e) {
152 // Expected. 154 // Expected.
153 } 155 }
154 156
155 try { 157 try {
156 // Value too large. 158 // Value too large.
157 Timestamp value = 159 Timestamp value = Timestamp.newBuilder()
158 Timestamp.newBuilder().setSeconds(TimeUtil.TIMESTAMP_SECONDS_MAX + 1). build(); 160 .setSeconds(TimeUtil.TIMESTAMP_SECONDS_MAX + 1).build();
159 TimeUtil.toString(value); 161 TimeUtil.toString(value);
160 Assert.fail("Exception is expected."); 162 Assert.fail("Exception is expected.");
161 } catch (IllegalArgumentException e) { 163 } catch (IllegalArgumentException e) {
162 // Expected. 164 // Expected.
163 } 165 }
164 166
165 try { 167 try {
166 // Invalid nanos value. 168 // Invalid nanos value.
167 Timestamp value = Timestamp.newBuilder().setNanos(-1).build(); 169 Timestamp value = Timestamp.newBuilder().setNanos(-1).build();
168 TimeUtil.toString(value); 170 TimeUtil.toString(value);
169 Assert.fail("Exception is expected."); 171 Assert.fail("Exception is expected.");
170 } catch (IllegalArgumentException e) { 172 } catch (IllegalArgumentException e) {
171 // Expected. 173 // Expected.
172 } 174 }
173 175
174 try { 176 try {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 assertEquals(315576000000L, duration.getSeconds()); 272 assertEquals(315576000000L, duration.getSeconds());
271 assertEquals(999999999, duration.getNanos()); 273 assertEquals(999999999, duration.getNanos());
272 duration = TimeUtil.parseDuration("-315576000000.999999999s"); 274 duration = TimeUtil.parseDuration("-315576000000.999999999s");
273 assertEquals(-315576000000L, duration.getSeconds()); 275 assertEquals(-315576000000L, duration.getSeconds());
274 assertEquals(-999999999, duration.getNanos()); 276 assertEquals(-999999999, duration.getNanos());
275 } 277 }
276 278
277 public void testDurationInvalidFormat() throws Exception { 279 public void testDurationInvalidFormat() throws Exception {
278 try { 280 try {
279 // Value too small. 281 // Value too small.
280 Duration value = Duration.newBuilder().setSeconds(TimeUtil.DURATION_SECOND S_MIN - 1).build(); 282 Duration value = Duration.newBuilder()
283 .setSeconds(TimeUtil.DURATION_SECONDS_MIN - 1).build();
281 TimeUtil.toString(value); 284 TimeUtil.toString(value);
282 Assert.fail("Exception is expected."); 285 Assert.fail("Exception is expected.");
283 } catch (IllegalArgumentException e) { 286 } catch (IllegalArgumentException e) {
284 // Expected. 287 // Expected.
285 } 288 }
286 289
287 try { 290 try {
288 // Value too large. 291 // Value too large.
289 Duration value = Duration.newBuilder().setSeconds(TimeUtil.DURATION_SECOND S_MAX + 1).build(); 292 Duration value = Duration.newBuilder()
293 .setSeconds(TimeUtil.DURATION_SECONDS_MAX + 1).build();
290 TimeUtil.toString(value); 294 TimeUtil.toString(value);
291 Assert.fail("Exception is expected."); 295 Assert.fail("Exception is expected.");
292 } catch (IllegalArgumentException e) { 296 } catch (IllegalArgumentException e) {
293 // Expected. 297 // Expected.
294 } 298 }
295 299
296 try { 300 try {
297 // Invalid nanos value. 301 // Invalid nanos value.
298 Duration value = Duration.newBuilder().setSeconds(1).setNanos(-1).build(); 302 Duration value = Duration.newBuilder().setSeconds(1).setNanos(-1)
303 .build();
299 TimeUtil.toString(value); 304 TimeUtil.toString(value);
300 Assert.fail("Exception is expected."); 305 Assert.fail("Exception is expected.");
301 } catch (IllegalArgumentException e) { 306 } catch (IllegalArgumentException e) {
302 // Expected. 307 // Expected.
303 } 308 }
304 309
305 try { 310 try {
306 // Invalid nanos value. 311 // Invalid nanos value.
307 Duration value = Duration.newBuilder().setSeconds(-1).setNanos(1).build(); 312 Duration value = Duration.newBuilder().setSeconds(-1).setNanos(1)
313 .build();
308 TimeUtil.toString(value); 314 TimeUtil.toString(value);
309 Assert.fail("Exception is expected."); 315 Assert.fail("Exception is expected.");
310 } catch (IllegalArgumentException e) { 316 } catch (IllegalArgumentException e) {
311 // Expected. 317 // Expected.
312 } 318 }
313 319
314 try { 320 try {
315 // Value too small. 321 // Value too small.
316 TimeUtil.parseDuration("-315576000001s"); 322 TimeUtil.parseDuration("-315576000001s");
317 Assert.fail("Exception is expected."); 323 Assert.fail("Exception is expected.");
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 try { 360 try {
355 // Invalid prefix. 361 // Invalid prefix.
356 TimeUtil.parseDuration("--1s"); 362 TimeUtil.parseDuration("--1s");
357 Assert.fail("Exception is expected."); 363 Assert.fail("Exception is expected.");
358 } catch (ParseException e) { 364 } catch (ParseException e) {
359 // Expected. 365 // Expected.
360 } 366 }
361 } 367 }
362 368
363 public void testTimestampConversion() throws Exception { 369 public void testTimestampConversion() throws Exception {
364 Timestamp timestamp = TimeUtil.parseTimestamp("1970-01-01T00:00:01.111111111 Z"); 370 Timestamp timestamp =
371 TimeUtil.parseTimestamp("1970-01-01T00:00:01.111111111Z");
365 assertEquals(1111111111, TimeUtil.toNanos(timestamp)); 372 assertEquals(1111111111, TimeUtil.toNanos(timestamp));
366 assertEquals(1111111, TimeUtil.toMicros(timestamp)); 373 assertEquals(1111111, TimeUtil.toMicros(timestamp));
367 assertEquals(1111, TimeUtil.toMillis(timestamp)); 374 assertEquals(1111, TimeUtil.toMillis(timestamp));
368 timestamp = TimeUtil.createTimestampFromNanos(1111111111); 375 timestamp = TimeUtil.createTimestampFromNanos(1111111111);
369 assertEquals("1970-01-01T00:00:01.111111111Z", TimeUtil.toString(timestamp)) ; 376 assertEquals("1970-01-01T00:00:01.111111111Z", TimeUtil.toString(timestamp)) ;
370 timestamp = TimeUtil.createTimestampFromMicros(1111111); 377 timestamp = TimeUtil.createTimestampFromMicros(1111111);
371 assertEquals("1970-01-01T00:00:01.111111Z", TimeUtil.toString(timestamp)); 378 assertEquals("1970-01-01T00:00:01.111111Z", TimeUtil.toString(timestamp));
372 timestamp = TimeUtil.createTimestampFromMillis(1111); 379 timestamp = TimeUtil.createTimestampFromMillis(1111);
373 assertEquals("1970-01-01T00:00:01.111Z", TimeUtil.toString(timestamp)); 380 assertEquals("1970-01-01T00:00:01.111Z", TimeUtil.toString(timestamp));
374 381
375 timestamp = TimeUtil.parseTimestamp("1969-12-31T23:59:59.111111111Z"); 382 timestamp = TimeUtil.parseTimestamp("1969-12-31T23:59:59.111111111Z");
376 assertEquals(-888888889, TimeUtil.toNanos(timestamp)); 383 assertEquals(-888888889, TimeUtil.toNanos(timestamp));
377 assertEquals(-888889, TimeUtil.toMicros(timestamp)); 384 assertEquals(-888889, TimeUtil.toMicros(timestamp));
378 assertEquals(-889, TimeUtil.toMillis(timestamp)); 385 assertEquals(-889, TimeUtil.toMillis(timestamp));
379 timestamp = TimeUtil.createTimestampFromNanos(-888888889); 386 timestamp = TimeUtil.createTimestampFromNanos(-888888889);
380 assertEquals("1969-12-31T23:59:59.111111111Z", TimeUtil.toString(timestamp)) ; 387 assertEquals("1969-12-31T23:59:59.111111111Z", TimeUtil.toString(timestamp)) ;
381 timestamp = TimeUtil.createTimestampFromMicros(-888889); 388 timestamp = TimeUtil.createTimestampFromMicros(-888889);
382 assertEquals("1969-12-31T23:59:59.111111Z", TimeUtil.toString(timestamp)); 389 assertEquals("1969-12-31T23:59:59.111111Z", TimeUtil.toString(timestamp));
383 timestamp = TimeUtil.createTimestampFromMillis(-889); 390 timestamp = TimeUtil.createTimestampFromMillis(-889);
384 assertEquals("1969-12-31T23:59:59.111Z", TimeUtil.toString(timestamp)); 391 assertEquals("1969-12-31T23:59:59.111Z", TimeUtil.toString(timestamp));
385 } 392 }
386 393
387 public void testDurationConversion() throws Exception { 394 public void testDurationConversion() throws Exception {
388 Duration duration = TimeUtil.parseDuration("1.111111111s"); 395 Duration duration = TimeUtil.parseDuration("1.111111111s");
389 assertEquals(1111111111, TimeUtil.toNanos(duration)); 396 assertEquals(1111111111, TimeUtil.toNanos(duration));
390 assertEquals(1111111, TimeUtil.toMicros(duration)); 397 assertEquals(1111111, TimeUtil.toMicros(duration));
391 assertEquals(1111, TimeUtil.toMillis(duration)); 398 assertEquals(1111, TimeUtil.toMillis(duration));
392 duration = TimeUtil.createDurationFromNanos(1111111111); 399 duration = TimeUtil.createDurationFromNanos(1111111111);
393 assertEquals("1.111111111s", TimeUtil.toString(duration)); 400 assertEquals("1.111111111s", TimeUtil.toString(duration));
394 duration = TimeUtil.createDurationFromMicros(1111111); 401 duration = TimeUtil.createDurationFromMicros(1111111);
395 assertEquals("1.111111s", TimeUtil.toString(duration)); 402 assertEquals("1.111111s", TimeUtil.toString(duration));
396 duration = TimeUtil.createDurationFromMillis(1111); 403 duration = TimeUtil.createDurationFromMillis(1111);
397 assertEquals("1.111s", TimeUtil.toString(duration)); 404 assertEquals("1.111s", TimeUtil.toString(duration));
398 405
399 duration = TimeUtil.parseDuration("-1.111111111s"); 406 duration = TimeUtil.parseDuration("-1.111111111s");
400 assertEquals(-1111111111, TimeUtil.toNanos(duration)); 407 assertEquals(-1111111111, TimeUtil.toNanos(duration));
401 assertEquals(-1111111, TimeUtil.toMicros(duration)); 408 assertEquals(-1111111, TimeUtil.toMicros(duration));
402 assertEquals(-1111, TimeUtil.toMillis(duration)); 409 assertEquals(-1111, TimeUtil.toMillis(duration));
403 duration = TimeUtil.createDurationFromNanos(-1111111111); 410 duration = TimeUtil.createDurationFromNanos(-1111111111);
404 assertEquals("-1.111111111s", TimeUtil.toString(duration)); 411 assertEquals("-1.111111111s", TimeUtil.toString(duration));
405 duration = TimeUtil.createDurationFromMicros(-1111111); 412 duration = TimeUtil.createDurationFromMicros(-1111111);
406 assertEquals("-1.111111s", TimeUtil.toString(duration)); 413 assertEquals("-1.111111s", TimeUtil.toString(duration));
407 duration = TimeUtil.createDurationFromMillis(-1111); 414 duration = TimeUtil.createDurationFromMillis(-1111);
408 assertEquals("-1.111s", TimeUtil.toString(duration)); 415 assertEquals("-1.111s", TimeUtil.toString(duration));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 } 452 }
446 453
447 duration = TimeUtil.parseDuration("-1.125s"); 454 duration = TimeUtil.parseDuration("-1.125s");
448 duration = TimeUtil.divide(duration, 2.0); 455 duration = TimeUtil.divide(duration, 2.0);
449 assertEquals("-0.562500s", TimeUtil.toString(duration)); 456 assertEquals("-0.562500s", TimeUtil.toString(duration));
450 duration = TimeUtil.multiply(duration, 2.0); 457 duration = TimeUtil.multiply(duration, 2.0);
451 assertEquals("-1.125s", TimeUtil.toString(duration)); 458 assertEquals("-1.125s", TimeUtil.toString(duration));
452 459
453 duration = TimeUtil.add(duration, duration); 460 duration = TimeUtil.add(duration, duration);
454 assertEquals("-2.250s", TimeUtil.toString(duration)); 461 assertEquals("-2.250s", TimeUtil.toString(duration));
455 462
456 duration = TimeUtil.subtract(duration, TimeUtil.parseDuration("-1s")); 463 duration = TimeUtil.subtract(duration, TimeUtil.parseDuration("-1s"));
457 assertEquals("-1.250s", TimeUtil.toString(duration)); 464 assertEquals("-1.250s", TimeUtil.toString(duration));
458 465
459 // Multiplications (with results larger than Long.MAX_VALUE in nanoseconds). 466 // Multiplications (with results larger than Long.MAX_VALUE in nanoseconds).
460 duration = TimeUtil.parseDuration("0.999999999s"); 467 duration = TimeUtil.parseDuration("0.999999999s");
461 assertEquals( 468 assertEquals("315575999684.424s",
462 "315575999684.424s", TimeUtil.toString(TimeUtil.multiply(duration, 31557 6000000L))); 469 TimeUtil.toString(TimeUtil.multiply(duration, 315576000000L)));
463 duration = TimeUtil.parseDuration("-0.999999999s"); 470 duration = TimeUtil.parseDuration("-0.999999999s");
464 assertEquals( 471 assertEquals("-315575999684.424s",
465 "-315575999684.424s", TimeUtil.toString(TimeUtil.multiply(duration, 3155 76000000L))); 472 TimeUtil.toString(TimeUtil.multiply(duration, 315576000000L)));
466 assertEquals( 473 assertEquals("315575999684.424s",
467 "315575999684.424s", TimeUtil.toString(TimeUtil.multiply(duration, -3155 76000000L))); 474 TimeUtil.toString(TimeUtil.multiply(duration, -315576000000L)));
468 475
469 // Divisions (with values larger than Long.MAX_VALUE in nanoseconds). 476 // Divisions (with values larger than Long.MAX_VALUE in nanoseconds).
470 Duration d1 = TimeUtil.parseDuration("315576000000s"); 477 Duration d1 = TimeUtil.parseDuration("315576000000s");
471 Duration d2 = TimeUtil.subtract(d1, TimeUtil.createDurationFromNanos(1)); 478 Duration d2 = TimeUtil.subtract(d1, TimeUtil.createDurationFromNanos(1));
472 assertEquals(1, TimeUtil.divide(d1, d2)); 479 assertEquals(1, TimeUtil.divide(d1, d2));
473 assertEquals(0, TimeUtil.divide(d2, d1)); 480 assertEquals(0, TimeUtil.divide(d2, d1));
474 assertEquals("0.000000001s", TimeUtil.toString(TimeUtil.remainder(d1, d2))); 481 assertEquals("0.000000001s", TimeUtil.toString(TimeUtil.remainder(d1, d2)));
475 assertEquals("315575999999.999999999s", TimeUtil.toString(TimeUtil.remainder (d2, d1))); 482 assertEquals("315575999999.999999999s",
476 483 TimeUtil.toString(TimeUtil.remainder(d2, d1)));
484
477 // Divisions involving negative values. 485 // Divisions involving negative values.
478 // 486 //
479 // (-5) / 2 = -2, remainder = -1 487 // (-5) / 2 = -2, remainder = -1
480 d1 = TimeUtil.parseDuration("-5s"); 488 d1 = TimeUtil.parseDuration("-5s");
481 d2 = TimeUtil.parseDuration("2s"); 489 d2 = TimeUtil.parseDuration("2s");
482 assertEquals(-2, TimeUtil.divide(d1, d2)); 490 assertEquals(-2, TimeUtil.divide(d1, d2));
483 assertEquals(-2, TimeUtil.divide(d1, 2).getSeconds()); 491 assertEquals(-2, TimeUtil.divide(d1, 2).getSeconds());
484 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds()); 492 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds());
485 // (-5) / (-2) = 2, remainder = -1 493 // (-5) / (-2) = 2, remainder = -1
486 d1 = TimeUtil.parseDuration("-5s"); 494 d1 = TimeUtil.parseDuration("-5s");
487 d2 = TimeUtil.parseDuration("-2s"); 495 d2 = TimeUtil.parseDuration("-2s");
488 assertEquals(2, TimeUtil.divide(d1, d2)); 496 assertEquals(2, TimeUtil.divide(d1, d2));
489 assertEquals(2, TimeUtil.divide(d1, -2).getSeconds()); 497 assertEquals(2, TimeUtil.divide(d1, -2).getSeconds());
490 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds()); 498 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds());
491 // 5 / (-2) = -2, remainder = 1 499 // 5 / (-2) = -2, remainder = 1
492 d1 = TimeUtil.parseDuration("5s"); 500 d1 = TimeUtil.parseDuration("5s");
493 d2 = TimeUtil.parseDuration("-2s"); 501 d2 = TimeUtil.parseDuration("-2s");
494 assertEquals(-2, TimeUtil.divide(d1, d2)); 502 assertEquals(-2, TimeUtil.divide(d1, d2));
495 assertEquals(-2, TimeUtil.divide(d1, -2).getSeconds()); 503 assertEquals(-2, TimeUtil.divide(d1, -2).getSeconds());
496 assertEquals(1, TimeUtil.remainder(d1, d2).getSeconds()); 504 assertEquals(1, TimeUtil.remainder(d1, d2).getSeconds());
497 } 505 }
498 } 506 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698