memory/deleter: add trivial test case
This commit is contained in:
parent
00f6f614be
commit
4556745d77
@ -428,6 +428,7 @@ TEST_BIN = \
|
||||
test/json_types \
|
||||
test/memory/buffer/circular \
|
||||
test/memory/buffer/paged \
|
||||
test/memory/deleter \
|
||||
test/maths \
|
||||
test/matrix \
|
||||
test/md2 \
|
||||
|
50
test/memory/deleter.cpp
Normal file
50
test/memory/deleter.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
#include "memory/deleter.hpp"
|
||||
#include "tap.hpp"
|
||||
|
||||
#include <memory>
|
||||
|
||||
|
||||
struct setter {
|
||||
setter (bool &_flag):
|
||||
flag (_flag)
|
||||
{ ; }
|
||||
|
||||
void release (unsigned *)
|
||||
{ flag = true; }
|
||||
|
||||
bool &flag;
|
||||
};
|
||||
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
bool flag = false;
|
||||
|
||||
{
|
||||
// setup a pretend resource. we're not going to delete it, it's just
|
||||
// to satisfy some required parameters. importantly it can't be null
|
||||
// otherwise release is skipped.
|
||||
unsigned *foo = reinterpret_cast<unsigned*> (0x01);
|
||||
|
||||
// setup the owner who will set a flag when the release operation is
|
||||
// called
|
||||
setter bar (flag);
|
||||
|
||||
// setup our non-default unique_ptr
|
||||
std::unique_ptr<
|
||||
unsigned,
|
||||
util::memory::owner_deleter<
|
||||
unsigned,
|
||||
setter,
|
||||
&setter::release
|
||||
>
|
||||
> qux (foo, bar);
|
||||
}
|
||||
|
||||
// the flag should have been implicitly set to true via the unique_ptr
|
||||
// callback above
|
||||
util::TAP::logger tap;
|
||||
tap.expect (flag, "owner_deleter calls registered callback");
|
||||
return tap.status ();
|
||||
}
|
Loading…
Reference in New Issue
Block a user