talloc/testsuite: test more talloc_pool related things
authorStefan Metzmacher <metze@samba.org>
Thu, 31 Mar 2011 17:50:47 +0000 (19:50 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 8 Apr 2011 07:28:10 +0000 (09:28 +0200)
metze

Signed-off-By: Andrew Tridgell <tridge@samba.org>
lib/talloc/testsuite.c

index ee6256b8e1b7b829680ab74ce20376f3dc7e6d4b..6395e83684ea63e11cbc65cf7513543f05df23fd 100644 (file)
@@ -1123,6 +1123,7 @@ static bool test_pool(void)
 {
        void *pool;
        void *p1, *p2, *p3, *p4;
+       void *p2_2;
 
        pool = talloc_pool(NULL, 1024);
 
@@ -1131,6 +1132,60 @@ static bool test_pool(void)
        p3 = talloc_size(p1, 50);
        p4 = talloc_size(p3, 1000);
 
+#if 1 /* this relies on ALWAYS_REALLOC == 0 in talloc.c */
+       p2_2 = talloc_realloc_size(pool, p2, 20+1);
+       torture_assert("pool realloc 20+1", p2_2 == p2, "failed: pointer changed");
+       p2_2 = talloc_realloc_size(pool, p2, 20-1);
+       torture_assert("pool realloc 20-1", p2_2 == p2, "failed: pointer changed");
+       p2_2 = talloc_realloc_size(pool, p2, 20-1);
+       torture_assert("pool realloc 20-1", p2_2 == p2, "failed: pointer changed");
+
+       talloc_free(p3);
+
+       /* this should reclaim the memory of p4 and p3 */
+       p2_2 = talloc_realloc_size(pool, p2, 400);
+       torture_assert("pool realloc 400", p2_2 == p2, "failed: pointer changed");
+
+       talloc_free(p1);
+
+       /* this should reclaim the memory of p1 */
+       p2_2 = talloc_realloc_size(pool, p2, 800);
+       torture_assert("pool realloc 800", p2_2 == p1, "failed: pointer not changed");
+       p2 = p2_2;
+
+       /* this should do a malloc */
+       p2_2 = talloc_realloc_size(pool, p2, 1800);
+       torture_assert("pool realloc 1800", p2_2 != p2, "failed: pointer not changed");
+       p2 = p2_2;
+
+       /* this should reclaim the memory from the pool */
+       p3 = talloc_size(pool, 80);
+       torture_assert("pool alloc 80", p3 == p1, "failed: pointer changed");
+
+       talloc_free(p2);
+       talloc_free(p3);
+
+       p1 = talloc_size(pool, 80);
+       p2 = talloc_size(pool, 20);
+
+       talloc_free(p1);
+
+       p2_2 = talloc_realloc_size(pool, p2, 20-1);
+       torture_assert("pool realloc 20-1", p2_2 == p2, "failed: pointer changed");
+       p2_2 = talloc_realloc_size(pool, p2, 20-1);
+       torture_assert("pool realloc 20-1", p2_2 == p2, "failed: pointer changed");
+
+       /* this should do a malloc */
+       p2_2 = talloc_realloc_size(pool, p2, 1800);
+       torture_assert("pool realloc 1800", p2_2 != p2, "failed: pointer not changed");
+       p2 = p2_2;
+
+       /* this should reclaim the memory from the pool */
+       p3 = talloc_size(pool, 800);
+       torture_assert("pool alloc 800", p3 == p1, "failed: pointer changed");
+
+#endif /* this relies on ALWAYS_REALLOC == 0 in talloc.c */
+
        talloc_free(pool);
 
        return true;