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

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

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years 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
40 import java.text.ParseException; 35 import java.text.ParseException;
41 import java.util.ArrayList; 36 import java.util.ArrayList;
42 import java.util.List; 37 import java.util.List;
38 import junit.framework.TestCase;
39 import org.junit.Assert;
43 40
44 /** Unit tests for {@link TimeUtil}. */ 41 /** Unit tests for {@link TimeUtil}. */
45 public class TimeUtilTest extends TestCase { 42 public class TimeUtilTest extends TestCase {
46 public void testTimestampStringFormat() throws Exception { 43 public void testTimestampStringFormat() throws Exception {
47 Timestamp start = TimeUtil.parseTimestamp("0001-01-01T00:00:00Z"); 44 Timestamp start = TimeUtil.parseTimestamp("0001-01-01T00:00:00Z");
48 Timestamp end = TimeUtil.parseTimestamp("9999-12-31T23:59:59.999999999Z"); 45 Timestamp end = TimeUtil.parseTimestamp("9999-12-31T23:59:59.999999999Z");
49 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MIN, start.getSeconds()); 46 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MIN, start.getSeconds());
50 assertEquals(0, start.getNanos()); 47 assertEquals(0, start.getNanos());
51 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MAX, end.getSeconds()); 48 assertEquals(TimeUtil.TIMESTAMP_SECONDS_MAX, end.getSeconds());
52 assertEquals(999999999, end.getNanos()); 49 assertEquals(999999999, end.getNanos());
(...skipping 24 matching lines...) Expand all
77 value = TimeUtil.parseTimestamp("1970-01-01T00:00:00.010-08:00"); 74 value = TimeUtil.parseTimestamp("1970-01-01T00:00:00.010-08:00");
78 assertEquals("1970-01-01T08:00:00.010Z", TimeUtil.toString(value)); 75 assertEquals("1970-01-01T08:00:00.010Z", TimeUtil.toString(value));
79 } 76 }
80 77
81 private volatile boolean stopParsingThreads = false; 78 private volatile boolean stopParsingThreads = false;
82 private volatile String errorMessage = ""; 79 private volatile String errorMessage = "";
83 80
84 private class ParseTimestampThread extends Thread { 81 private class ParseTimestampThread extends Thread {
85 private final String[] strings; 82 private final String[] strings;
86 private final Timestamp[] values; 83 private final Timestamp[] values;
84
87 public ParseTimestampThread(String[] strings, Timestamp[] values) { 85 public ParseTimestampThread(String[] strings, Timestamp[] values) {
88 this.strings = strings; 86 this.strings = strings;
89 this.values = values; 87 this.values = values;
90 } 88 }
91 89
92 @Override 90 @Override
93 public void run() { 91 public void run() {
94 int index = 0; 92 int index = 0;
95 while (!stopParsingThreads) { 93 while (!stopParsingThreads) {
96 Timestamp result; 94 Timestamp result;
97 try { 95 try {
98 result = TimeUtil.parseTimestamp(strings[index]); 96 result = TimeUtil.parseTimestamp(strings[index]);
99 } catch (ParseException e) { 97 } catch (ParseException e) {
100 errorMessage = "Failed to parse timestamp: " + strings[index]; 98 errorMessage = "Failed to parse timestamp: " + strings[index];
101 break; 99 break;
102 } 100 }
103 if (result.getSeconds() != values[index].getSeconds() 101 if (result.getSeconds() != values[index].getSeconds()
104 || result.getNanos() != values[index].getNanos()) { 102 || result.getNanos() != values[index].getNanos()) {
105 errorMessage = "Actual result: " + result.toString() + ", expected: " 103 errorMessage =
106 + values[index].toString(); 104 "Actual result: " + result.toString() + ", expected: " + values[in dex].toString();
107 break; 105 break;
108 } 106 }
109 index = (index + 1) % strings.length; 107 index = (index + 1) % strings.length;
110 } 108 }
111 } 109 }
112 } 110 }
113 111
114 public void testTimestampConcurrentParsing() throws Exception { 112 public void testTimestampConcurrentParsing() throws Exception {
115 String[] timestampStrings = new String[]{ 113 String[] timestampStrings =
116 "0001-01-01T00:00:00Z", 114 new String[] {
117 "9999-12-31T23:59:59.999999999Z", 115 "0001-01-01T00:00:00Z",
118 "1970-01-01T00:00:00Z", 116 "9999-12-31T23:59:59.999999999Z",
119 "1969-12-31T23:59:59.999Z", 117 "1970-01-01T00:00:00Z",
120 }; 118 "1969-12-31T23:59:59.999Z",
119 };
121 Timestamp[] timestampValues = new Timestamp[timestampStrings.length]; 120 Timestamp[] timestampValues = new Timestamp[timestampStrings.length];
122 for (int i = 0; i < timestampStrings.length; i++) { 121 for (int i = 0; i < timestampStrings.length; i++) {
123 timestampValues[i] = TimeUtil.parseTimestamp(timestampStrings[i]); 122 timestampValues[i] = TimeUtil.parseTimestamp(timestampStrings[i]);
124 } 123 }
125 124
126 final int THREAD_COUNT = 16; 125 final int THREAD_COUNT = 16;
127 final int RUNNING_TIME = 5000; // in milliseconds. 126 final int RUNNING_TIME = 5000; // in milliseconds.
128 final List<Thread> threads = new ArrayList<Thread>(); 127 final List<Thread> threads = new ArrayList<Thread>();
129 128
130 stopParsingThreads = false; 129 stopParsingThreads = false;
131 errorMessage = ""; 130 errorMessage = "";
132 for (int i = 0; i < THREAD_COUNT; i++) { 131 for (int i = 0; i < THREAD_COUNT; i++) {
133 Thread thread = new ParseTimestampThread( 132 Thread thread = new ParseTimestampThread(timestampStrings, timestampValues );
134 timestampStrings, timestampValues);
135 thread.start(); 133 thread.start();
136 threads.add(thread); 134 threads.add(thread);
137 } 135 }
138 Thread.sleep(RUNNING_TIME); 136 Thread.sleep(RUNNING_TIME);
139 stopParsingThreads = true; 137 stopParsingThreads = true;
140 for (Thread thread : threads) { 138 for (Thread thread : threads) {
141 thread.join(); 139 thread.join();
142 } 140 }
143 Assert.assertEquals("", errorMessage); 141 Assert.assertEquals("", errorMessage);
144 } 142 }
145 143
146 public void testTimetampInvalidFormat() throws Exception { 144 public void testTimetampInvalidFormat() throws Exception {
147 try { 145 try {
148 // Value too small. 146 // Value too small.
149 Timestamp value = Timestamp.newBuilder() 147 Timestamp value =
150 .setSeconds(TimeUtil.TIMESTAMP_SECONDS_MIN - 1).build(); 148 Timestamp.newBuilder().setSeconds(TimeUtil.TIMESTAMP_SECONDS_MIN - 1). build();
151 TimeUtil.toString(value); 149 TimeUtil.toString(value);
152 Assert.fail("Exception is expected."); 150 Assert.fail("Exception is expected.");
153 } catch (IllegalArgumentException e) { 151 } catch (IllegalArgumentException e) {
154 // Expected. 152 // Expected.
155 } 153 }
156 154
157 try { 155 try {
158 // Value too large. 156 // Value too large.
159 Timestamp value = Timestamp.newBuilder() 157 Timestamp value =
160 .setSeconds(TimeUtil.TIMESTAMP_SECONDS_MAX + 1).build(); 158 Timestamp.newBuilder().setSeconds(TimeUtil.TIMESTAMP_SECONDS_MAX + 1). build();
161 TimeUtil.toString(value); 159 TimeUtil.toString(value);
162 Assert.fail("Exception is expected."); 160 Assert.fail("Exception is expected.");
163 } catch (IllegalArgumentException e) { 161 } catch (IllegalArgumentException e) {
164 // Expected. 162 // Expected.
165 } 163 }
166 164
167 try { 165 try {
168 // Invalid nanos value. 166 // Invalid nanos value.
169 Timestamp value = Timestamp.newBuilder().setNanos(-1).build(); 167 Timestamp value = Timestamp.newBuilder().setNanos(-1).build();
170 TimeUtil.toString(value); 168 TimeUtil.toString(value);
171 Assert.fail("Exception is expected."); 169 Assert.fail("Exception is expected.");
172 } catch (IllegalArgumentException e) { 170 } catch (IllegalArgumentException e) {
173 // Expected. 171 // Expected.
174 } 172 }
175 173
176 try { 174 try {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 assertEquals(315576000000L, duration.getSeconds()); 270 assertEquals(315576000000L, duration.getSeconds());
273 assertEquals(999999999, duration.getNanos()); 271 assertEquals(999999999, duration.getNanos());
274 duration = TimeUtil.parseDuration("-315576000000.999999999s"); 272 duration = TimeUtil.parseDuration("-315576000000.999999999s");
275 assertEquals(-315576000000L, duration.getSeconds()); 273 assertEquals(-315576000000L, duration.getSeconds());
276 assertEquals(-999999999, duration.getNanos()); 274 assertEquals(-999999999, duration.getNanos());
277 } 275 }
278 276
279 public void testDurationInvalidFormat() throws Exception { 277 public void testDurationInvalidFormat() throws Exception {
280 try { 278 try {
281 // Value too small. 279 // Value too small.
282 Duration value = Duration.newBuilder() 280 Duration value = Duration.newBuilder().setSeconds(TimeUtil.DURATION_SECOND S_MIN - 1).build();
283 .setSeconds(TimeUtil.DURATION_SECONDS_MIN - 1).build();
284 TimeUtil.toString(value); 281 TimeUtil.toString(value);
285 Assert.fail("Exception is expected."); 282 Assert.fail("Exception is expected.");
286 } catch (IllegalArgumentException e) { 283 } catch (IllegalArgumentException e) {
287 // Expected. 284 // Expected.
288 } 285 }
289 286
290 try { 287 try {
291 // Value too large. 288 // Value too large.
292 Duration value = Duration.newBuilder() 289 Duration value = Duration.newBuilder().setSeconds(TimeUtil.DURATION_SECOND S_MAX + 1).build();
293 .setSeconds(TimeUtil.DURATION_SECONDS_MAX + 1).build();
294 TimeUtil.toString(value); 290 TimeUtil.toString(value);
295 Assert.fail("Exception is expected."); 291 Assert.fail("Exception is expected.");
296 } catch (IllegalArgumentException e) { 292 } catch (IllegalArgumentException e) {
297 // Expected. 293 // Expected.
298 } 294 }
299 295
300 try { 296 try {
301 // Invalid nanos value. 297 // Invalid nanos value.
302 Duration value = Duration.newBuilder().setSeconds(1).setNanos(-1) 298 Duration value = Duration.newBuilder().setSeconds(1).setNanos(-1).build();
303 .build();
304 TimeUtil.toString(value); 299 TimeUtil.toString(value);
305 Assert.fail("Exception is expected."); 300 Assert.fail("Exception is expected.");
306 } catch (IllegalArgumentException e) { 301 } catch (IllegalArgumentException e) {
307 // Expected. 302 // Expected.
308 } 303 }
309 304
310 try { 305 try {
311 // Invalid nanos value. 306 // Invalid nanos value.
312 Duration value = Duration.newBuilder().setSeconds(-1).setNanos(1) 307 Duration value = Duration.newBuilder().setSeconds(-1).setNanos(1).build();
313 .build();
314 TimeUtil.toString(value); 308 TimeUtil.toString(value);
315 Assert.fail("Exception is expected."); 309 Assert.fail("Exception is expected.");
316 } catch (IllegalArgumentException e) { 310 } catch (IllegalArgumentException e) {
317 // Expected. 311 // Expected.
318 } 312 }
319 313
320 try { 314 try {
321 // Value too small. 315 // Value too small.
322 TimeUtil.parseDuration("-315576000001s"); 316 TimeUtil.parseDuration("-315576000001s");
323 Assert.fail("Exception is expected."); 317 Assert.fail("Exception is expected.");
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 try { 354 try {
361 // Invalid prefix. 355 // Invalid prefix.
362 TimeUtil.parseDuration("--1s"); 356 TimeUtil.parseDuration("--1s");
363 Assert.fail("Exception is expected."); 357 Assert.fail("Exception is expected.");
364 } catch (ParseException e) { 358 } catch (ParseException e) {
365 // Expected. 359 // Expected.
366 } 360 }
367 } 361 }
368 362
369 public void testTimestampConversion() throws Exception { 363 public void testTimestampConversion() throws Exception {
370 Timestamp timestamp = 364 Timestamp timestamp = TimeUtil.parseTimestamp("1970-01-01T00:00:01.111111111 Z");
371 TimeUtil.parseTimestamp("1970-01-01T00:00:01.111111111Z");
372 assertEquals(1111111111, TimeUtil.toNanos(timestamp)); 365 assertEquals(1111111111, TimeUtil.toNanos(timestamp));
373 assertEquals(1111111, TimeUtil.toMicros(timestamp)); 366 assertEquals(1111111, TimeUtil.toMicros(timestamp));
374 assertEquals(1111, TimeUtil.toMillis(timestamp)); 367 assertEquals(1111, TimeUtil.toMillis(timestamp));
375 timestamp = TimeUtil.createTimestampFromNanos(1111111111); 368 timestamp = TimeUtil.createTimestampFromNanos(1111111111);
376 assertEquals("1970-01-01T00:00:01.111111111Z", TimeUtil.toString(timestamp)) ; 369 assertEquals("1970-01-01T00:00:01.111111111Z", TimeUtil.toString(timestamp)) ;
377 timestamp = TimeUtil.createTimestampFromMicros(1111111); 370 timestamp = TimeUtil.createTimestampFromMicros(1111111);
378 assertEquals("1970-01-01T00:00:01.111111Z", TimeUtil.toString(timestamp)); 371 assertEquals("1970-01-01T00:00:01.111111Z", TimeUtil.toString(timestamp));
379 timestamp = TimeUtil.createTimestampFromMillis(1111); 372 timestamp = TimeUtil.createTimestampFromMillis(1111);
380 assertEquals("1970-01-01T00:00:01.111Z", TimeUtil.toString(timestamp)); 373 assertEquals("1970-01-01T00:00:01.111Z", TimeUtil.toString(timestamp));
381 374
382 timestamp = TimeUtil.parseTimestamp("1969-12-31T23:59:59.111111111Z"); 375 timestamp = TimeUtil.parseTimestamp("1969-12-31T23:59:59.111111111Z");
383 assertEquals(-888888889, TimeUtil.toNanos(timestamp)); 376 assertEquals(-888888889, TimeUtil.toNanos(timestamp));
384 assertEquals(-888889, TimeUtil.toMicros(timestamp)); 377 assertEquals(-888889, TimeUtil.toMicros(timestamp));
385 assertEquals(-889, TimeUtil.toMillis(timestamp)); 378 assertEquals(-889, TimeUtil.toMillis(timestamp));
386 timestamp = TimeUtil.createTimestampFromNanos(-888888889); 379 timestamp = TimeUtil.createTimestampFromNanos(-888888889);
387 assertEquals("1969-12-31T23:59:59.111111111Z", TimeUtil.toString(timestamp)) ; 380 assertEquals("1969-12-31T23:59:59.111111111Z", TimeUtil.toString(timestamp)) ;
388 timestamp = TimeUtil.createTimestampFromMicros(-888889); 381 timestamp = TimeUtil.createTimestampFromMicros(-888889);
389 assertEquals("1969-12-31T23:59:59.111111Z", TimeUtil.toString(timestamp)); 382 assertEquals("1969-12-31T23:59:59.111111Z", TimeUtil.toString(timestamp));
390 timestamp = TimeUtil.createTimestampFromMillis(-889); 383 timestamp = TimeUtil.createTimestampFromMillis(-889);
391 assertEquals("1969-12-31T23:59:59.111Z", TimeUtil.toString(timestamp)); 384 assertEquals("1969-12-31T23:59:59.111Z", TimeUtil.toString(timestamp));
392 } 385 }
393 386
394 public void testDurationConversion() throws Exception { 387 public void testDurationConversion() throws Exception {
395 Duration duration = TimeUtil.parseDuration("1.111111111s"); 388 Duration duration = TimeUtil.parseDuration("1.111111111s");
396 assertEquals(1111111111, TimeUtil.toNanos(duration)); 389 assertEquals(1111111111, TimeUtil.toNanos(duration));
397 assertEquals(1111111, TimeUtil.toMicros(duration)); 390 assertEquals(1111111, TimeUtil.toMicros(duration));
398 assertEquals(1111, TimeUtil.toMillis(duration)); 391 assertEquals(1111, TimeUtil.toMillis(duration));
399 duration = TimeUtil.createDurationFromNanos(1111111111); 392 duration = TimeUtil.createDurationFromNanos(1111111111);
400 assertEquals("1.111111111s", TimeUtil.toString(duration)); 393 assertEquals("1.111111111s", TimeUtil.toString(duration));
401 duration = TimeUtil.createDurationFromMicros(1111111); 394 duration = TimeUtil.createDurationFromMicros(1111111);
402 assertEquals("1.111111s", TimeUtil.toString(duration)); 395 assertEquals("1.111111s", TimeUtil.toString(duration));
403 duration = TimeUtil.createDurationFromMillis(1111); 396 duration = TimeUtil.createDurationFromMillis(1111);
404 assertEquals("1.111s", TimeUtil.toString(duration)); 397 assertEquals("1.111s", TimeUtil.toString(duration));
405 398
406 duration = TimeUtil.parseDuration("-1.111111111s"); 399 duration = TimeUtil.parseDuration("-1.111111111s");
407 assertEquals(-1111111111, TimeUtil.toNanos(duration)); 400 assertEquals(-1111111111, TimeUtil.toNanos(duration));
408 assertEquals(-1111111, TimeUtil.toMicros(duration)); 401 assertEquals(-1111111, TimeUtil.toMicros(duration));
409 assertEquals(-1111, TimeUtil.toMillis(duration)); 402 assertEquals(-1111, TimeUtil.toMillis(duration));
410 duration = TimeUtil.createDurationFromNanos(-1111111111); 403 duration = TimeUtil.createDurationFromNanos(-1111111111);
411 assertEquals("-1.111111111s", TimeUtil.toString(duration)); 404 assertEquals("-1.111111111s", TimeUtil.toString(duration));
412 duration = TimeUtil.createDurationFromMicros(-1111111); 405 duration = TimeUtil.createDurationFromMicros(-1111111);
413 assertEquals("-1.111111s", TimeUtil.toString(duration)); 406 assertEquals("-1.111111s", TimeUtil.toString(duration));
414 duration = TimeUtil.createDurationFromMillis(-1111); 407 duration = TimeUtil.createDurationFromMillis(-1111);
415 assertEquals("-1.111s", TimeUtil.toString(duration)); 408 assertEquals("-1.111s", TimeUtil.toString(duration));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 } 445 }
453 446
454 duration = TimeUtil.parseDuration("-1.125s"); 447 duration = TimeUtil.parseDuration("-1.125s");
455 duration = TimeUtil.divide(duration, 2.0); 448 duration = TimeUtil.divide(duration, 2.0);
456 assertEquals("-0.562500s", TimeUtil.toString(duration)); 449 assertEquals("-0.562500s", TimeUtil.toString(duration));
457 duration = TimeUtil.multiply(duration, 2.0); 450 duration = TimeUtil.multiply(duration, 2.0);
458 assertEquals("-1.125s", TimeUtil.toString(duration)); 451 assertEquals("-1.125s", TimeUtil.toString(duration));
459 452
460 duration = TimeUtil.add(duration, duration); 453 duration = TimeUtil.add(duration, duration);
461 assertEquals("-2.250s", TimeUtil.toString(duration)); 454 assertEquals("-2.250s", TimeUtil.toString(duration));
462 455
463 duration = TimeUtil.subtract(duration, TimeUtil.parseDuration("-1s")); 456 duration = TimeUtil.subtract(duration, TimeUtil.parseDuration("-1s"));
464 assertEquals("-1.250s", TimeUtil.toString(duration)); 457 assertEquals("-1.250s", TimeUtil.toString(duration));
465 458
466 // Multiplications (with results larger than Long.MAX_VALUE in nanoseconds). 459 // Multiplications (with results larger than Long.MAX_VALUE in nanoseconds).
467 duration = TimeUtil.parseDuration("0.999999999s"); 460 duration = TimeUtil.parseDuration("0.999999999s");
468 assertEquals("315575999684.424s", 461 assertEquals(
469 TimeUtil.toString(TimeUtil.multiply(duration, 315576000000L))); 462 "315575999684.424s", TimeUtil.toString(TimeUtil.multiply(duration, 31557 6000000L)));
470 duration = TimeUtil.parseDuration("-0.999999999s"); 463 duration = TimeUtil.parseDuration("-0.999999999s");
471 assertEquals("-315575999684.424s", 464 assertEquals(
472 TimeUtil.toString(TimeUtil.multiply(duration, 315576000000L))); 465 "-315575999684.424s", TimeUtil.toString(TimeUtil.multiply(duration, 3155 76000000L)));
473 assertEquals("315575999684.424s", 466 assertEquals(
474 TimeUtil.toString(TimeUtil.multiply(duration, -315576000000L))); 467 "315575999684.424s", TimeUtil.toString(TimeUtil.multiply(duration, -3155 76000000L)));
475 468
476 // Divisions (with values larger than Long.MAX_VALUE in nanoseconds). 469 // Divisions (with values larger than Long.MAX_VALUE in nanoseconds).
477 Duration d1 = TimeUtil.parseDuration("315576000000s"); 470 Duration d1 = TimeUtil.parseDuration("315576000000s");
478 Duration d2 = TimeUtil.subtract(d1, TimeUtil.createDurationFromNanos(1)); 471 Duration d2 = TimeUtil.subtract(d1, TimeUtil.createDurationFromNanos(1));
479 assertEquals(1, TimeUtil.divide(d1, d2)); 472 assertEquals(1, TimeUtil.divide(d1, d2));
480 assertEquals(0, TimeUtil.divide(d2, d1)); 473 assertEquals(0, TimeUtil.divide(d2, d1));
481 assertEquals("0.000000001s", TimeUtil.toString(TimeUtil.remainder(d1, d2))); 474 assertEquals("0.000000001s", TimeUtil.toString(TimeUtil.remainder(d1, d2)));
482 assertEquals("315575999999.999999999s", 475 assertEquals("315575999999.999999999s", TimeUtil.toString(TimeUtil.remainder (d2, d1)));
483 TimeUtil.toString(TimeUtil.remainder(d2, d1))); 476
484
485 // Divisions involving negative values. 477 // Divisions involving negative values.
486 // 478 //
487 // (-5) / 2 = -2, remainder = -1 479 // (-5) / 2 = -2, remainder = -1
488 d1 = TimeUtil.parseDuration("-5s"); 480 d1 = TimeUtil.parseDuration("-5s");
489 d2 = TimeUtil.parseDuration("2s"); 481 d2 = TimeUtil.parseDuration("2s");
490 assertEquals(-2, TimeUtil.divide(d1, d2)); 482 assertEquals(-2, TimeUtil.divide(d1, d2));
491 assertEquals(-2, TimeUtil.divide(d1, 2).getSeconds()); 483 assertEquals(-2, TimeUtil.divide(d1, 2).getSeconds());
492 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds()); 484 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds());
493 // (-5) / (-2) = 2, remainder = -1 485 // (-5) / (-2) = 2, remainder = -1
494 d1 = TimeUtil.parseDuration("-5s"); 486 d1 = TimeUtil.parseDuration("-5s");
495 d2 = TimeUtil.parseDuration("-2s"); 487 d2 = TimeUtil.parseDuration("-2s");
496 assertEquals(2, TimeUtil.divide(d1, d2)); 488 assertEquals(2, TimeUtil.divide(d1, d2));
497 assertEquals(2, TimeUtil.divide(d1, -2).getSeconds()); 489 assertEquals(2, TimeUtil.divide(d1, -2).getSeconds());
498 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds()); 490 assertEquals(-1, TimeUtil.remainder(d1, d2).getSeconds());
499 // 5 / (-2) = -2, remainder = 1 491 // 5 / (-2) = -2, remainder = 1
500 d1 = TimeUtil.parseDuration("5s"); 492 d1 = TimeUtil.parseDuration("5s");
501 d2 = TimeUtil.parseDuration("-2s"); 493 d2 = TimeUtil.parseDuration("-2s");
502 assertEquals(-2, TimeUtil.divide(d1, d2)); 494 assertEquals(-2, TimeUtil.divide(d1, d2));
503 assertEquals(-2, TimeUtil.divide(d1, -2).getSeconds()); 495 assertEquals(-2, TimeUtil.divide(d1, -2).getSeconds());
504 assertEquals(1, TimeUtil.remainder(d1, d2).getSeconds()); 496 assertEquals(1, TimeUtil.remainder(d1, d2).getSeconds());
505 } 497 }
506 } 498 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698