|
@@ -46,39 +46,54 @@ static const NSTimeInterval kTimeAccuracy = 1e-9;
|
|
@implementation WellKnownTypesTest
|
|
@implementation WellKnownTypesTest
|
|
|
|
|
|
- (void)testTimeStamp {
|
|
- (void)testTimeStamp {
|
|
- // Test Creation.
|
|
|
|
- NSDate *date = [NSDate date];
|
|
|
|
- GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date];
|
|
|
|
- NSDate *timeStampDate = timeStamp.date;
|
|
|
|
-
|
|
|
|
- // Comparing timeIntervals instead of directly comparing dates because date
|
|
|
|
- // equality requires the time intervals to be exactly the same, and the
|
|
|
|
- // timeintervals go through a bit of floating point error as they are
|
|
|
|
- // converted back and forth from the internal representation.
|
|
|
|
- XCTAssertEqualWithAccuracy(date.timeIntervalSince1970,
|
|
|
|
- timeStampDate.timeIntervalSince1970,
|
|
|
|
- kTimeAccuracy);
|
|
|
|
-
|
|
|
|
- NSTimeInterval time = [date timeIntervalSince1970];
|
|
|
|
- GPBTimestamp *timeStamp2 =
|
|
|
|
- [[GPBTimestamp alloc] initWithTimeIntervalSince1970:time];
|
|
|
|
- NSTimeInterval durationTime = timeStamp2.timeIntervalSince1970;
|
|
|
|
- XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
|
|
|
|
- [timeStamp release];
|
|
|
|
-
|
|
|
|
- // Test Mutation.
|
|
|
|
- date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval];
|
|
|
|
- timeStamp2.date = date;
|
|
|
|
- timeStampDate = timeStamp2.date;
|
|
|
|
- XCTAssertEqualWithAccuracy(date.timeIntervalSince1970,
|
|
|
|
- timeStampDate.timeIntervalSince1970,
|
|
|
|
- kTimeAccuracy);
|
|
|
|
-
|
|
|
|
- time = date.timeIntervalSince1970;
|
|
|
|
- timeStamp2.timeIntervalSince1970 = time;
|
|
|
|
- durationTime = timeStamp2.timeIntervalSince1970;
|
|
|
|
- XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
|
|
|
|
- [timeStamp2 release];
|
|
|
|
|
|
+ // Test a pre-Unix epoch date with fractional seconds.
|
|
|
|
+ NSTimeInterval interval = -428027599.0 + -483999967/1e9;
|
|
|
|
+ NSDate *preEpochDate = [NSDate dateWithTimeIntervalSince1970:interval];
|
|
|
|
+ NSDate *now = [NSDate date];
|
|
|
|
+ NSDate *future = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval];
|
|
|
|
+ NSArray *datesToTest = @[preEpochDate, now, future];
|
|
|
|
+
|
|
|
|
+ for (NSDate *date in datesToTest) {
|
|
|
|
+ // Test Creation.
|
|
|
|
+ GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date];
|
|
|
|
+ NSDate *timeStampDate = timeStamp.date;
|
|
|
|
+
|
|
|
|
+ XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
|
|
|
|
+ @"|nanos| must be >= 0. Failing date: %@", date);
|
|
|
|
+ XCTAssertLessThan(timeStamp.nanos, 1e9, @"|nanos| must be < 1e9. Failing date: %@", date);
|
|
|
|
+
|
|
|
|
+ // Comparing timeIntervals instead of directly comparing dates because date
|
|
|
|
+ // equality requires the time intervals to be exactly the same, and the
|
|
|
|
+ // timeintervals go through a bit of floating point error as they are
|
|
|
|
+ // converted back and forth from the internal representation.
|
|
|
|
+ XCTAssertEqualWithAccuracy(date.timeIntervalSince1970,
|
|
|
|
+ timeStampDate.timeIntervalSince1970,
|
|
|
|
+ kTimeAccuracy,
|
|
|
|
+ @"Failing date: %@", date);
|
|
|
|
+
|
|
|
|
+ NSTimeInterval time = [date timeIntervalSince1970];
|
|
|
|
+ GPBTimestamp *timeStamp2 =
|
|
|
|
+ [[GPBTimestamp alloc] initWithTimeIntervalSince1970:time];
|
|
|
|
+ NSTimeInterval durationTime = timeStamp2.timeIntervalSince1970;
|
|
|
|
+ XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy, @"Failing date: %@", date);
|
|
|
|
+ [timeStamp release];
|
|
|
|
+ [timeStamp2 release];
|
|
|
|
+
|
|
|
|
+ // Test Mutation.
|
|
|
|
+ GPBTimestamp *timeStamp3 = [[GPBTimestamp alloc] init];
|
|
|
|
+ timeStamp3.date = date;
|
|
|
|
+ timeStampDate = timeStamp3.date;
|
|
|
|
+ XCTAssertEqualWithAccuracy(date.timeIntervalSince1970,
|
|
|
|
+ timeStampDate.timeIntervalSince1970,
|
|
|
|
+ kTimeAccuracy,
|
|
|
|
+ @"Failing date: %@", date);
|
|
|
|
+
|
|
|
|
+ time = date.timeIntervalSince1970;
|
|
|
|
+ timeStamp3.timeIntervalSince1970 = time;
|
|
|
|
+ durationTime = timeStamp3.timeIntervalSince1970;
|
|
|
|
+ XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy, @"Failing date: %@", date);
|
|
|
|
+ [timeStamp3 release];
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- (void)testDuration {
|
|
- (void)testDuration {
|