@@ -259,50 +259,74 @@ final class Test_Duration: XCTestCase, PBTestHelpers {
259
259
XCTAssertEqual ( " { \" optionalDuration \" : \" 100.000000001s \" } " , try c. jsonString ( ) )
260
260
}
261
261
262
- func testInitializationByTimeIntervals ( ) throws {
262
+ func testInitializationRoundingTimeIntervals ( ) throws {
263
263
// Negative interval
264
- let t1 = Google_Protobuf_Duration ( timeInterval : - 123.456 )
264
+ let t1 = Google_Protobuf_Duration ( rounding : - 123.456 )
265
265
XCTAssertEqual ( t1. seconds, - 123 )
266
266
XCTAssertEqual ( t1. nanos, - 456_000_000 )
267
267
268
268
// Full precision
269
- let t2 = Google_Protobuf_Duration ( timeInterval : - 123.999999999 )
269
+ let t2 = Google_Protobuf_Duration ( rounding : - 123.999999999 )
270
270
XCTAssertEqual ( t2. seconds, - 123 )
271
271
XCTAssertEqual ( t2. nanos, - 999_999_999 )
272
272
273
- // Round up
274
- let t3 = Google_Protobuf_Duration ( timeInterval : - 123.9999999994 )
273
+ // Value past percision, default and some explicit rules
274
+ let t3 = Google_Protobuf_Duration ( rounding : - 123.9999999994 )
275
275
XCTAssertEqual ( t3. seconds, - 123 )
276
276
XCTAssertEqual ( t3. nanos, - 999_999_999 )
277
-
278
- // Round down
279
- let t4 = Google_Protobuf_Duration ( timeInterval: - 123.9999999996 )
277
+ let t3u = Google_Protobuf_Duration ( rounding: - 123.9999999994 , rule: . up)
278
+ XCTAssertEqual ( t3u. seconds, - 123 )
279
+ XCTAssertEqual ( t3u. nanos, - 999_999_999 )
280
+ let t3d = Google_Protobuf_Duration ( rounding: - 123.9999999994 , rule: . down)
281
+ XCTAssertEqual ( t3d. seconds, - 124 )
282
+ XCTAssertEqual ( t3d. nanos, 0 )
283
+
284
+ // Value past percision, default and some explicit rules
285
+ let t4 = Google_Protobuf_Duration ( rounding: - 123.9999999996 )
280
286
XCTAssertEqual ( t4. seconds, - 124 )
281
287
XCTAssertEqual ( t4. nanos, 0 )
282
-
283
- let t5 = Google_Protobuf_Duration ( timeInterval: 0 )
288
+ let t4u = Google_Protobuf_Duration ( rounding: - 123.9999999996 , rule: . up)
289
+ XCTAssertEqual ( t4u. seconds, - 123 )
290
+ XCTAssertEqual ( t4u. nanos, - 999_999_999 )
291
+ let t4d = Google_Protobuf_Duration ( rounding: - 123.9999999996 , rule: . down)
292
+ XCTAssertEqual ( t4d. seconds, - 124 )
293
+ XCTAssertEqual ( t4d. nanos, 0 )
294
+
295
+ let t5 = Google_Protobuf_Duration ( rounding: 0 )
284
296
XCTAssertEqual ( t5. seconds, 0 )
285
297
XCTAssertEqual ( t5. nanos, 0 )
286
298
287
299
// Positive interval
288
- let t6 = Google_Protobuf_Duration ( timeInterval : 123.456 )
300
+ let t6 = Google_Protobuf_Duration ( rounding : 123.456 )
289
301
XCTAssertEqual ( t6. seconds, 123 )
290
302
XCTAssertEqual ( t6. nanos, 456_000_000 )
291
303
292
304
// Full precision
293
- let t7 = Google_Protobuf_Duration ( timeInterval : 123.999999999 )
305
+ let t7 = Google_Protobuf_Duration ( rounding : 123.999999999 )
294
306
XCTAssertEqual ( t7. seconds, 123 )
295
307
XCTAssertEqual ( t7. nanos, 999_999_999 )
296
308
297
- // Round down
298
- let t8 = Google_Protobuf_Duration ( timeInterval : 123.9999999994 )
309
+ // Value past percision, default and some explicit rules
310
+ let t8 = Google_Protobuf_Duration ( rounding : 123.9999999994 )
299
311
XCTAssertEqual ( t8. seconds, 123 )
300
312
XCTAssertEqual ( t8. nanos, 999_999_999 )
301
-
302
- // Round up
303
- let t9 = Google_Protobuf_Duration ( timeInterval: 123.9999999996 )
313
+ let t8u = Google_Protobuf_Duration ( rounding: 123.9999999994 , rule: . up)
314
+ XCTAssertEqual ( t8u. seconds, 124 )
315
+ XCTAssertEqual ( t8u. nanos, 0 )
316
+ let t8d = Google_Protobuf_Duration ( rounding: 123.9999999994 , rule: . down)
317
+ XCTAssertEqual ( t8d. seconds, 123 )
318
+ XCTAssertEqual ( t8d. nanos, 999_999_999 )
319
+
320
+ // Value past percision, default and some explicit rules
321
+ let t9 = Google_Protobuf_Duration ( rounding: 123.9999999996 )
304
322
XCTAssertEqual ( t9. seconds, 124 )
305
323
XCTAssertEqual ( t9. nanos, 0 )
324
+ let t9u = Google_Protobuf_Duration ( rounding: 123.9999999996 , rule: . up)
325
+ XCTAssertEqual ( t9u. seconds, 124 )
326
+ XCTAssertEqual ( t9u. nanos, 0 )
327
+ let t9d = Google_Protobuf_Duration ( rounding: 123.9999999996 , rule: . down)
328
+ XCTAssertEqual ( t9d. seconds, 123 )
329
+ XCTAssertEqual ( t9d. nanos, 999_999_999 )
306
330
}
307
331
308
332
func testGetters( ) throws {
0 commit comments