libcruft-util/test/alloc/arena.cpp
Danny Robson c2265b9ed2 alloc: add aligned::foreign allocator
sometimes we need to ensure memory allocation has a particular alignment
in an _offset_ buffer (which we have no control over, eg renderdoc's
OpenGL buffers).

this applies an offset to various operations that make the
aligned::direct allocator correctly align allocations for buffers that
aren't themselves aligned.
2018-03-02 12:21:38 +11:00

64 lines
1.5 KiB
C++

#include "tap.hpp"
#include "alloc/arena.hpp"
#include "alloc/raw/linear.hpp"
#include "debug.hpp"
///////////////////////////////////////////////////////////////////////////////
static std::byte g_backing[1024*1024];
//-----------------------------------------------------------------------------
struct setter {
setter (const setter&) = delete;
setter (bool &_target):
target (_target)
{ target = false; }
~setter ()
{ target = true; }
bool ⌖
};
//-----------------------------------------------------------------------------
int
main (void)
{
util::alloc::raw::linear alloc (util::make_view (g_backing));
util::alloc::arena<util::alloc::raw::linear> arena (alloc);
util::TAP::logger tap;
bool flag = true;
// double check our testing object is working, because I'm tired and stupid
{
setter val (flag);
CHECK (!flag);
}
CHECK (flag);
// ensure manual acquire and release calls constructors and destructors
{
auto obj = arena.acquire<setter> (flag);
tap.expect_eq (flag, false, "arena manual acquire calls constructor");
arena.release (obj);
tap.expect_eq (flag, true, "arena manual release calls destructor");
}
// ensure unique_ptr like objects call constructors and destructors
{
auto obj = arena.unique<setter> (flag);
tap.expect_eq (flag, false, "arena unique acquire calls constructor");
}
tap.expect_eq (flag, true, "arena unique release calls destructor");
return tap.status ();
}