@ -32,11 +32,9 @@
#import < XCTest / XCTest . h >
#import "GPBTestUtilities . 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
static const NSTimeInterval kTimeAccuracy = 1e-9 ;
@ -46,59 +44,117 @@ static const NSTimeInterval kTimeAccuracy = 1e-9;
@ implementation WellKnownTypesTest
- ( 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 {
/ / 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 {