1// Protocol Buffers - Google's data interchange format 2// Copyright 2015 Google Inc. All rights reserved. 3// https://developers.google.com/protocol-buffers/ 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions are 7// met: 8// 9// * Redistributions of source code must retain the above copyright 10// notice, this list of conditions and the following disclaimer. 11// * Redistributions in binary form must reproduce the above 12// copyright notice, this list of conditions and the following disclaimer 13// in the documentation and/or other materials provided with the 14// distribution. 15// * Neither the name of Google Inc. nor the names of its 16// contributors may be used to endorse or promote products derived from 17// this software without specific prior written permission. 18// 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 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. 30 31#import "GPBWellKnownTypes.h" 32 33#import <XCTest/XCTest.h> 34 35// A basically random interval into the future for testing with. 36static const NSTimeInterval kFutureOffsetInterval = 15000; 37 38// Nanosecond time accuracy 39static const NSTimeInterval kTimeAccuracy = 1e-9; 40 41@interface WellKnownTypesTest : XCTestCase 42@end 43 44@implementation WellKnownTypesTest 45 46- (void)testTimeStamp { 47 // Test Creation. 48 NSDate *date = [NSDate date]; 49 GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date]; 50 NSDate *timeStampDate = timeStamp.date; 51 52 // Comparing timeIntervals instead of directly comparing dates because date 53 // equality requires the time intervals to be exactly the same, and the 54 // timeintervals go through a bit of floating point error as they are 55 // converted back and forth from the internal representation. 56 XCTAssertEqualWithAccuracy(date.timeIntervalSince1970, 57 timeStampDate.timeIntervalSince1970, 58 kTimeAccuracy); 59 60 NSTimeInterval time = [date timeIntervalSince1970]; 61 GPBTimestamp *timeStamp2 = 62 [[GPBTimestamp alloc] initWithTimeIntervalSince1970:time]; 63 NSTimeInterval durationTime = timeStamp2.timeIntervalSince1970; 64 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 65 [timeStamp release]; 66 67 // Test Mutation. 68 date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval]; 69 timeStamp2.date = date; 70 timeStampDate = timeStamp2.date; 71 XCTAssertEqualWithAccuracy(date.timeIntervalSince1970, 72 timeStampDate.timeIntervalSince1970, 73 kTimeAccuracy); 74 75 time = date.timeIntervalSince1970; 76 timeStamp2.timeIntervalSince1970 = time; 77 durationTime = timeStamp2.timeIntervalSince1970; 78 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 79 [timeStamp2 release]; 80} 81 82- (void)testDuration { 83 // Test Creation. 84 NSTimeInterval time = [[NSDate date] timeIntervalSince1970]; 85 GPBDuration *duration = 86 [[GPBDuration alloc] initWithTimeIntervalSince1970:time]; 87 NSTimeInterval durationTime = duration.timeIntervalSince1970; 88 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 89 [duration release]; 90 91 // Test Mutation. 92 GPBDuration *duration2 = 93 [[GPBDuration alloc] initWithTimeIntervalSince1970:time]; 94 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval]; 95 time = date.timeIntervalSince1970; 96 duration2.timeIntervalSince1970 = time; 97 durationTime = duration2.timeIntervalSince1970; 98 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 99 [duration2 release]; 100} 101 102@end 103