blob: d94f5905dab384de2682d3208add4cd39daa4f1a [file] [log] [blame]
Tristan Matthews0a329cc2013-07-17 13:20:14 -04001/* $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
48int 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 */
107int dummy_atomic_test;
108#endif /* INCLUDE_ATOMIC_TEST */
109