Coverage Report

Created: 2023-12-13 14:58

test/zserio/MemoryResourceTest.cpp
Line
Count
Source
1
#include "gtest/gtest.h"
2
3
#include "zserio/pmr/MemoryResource.h"
4
5
namespace zserio
6
{
7
8
class TestResource : public zserio::pmr::MemoryResource
9
{
10
public:
11
    explicit TestResource(size_t instanceId) :
12
        m_instanceId(instanceId)
13
11
    {}
14
15
    size_t numAllocs() const
16
1
    {
17
1
        return m_numAllocs;
18
1
    }
19
20
    size_t numDeallocs() const
21
1
    {
22
1
        return m_numDeallocs;
23
1
    }
24
25
private:
26
    void* doAllocate(size_t bytes, size_t) override
27
1
    {
28
1
        ++m_numAllocs;
29
1
        return ::operator new(bytes);
30
1
    }
31
32
    void doDeallocate(void* p, size_t, size_t) override
33
1
    {
34
1
        ++m_numDeallocs;
35
1
        ::operator delete(p);
36
1
    }
37
38
    bool doIsEqual(const MemoryResource& other) const noexcept override
39
7
    {
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
7
    }
45
46
    size_t m_numAllocs = 0;
47
    size_t m_numDeallocs = 0;
48
    size_t m_instanceId;
49
};
50
51
TEST(MemoryResourceTest, allocateDeallocate)
52
1
{
53
1
    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
TEST(MemoryResourceTest, isEqual)
61
1
{
62
1
    TestResource res1(1);
63
1
    TestResource res1_1(1);
64
1
    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
1
}
69
70
TEST(MemoryResourceTest, equalOp)
71
1
{
72
1
    TestResource res1(1);
73
1
    TestResource res1_1(1);
74
1
    TestResource res2(2);
75
1
    ASSERT_TRUE(res1 == res1);
76
1
    ASSERT_TRUE(res1 == res1_1);
77
1
    ASSERT_FALSE(res1 == res2);
78
1
}
79
80
TEST(MemoryResourceTest, nonEqualOp)
81
1
{
82
1
    TestResource res1(1);
83
1
    TestResource res1_1(1);
84
1
    TestResource res2(2);
85
1
    ASSERT_FALSE(res1 != res1);
86
1
    ASSERT_FALSE(res1 != res1_1);
87
1
    ASSERT_TRUE(res1 != res2);
88
1
}
89
90
TEST(MemoryResourceTest, setGetDefaultResource)
91
1
{
92
1
    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
1
}
99
100
} // namespace zserio