session-ios/Signal/test/network/rtp/srtp/SequenceCounterTest.m
Frederic Jacobs 675956f792 Goodbye OCTest, Hello XCTest
Some tests are still failing after the new key datastore transition.
2014-07-17 01:14:12 +02:00

49 lines
1.8 KiB
Objective-C

#import "SequenceCounterTest.h"
#import "SequenceCounter.h"
#import "TestUtil.h"
@implementation SequenceCounterTest
-(void)testCountingForwards {
SequenceCounter* s = [SequenceCounter sequenceCounter];
test([s convertNext:1] == (int64_t)1);
test([s convertNext:2] == (int64_t)2);
test([s convertNext:6] == (int64_t)6);
}
-(void)testCountingBackwards {
SequenceCounter* s = [SequenceCounter sequenceCounter];
test([s convertNext:UINT16_MAX] == (int64_t)-1);
test([s convertNext:UINT16_MAX-1] == (int64_t)-2);
test([s convertNext:UINT16_MAX-5] == (int64_t)-6);
}
-(void)testCountingLimits {
SequenceCounter* s = [SequenceCounter sequenceCounter];
uint16_t signedMin = (uint16_t)((int32_t)INT16_MIN + (1 << 16));
test([s convertNext:INT16_MAX] == (int64_t)INT16_MAX);
test([s convertNext:INT16_MAX] == (int64_t)INT16_MAX);
test([s convertNext:signedMin] == (int64_t)(INT16_MAX + 1));
test([s convertNext:signedMin] == (int64_t)(INT16_MAX + 1));
}
-(void)testCountingRandomizedDelta {
SequenceCounter* s = [SequenceCounter sequenceCounter];
int64_t prevLongId = 0;
uint16_t prevShortId = 0;
for (long i = 0; i < 1000; i++) {
int32_t delta = (int32_t)arc4random_uniform(1 << 16);
if (delta > INT16_MAX) delta -= 1 << 16;
int64_t nextLongId = prevLongId + delta;
uint16_t nextShortId = (uint16_t)(nextLongId & 0xFFFF);
int64_t actualNextLongId = [s convertNext:nextShortId];
if (nextLongId != actualNextLongId) {
XCTFail(@"Bad transition: %lld, %lld + %lld -> %lld, %lld != %lld", (long long)prevShortId, (long long)prevLongId, (long long)delta, (long long)nextShortId, (long long)actualNextLongId, (long long)nextLongId);
return;
}
prevLongId = nextLongId;
prevShortId = nextShortId;
}
}
@end