~ubuntu-branches/ubuntu/wily/opencollada/wily-proposed

« back to all changes in this revision

Viewing changes to Externals/LibXML/testThreads.c

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2015-05-14 17:23:27 UTC
  • Revision ID: package-import@ubuntu.com-20150514172327-f862u8envms01fra
Tags: upstream-0.1.0~20140703.ddf8f47+dfsg1
ImportĀ upstreamĀ versionĀ 0.1.0~20140703.ddf8f47+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "libxml.h"
 
2
 
 
3
#include <stdlib.h>
 
4
#include <stdio.h>
 
5
 
 
6
#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_SAX1_ENABLED)
 
7
#include <libxml/globals.h>
 
8
#include <libxml/threads.h>
 
9
#include <libxml/parser.h>
 
10
#include <libxml/catalog.h>
 
11
#ifdef HAVE_PTHREAD_H
 
12
#include <pthread.h>
 
13
#elif defined HAVE_BEOS_THREADS
 
14
#include <OS.h>
 
15
#endif
 
16
#include <string.h>
 
17
#if !defined(_MSC_VER)
 
18
#include <unistd.h>
 
19
#endif
 
20
#include <assert.h>
 
21
 
 
22
#define MAX_ARGC        20
 
23
#ifdef HAVE_PTHREAD_H
 
24
static pthread_t tid[MAX_ARGC];
 
25
#elif defined HAVE_BEOS_THREADS
 
26
static thread_id tid[MAX_ARGC];
 
27
#endif
 
28
 
 
29
static const char *catalog = "test/threads/complex.xml";
 
30
static const char *testfiles[] = {
 
31
    "test/threads/abc.xml",
 
32
    "test/threads/acb.xml",
 
33
    "test/threads/bac.xml",
 
34
    "test/threads/bca.xml",
 
35
    "test/threads/cab.xml",
 
36
    "test/threads/cba.xml",
 
37
    "test/threads/invalid.xml",
 
38
};
 
39
 
 
40
static const char *Okay = "OK";
 
41
static const char *Failed = "Failed";
 
42
 
 
43
#ifndef xmlDoValidityCheckingDefaultValue
 
44
#error xmlDoValidityCheckingDefaultValue is not a macro
 
45
#endif
 
46
#ifndef xmlGenericErrorContext
 
47
#error xmlGenericErrorContext is not a macro
 
48
#endif
 
49
 
 
50
static void *
 
51
thread_specific_data(void *private_data)
 
52
{
 
53
    xmlDocPtr myDoc;
 
54
    const char *filename = (const char *) private_data;
 
55
    int okay = 1;
 
56
 
 
57
    if (!strcmp(filename, "test/threads/invalid.xml")) {
 
58
        xmlDoValidityCheckingDefaultValue = 0;
 
59
        xmlGenericErrorContext = stdout;
 
60
    } else {
 
61
        xmlDoValidityCheckingDefaultValue = 1;
 
62
        xmlGenericErrorContext = stderr;
 
63
    }
 
64
    myDoc = xmlParseFile(filename);
 
65
    if (myDoc) {
 
66
        xmlFreeDoc(myDoc);
 
67
    } else {
 
68
        printf("parse failed\n");
 
69
        okay = 0;
 
70
    }
 
71
    if (!strcmp(filename, "test/threads/invalid.xml")) {
 
72
        if (xmlDoValidityCheckingDefaultValue != 0) {
 
73
            printf("ValidityCheckingDefaultValue override failed\n");
 
74
            okay = 0;
 
75
        }
 
76
        if (xmlGenericErrorContext != stdout) {
 
77
            printf("xmlGenericErrorContext override failed\n");
 
78
            okay = 0;
 
79
        }
 
80
    } else {
 
81
        if (xmlDoValidityCheckingDefaultValue != 1) {
 
82
            printf("ValidityCheckingDefaultValue override failed\n");
 
83
            okay = 0;
 
84
        }
 
85
        if (xmlGenericErrorContext != stderr) {
 
86
            printf("xmlGenericErrorContext override failed\n");
 
87
            okay = 0;
 
88
        }
 
89
    }
 
90
    if (okay == 0)
 
91
        return((void *) Failed);
 
92
    return ((void *) Okay);
 
93
}
 
94
 
 
95
#ifdef HAVE_PTHREAD_H
 
96
int
 
97
main(void)
 
98
{
 
99
    unsigned int i, repeat;
 
100
    unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
 
101
    void *results[MAX_ARGC];
 
102
    int ret;
 
103
 
 
104
    xmlInitParser();
 
105
    for (repeat = 0;repeat < 500;repeat++) {
 
106
        xmlLoadCatalog(catalog);
 
107
 
 
108
        for (i = 0; i < num_threads; i++) {
 
109
            results[i] = NULL;
 
110
            tid[i] = (pthread_t) -1;
 
111
        }
 
112
 
 
113
        for (i = 0; i < num_threads; i++) {
 
114
            ret = pthread_create(&tid[i], NULL, thread_specific_data,
 
115
                                 (void *) testfiles[i]);
 
116
            if (ret != 0) {
 
117
                perror("pthread_create");
 
118
                exit(1);
 
119
            }
 
120
        }
 
121
        for (i = 0; i < num_threads; i++) {
 
122
            ret = pthread_join(tid[i], &results[i]);
 
123
            if (ret != 0) {
 
124
                perror("pthread_join");
 
125
                exit(1);
 
126
            }
 
127
        }
 
128
 
 
129
        xmlCatalogCleanup();
 
130
        for (i = 0; i < num_threads; i++)
 
131
            if (results[i] != (void *) Okay)
 
132
                printf("Thread %d handling %s failed\n", i, testfiles[i]);
 
133
    }
 
134
    xmlCleanupParser();
 
135
    xmlMemoryDump();
 
136
    return (0);
 
137
}
 
138
#elif defined HAVE_BEOS_THREADS
 
139
int
 
140
main(void)
 
141
{
 
142
    unsigned int i, repeat;
 
143
    unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
 
144
    void *results[MAX_ARGC];
 
145
    status_t ret;
 
146
 
 
147
    xmlInitParser();
 
148
    printf("Parser initialized\n");
 
149
    for (repeat = 0;repeat < 500;repeat++) {
 
150
    printf("repeat: %d\n",repeat);
 
151
        xmlLoadCatalog(catalog);
 
152
        printf("loaded catalog: %s\n", catalog);
 
153
        for (i = 0; i < num_threads; i++) {
 
154
            results[i] = NULL;
 
155
            tid[i] = (thread_id) -1;
 
156
        }
 
157
        printf("cleaned threads\n");
 
158
        for (i = 0; i < num_threads; i++) {
 
159
                tid[i] = spawn_thread(thread_specific_data, "xmlTestThread", B_NORMAL_PRIORITY, (void *) testfiles[i]);
 
160
                if (tid[i] < B_OK) {
 
161
                        perror("beos_thread_create");
 
162
                        exit(1);
 
163
                }
 
164
                printf("beos_thread_create %d -> %d\n", i, tid[i]);
 
165
        }
 
166
        for (i = 0; i < num_threads; i++) {
 
167
            ret = wait_for_thread(tid[i], &results[i]);
 
168
            printf("beos_thread_wait %d -> %d\n", i, ret);
 
169
            if (ret != B_OK) {
 
170
                        perror("beos_thread_wait");
 
171
                        exit(1);
 
172
            }
 
173
        }
 
174
 
 
175
        xmlCatalogCleanup();
 
176
        ret = B_OK;
 
177
        for (i = 0; i < num_threads; i++)
 
178
            if (results[i] != (void *) Okay) {
 
179
                        printf("Thread %d handling %s failed\n", i, testfiles[i]);
 
180
                        ret = B_ERROR;
 
181
                }
 
182
    }
 
183
    xmlCleanupParser();
 
184
    xmlMemoryDump();
 
185
 
 
186
        if (ret == B_OK)
 
187
                printf("testThread : BeOS : SUCCESS!\n");
 
188
        else
 
189
                printf("testThread : BeOS : FAILED!\n");
 
190
 
 
191
    return (0);
 
192
}
 
193
#endif /* pthreads or BeOS threads */
 
194
 
 
195
#else /* !LIBXML_THREADS_ENABLED */
 
196
int
 
197
main(void)
 
198
{
 
199
    fprintf(stderr, "libxml was not compiled with thread or catalog support\n");
 
200
    return (0);
 
201
}
 
202
#endif