1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <stdio.h>
22: #include <atomic.h>
23:
24: #ifndef atomic_t
25: # define atomic_t int
26: #endif
27:
28:
29: static int
30: do_test (void)
31: {
32: atomic_t mem;
33: int ret = 0;
34:
35: #ifdef atomic_compare_and_exchange_val_acq
36: mem = 24;
37: if (atomic_compare_and_exchange_val_acq (&mem, 35, 24) != 24
38: || mem != 35)
39: {
40: puts ("atomic_compare_and_exchange_val_acq test 1 failed");
41: ret = 1;
42: }
43:
44: mem = 12;
45: if (atomic_compare_and_exchange_val_acq (&mem, 10, 15) != 12
46: || mem != 12)
47: {
48: puts ("atomic_compare_and_exchange_val_acq test 2 failed");
49: ret = 1;
50: }
51:
52: mem = -15;
53: if (atomic_compare_and_exchange_val_acq (&mem, -56, -15) != -15
54: || mem != -56)
55: {
56: puts ("atomic_compare_and_exchange_val_acq test 3 failed");
57: ret = 1;
58: }
59:
60: mem = -1;
61: if (atomic_compare_and_exchange_val_acq (&mem, 17, 0) != -1
62: || mem != -1)
63: {
64: puts ("atomic_compare_and_exchange_val_acq test 4 failed");
65: ret = 1;
66: }
67: #endif
68:
69: mem = 24;
70: if (atomic_compare_and_exchange_bool_acq (&mem, 35, 24)
71: || mem != 35)
72: {
73: puts ("atomic_compare_and_exchange_bool_acq test 1 failed");
74: ret = 1;
75: }
76:
77: mem = 12;
78: if (! atomic_compare_and_exchange_bool_acq (&mem, 10, 15)
79: || mem != 12)
80: {
81: puts ("atomic_compare_and_exchange_bool_acq test 2 failed");
82: ret = 1;
83: }
84:
85: mem = -15;
86: if (atomic_compare_and_exchange_bool_acq (&mem, -56, -15)
87: || mem != -56)
88: {
89: puts ("atomic_compare_and_exchange_bool_acq test 3 failed");
90: ret = 1;
91: }
92:
93: mem = -1;
94: if (! atomic_compare_and_exchange_bool_acq (&mem, 17, 0)
95: || mem != -1)
96: {
97: puts ("atomic_compare_and_exchange_bool_acq test 4 failed");
98: ret = 1;
99: }
100:
101: mem = 64;
102: if (atomic_exchange_acq (&mem, 31) != 64
103: || mem != 31)
104: {
105: puts ("atomic_exchange_acq test failed");
106: ret = 1;
107: }
108:
109: mem = 2;
110: if (atomic_exchange_and_add (&mem, 11) != 2
111: || mem != 13)
112: {
113: puts ("atomic_exchange_and_add test failed");
114: ret = 1;
115: }
116:
117: mem = -21;
118: atomic_add (&mem, 22);
119: if (mem != 1)
120: {
121: puts ("atomic_add test failed");
122: ret = 1;
123: }
124:
125: mem = -1;
126: atomic_increment (&mem);
127: if (mem != 0)
128: {
129: puts ("atomic_increment test failed");
130: ret = 1;
131: }
132:
133: mem = 2;
134: if (atomic_increment_val (&mem) != 3)
135: {
136: puts ("atomic_increment_val test failed");
137: ret = 1;
138: }
139:
140: mem = 0;
141: if (atomic_increment_and_test (&mem)
142: || mem != 1)
143: {
144: puts ("atomic_increment_and_test test 1 failed");
145: ret = 1;
146: }
147:
148: mem = 35;
149: if (atomic_increment_and_test (&mem)
150: || mem != 36)
151: {
152: puts ("atomic_increment_and_test test 2 failed");
153: ret = 1;
154: }
155:
156: mem = -1;
157: if (! atomic_increment_and_test (&mem)
158: || mem != 0)
159: {
160: puts ("atomic_increment_and_test test 3 failed");
161: ret = 1;
162: }
163:
164: mem = 17;
165: atomic_decrement (&mem);
166: if (mem != 16)
167: {
168: puts ("atomic_decrement test failed");
169: ret = 1;
170: }
171:
172: if (atomic_decrement_val (&mem) != 15)
173: {
174: puts ("atomic_decrement_val test failed");
175: ret = 1;
176: }
177:
178: mem = 0;
179: if (atomic_decrement_and_test (&mem)
180: || mem != -1)
181: {
182: puts ("atomic_decrement_and_test test 1 failed");
183: ret = 1;
184: }
185:
186: mem = 15;
187: if (atomic_decrement_and_test (&mem)
188: || mem != 14)
189: {
190: puts ("atomic_decrement_and_test test 2 failed");
191: ret = 1;
192: }
193:
194: mem = 1;
195: if (! atomic_decrement_and_test (&mem)
196: || mem != 0)
197: {
198: puts ("atomic_decrement_and_test test 3 failed");
199: ret = 1;
200: }
201:
202: mem = 1;
203: if (atomic_decrement_if_positive (&mem) != 1
204: || mem != 0)
205: {
206: puts ("atomic_decrement_if_positive test 1 failed");
207: ret = 1;
208: }
209:
210: mem = 0;
211: if (atomic_decrement_if_positive (&mem) != 0
212: || mem != 0)
213: {
214: puts ("atomic_decrement_if_positive test 2 failed");
215: ret = 1;
216: }
217:
218: mem = -1;
219: if (atomic_decrement_if_positive (&mem) != -1
220: || mem != -1)
221: {
222: puts ("atomic_decrement_if_positive test 3 failed");
223: ret = 1;
224: }
225:
226: mem = -12;
227: if (! atomic_add_negative (&mem, 10)
228: || mem != -2)
229: {
230: puts ("atomic_add_negative test 1 failed");
231: ret = 1;
232: }
233:
234: mem = 0;
235: if (atomic_add_negative (&mem, 100)
236: || mem != 100)
237: {
238: puts ("atomic_add_negative test 2 failed");
239: ret = 1;
240: }
241:
242: mem = 15;
243: if (atomic_add_negative (&mem, -10)
244: || mem != 5)
245: {
246: puts ("atomic_add_negative test 3 failed");
247: ret = 1;
248: }
249:
250: mem = -12;
251: if (atomic_add_negative (&mem, 14)
252: || mem != 2)
253: {
254: puts ("atomic_add_negative test 4 failed");
255: ret = 1;
256: }
257:
258: mem = 0;
259: if (! atomic_add_negative (&mem, -1)
260: || mem != -1)
261: {
262: puts ("atomic_add_negative test 5 failed");
263: ret = 1;
264: }
265:
266: mem = -31;
267: if (atomic_add_negative (&mem, 31)
268: || mem != 0)
269: {
270: puts ("atomic_add_negative test 6 failed");
271: ret = 1;
272: }
273:
274: mem = -34;
275: if (atomic_add_zero (&mem, 31)
276: || mem != -3)
277: {
278: puts ("atomic_add_zero test 1 failed");
279: ret = 1;
280: }
281:
282: mem = -36;
283: if (! atomic_add_zero (&mem, 36)
284: || mem != 0)
285: {
286: puts ("atomic_add_zero test 2 failed");
287: ret = 1;
288: }
289:
290: mem = 113;
291: if (atomic_add_zero (&mem, -13)
292: || mem != 100)
293: {
294: puts ("atomic_add_zero test 3 failed");
295: ret = 1;
296: }
297:
298: mem = -18;
299: if (atomic_add_zero (&mem, 20)
300: || mem != 2)
301: {
302: puts ("atomic_add_zero test 4 failed");
303: ret = 1;
304: }
305:
306: mem = 10;
307: if (atomic_add_zero (&mem, -20)
308: || mem != -10)
309: {
310: puts ("atomic_add_zero test 5 failed");
311: ret = 1;
312: }
313:
314: mem = 10;
315: if (! atomic_add_zero (&mem, -10)
316: || mem != 0)
317: {
318: puts ("atomic_add_zero test 6 failed");
319: ret = 1;
320: }
321:
322: mem = 0;
323: atomic_bit_set (&mem, 1);
324: if (mem != 2)
325: {
326: puts ("atomic_bit_set test 1 failed");
327: ret = 1;
328: }
329:
330: mem = 8;
331: atomic_bit_set (&mem, 3);
332: if (mem != 8)
333: {
334: puts ("atomic_bit_set test 2 failed");
335: ret = 1;
336: }
337:
338: #ifdef TEST_ATOMIC64
339: mem = 16;
340: atomic_bit_set (&mem, 35);
341: if (mem != 0x800000010LL)
342: {
343: puts ("atomic_bit_set test 3 failed");
344: ret = 1;
345: }
346: #endif
347:
348: mem = 0;
349: if (atomic_bit_test_set (&mem, 1)
350: || mem != 2)
351: {
352: puts ("atomic_bit_test_set test 1 failed");
353: ret = 1;
354: }
355:
356: mem = 8;
357: if (! atomic_bit_test_set (&mem, 3)
358: || mem != 8)
359: {
360: puts ("atomic_bit_test_set test 2 failed");
361: ret = 1;
362: }
363:
364: #ifdef TEST_ATOMIC64
365: mem = 16;
366: if (atomic_bit_test_set (&mem, 35)
367: || mem != 0x800000010LL)
368: {
369: puts ("atomic_bit_test_set test 3 failed");
370: ret = 1;
371: }
372:
373: mem = 0x100000000LL;
374: if (! atomic_bit_test_set (&mem, 32)
375: || mem != 0x100000000LL)
376: {
377: puts ("atomic_bit_test_set test 4 failed");
378: ret = 1;
379: }
380: #endif
381:
382: #ifdef catomic_compare_and_exchange_val_acq
383: mem = 24;
384: if (catomic_compare_and_exchange_val_acq (&mem, 35, 24) != 24
385: || mem != 35)
386: {
387: puts ("catomic_compare_and_exchange_val_acq test 1 failed");
388: ret = 1;
389: }
390:
391: mem = 12;
392: if (catomic_compare_and_exchange_val_acq (&mem, 10, 15) != 12
393: || mem != 12)
394: {
395: puts ("catomic_compare_and_exchange_val_acq test 2 failed");
396: ret = 1;
397: }
398:
399: mem = -15;
400: if (catomic_compare_and_exchange_val_acq (&mem, -56, -15) != -15
401: || mem != -56)
402: {
403: puts ("catomic_compare_and_exchange_val_acq test 3 failed");
404: ret = 1;
405: }
406:
407: mem = -1;
408: if (catomic_compare_and_exchange_val_acq (&mem, 17, 0) != -1
409: || mem != -1)
410: {
411: puts ("catomic_compare_and_exchange_val_acq test 4 failed");
412: ret = 1;
413: }
414: #endif
415:
416: mem = 24;
417: if (catomic_compare_and_exchange_bool_acq (&mem, 35, 24)
418: || mem != 35)
419: {
420: puts ("catomic_compare_and_exchange_bool_acq test 1 failed");
421: ret = 1;
422: }
423:
424: mem = 12;
425: if (! catomic_compare_and_exchange_bool_acq (&mem, 10, 15)
426: || mem != 12)
427: {
428: puts ("catomic_compare_and_exchange_bool_acq test 2 failed");
429: ret = 1;
430: }
431:
432: mem = -15;
433: if (catomic_compare_and_exchange_bool_acq (&mem, -56, -15)
434: || mem != -56)
435: {
436: puts ("catomic_compare_and_exchange_bool_acq test 3 failed");
437: ret = 1;
438: }
439:
440: mem = -1;
441: if (! catomic_compare_and_exchange_bool_acq (&mem, 17, 0)
442: || mem != -1)
443: {
444: puts ("catomic_compare_and_exchange_bool_acq test 4 failed");
445: ret = 1;
446: }
447:
448: mem = 2;
449: if (catomic_exchange_and_add (&mem, 11) != 2
450: || mem != 13)
451: {
452: puts ("catomic_exchange_and_add test failed");
453: ret = 1;
454: }
455:
456: mem = -21;
457: catomic_add (&mem, 22);
458: if (mem != 1)
459: {
460: puts ("catomic_add test failed");
461: ret = 1;
462: }
463:
464: mem = -1;
465: catomic_increment (&mem);
466: if (mem != 0)
467: {
468: puts ("catomic_increment test failed");
469: ret = 1;
470: }
471:
472: mem = 2;
473: if (catomic_increment_val (&mem) != 3)
474: {
475: puts ("catomic_increment_val test failed");
476: ret = 1;
477: }
478:
479: mem = 17;
480: catomic_decrement (&mem);
481: if (mem != 16)
482: {
483: puts ("catomic_decrement test failed");
484: ret = 1;
485: }
486:
487: if (catomic_decrement_val (&mem) != 15)
488: {
489: puts ("catomic_decrement_val test failed");
490: ret = 1;
491: }
492:
493: return ret;
494: }
495:
496: #define TEST_FUNCTION do_test ()
497: #include "../test-skeleton.c"