test_atomic.c (1364B)
1 /* Copyright (C) 2013-2023, 2025 Vincent Forest (vaplv@free.fr) 2 * 3 * The RSys library is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published 5 * by the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * The RSys library is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with the RSys library. If not, see <http://www.gnu.org/licenses/>. */ 15 16 #include "rsys.h" 17 18 int 19 main(int argc, char** argv) 20 { 21 ATOMIC atom = 0; 22 ATOMIC tmp; 23 (void)argc, (void)argv; 24 25 tmp = ATOMIC_INCR(&atom); 26 CHK(atom == 1); 27 CHK(tmp == 1); 28 tmp = ATOMIC_ADD(&atom, 5); 29 CHK(atom == 6); 30 CHK(tmp == 6); 31 tmp = ATOMIC_DECR(&atom); 32 CHK(atom == 5); 33 CHK(tmp == 5); 34 tmp = ATOMIC_SUB(&atom, 7); 35 CHK(atom == -2); 36 CHK(tmp == -2); 37 38 tmp = ATOMIC_CAS(&atom, 0, -1); 39 CHK(atom == -2); 40 CHK(tmp == -2); 41 tmp = ATOMIC_CAS(&atom, 0, -2); 42 CHK(atom == 0); 43 CHK(tmp == -2); 44 tmp = ATOMIC_SET(&atom, 9); 45 CHK(atom == 9); 46 CHK(tmp == 0); 47 tmp = ATOMIC_GET(&atom); 48 CHK(tmp == 9); 49 50 return 0; 51 }