1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#include "gtest/gtest.h"
#include "common.h"
#include "core.h"
using namespace srt;
const int32_t CSeqNo::m_iSeqNoTH;
const int32_t CSeqNo::m_iMaxSeqNo;
TEST(CSeqNo, constants)
{
// Compare two seq#, considering the wraping.
EXPECT_EQ(CSeqNo::m_iMaxSeqNo, 0x7FFFFFFF);
EXPECT_EQ(CSeqNo::m_iSeqNoTH, 0x3FFFFFFF);
}
TEST(CSeqNo, seqcmp)
{
// Compare two seq#, considering the wraping.
EXPECT_EQ(CSeqNo::seqcmp(0x7FFFFFFF, 0x7FFFFFFF), 0);
// abs(seq1 - seq2) < 0x3FFFFFFF : seq1 - seq2
EXPECT_EQ(CSeqNo::seqcmp(128, 1), 127);
EXPECT_EQ(CSeqNo::seqcmp(1, 128), -127);
// abs(seq1 - seq2) >= 0x3FFFFFFF : seq2 - seq1
EXPECT_EQ(CSeqNo::seqcmp(0x7FFFFFFF, 1), int(0x80000002)); // -2147483646
EXPECT_EQ(CSeqNo::seqcmp(1, 0x7FFFFFFF), 0x7FFFFFFE); // 2147483646
}
TEST(CSeqNo, seqoff)
{
// seqoff: offset from the 2nd to the 1st seq#
EXPECT_EQ(CSeqNo::seqoff(0x7FFFFFFF, 0x7FFFFFFF), 0);
// distance(seq2 - seq1)
EXPECT_EQ(CSeqNo::seqoff(125, 1), -124);
EXPECT_EQ(CSeqNo::seqoff(1, 0x7FFFFFFF), -2);
EXPECT_EQ(CSeqNo::seqoff(0x7FFFFFFF, 1), 2);
}
TEST(CSeqNo, seqlen)
{
EXPECT_EQ(CSeqNo::seqlen(125, 125), 1);
EXPECT_EQ(CSeqNo::seqlen(125, 126), 2);
EXPECT_EQ(CSeqNo::seqlen(2147483647, 0), 2);
EXPECT_EQ(CSeqNo::seqlen(0, 2147483647), -2147483648);
}
TEST(CUDT, getFlightSpan)
{
const int test_values[3][3] = {
// lastack curseq span
{ 125, 124, 0 }, // all sent packets are acknowledged
{ 125, 125, 1 },
{ 125, 130, 6 }
};
for (auto val : test_values)
{
EXPECT_EQ(CUDT::getFlightSpan(val[0], val[1]), val[2]) << "Span(" << val[0] << ", " << val[1] << ")";
}
}
TEST(CSeqNo, incseq)
{
// incseq: increase the seq# by 1
EXPECT_EQ(CSeqNo::incseq(1), 2);
EXPECT_EQ(CSeqNo::incseq(125), 126);
EXPECT_EQ(CSeqNo::incseq(0x7FFFFFFF), 0);
EXPECT_EQ(CSeqNo::incseq(0x3FFFFFFF), 0x40000000);
}
TEST(CSeqNo, decseq)
{
// decseq: decrease the seq# by 1
EXPECT_EQ(CSeqNo::decseq(1), 0);
EXPECT_EQ(CSeqNo::decseq(125), 124);
EXPECT_EQ(CSeqNo::decseq(0), 0x7FFFFFFF);
EXPECT_EQ(CSeqNo::decseq(0x40000000), 0x3FFFFFFF);
}
TEST(CSeqNo, incseqint)
{
// incseq: increase the seq# by 1
EXPECT_EQ(CSeqNo::incseq(1, 1), 2);
EXPECT_EQ(CSeqNo::incseq(125, 1), 126);
EXPECT_EQ(CSeqNo::incseq(0x7FFFFFFF, 1), 0);
EXPECT_EQ(CSeqNo::incseq(0x3FFFFFFF, 1), 0x40000000);
EXPECT_EQ(CSeqNo::incseq(0x3FFFFFFF, 0x3FFFFFFF), 0x7FFFFFFE);
EXPECT_EQ(CSeqNo::incseq(0x3FFFFFFF, 0x40000000), 0x7FFFFFFF);
EXPECT_EQ(CSeqNo::incseq(0x3FFFFFFF, 0x40000001), 0x00000000);
}
TEST(CSeqNo, decseqint)
{
// decseq: decrease the seq# by 1
EXPECT_EQ(CSeqNo::decseq(1, 1), 0);
EXPECT_EQ(CSeqNo::decseq(125, 1), 124);
EXPECT_EQ(CSeqNo::decseq(0, 1), 0x7FFFFFFF);
EXPECT_EQ(CSeqNo::decseq(0x40000000, 1), 0x3FFFFFFF);
}
|