|
@@ -32,11 +32,9 @@
|
|
|
|
|
|
#import <XCTest/XCTest.h>
|
|
#import <XCTest/XCTest.h>
|
|
|
|
|
|
|
|
+#import "GPBTestUtilities.h"
|
|
#import "google/protobuf/AnyTest.pbobjc.h"
|
|
#import "google/protobuf/AnyTest.pbobjc.h"
|
|
|
|
|
|
-// A basically random interval into the future for testing with.
|
|
|
|
-static const NSTimeInterval kFutureOffsetInterval = 15000;
|
|
|
|
-
|
|
|
|
// Nanosecond time accuracy
|
|
// Nanosecond time accuracy
|
|
static const NSTimeInterval kTimeAccuracy = 1e-9;
|
|
static const NSTimeInterval kTimeAccuracy = 1e-9;
|
|
|
|
|
|
@@ -46,59 +44,117 @@ 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 negative and positive values.
|
|
|
|
+ NSTimeInterval values[] = {
|
|
|
|
+ -428027599.483999967, -1234567.0, -0.5, 0, 0.75, 54321.0, 2468086,483999967
|
|
|
|
+ };
|
|
|
|
+ for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
|
|
|
|
+ NSTimeInterval value = values[i];
|
|
|
|
+
|
|
|
|
+ // Test Creation - date.
|
|
|
|
+ NSDate *date = [NSDate dateWithTimeIntervalSince1970:value];
|
|
|
|
+ GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date];
|
|
|
|
+
|
|
|
|
+ XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ XCTAssertLessThan(timeStamp.nanos, 1e9,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, 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(value, timeStamp.date.timeIntervalSince1970,
|
|
|
|
+ kTimeAccuracy,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ [timeStamp release];
|
|
|
|
+
|
|
|
|
+ // Test Creation - timeIntervalSince1970.
|
|
|
|
+ timeStamp = [[GPBTimestamp alloc] initWithTimeIntervalSince1970:value];
|
|
|
|
+
|
|
|
|
+ XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ XCTAssertLessThan(timeStamp.nanos, 1e9,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+
|
|
|
|
+ XCTAssertEqualWithAccuracy(value, timeStamp.timeIntervalSince1970,
|
|
|
|
+ kTimeAccuracy,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ [timeStamp release];
|
|
|
|
+
|
|
|
|
+ // Test Mutation - date.
|
|
|
|
+ timeStamp = [[GPBTimestamp alloc] init];
|
|
|
|
+ timeStamp.date = date;
|
|
|
|
+
|
|
|
|
+ XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ XCTAssertLessThan(timeStamp.nanos, 1e9,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+
|
|
|
|
+ XCTAssertEqualWithAccuracy(value, timeStamp.date.timeIntervalSince1970,
|
|
|
|
+ kTimeAccuracy,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ [timeStamp release];
|
|
|
|
+
|
|
|
|
+ // Test Mutation - timeIntervalSince1970.
|
|
|
|
+ timeStamp = [[GPBTimestamp alloc] init];
|
|
|
|
+ timeStamp.timeIntervalSince1970 = value;
|
|
|
|
+
|
|
|
|
+ XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+ XCTAssertLessThan(timeStamp.nanos, 1e9,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+
|
|
|
|
+ XCTAssertEqualWithAccuracy(value, timeStamp.date.timeIntervalSince1970,
|
|
|
|
+ kTimeAccuracy,
|
|
|
|
+ @"Offset %f - Date: %@", (double)value, date);
|
|
|
|
+
|
|
|
|
+ [timeStamp release];
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- (void)testDuration {
|
|
- (void)testDuration {
|
|
- // Test Creation.
|
|
|
|
- NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
|
|
|
|
- GPBDuration *duration =
|
|
|
|
- [[GPBDuration alloc] initWithTimeIntervalSince1970:time];
|
|
|
|
- NSTimeInterval durationTime = duration.timeIntervalSince1970;
|
|
|
|
- XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
|
|
|
|
- [duration release];
|
|
|
|
-
|
|
|
|
- // Test Mutation.
|
|
|
|
- GPBDuration *duration2 =
|
|
|
|
- [[GPBDuration alloc] initWithTimeIntervalSince1970:time];
|
|
|
|
- NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval];
|
|
|
|
- time = date.timeIntervalSince1970;
|
|
|
|
- duration2.timeIntervalSince1970 = time;
|
|
|
|
- durationTime = duration2.timeIntervalSince1970;
|
|
|
|
- XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
|
|
|
|
- [duration2 release];
|
|
|
|
|
|
+ // Test negative and positive values.
|
|
|
|
+ NSTimeInterval values[] = { -1000.0001, -500.0, -0.5, 0, 0.75, 1000.0, 2000.0002 };
|
|
|
|
+ for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
|
|
|
|
+ NSTimeInterval value = values[i];
|
|
|
|
+
|
|
|
|
+ // Test Creation.
|
|
|
|
+ GPBDuration *duration =
|
|
|
|
+ [[GPBDuration alloc] initWithTimeInterval:value];
|
|
|
|
+ XCTAssertEqualWithAccuracy(value, duration.timeInterval, kTimeAccuracy,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ if (value > 0) {
|
|
|
|
+ XCTAssertGreaterThanOrEqual(duration.seconds, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ XCTAssertGreaterThanOrEqual(duration.nanos, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ } else {
|
|
|
|
+ XCTAssertLessThanOrEqual(duration.seconds, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ XCTAssertLessThanOrEqual(duration.nanos, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ }
|
|
|
|
+ [duration release];
|
|
|
|
+
|
|
|
|
+ // Test Mutation.
|
|
|
|
+ duration = [[GPBDuration alloc] init];
|
|
|
|
+ duration.timeInterval = value;
|
|
|
|
+ XCTAssertEqualWithAccuracy(value, duration.timeInterval, kTimeAccuracy,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ if (value > 0) {
|
|
|
|
+ XCTAssertGreaterThanOrEqual(duration.seconds, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ XCTAssertGreaterThanOrEqual(duration.nanos, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ } else {
|
|
|
|
+ XCTAssertLessThanOrEqual(duration.seconds, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ XCTAssertLessThanOrEqual(duration.nanos, 0,
|
|
|
|
+ @"For interval %f", (double)value);
|
|
|
|
+ }
|
|
|
|
+ [duration release];
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- (void)testAnyHelpers {
|
|
- (void)testAnyHelpers {
|