| Index: webrtc/modules/module_common_types_unittest.cc
|
| diff --git a/webrtc/modules/module_common_types_unittest.cc b/webrtc/modules/module_common_types_unittest.cc
|
| index 3e7f594166631fda651944638352170b813f1bff..bc0b7a1a5b2cb1517858afd2d25d8bb6211c5c12 100644
|
| --- a/webrtc/modules/module_common_types_unittest.cc
|
| +++ b/webrtc/modules/module_common_types_unittest.cc
|
| @@ -122,4 +122,63 @@ TEST(ClampToInt16, TestCases) {
|
| EXPECT_EQ(-0x8000, ClampToInt16(-0x7FFFFFFF));
|
| }
|
|
|
| +TEST(SequenceNumberUnwrapper, Limits) {
|
| + SequenceNumberUnwrapper unwrapper;
|
| +
|
| + EXPECT_EQ(0, unwrapper.Unwrap(0));
|
| + EXPECT_EQ(0x8000, unwrapper.Unwrap(0x8000));
|
| + // Delta is exactly 0x8000 but current is lower than input, wrap backwards.
|
| + EXPECT_EQ(0x0, unwrapper.Unwrap(0x0000));
|
| +
|
| + EXPECT_EQ(0x8000, unwrapper.Unwrap(0x8000));
|
| + EXPECT_EQ(0xFFFF, unwrapper.Unwrap(0xFFFF));
|
| + EXPECT_EQ(0x10000, unwrapper.Unwrap(0x0000));
|
| + EXPECT_EQ(0xFFFF, unwrapper.Unwrap(0xFFFF));
|
| + EXPECT_EQ(0x8000, unwrapper.Unwrap(0x8000));
|
| + EXPECT_EQ(0, unwrapper.Unwrap(0));
|
| +
|
| + // Don't allow negative values.
|
| + EXPECT_EQ(0xFFFF, unwrapper.Unwrap(0xFFFF));
|
| +}
|
| +
|
| +TEST(SequenceNumberUnwrapper, ForwardWraps) {
|
| + int64_t seq = 0;
|
| + SequenceNumberUnwrapper unwrapper;
|
| +
|
| + const int kMaxIncrease = 0x8000 - 1;
|
| + const int kNumWraps = 4;
|
| + for (int i = 0; i < kNumWraps * 2; ++i) {
|
| + int64_t unwrapped = unwrapper.Unwrap(static_cast<uint16_t>(seq & 0xFFFF));
|
| + EXPECT_EQ(seq, unwrapped);
|
| + seq += kMaxIncrease;
|
| + }
|
| +
|
| + unwrapper.UpdateLast(0);
|
| + for (int seq = 0; seq < kNumWraps * 0xFFFF; ++seq) {
|
| + int64_t unwrapped = unwrapper.Unwrap(static_cast<uint16_t>(seq & 0xFFFF));
|
| + EXPECT_EQ(seq, unwrapped);
|
| + }
|
| +}
|
| +
|
| +TEST(SequenceNumberUnwrapper, BackwardWraps) {
|
| + SequenceNumberUnwrapper unwrapper;
|
| +
|
| + const int kMaxDecrease = 0x8000 - 1;
|
| + const int kNumWraps = 4;
|
| + int64_t seq = kNumWraps * 2 * kMaxDecrease;
|
| + unwrapper.UpdateLast(seq);
|
| + for (int i = kNumWraps * 2; i >= 0; --i) {
|
| + int64_t unwrapped = unwrapper.Unwrap(static_cast<uint16_t>(seq & 0xFFFF));
|
| + EXPECT_EQ(seq, unwrapped);
|
| + seq -= kMaxDecrease;
|
| + }
|
| +
|
| + seq = kNumWraps * 0xFFFF;
|
| + unwrapper.UpdateLast(seq);
|
| + for (; seq >= 0; --seq) {
|
| + int64_t unwrapped = unwrapper.Unwrap(static_cast<uint16_t>(seq & 0xFFFF));
|
| + EXPECT_EQ(seq, unwrapped);
|
| + }
|
| +}
|
| +
|
| } // namespace webrtc
|
|
|