slab.storage.cpp

 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
#include <felspar/memory/slab.storage.hpp>
#include <felspar/test.hpp>


namespace {


    auto const suite = felspar::testsuite("slab");


    auto const ga = suite.test("good alloc", [](auto check) {
        constexpr std::size_t size = 1u << 10;
        felspar::memory::slab_storage<size, 8u> slab;
        check(slab.free()) == size;

        auto a1 = slab.allocate(8u);
        check(a1) == reinterpret_cast<std::byte const *>(&slab);
        check(slab.free()) == size - 8u;

        auto a2 = slab.allocate(1u);
        check(a2) == reinterpret_cast<std::byte const *>(&slab) + 8u;
        check(slab.free()) == size - 16u;

        slab.deallocate(a1, 8u);
        slab.deallocate(a2, 1u);
        check(slab.free()) == (1u << 10) - 16u;
    });


}