Coverage Report

Created: 2024-04-30 09:35

test/zserio/MemoryResourceTest.cpp
Line
Count
Source
1
#include "gtest/gtest.h"
2
#include "zserio/pmr/MemoryResource.h"
3
4
namespace zserio
5
{
6
7
class TestResource : public zserio::pmr::MemoryResource
8
{
9
public:
10
    explicit TestResource(size_t instanceId) :
11
            m_instanceId(instanceId)
12
11
    {}
13
14
    size_t numAllocs() const
15
1
    {
16
1
        return m_numAllocs;
17
1
    }
18
19
    size_t numDeallocs() const
20
1
    {
21
1
        return m_numDeallocs;
22
1
    }
23
24
private:
25
    void* doAllocate(size_t bytes, size_t) override
26
1
    {
27
1
        ++m_numAllocs;
28
1
        return ::operator new(bytes);
29
1
    }
30
31
    void doDeallocate(void* memory, size_t, size_t) override
32
1
    {
33
1
        ++m_numDeallocs;
34
1
        ::operator delete(memory);
35
1
    }
36
37
    bool doIsEqual(const MemoryResource& other) const noexcept override
38
7
    {
39
7
        auto otherPtr = dynamic_cast<const TestResource*>(&other);
40
7
        EXPECT_TRUE(otherPtr != nullptr);
41
42
7
        return m_instanceId == otherPtr->m_instanceId;
43
7
    }
44
45
    size_t m_numAllocs = 0;
46
    size_t m_numDeallocs = 0;
47
    size_t m_instanceId;
48
};
49
50
TEST(MemoryResourceTest, allocateDeallocate)
51
1
{
52
1
    TestResource res(1);
53
1
    auto memory = res.allocate(10);
54
1
    EXPECT_EQ(1, res.numAllocs());
55
1
    res.deallocate(memory, 10);
56
1
    EXPECT_EQ(1, res.numDeallocs());
57
1
}
58
59
TEST(MemoryResourceTest, isEqual)
60
1
{
61
1
    TestResource res1(1);
62
1
    TestResource res1_1(1);
63
1
    TestResource res2(2);
64
1
    ASSERT_TRUE(res1.isEqual(res1));
65
1
    ASSERT_TRUE(res1.isEqual(res1_1));
66
1
    ASSERT_FALSE(res1.isEqual(res2));
67
1
}
68
69
TEST(MemoryResourceTest, equalOp)
70
1
{
71
1
    TestResource res1(1);
72
1
    TestResource res1_1(1);
73
1
    TestResource res2(2);
74
1
    ASSERT_TRUE(res1 == res1);
75
1
    ASSERT_TRUE(res1 == res1_1);
76
1
    ASSERT_FALSE(res1 == res2);
77
1
}
78
79
TEST(MemoryResourceTest, nonEqualOp)
80
1
{
81
1
    TestResource res1(1);
82
1
    TestResource res1_1(1);
83
1
    TestResource res2(2);
84
1
    ASSERT_FALSE(res1 != res1);
85
1
    ASSERT_FALSE(res1 != res1_1);
86
1
    ASSERT_TRUE(res1 != res2);
87
1
}
88
89
TEST(MemoryResourceTest, setGetDefaultResource)
90
1
{
91
1
    TestResource res(1);
92
1
    auto origRes = zserio::pmr::setDefaultResource(&res);
93
1
    ASSERT_EQ(&res, zserio::pmr::getDefaultResource());
94
1
    ASSERT_EQ(&res, zserio::pmr::setDefaultResource(origRes));
95
1
    zserio::pmr::setDefaultResource(nullptr);
96
1
    ASSERT_EQ(origRes, zserio::pmr::getDefaultResource());
97
1
}
98
99
} // namespace zserio