Initialize Tizen 2.3
[external/nettle.git] / testsuite / sexp-test.c
1 #include "testutils.h"
2 #include "sexp.h"
3
4 int
5 test_main(void)
6 {
7   struct sexp_iterator i;
8   uint32_t x;
9   
10   ASSERT(sexp_iterator_first(&i, LDATA("")));
11   ASSERT(i.type == SEXP_END);
12
13   ASSERT(sexp_iterator_first(&i, LDATA("()")));
14   ASSERT(i.type == SEXP_LIST
15          && sexp_iterator_enter_list(&i)
16          && i.type == SEXP_END
17          && sexp_iterator_exit_list(&i)
18          && i.type == SEXP_END);
19
20   ASSERT(sexp_iterator_first(&i, LDATA("(")));
21   ASSERT(i.type == SEXP_LIST
22          && !sexp_iterator_enter_list(&i));
23
24   /* Check integers. */
25   ASSERT(sexp_iterator_first(&i, LDATA("1:\0"
26                                        "1:\x11"
27                                        "2:\x00\x11"
28                                        "2:\x00\x80"
29                                        "5:\x00\xaa\xbb\xcc\xdd")));
30   ASSERT(sexp_iterator_get_uint32(&i, &x) && x == 0);
31   ASSERT(sexp_iterator_get_uint32(&i, &x) && x == 0x11);
32   ASSERT(sexp_iterator_get_uint32(&i, &x) && x == 0x11);
33   ASSERT(sexp_iterator_get_uint32(&i, &x) && x == 0x80);
34   ASSERT(sexp_iterator_get_uint32(&i, &x) && x == 0xaabbccdd);
35   
36   ASSERT(sexp_iterator_first(&i, LDATA("3:foo0:[3:bar]12:xxxxxxxxxxxx")));
37   ASSERT(i.type == SEXP_ATOM
38          && !i.display_length && !i.display
39          && i.atom_length == 3 && MEMEQ(3, "foo", i.atom)
40
41          && sexp_iterator_next(&i) && i.type == SEXP_ATOM
42          && !i.display_length && !i.display
43          && !i.atom_length && i.atom
44
45          && sexp_iterator_next(&i) && i.type == SEXP_ATOM
46          && i.display_length == 3 && MEMEQ(3, "bar", i.display)
47          && i.atom_length == 12 && MEMEQ(12, "xxxxxxxxxxxx", i.atom)
48
49          && sexp_iterator_next(&i) && i.type == SEXP_END);
50   
51   /* Same data, transport encoded. */
52   
53   ASSERT(sexp_transport_iterator_first
54          (&i, LDUP("{Mzpmb28=} {MDo=} {WzM6YmFyXTEyOnh4eHh4eHh4eHh4eA==}")));
55   ASSERT(i.type == SEXP_ATOM
56          && !i.display_length && !i.display
57          && i.atom_length == 3 && MEMEQ(3, "foo", i.atom)
58
59          && sexp_iterator_next(&i) && i.type == SEXP_ATOM
60          && !i.display_length && !i.display
61          && !i.atom_length && i.atom
62
63          && sexp_iterator_next(&i) && i.type == SEXP_ATOM
64          && i.display_length == 3 && MEMEQ(3, "bar", i.display)
65          && i.atom_length == 12 && MEMEQ(12, "xxxxxxxxxxxx", i.atom)
66
67          && sexp_iterator_next(&i) && i.type == SEXP_END);
68   
69   {
70     static const uint8_t *keys[2] = { "n", "e" };
71     struct sexp_iterator v[2];
72     
73     ASSERT(sexp_iterator_first(&i, LDATA("((1:n2:xx3:foo)0:(1:y)(1:e))")));
74     ASSERT(sexp_iterator_enter_list(&i)
75            && sexp_iterator_assoc(&i, 2, keys, v));
76
77     ASSERT(v[0].type == SEXP_ATOM
78            && !v[0].display_length && !v[0].display
79            && v[0].atom_length == 2 && MEMEQ(2, "xx", v[0].atom)
80
81            && sexp_iterator_next(&v[0]) && v[0].type == SEXP_ATOM
82            && !v[0].display_length && !v[0].display
83            && v[0].atom_length == 3 && MEMEQ(3, "foo", v[0].atom)
84
85            && sexp_iterator_next(&v[0]) && v[0].type == SEXP_END);
86
87     ASSERT(v[1].type == SEXP_END);
88
89     ASSERT(sexp_iterator_first(&i, LDATA("((1:n))")));
90     ASSERT(sexp_iterator_enter_list(&i)
91            && !sexp_iterator_assoc(&i, 2, keys, v));
92
93     ASSERT(sexp_iterator_first(&i, LDATA("((1:n)(1:n3:foo))")));
94     ASSERT(sexp_iterator_enter_list(&i)
95            && !sexp_iterator_assoc(&i, 2, keys, v));    
96   }
97
98   SUCCESS();
99 }