1/*
2 * Copyright (c) 2010 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Portions Copyright (c) 2010 Apple Inc. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of the Institute nor the names of its contributors
20 *    may be used to endorse or promote products derived from this software
21 *    without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36#include <stdio.h>
37#include <err.h>
38
39#include "heimbase.h"
40#include "heimbasepriv.h"
41
42static void
43memory_free(heim_object_t obj)
44{
45}
46
47static int
48test_memory(void)
49{
50    void *ptr;
51
52    ptr = heim_alloc(10, "memory", memory_free);
53
54    heim_retain(ptr);
55    heim_release(ptr);
56
57    heim_retain(ptr);
58    heim_release(ptr);
59
60    heim_release(ptr);
61
62    ptr = heim_alloc(10, "memory", NULL);
63    heim_release(ptr);
64
65    return 0;
66}
67
68static int
69test_dict(void)
70{
71    heim_dict_t dict;
72    heim_number_t a1 = heim_number_create(1);
73    heim_string_t a2 = heim_string_create("hejsan");
74    heim_number_t a3 = heim_number_create(3);
75    heim_string_t a4 = heim_string_create("foosan");
76
77    dict = heim_dict_create(10);
78
79    heim_dict_add_value(dict, a1, a2);
80    heim_dict_add_value(dict, a3, a4);
81
82    heim_dict_delete_key(dict, a3);
83    heim_dict_delete_key(dict, a1);
84
85    heim_release(a1);
86    heim_release(a2);
87    heim_release(a3);
88    heim_release(a4);
89
90    heim_release(dict);
91
92    return 0;
93}
94
95static int
96test_auto_release(void)
97{
98    heim_auto_release_t ar1, ar2;
99    heim_number_t n1;
100    heim_string_t s1;
101
102    ar1 = heim_auto_release_create();
103
104    s1 = heim_string_create("hejsan");
105    heim_auto_release(s1);
106
107    n1 = heim_number_create(1);
108    heim_auto_release(n1);
109
110    ar2 = heim_auto_release_create();
111
112    n1 = heim_number_create(1);
113    heim_auto_release(n1);
114
115    heim_release(ar2);
116    heim_release(ar1);
117
118    return 0;
119}
120
121static int
122test_string(void)
123{
124    heim_string_t s1, s2;
125    const char *string = "hejsan";
126
127    s1 = heim_string_create(string);
128    s2 = heim_string_create(string);
129
130    if (heim_cmp(s1, s2) != 0) {
131	printf("the same string is not the same\n");
132	exit(1);
133    }
134
135    heim_release(s1);
136    heim_release(s2);
137
138    return 0;
139}
140
141int
142main(int argc, char **argv)
143{
144    int res = 0;
145
146    res |= test_memory();
147    res |= test_dict();
148    res |= test_auto_release();
149    res |= test_string();
150
151    return res;
152}
153