File: test_losslist_rcv.cpp

package info (click to toggle)
srt 1.5.4-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,804 kB
  • sloc: cpp: 52,175; ansic: 5,746; tcl: 1,183; sh: 318; python: 99; makefile: 38
file content (139 lines) | stat: -rw-r--r-- 3,406 bytes parent folder | download | duplicates (2)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include "gtest/gtest.h"
#include "test_env.h"
#include "common.h"
#include "list.h"

using namespace std;
using namespace srt;

class CRcvLossListTest
    : public ::testing::Test
{
protected:
    void SetUp() override
    {
        m_lossList = new CRcvLossList(CRcvLossListTest::SIZE);
    }

    void TearDown() override
    {
        delete m_lossList;
    }

    void CheckEmptyArray()
    {
        EXPECT_EQ(m_lossList->getLossLength(), 0);
        EXPECT_EQ(m_lossList->getFirstLostSeq(), SRT_SEQNO_NONE);
    }

    void CleanUpList()
    {
        //while (m_lossList->popLostSeq() != -1);
    }

    CRcvLossList* m_lossList;

public:
    const int SIZE = 256;
};

/// Check the state of the freshly created list.
/// Capacity, loss length and pop().
TEST_F(CRcvLossListTest, Create)
{
    CheckEmptyArray();
}

///////////////////////////////////////////////////////////////////////////////
///
/// The first group of tests checks insert and pop()
///
///////////////////////////////////////////////////////////////////////////////

/// Insert and remove one element from the list.
TEST_F(CRcvLossListTest, InsertRemoveOneElem)
{
    EXPECT_EQ(m_lossList->insert(1, 1), 1);

    EXPECT_EQ(m_lossList->getLossLength(), 1);
    EXPECT_TRUE(m_lossList->remove(1, 1));
    CheckEmptyArray();
}


/// Insert and pop one element from the list.
TEST_F(CRcvLossListTest, InsertTwoElemsEdge)
{
    EXPECT_EQ(m_lossList->insert(CSeqNo::m_iMaxSeqNo, 1), 3);
    EXPECT_EQ(m_lossList->getLossLength(), 3);
    EXPECT_TRUE(m_lossList->remove(CSeqNo::m_iMaxSeqNo, 1));
    CheckEmptyArray();
}

TEST(CRcvFreshLossListTest, CheckFreshLossList)
{
    srt::TestInit srtinit;
    std::deque<CRcvFreshLoss> floss {
        CRcvFreshLoss (10, 15, 5),
        CRcvFreshLoss (25, 29, 10),
        CRcvFreshLoss (30, 30, 3),
        CRcvFreshLoss (45, 80, 100)
    };

    EXPECT_EQ(floss.size(), 4u);

    // Ok, now let's do element removal

    int had_ttl = 0;
    bool rm = CRcvFreshLoss::removeOne((floss), 26, &had_ttl);

    EXPECT_EQ(rm, true);
    EXPECT_EQ(had_ttl, 10);
    EXPECT_EQ(floss.size(), 5u);

    // Now we expect to have [10-15] [25-25] [27-35]...
    // After revoking 25 it should have removed it.

    // SPLIT
    rm = CRcvFreshLoss::removeOne((floss), 27, &had_ttl);
    EXPECT_EQ(rm, true);
    EXPECT_EQ(had_ttl, 10);
    EXPECT_EQ(floss.size(), 5u);

    // STRIP
    rm = CRcvFreshLoss::removeOne((floss), 28, &had_ttl);
    EXPECT_EQ(rm, true);
    EXPECT_EQ(had_ttl, 10);
    EXPECT_EQ(floss.size(), 5u);

    // DELETE
    rm = CRcvFreshLoss::removeOne((floss), 25, &had_ttl);
    EXPECT_EQ(rm, true);
    EXPECT_EQ(had_ttl, 10);
    EXPECT_EQ(floss.size(), 4u);

    // SPLIT
    rm = CRcvFreshLoss::removeOne((floss), 50, &had_ttl);
    EXPECT_EQ(rm, true);
    EXPECT_EQ(had_ttl, 100);
    EXPECT_EQ(floss.size(), 5u);

    // DELETE
    rm = CRcvFreshLoss::removeOne((floss), 30, &had_ttl);
    EXPECT_EQ(rm, true);
    EXPECT_EQ(had_ttl, 3);
    EXPECT_EQ(floss.size(), 4u);

    // Remove nonexistent sequence, but existing before.
    rm = CRcvFreshLoss::removeOne((floss), 25, NULL);
    EXPECT_EQ(rm, false);
    EXPECT_EQ(floss.size(), 4u);

    // Remove nonexistent sequence that didn't exist before.
    rm = CRcvFreshLoss::removeOne((floss), 31, &had_ttl);
    EXPECT_EQ(rm, false);
    EXPECT_EQ(had_ttl, 0);
    EXPECT_EQ(floss.size(), 4u);

}