]> git.alsa-project.org Git - alsa-lib.git/commitdiff
add config tests
authorClemens Ladisch <clemens@ladisch.de>
Mon, 3 Aug 2009 11:35:01 +0000 (13:35 +0200)
committerClemens Ladisch <clemens@ladisch.de>
Mon, 3 Aug 2009 11:35:01 +0000 (13:35 +0200)
Add some test for the snd_config_* functions.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
test/lsb/Makefile.am
test/lsb/config.c [new file with mode: 0644]

index 8d2c1bdedc4978639d4a8f9dd79990256e340cec..ceb4d7150066dff84c906663208d6edfd6976f82 100644 (file)
@@ -1,4 +1,5 @@
-TESTS = midi_event
+TESTS  = config
+TESTS += midi_event
 check_PROGRAMS = $(TESTS)
 noinst_HEADERS = test.h
 
diff --git a/test/lsb/config.c b/test/lsb/config.c
new file mode 100644 (file)
index 0000000..3503798
--- /dev/null
@@ -0,0 +1,582 @@
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include "test.h"
+
+static int configs_equal(snd_config_t *c1, snd_config_t *c2);
+
+/* checks if all children of c1 also occur in c2 */
+static int subset_of(snd_config_t *c1, snd_config_t *c2)
+{
+       snd_config_iterator_t i, next;
+       snd_config_t *e1, *e2;
+       const char *id;
+
+       snd_config_for_each(i, next, c1) {
+               e1 = snd_config_iterator_entry(i);
+               if (snd_config_get_id(e1, &id) < 0 || !id)
+                       return 0;
+               if (snd_config_search(c2, id, &e2) < 0)
+                       return 0;
+               if (!configs_equal(e1, e2))
+                       return 0;
+       }
+       return 1;
+}
+
+/* checks if two configuration nodes are equal */
+static int configs_equal(snd_config_t *c1, snd_config_t *c2)
+{
+       long i1, i2;
+       long long i641, i642;
+       const char *s1, *s2;
+
+       if (snd_config_get_type(c1) != snd_config_get_type(c2))
+               return 0;
+       switch (snd_config_get_type(c1)) {
+       case SND_CONFIG_TYPE_INTEGER:
+               return snd_config_get_integer(c1, &i1) >= 0 &&
+                       snd_config_get_integer(c2, &i2) >= 0 &&
+                       i1 == i2;
+       case SND_CONFIG_TYPE_INTEGER64:
+               return snd_config_get_integer64(c1, &i641) >= 0 &&
+                       snd_config_get_integer64(c2, &i642) >= 0 &&
+                       i641 == i642;
+       case SND_CONFIG_TYPE_STRING:
+               return snd_config_get_string(c1, &s1) >= 0 &&
+                       snd_config_get_string(c2, &s2) >= 0 &&
+                       !s1 == !s2 &&
+                       (!s1 || !strcmp(s1, s2));
+       case SND_CONFIG_TYPE_COMPOUND:
+               return subset_of(c1, c2) && subset_of(c2, c1);
+       default:
+               fprintf(stderr, "unknown configuration node type %d\n",
+                       (int)snd_config_get_type(c1));
+               return 0;
+       }
+}
+
+static void test_top(void)
+{
+       snd_config_t *top;
+       const char *id;
+
+       if (ALSA_CHECK(snd_config_top(&top)) < 0)
+               return;
+
+       TEST_CHECK(snd_config_get_type(top) == SND_CONFIG_TYPE_COMPOUND);
+       TEST_CHECK(snd_config_iterator_first(top) == snd_config_iterator_end(top));
+       TEST_CHECK(snd_config_get_id(top, &id) >= 0 && id == NULL);
+
+       ALSA_CHECK(snd_config_delete(top));
+}
+
+static void test_load(void)
+{
+       const char *config_text1 = "s='world';";
+       const char *config_text2 = "c.elem 0";
+       snd_config_t *loaded, *made, *c, *c2;
+       snd_input_t *input;
+
+       ALSA_CHECK(snd_config_top(&loaded));
+       ALSA_CHECK(snd_config_imake_integer(&c, "i", 42));
+       ALSA_CHECK(snd_config_add(loaded, c));
+       ALSA_CHECK(snd_config_imake_string(&c, "s", "hello"));
+       ALSA_CHECK(snd_config_add(loaded, c));
+
+       ALSA_CHECK(snd_config_top(&made));
+       ALSA_CHECK(snd_config_imake_string(&c, "s", "world"));
+       ALSA_CHECK(snd_config_add(made, c));
+       ALSA_CHECK(snd_config_imake_integer(&c, "i", 42));
+       ALSA_CHECK(snd_config_add(made, c));
+
+       ALSA_CHECK(snd_input_buffer_open(&input, config_text1, strlen(config_text1)));
+       ALSA_CHECK(snd_config_load(loaded, input));
+       ALSA_CHECK(snd_input_close(input));
+       TEST_CHECK(configs_equal(loaded, made));
+
+       ALSA_CHECK(snd_config_make_compound(&c, "c", 0));
+       ALSA_CHECK(snd_config_add(made, c));
+       ALSA_CHECK(snd_config_imake_integer(&c2, "elem", 0));
+       ALSA_CHECK(snd_config_add(c, c2));
+
+       ALSA_CHECK(snd_input_buffer_open(&input, config_text2, strlen(config_text2)));
+       ALSA_CHECK(snd_config_load(loaded, input));
+       ALSA_CHECK(snd_input_close(input));
+       TEST_CHECK(configs_equal(loaded, made));
+
+       ALSA_CHECK(snd_config_delete(loaded));
+       ALSA_CHECK(snd_config_delete(made));
+}
+
+static void test_save(void)
+{
+       const char *text =
+               "a.b.c 'x.y.z'\n"
+               "xxx = yyy;\n"
+               "q { qq=qqq }\n"
+               "a [ 1 2 3 4 5 '...' ]\n";
+       snd_config_t *orig, *saved;
+       snd_input_t *input;
+       snd_output_t *output;
+       char *buf;
+       size_t buf_size;
+
+       ALSA_CHECK(snd_input_buffer_open(&input, text, strlen(text)));
+       ALSA_CHECK(snd_config_top(&orig));
+       ALSA_CHECK(snd_config_load(orig, input));
+       ALSA_CHECK(snd_input_close(input));
+       ALSA_CHECK(snd_output_buffer_open(&output));
+       ALSA_CHECK(snd_config_save(orig, output));
+       buf_size = snd_output_buffer_string(output, &buf);
+       ALSA_CHECK(snd_input_buffer_open(&input, buf, buf_size));
+       ALSA_CHECK(snd_config_top(&saved));
+       ALSA_CHECK(snd_config_load(saved, input));
+       ALSA_CHECK(snd_input_close(input));
+       ALSA_CHECK(snd_output_close(output));
+       TEST_CHECK(configs_equal(orig, saved));
+       ALSA_CHECK(snd_config_delete(orig));
+       ALSA_CHECK(snd_config_delete(saved));
+}
+
+static void test_update(void)
+{
+       ALSA_CHECK(snd_config_update_free_global());
+       TEST_CHECK(snd_config == NULL);
+       ALSA_CHECK(snd_config_update());
+       TEST_CHECK(snd_config_get_type(snd_config) == SND_CONFIG_TYPE_COMPOUND);
+       ALSA_CHECK(snd_config_update());
+       TEST_CHECK(snd_config_get_type(snd_config) == SND_CONFIG_TYPE_COMPOUND);
+       ALSA_CHECK(snd_config_update_free_global());
+       TEST_CHECK(snd_config == NULL);
+}
+
+static void test_search(void)
+{
+       const char *text =
+               "a 42\n"
+               "b {\n"
+               "    c cee\n"
+               "    d {\n"
+               "        e 2.71828\n"
+               "    }\n"
+               "}\n";
+       snd_input_t *input;
+       snd_config_t *top, *c;
+       const char *id;
+
+       ALSA_CHECK(snd_input_buffer_open(&input, text, strlen(text)));
+       ALSA_CHECK(snd_config_top(&top));
+       ALSA_CHECK(snd_config_load(top, input));
+       ALSA_CHECK(snd_input_close(input));
+
+       ALSA_CHECK(snd_config_search(top, "a", &c));
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "a"));
+       ALSA_CHECK(snd_config_search(top, "b.d.e", &c));
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "e"));
+       ALSA_CHECK(snd_config_search(top, "b.c", NULL));
+       TEST_CHECK(snd_config_search(top, "x", NULL) == -ENOENT);
+       TEST_CHECK(snd_config_search(top, "b.y", &c) == -ENOENT);
+       TEST_CHECK(snd_config_search(top, "a.z", &c) == -ENOENT);
+
+       ALSA_CHECK(snd_config_delete(top));
+}
+
+static void test_searchv(void)
+{
+       const char *text =
+               "a 42\n"
+               "b {\n"
+               "    c cee\n"
+               "    d {\n"
+               "        e 2.71828\n"
+               "    }\n"
+               "}\n";
+       snd_input_t *input;
+       snd_config_t *top, *c;
+       const char *id;
+
+       ALSA_CHECK(snd_input_buffer_open(&input, text, strlen(text)));
+       ALSA_CHECK(snd_config_top(&top));
+       ALSA_CHECK(snd_config_load(top, input));
+       ALSA_CHECK(snd_input_close(input));
+
+       ALSA_CHECK(snd_config_searchv(top, &c, "a", NULL));
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "a"));
+       ALSA_CHECK(snd_config_searchv(top, &c, "b", "d.e", NULL));
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "e"));
+       ALSA_CHECK(snd_config_searchv(top, NULL, "b.c", NULL));
+       TEST_CHECK(snd_config_searchv(top, NULL, "x", NULL) == -ENOENT);
+       TEST_CHECK(snd_config_searchv(top, &c, "b.y", NULL) == -ENOENT);
+       TEST_CHECK(snd_config_searchv(top, &c, "a", "z", NULL) == -ENOENT);
+
+       ALSA_CHECK(snd_config_delete(top));
+}
+
+static void test_add(void)
+{
+       snd_config_t *c1, *c2, *c3, *c4, *c5;
+       snd_config_iterator_t i;
+       unsigned int count = 0;
+
+       ALSA_CHECK(snd_config_top(&c1));
+       ALSA_CHECK(snd_config_imake_integer(&c2, "c2", 0xc2));
+       ALSA_CHECK(snd_config_add(c1, c2));
+       ALSA_CHECK(snd_config_imake_string(&c3, "c3", "c3"));
+       ALSA_CHECK(snd_config_add(c1, c3));
+       for (i = snd_config_iterator_first(c1);
+            i != snd_config_iterator_end(c1);
+            i = snd_config_iterator_next(i))
+               ++count;
+       TEST_CHECK(count == 2);
+       ALSA_CHECK(snd_config_search(c1, "c2", &c2));
+       ALSA_CHECK(snd_config_search(c1, "c3", &c3));
+       ALSA_CHECK(snd_config_top(&c4));
+       TEST_CHECK(snd_config_add(c1, c4) == -EINVAL);
+       ALSA_CHECK(snd_config_imake_integer(&c5, "c5", 5));
+       ALSA_CHECK(snd_config_add(c4, c5));
+       TEST_CHECK(snd_config_add(c1, c5) == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c4));
+       ALSA_CHECK(snd_config_imake_integer(&c3, "c3", 333));
+       TEST_CHECK(snd_config_add(c1, c3) == -EEXIST);
+       ALSA_CHECK(snd_config_delete(c3));
+       ALSA_CHECK(snd_config_delete(c1));
+}
+
+static void test_delete(void)
+{
+       snd_config_t *c;
+
+       ALSA_CHECK(snd_config_top(&c));
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_imake_string(&c, "s", "..."));
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_copy(void)
+{
+       snd_config_t *c1, *c2, *c3;
+       long value;
+
+       ALSA_CHECK(snd_config_imake_integer(&c1, "c1", 123));
+       ALSA_CHECK(snd_config_copy(&c2, c1));
+       ALSA_CHECK(snd_config_set_integer(c1, 456));
+       TEST_CHECK(snd_config_get_type(c2) == SND_CONFIG_TYPE_INTEGER);
+       ALSA_CHECK(snd_config_get_integer(c2, &value));
+       TEST_CHECK(value == 123);
+       ALSA_CHECK(snd_config_delete(c1));
+       ALSA_CHECK(snd_config_delete(c2));
+       ALSA_CHECK(snd_config_top(&c1));
+       ALSA_CHECK(snd_config_imake_integer(&c2, "a", 1));
+       ALSA_CHECK(snd_config_add(c1, c2));
+       ALSA_CHECK(snd_config_copy(&c3, c1));
+       ALSA_CHECK(snd_config_set_integer(c2, 2));
+       TEST_CHECK(!configs_equal(c1, c3));
+       ALSA_CHECK(snd_config_search(c3, "a", &c2));
+       ALSA_CHECK(snd_config_set_integer(c2, 2));
+       TEST_CHECK(configs_equal(c1, c3));
+       ALSA_CHECK(snd_config_delete(c1));
+       ALSA_CHECK(snd_config_delete(c3));
+}
+
+static void test_make_integer(void)
+{
+       snd_config_t *c;
+       const char *id;
+       long value;
+
+       ALSA_CHECK(snd_config_make_integer(&c, "i"));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_INTEGER);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "i"));
+       ALSA_CHECK(snd_config_get_integer(c, &value));
+       TEST_CHECK(value == 0);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_make_integer64(void)
+{
+       snd_config_t *c;
+       const char *id;
+       long long value;
+
+       ALSA_CHECK(snd_config_make_integer64(&c, "i"));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_INTEGER64);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "i"));
+       ALSA_CHECK(snd_config_get_integer64(c, &value));
+       TEST_CHECK(value == 0);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_make_string(void)
+{
+       snd_config_t *c;
+       const char *id;
+       const char *value;
+
+       ALSA_CHECK(snd_config_make_string(&c, "s"));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_STRING);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "s"));
+       ALSA_CHECK(snd_config_get_string(c, &value));
+       TEST_CHECK(value == NULL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_make_compound(void)
+{
+       snd_config_t *c;
+       const char *id;
+
+       ALSA_CHECK(snd_config_make_compound(&c, "c", 0));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_COMPOUND);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "c"));
+       TEST_CHECK(snd_config_iterator_first(c) == snd_config_iterator_end(c));
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_imake_integer(void)
+{
+       snd_config_t *c;
+       const char *id;
+       long value;
+
+       ALSA_CHECK(snd_config_imake_integer(&c, "i", 123));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_INTEGER);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "i"));
+       ALSA_CHECK(snd_config_get_integer(c, &value));
+       TEST_CHECK(value == 123);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_imake_integer64(void)
+{
+       snd_config_t *c;
+       const char *id;
+       long long value;
+
+       ALSA_CHECK(snd_config_imake_integer64(&c, "i", 123456789012345LL));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_INTEGER64);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "i"));
+       ALSA_CHECK(snd_config_get_integer64(c, &value));
+       TEST_CHECK(value == 123456789012345LL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_imake_string(void)
+{
+       snd_config_t *c;
+       const char *id;
+       const char *value;
+
+       ALSA_CHECK(snd_config_imake_string(&c, "s", "xyzzy"));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_STRING);
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "s"));
+       ALSA_CHECK(snd_config_get_string(c, &value));
+       TEST_CHECK(!strcmp(value, "xyzzy"));
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_get_type(void)
+{
+       snd_config_t *c;
+
+       ALSA_CHECK(snd_config_top(&c));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_COMPOUND);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_make_integer(&c, "i"));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_INTEGER);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_make_string(&c, "s"));
+       TEST_CHECK(snd_config_get_type(c) == SND_CONFIG_TYPE_STRING);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_set_integer(void)
+{
+       snd_config_t *c;
+       long value;
+
+       ALSA_CHECK(snd_config_make_integer(&c, "i"));
+       ALSA_CHECK(snd_config_set_integer(c, 123));
+       ALSA_CHECK(snd_config_get_integer(c, &value));
+       TEST_CHECK(value == 123);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_make_string(&c, "s"));
+       TEST_CHECK(snd_config_set_integer(c, 123) == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_set_integer64(void)
+{
+       snd_config_t *c;
+       long long value;
+
+       ALSA_CHECK(snd_config_make_integer64(&c, "i"));
+       ALSA_CHECK(snd_config_set_integer64(c, 123456789012345LL));
+       ALSA_CHECK(snd_config_get_integer64(c, &value));
+       TEST_CHECK(value == 123456789012345LL);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_make_string(&c, "s"));
+       TEST_CHECK(snd_config_set_integer64(c, 123) == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_set_string(void)
+{
+       snd_config_t *c;
+       const char *value;
+
+       ALSA_CHECK(snd_config_make_string(&c, "s"));
+       ALSA_CHECK(snd_config_set_string(c, "string"));
+       ALSA_CHECK(snd_config_get_string(c, &value));
+       TEST_CHECK(!strcmp(value, "string"));
+       ALSA_CHECK(snd_config_set_string(c, NULL));
+       ALSA_CHECK(snd_config_get_string(c, &value));
+       TEST_CHECK(value == NULL);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_make_integer(&c, "i"));
+       TEST_CHECK(snd_config_set_string(c, "") == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_set_ascii(void)
+{
+       snd_config_t *c;
+       const char *s;
+       long i;
+
+       ALSA_CHECK(snd_config_make_string(&c, "s"));
+       ALSA_CHECK(snd_config_set_ascii(c, "foo"));
+       ALSA_CHECK(snd_config_get_string(c, &s));
+       TEST_CHECK(!strcmp(s, "foo"));
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_make_integer(&c, "i"));
+       ALSA_CHECK(snd_config_set_ascii(c, "23"));
+       ALSA_CHECK(snd_config_get_integer(c, &i));
+       TEST_CHECK(i == 23);
+       TEST_CHECK(snd_config_set_ascii(c, "half blue") == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_top(&c));
+       TEST_CHECK(snd_config_set_ascii(c, "0") == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_get_id(void)
+{
+       snd_config_t *c;
+       const char *id;
+
+       ALSA_CHECK(snd_config_make_integer(&c, "my_id"));
+       ALSA_CHECK(snd_config_get_id(c, &id));
+       TEST_CHECK(!strcmp(id, "my_id"));
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+#define test_get_integer test_set_integer
+#define test_get_integer64 test_set_integer64
+#define test_get_string test_set_string
+
+static void test_get_ascii(void)
+{
+       snd_config_t *c;
+       char *value;
+
+       ALSA_CHECK(snd_config_imake_integer(&c, "i", 123));
+       ALSA_CHECK(snd_config_get_ascii(c, &value));
+       TEST_CHECK(!strcmp(value, "123"));
+       free(value);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_imake_string(&c, "s", "bar"));
+       ALSA_CHECK(snd_config_get_ascii(c, &value));
+       TEST_CHECK(!strcmp(value, "bar"));
+       free(value);
+       ALSA_CHECK(snd_config_delete(c));
+       ALSA_CHECK(snd_config_top(&c));
+       TEST_CHECK(snd_config_get_ascii(c, &value) == -EINVAL);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_iterators(void)
+{
+       snd_config_t *c, *c2;
+       snd_config_iterator_t i;
+       long v;
+
+       ALSA_CHECK(snd_config_top(&c));
+       i = snd_config_iterator_first(c);
+       TEST_CHECK(i == snd_config_iterator_end(c));
+       ALSA_CHECK(snd_config_imake_integer(&c2, "one", 1));
+       ALSA_CHECK(snd_config_add(c, c2));
+       i = snd_config_iterator_first(c);
+       TEST_CHECK(i != snd_config_iterator_end(c));
+       c2 = snd_config_iterator_entry(i);
+       ALSA_CHECK(snd_config_get_integer(c2, &v));
+       TEST_CHECK(v == 1);
+       i = snd_config_iterator_next(i);
+       TEST_CHECK(i == snd_config_iterator_end(c));
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+static void test_for_each(void)
+{
+       snd_config_t *c, *c2;
+       snd_config_iterator_t i, next;
+       long v;
+       unsigned int count = 0;
+
+       ALSA_CHECK(snd_config_top(&c));
+       ALSA_CHECK(snd_config_imake_integer(&c2, "one", 1));
+       ALSA_CHECK(snd_config_add(c, c2));
+       snd_config_for_each(i, next, c) {
+               TEST_CHECK(i != snd_config_iterator_end(c));
+               c2 = snd_config_iterator_entry(i);
+               ALSA_CHECK(snd_config_get_integer(c2, &v));
+               TEST_CHECK(v == 1);
+               ++count;
+       }
+       TEST_CHECK(count == 1);
+       ALSA_CHECK(snd_config_delete(c));
+}
+
+int main(void)
+{
+       test_top();
+       test_load();
+       test_save();
+       test_update();
+       test_search();
+       test_searchv();
+       test_add();
+       test_delete();
+       test_copy();
+       test_make_integer();
+       test_make_integer64();
+       test_make_string();
+       test_make_compound();
+       test_imake_integer();
+       test_imake_integer64();
+       test_imake_string();
+       test_get_type();
+       test_set_integer();
+       test_set_integer64();
+       test_set_string();
+       test_set_ascii();
+       test_get_id();
+       test_get_integer();
+       test_get_integer64();
+       test_get_string();
+       test_get_ascii();
+       test_iterators();
+       test_for_each();
+       return TEST_EXIT_CODE();
+}