(linenum→info "unix/slp.c:2238")

glibc/2.7/csu/tst-atomic.c

    1: /* Tests for atomic.h macros.
    2:    Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4:    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
    5: 
    6:    The GNU C Library is free software; you can redistribute it and/or
    7:    modify it under the terms of the GNU Lesser General Public
    8:    License as published by the Free Software Foundation; either
    9:    version 2.1 of the License, or (at your option) any later version.
   10: 
   11:    The GNU C Library 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 GNU
   14:    Lesser General Public License for more details.
   15: 
   16:    You should have received a copy of the GNU Lesser General Public
   17:    License along with the GNU C Library; if not, write to the Free
   18:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   19:    02111-1307 USA.  */
   20: 
   21: #include <stdio.h>
   22: #include <atomic.h>
   23: 
   24: #ifndef atomic_t
   25: # define atomic_t int
   26: #endif
   27: 
   28: /* Test various atomic.h macros.  */
   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"
Syntax (Markdown)