GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: test/zserio/MemoryResourceTest.cpp Lines: 55 55 100.0 %
Date: 2023-12-13 14:51:09 Branches: 68 238 28.6 %

Line Branch Exec Source
1
#include "gtest/gtest.h"
2
3
#include "zserio/pmr/MemoryResource.h"
4
5
namespace zserio
6
{
7
8
11
class TestResource : public zserio::pmr::MemoryResource
9
{
10
public:
11
11
    explicit TestResource(size_t instanceId) :
12
11
        m_instanceId(instanceId)
13
11
    {}
14
15
1
    size_t numAllocs() const
16
    {
17
1
        return m_numAllocs;
18
    }
19
20
1
    size_t numDeallocs() const
21
    {
22
1
        return m_numDeallocs;
23
    }
24
25
private:
26
1
    void* doAllocate(size_t bytes, size_t) override
27
    {
28
1
        ++m_numAllocs;
29
1
        return ::operator new(bytes);
30
    }
31
32
1
    void doDeallocate(void* p, size_t, size_t) override
33
    {
34
1
        ++m_numDeallocs;
35
1
        ::operator delete(p);
36
1
    }
37
38
7
    bool doIsEqual(const MemoryResource& other) const noexcept override
39
    {
40
7
        auto otherPtr = dynamic_cast<const TestResource*>(&other);
41
7
        EXPECT_TRUE(otherPtr != nullptr);
42
43
7
        return m_instanceId == otherPtr->m_instanceId;
44
    }
45
46
    size_t m_numAllocs = 0;
47
    size_t m_numDeallocs = 0;
48
    size_t m_instanceId;
49
};
50
51


802
TEST(MemoryResourceTest, allocateDeallocate)
52
{
53
2
    TestResource res(1);
54
1
    auto p = res.allocate(10);
55


1
    EXPECT_EQ(1, res.numAllocs());
56
1
    res.deallocate(p, 10);
57


1
    EXPECT_EQ(1, res.numDeallocs());
58
1
}
59
60


802
TEST(MemoryResourceTest, isEqual)
61
{
62
2
    TestResource res1(1);
63
2
    TestResource res1_1(1);
64
2
    TestResource res2(2);
65



1
    ASSERT_TRUE(res1.isEqual(res1));
66



1
    ASSERT_TRUE(res1.isEqual(res1_1));
67



1
    ASSERT_FALSE(res1.isEqual(res2));
68
}
69
70


802
TEST(MemoryResourceTest, equalOp)
71
{
72
2
    TestResource res1(1);
73
2
    TestResource res1_1(1);
74
2
    TestResource res2(2);
75



1
    ASSERT_TRUE(res1 == res1);
76



1
    ASSERT_TRUE(res1 == res1_1);
77



1
    ASSERT_FALSE(res1 == res2);
78
}
79
80


802
TEST(MemoryResourceTest, nonEqualOp)
81
{
82
2
    TestResource res1(1);
83
2
    TestResource res1_1(1);
84
2
    TestResource res2(2);
85



1
    ASSERT_FALSE(res1 != res1);
86



1
    ASSERT_FALSE(res1 != res1_1);
87



1
    ASSERT_TRUE(res1 != res2);
88
}
89
90


802
TEST(MemoryResourceTest, setGetDefaultResource)
91
{
92
2
    TestResource res(1);
93
1
    auto origRes = zserio::pmr::setDefaultResource(&res);
94



1
    ASSERT_EQ(&res, zserio::pmr::getDefaultResource());
95



1
    ASSERT_EQ(&res, zserio::pmr::setDefaultResource(origRes));
96
1
    zserio::pmr::setDefaultResource(nullptr);
97



1
    ASSERT_EQ(origRes, zserio::pmr::getDefaultResource());
98
}
99
100

2394
} // namespace zserio