Add support for ICE/STUN/TURN in res_rtp_asterisk and chan_sip.
[asterisk/asterisk.git] / res / pjproject / pjlib / src / pjlib-test / atomic.c
1 /* $Id$ */
2 /* 
3  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
19  */
20 #include "test.h"
21 #include <pjlib.h>
22
23 /**
24  * \page page_pjlib_atomic_test Test: Atomic Variable
25  *
26  * This file provides implementation of \b atomic_test(). It tests the
27  * functionality of the atomic variable API.
28  *
29  * \section atomic_test_sec Scope of the Test
30  *
31  * API tested:
32  *  - pj_atomic_create()
33  *  - pj_atomic_get()
34  *  - pj_atomic_inc()
35  *  - pj_atomic_dec()
36  *  - pj_atomic_set()
37  *  - pj_atomic_destroy()
38  *
39  *
40  * This file is <b>pjlib-test/atomic.c</b>
41  *
42  * \include pjlib-test/atomic.c
43  */
44
45
46 #if INCLUDE_ATOMIC_TEST
47
48 int atomic_test(void)
49 {
50     pj_pool_t *pool;
51     pj_atomic_t *atomic_var;
52     pj_status_t rc;
53
54     pool = pj_pool_create(mem, NULL, 4096, 0, NULL);
55     if (!pool)
56         return -10;
57
58     /* create() */
59     rc = pj_atomic_create(pool, 111, &atomic_var);
60     if (rc != 0) {
61         return -20;
62     }
63
64     /* get: check the value. */
65     if (pj_atomic_get(atomic_var) != 111)
66         return -30;
67
68     /* increment. */
69     pj_atomic_inc(atomic_var);
70     if (pj_atomic_get(atomic_var) != 112)
71         return -40;
72
73     /* decrement. */
74     pj_atomic_dec(atomic_var);
75     if (pj_atomic_get(atomic_var) != 111)
76         return -50;
77
78     /* set */
79     pj_atomic_set(atomic_var, 211);
80     if (pj_atomic_get(atomic_var) != 211)
81         return -60;
82
83     /* add */
84     pj_atomic_add(atomic_var, 10);
85     if (pj_atomic_get(atomic_var) != 221)
86         return -60;
87
88     /* check the value again. */
89     if (pj_atomic_get(atomic_var) != 221)
90         return -70;
91
92     /* destroy */
93     rc = pj_atomic_destroy(atomic_var);
94     if (rc != 0)
95         return -80;
96
97     pj_pool_release(pool);
98
99     return 0;
100 }
101
102
103 #else
104 /* To prevent warning about "translation unit is empty"
105  * when this test is disabled. 
106  */
107 int dummy_atomic_test;
108 #endif  /* INCLUDE_ATOMIC_TEST */
109