/////////////////////////////////////////////////////////////////////////////// // /// \file test_memlimit.c /// \brief Tests the memory usage limiter /// /// \note These tests cannot be done at exact byte count accuracy, /// because memory limiter takes into account the memory wasted /// by bookkeeping structures and alignment (padding). // // Copyright (C) 2008 Lasse Collin // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // /////////////////////////////////////////////////////////////////////////////// #include "tests.h" int main(void) { void *a; void *b; lzma_memlimit *mem; expect((mem = lzma_memlimit_create(1 << 16)) != NULL); expect(lzma_memlimit_count(mem) == 0); expect(lzma_memlimit_used(mem) > 0); expect(lzma_memlimit_used(mem) < 4096); expect(lzma_memlimit_used(mem) == lzma_memlimit_max(mem, false)); expect(!lzma_memlimit_reached(mem, false)); expect((a = lzma_memlimit_alloc(mem, 1, 4096)) != NULL); expect(lzma_memlimit_count(mem) == 1); expect(lzma_memlimit_used(mem) > 4096); expect(lzma_memlimit_used(mem) < 8192); expect(lzma_memlimit_used(mem) == lzma_memlimit_max(mem, false)); expect(!lzma_memlimit_reached(mem, false)); expect((b = lzma_memlimit_alloc(mem, 1, 4096)) != NULL); expect(lzma_memlimit_count(mem) == 2); expect(lzma_memlimit_used(mem) > 8192); expect(lzma_memlimit_used(mem) < 12288); expect(lzma_memlimit_used(mem) == lzma_memlimit_max(mem, false)); expect(!lzma_memlimit_reached(mem, false)); expect((lzma_memlimit_alloc(mem, 1, 1 << 17)) == NULL); expect(lzma_memlimit_count(mem) == 2); expect(lzma_memlimit_used(mem) > 8192); expect(lzma_memlimit_used(mem) < 12288); expect(lzma_memlimit_used(mem) < lzma_memlimit_max(mem, false)); expect(lzma_memlimit_max(mem, false) > (1 << 17)); expect(lzma_memlimit_reached(mem, false)); lzma_memlimit_free(mem, a); expect(lzma_memlimit_count(mem) == 1); expect(lzma_memlimit_used(mem) > 4096); expect(lzma_memlimit_used(mem) < 8192); expect(lzma_memlimit_max(mem, true) > (1 << 17)); expect(lzma_memlimit_reached(mem, true)); expect(lzma_memlimit_used(mem) == lzma_memlimit_max(mem, false)); expect(!lzma_memlimit_reached(mem, false)); expect(lzma_memlimit_get(mem) == 1 << 16); lzma_memlimit_set(mem, 6144); expect(lzma_memlimit_get(mem) == 6144); expect(lzma_memlimit_alloc(mem, 1, 4096) == NULL); expect(lzma_memlimit_max(mem, false) > 8192); expect(lzma_memlimit_reached(mem, false)); lzma_memlimit_free(mem, b); expect(lzma_memlimit_count(mem) == 0); expect(lzma_memlimit_used(mem) > 0); expect(lzma_memlimit_used(mem) < 4096); expect((a = lzma_memlimit_alloc(mem, 1, 4096)) != NULL); expect(lzma_memlimit_count(mem) == 1); expect(lzma_memlimit_used(mem) > 4096); expect(lzma_memlimit_used(mem) < 8192); expect(lzma_memlimit_max(mem, false) > 8192); expect(lzma_memlimit_reached(mem, false)); expect(lzma_memlimit_max(mem, true) > 8192); expect(lzma_memlimit_reached(mem, true)); expect(lzma_memlimit_max(mem, true) < 8192); expect(!lzma_memlimit_reached(mem, true)); lzma_memlimit_detach(mem, a); free(a); expect(lzma_memlimit_count(mem) == 0); lzma_memlimit_set(mem, SIZE_MAX); expect(lzma_memlimit_alloc(mem, 1, SIZE_MAX - 33) == NULL); expect(lzma_memlimit_count(mem) == 0); expect(lzma_memlimit_max(mem, true) == SIZE_MAX); expect(lzma_memlimit_reached(mem, true)); expect(lzma_memlimit_alloc(mem, 1, SIZE_MAX) == NULL); expect(lzma_memlimit_count(mem) == 0); expect(lzma_memlimit_max(mem, false) == SIZE_MAX); expect(lzma_memlimit_reached(mem, false)); lzma_memlimit_end(mem, true); return 0; }