nsprpub/pr/tests/atomic.c

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include "prio.h"
     7 #include "prprf.h"
     8 #include "pratom.h"
    10 /*
    11  * TODO: create a macro to generate the six lines of code that are repeated
    12  * for every test.  Also rewrite the statement
    13  *     result = result | ((EXPRESSION) ? 0 : 1);
    14  * as
    15  *     result |= !(EXPRESSION);
    16  */
    18 int main(int argc, char **argv)
    19 {
    20     PRInt32 rv, oldval, test, result = 0;
    21     PRFileDesc *output = PR_GetSpecialFD(PR_StandardOutput);
    23     /***********************/
    24     /* Test the functions. */
    25     /***********************/
    27     oldval = test = -2;
    28     rv = PR_AtomicIncrement(&test);
    29     result = result | ((rv == -1) ? 0 : 1);
    30     PR_fprintf(
    31         output, "PR_AtomicIncrement(%d) == %d: %s\n",
    32         oldval, rv, (rv == -1) ? "PASSED" : "FAILED");
    33     oldval = test;
    34     rv = PR_AtomicIncrement(&test);
    35     result = result | ((rv == 0) ? 0 : 1);
    36     PR_fprintf(
    37         output, "PR_AtomicIncrement(%d) == %d: %s\n",
    38         oldval, rv, (rv == 0) ? "PASSED" : "FAILED");
    39     oldval = test;
    40     rv = PR_AtomicIncrement(&test);
    41     result = result | ((rv == 1) ? 0 : 1);
    42     PR_fprintf(
    43         output, "PR_AtomicIncrement(%d) == %d: %s\n",
    44         oldval, rv, (rv == 1) ? "PASSED" : "FAILED");
    46     oldval = test = -2;
    47     rv = PR_AtomicAdd(&test,1);
    48     result = result | ((rv == -1) ? 0 : 1);
    49     PR_fprintf(
    50         output, "PR_AtomicAdd(%d,%d) == %d: %s\n",
    51         oldval, 1, rv, (rv == -1) ? "PASSED" : "FAILED");
    52     oldval = test;
    53     rv = PR_AtomicAdd(&test, 4);
    54     result = result | ((rv == 3) ? 0 : 1);
    55     PR_fprintf(
    56         output, "PR_AtomicAdd(%d,%d) == %d: %s\n",
    57         oldval, 4, rv, (rv == 3) ? "PASSED" : "FAILED");
    58     oldval = test;
    59     rv = PR_AtomicAdd(&test, -6);
    60     result = result | ((rv == -3) ? 0 : 1);
    61     PR_fprintf(
    62         output, "PR_AtomicAdd(%d,%d) == %d: %s\n",
    63         oldval, -6, rv, (rv == -3) ? "PASSED" : "FAILED");
    65     oldval = test = 2;
    66     rv = PR_AtomicDecrement(&test);
    67     result = result | ((rv == 1) ? 0 : 1);
    68     PR_fprintf(
    69         output, "PR_AtomicDecrement(%d) == %d: %s\n",
    70         oldval, rv, (rv == 1) ? "PASSED" : "FAILED");
    71     oldval = test;
    72     rv = PR_AtomicDecrement(&test);
    73     result = result | ((rv == 0) ? 0 : 1);
    74     PR_fprintf(
    75         output, "PR_AtomicDecrement(%d) == %d: %s\n",
    76         oldval, rv, (rv == 0) ? "PASSED" : "FAILED");
    77     oldval = test;
    78     rv = PR_AtomicDecrement(&test);
    79     result = result | ((rv == -1) ? 0 : 1);
    80     PR_fprintf(
    81         output, "PR_AtomicDecrement(%d) == %d: %s\n",
    82         oldval, rv, (rv == -1) ? "PASSED" : "FAILED");
    84     /* set to a different value */
    85     oldval = test = -2;
    86     rv = PR_AtomicSet(&test, 2);
    87     result = result | (((rv == -2) && (test == 2)) ? 0 : 1);
    88     PR_fprintf(
    89         output, "PR_AtomicSet(%d, %d) == %d: %s\n",
    90         oldval, 2, rv, ((rv == -2) && (test == 2)) ? "PASSED" : "FAILED");
    92     /* set to the same value */
    93     oldval = test = -2;
    94     rv = PR_AtomicSet(&test, -2);
    95     result = result | (((rv == -2) && (test == -2)) ? 0 : 1);
    96     PR_fprintf(
    97         output, "PR_AtomicSet(%d, %d) == %d: %s\n",
    98         oldval, -2, rv, ((rv == -2) && (test == -2)) ? "PASSED" : "FAILED");
   100     /***********************/
   101     /* Test the macros.    */
   102     /***********************/
   104     oldval = test = -2;
   105     rv = PR_ATOMIC_INCREMENT(&test);
   106     result = result | ((rv == -1) ? 0 : 1);
   107     PR_fprintf(
   108         output, "PR_ATOMIC_INCREMENT(%d) == %d: %s\n",
   109         oldval, rv, (rv == -1) ? "PASSED" : "FAILED");
   110     oldval = test;
   111     rv = PR_ATOMIC_INCREMENT(&test);
   112     result = result | ((rv == 0) ? 0 : 1);
   113     PR_fprintf(
   114         output, "PR_ATOMIC_INCREMENT(%d) == %d: %s\n",
   115         oldval, rv, (rv == 0) ? "PASSED" : "FAILED");
   116     oldval = test;
   117     rv = PR_ATOMIC_INCREMENT(&test);
   118     result = result | ((rv == 1) ? 0 : 1);
   119     PR_fprintf(
   120         output, "PR_ATOMIC_INCREMENT(%d) == %d: %s\n",
   121         oldval, rv, (rv == 1) ? "PASSED" : "FAILED");
   123     oldval = test = -2;
   124     rv = PR_ATOMIC_ADD(&test,1);
   125     result = result | ((rv == -1) ? 0 : 1);
   126     PR_fprintf(
   127         output, "PR_ATOMIC_ADD(%d,%d) == %d: %s\n",
   128         oldval, 1, rv, (rv == -1) ? "PASSED" : "FAILED");
   129     oldval = test;
   130     rv = PR_ATOMIC_ADD(&test, 4);
   131     result = result | ((rv == 3) ? 0 : 1);
   132     PR_fprintf(
   133         output, "PR_ATOMIC_ADD(%d,%d) == %d: %s\n",
   134         oldval, 4, rv, (rv == 3) ? "PASSED" : "FAILED");
   135     oldval = test;
   136     rv = PR_ATOMIC_ADD(&test, -6);
   137     result = result | ((rv == -3) ? 0 : 1);
   138     PR_fprintf(
   139         output, "PR_ATOMIC_ADD(%d,%d) == %d: %s\n",
   140         oldval, -6, rv, (rv == -3) ? "PASSED" : "FAILED");
   142     oldval = test = 2;
   143     rv = PR_ATOMIC_DECREMENT(&test);
   144     result = result | ((rv == 1) ? 0 : 1);
   145     PR_fprintf(
   146         output, "PR_ATOMIC_DECREMENT(%d) == %d: %s\n",
   147         oldval, rv, (rv == 1) ? "PASSED" : "FAILED");
   148     oldval = test;
   149     rv = PR_ATOMIC_DECREMENT(&test);
   150     result = result | ((rv == 0) ? 0 : 1);
   151     PR_fprintf(
   152         output, "PR_ATOMIC_DECREMENT(%d) == %d: %s\n",
   153         oldval, rv, (rv == 0) ? "PASSED" : "FAILED");
   154     oldval = test;
   155     rv = PR_ATOMIC_DECREMENT(&test);
   156     result = result | ((rv == -1) ? 0 : 1);
   157     PR_fprintf(
   158         output, "PR_ATOMIC_DECREMENT(%d) == %d: %s\n",
   159         oldval, rv, (rv == -1) ? "PASSED" : "FAILED");
   161     /* set to a different value */
   162     oldval = test = -2;
   163     rv = PR_ATOMIC_SET(&test, 2);
   164     result = result | (((rv == -2) && (test == 2)) ? 0 : 1);
   165     PR_fprintf(
   166         output, "PR_ATOMIC_SET(%d, %d) == %d: %s\n",
   167         oldval, 2, rv, ((rv == -2) && (test == 2)) ? "PASSED" : "FAILED");
   169     /* set to the same value */
   170     oldval = test = -2;
   171     rv = PR_ATOMIC_SET(&test, -2);
   172     result = result | (((rv == -2) && (test == -2)) ? 0 : 1);
   173     PR_fprintf(
   174         output, "PR_ATOMIC_SET(%d, %d) == %d: %s\n",
   175         oldval, -2, rv, ((rv == -2) && (test == -2)) ? "PASSED" : "FAILED");
   177     PR_fprintf(
   178         output, "Atomic operations test %s\n",
   179         (result == 0) ? "PASSED" : "FAILED");
   180     return result;
   181 }  /* main */
   183 /* atomic.c */

mercurial