module ut.memory.allocators;


import ut;


@("insitu.sizeof")
@safe pure unittest {
    static assert(InSitu!16.sizeof == 16);
    static assert(InSitu!32.sizeof == 32);
}


@("insitu.allocate")
@safe pure unittest {
    import core.exception: RangeError;

    InSitu!16 allocator;
    auto buf = allocator.allocate(2);
    buf.length.should == 2;
    allocator.allocate(16);
    allocator.allocate(17).shouldThrow!RangeError;
}


@("insitu.deallocate")
@safe pure unittest {
    InSitu!16 allocator;
    void[] buf;

    version(nodip1008) {
        import core.exception: AssertError;
        alias Class = AssertError;
    } else
          alias Class = Exception;

    allocator.deallocate(buf).shouldThrow!Class;
    allocator.deallocate(allocator.allocate(5));
}


@("sbo.sizeof")
@safe pure unittest {
    static assert(SBOAllocator!16.sizeof == 16);
    static assert(SBOAllocator!32.sizeof == 32);
}