Initialize Tizen 2.3
[external/nettle.git] / testsuite / sexp-format-test.c
1 #include "testutils.h"
2 #include "sexp.h"
3
4 #include "buffer.h"
5
6 #if HAVE_LIBGMP
7 # include "bignum.h"
8 #endif
9
10 int
11 test_main(void)
12 {
13   struct nettle_buffer buffer;
14
15   {
16     const uint8_t e[] = "(3:foo(3:bar17:xxxxxxxxxxxxxxxxx))";
17
18     nettle_buffer_init(&buffer);
19     ASSERT(sexp_format(&buffer, "(%0s(%0s%0s))",
20                        "foo", "bar", "xxxxxxxxxxxxxxxxx")
21            == strlen(e));
22     
23     ASSERT(sexp_format(NULL, "(%0s(%0s%0s))",
24                        "foo", "bar", "xxxxxxxxxxxxxxxxx")
25            == strlen(e));
26     
27     ASSERT(buffer.size == strlen(e));
28     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
29   }
30   {
31     const uint8_t e[] = "{KDM6Zm9vKDM6YmFyMTc6eHh4eHh4eHh4eHh4eHh4eHgpKQ==}";
32
33     nettle_buffer_init(&buffer);
34     ASSERT(sexp_transport_format(&buffer, "(%0s(%0s%0s))",
35                        "foo", "bar", "xxxxxxxxxxxxxxxxx")
36            == strlen(e));
37     
38     ASSERT(sexp_transport_format(NULL, "(%0s(%0s%0s))",
39                                  "foo", "bar", "xxxxxxxxxxxxxxxxx")
40            == strlen(e));
41     
42     ASSERT(buffer.size == strlen(e));
43     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
44   }
45   {
46     const uint8_t e[] = "1:\0""1:a2:bc3:def4:ghij5:\x00\xDE\xAD\xBE\xEF";
47
48     nettle_buffer_init(&buffer);  
49     ASSERT(sexp_format(&buffer, "%i%i%i%i%i%i",
50                        0, 0x61, 0x6263, 0x646566, 0x6768696a, 0xDEADBEEF)
51            == LLENGTH(e));
52     
53     ASSERT(buffer.size == LLENGTH(e));
54     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
55   }
56
57   {
58     const uint8_t e[] = "(3:foo(4:bar))";
59     
60     nettle_buffer_init(&buffer);  
61     ASSERT(sexp_format(&buffer, "(%0s%l)",
62                        "foo", 7, "(4:bar)")
63            == strlen(e));
64     
65     ASSERT(buffer.size == strlen(e));
66     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
67   }
68
69   {
70     const uint8_t e[] = "([1:t]3:foo3:bar[6:gazonk]3:baz1:q)";
71
72     nettle_buffer_init(&buffer);
73     ASSERT(sexp_format(&buffer, "(%0t%0s%0s%0t%0s%0t%0s)",
74                        "t", "foo", "bar", "gazonk", "baz", NULL, "q")
75            == strlen(e));
76
77     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
78   }
79
80   /* Try literals */
81   {
82     const uint8_t e[] = "(3:foo(3:bar17:xxxxxxxxxxxxxxxxx))";
83
84     nettle_buffer_init(&buffer);
85     ASSERT(sexp_format(&buffer, "(%0s(bar%0s))",
86                        "foo", "xxxxxxxxxxxxxxxxx")
87            == strlen(e));
88     
89     ASSERT(sexp_format(NULL, "(%0s(bar %0s))",
90                        "foo", "xxxxxxxxxxxxxxxxx")
91            == strlen(e));
92     
93     ASSERT(buffer.size == strlen(e));
94     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
95   }
96   {
97     const uint8_t e[] = "(3:foo(3:bar17:xxxxxxxxxxxxxxxxx))";
98
99     nettle_buffer_init(&buffer);
100     ASSERT(sexp_format(&buffer, "(%0s(bar xxxxxxxxxxxxxxxxx))",
101                        "foo")
102            == strlen(e));
103     
104     ASSERT(sexp_format(NULL, "(%0s(bar xxxxxxxxxxxxxxxxx))",
105                        "foo")
106            == strlen(e));
107     
108     ASSERT(buffer.size == strlen(e));
109     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
110   }
111
112   /* Literal parenthesis */
113   {
114     const uint8_t e[] = ")3:foo(3:bar";
115
116     nettle_buffer_init(&buffer);
117     ASSERT(sexp_format(&buffer, "%)foo%(%s", 3, "bar")
118            == strlen(e));
119     
120     ASSERT(sexp_format(NULL, "%)foo%(%s", 3, "bar")
121            == strlen(e));
122     
123     ASSERT(buffer.size == strlen(e));
124     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
125   }
126   
127 #if HAVE_LIBGMP
128   {
129     mpz_t x;
130     mpz_t y;
131     mpz_t z;
132     
133     const uint8_t e[] =
134       "(3:foo(3:bar1:\xff""11:abcdefghijk13:\0\x81""abcdefghijk))";
135
136     nettle_buffer_clear(&buffer);
137
138     mpz_init_set_si(x, -1);
139     nettle_mpz_init_set_str_256_u(y, 11, "abcdefghijk");
140     nettle_mpz_init_set_str_256_u(z, 12, "\x81""abcdefghijk");
141     nettle_buffer_init(&buffer);
142
143     ASSERT(sexp_format(&buffer, "(%0s(%0s%b%b%b))",
144                      "foo", "bar", x, y, z)
145            == LLENGTH(e));
146
147     ASSERT(sexp_format(NULL, "(%0s(%0s%b%b%b))",
148                      "foo", "bar", x, y, z)
149            == LLENGTH(e));
150     
151     ASSERT(buffer.size == LLENGTH(e));
152     ASSERT(MEMEQ(buffer.size, buffer.contents, e));
153
154     nettle_buffer_clear(&buffer);
155     mpz_clear(x);
156   }
157 #endif /* HAVE_LIBGMP */
158
159   SUCCESS();
160 }