summaryrefslogtreecommitdiff
path: root/cesar/lib/test/blk/src/test_blk.c
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/lib/test/blk/src/test_blk.c')
-rw-r--r--cesar/lib/test/blk/src/test_blk.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/cesar/lib/test/blk/src/test_blk.c b/cesar/lib/test/blk/src/test_blk.c
new file mode 100644
index 0000000000..64e94d7840
--- /dev/null
+++ b/cesar/lib/test/blk/src/test_blk.c
@@ -0,0 +1,125 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_blk.c
+ * \brief Test BLK.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/blk.h"
+#include "lib/test.h"
+
+#include <string.h>
+
+struct test_obj_t
+{
+ void *a;
+ void *b;
+};
+typedef struct test_obj_t test_obj_t;
+
+void
+test_obj_init (test_obj_t *ctx, void *a, void *b)
+{
+ ctx->a = a;
+ blk_addref (a);
+ ctx->b = b;
+ blk_addref (b);
+}
+
+void
+test_obj_uninit (void *data)
+{
+ test_obj_t *ctx = data;
+ blk_release (ctx->a);
+ blk_release (ctx->b);
+}
+
+void
+blk_basic_test_case (test_t t)
+{
+ test_case_begin (t, "basic");
+ test_begin (t, "desc")
+ {
+ blk_t *a, *f, *l, *p;
+ /* Allocate. */
+ a = blk_alloc_desc ();
+ f = blk_alloc_desc_range (42, &l);
+ /* Write. */
+ memset ((u8 *) a + sizeof (blk_t), 42,
+ BLK_DESC_SIZE - sizeof (blk_t));
+ memset (a->data, 42, BLK_SIZE);
+ for (p = f; p != l; p = p->next)
+ {
+ memset ((u8 *) p + sizeof (blk_t), 42,
+ BLK_DESC_SIZE - sizeof (blk_t));
+ memset (p->data, 42, BLK_SIZE);
+ }
+ memset ((u8 *) p + sizeof (blk_t), 42,
+ BLK_DESC_SIZE - sizeof (blk_t));
+ memset (p->data, 42, BLK_SIZE);
+ /* Add/release refs. */
+ blk_addref_desc_range (f, l);
+ blk_addref_desc (a);
+ blk_addref_desc (f);
+ blk_addref_desc (f->next);
+ blk_addref_desc (f->next->next);
+ blk_addref_desc_range_nb (f->next->next->next, 4);
+ blk_release_desc_range (f, l);
+ blk_release_desc (a);
+ blk_release_desc (a);
+ blk_release_desc_range_nb (f->next, 6);
+ blk_release_desc_range (f, l);
+ blk_release_desc (f);
+ /* Check. */
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+ test_begin (t, "obj")
+ {
+ void *a, *b, *c, *d;
+ /* Allocate. */
+ a = blk_alloc ();
+ b = blk_alloc ();
+ c = blk_alloc_zero ();
+ test_fail_unless (((u8 *)c)[42] == 0);
+ d = blk_new (test_obj_uninit);
+ test_obj_init (d, a, b);
+ /* Add/release refs. */
+ blk_release (a);
+ blk_release (b);
+ blk_addref (d);
+ blk_addref (b);
+ blk_addref (c);
+ blk_release (d);
+ blk_release (c);
+ blk_release (b);
+ blk_release (d);
+ blk_release (c);
+ /* Check. */
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+ blk_print_memory ();
+}
+
+void
+blk_test_suite (test_t t)
+{
+ test_suite_begin (t, "blk");
+ blk_basic_test_case (t);
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ test_init (t, argc, argv);
+ blk_test_suite (t);
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}