tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

atomic.c (5987B)


      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/. */
      5 
      6 #include "prio.h"
      7 #include "prprf.h"
      8 #include "pratom.h"
      9 
     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 */
     17 
     18 int main(int argc, char** argv) {
     19  PRInt32 rv, oldval, test, result = 0;
     20  PRFileDesc* output = PR_GetSpecialFD(PR_StandardOutput);
     21 
     22  /***********************/
     23  /* Test the functions. */
     24  /***********************/
     25 
     26  oldval = test = -2;
     27  rv = PR_AtomicIncrement(&test);
     28  result = result | ((rv == -1) ? 0 : 1);
     29  PR_fprintf(output, "PR_AtomicIncrement(%d) == %d: %s\n", oldval, rv,
     30             (rv == -1) ? "PASSED" : "FAILED");
     31  oldval = test;
     32  rv = PR_AtomicIncrement(&test);
     33  result = result | ((rv == 0) ? 0 : 1);
     34  PR_fprintf(output, "PR_AtomicIncrement(%d) == %d: %s\n", oldval, rv,
     35             (rv == 0) ? "PASSED" : "FAILED");
     36  oldval = test;
     37  rv = PR_AtomicIncrement(&test);
     38  result = result | ((rv == 1) ? 0 : 1);
     39  PR_fprintf(output, "PR_AtomicIncrement(%d) == %d: %s\n", oldval, rv,
     40             (rv == 1) ? "PASSED" : "FAILED");
     41 
     42  oldval = test = -2;
     43  rv = PR_AtomicAdd(&test, 1);
     44  result = result | ((rv == -1) ? 0 : 1);
     45  PR_fprintf(output, "PR_AtomicAdd(%d,%d) == %d: %s\n", oldval, 1, rv,
     46             (rv == -1) ? "PASSED" : "FAILED");
     47  oldval = test;
     48  rv = PR_AtomicAdd(&test, 4);
     49  result = result | ((rv == 3) ? 0 : 1);
     50  PR_fprintf(output, "PR_AtomicAdd(%d,%d) == %d: %s\n", oldval, 4, rv,
     51             (rv == 3) ? "PASSED" : "FAILED");
     52  oldval = test;
     53  rv = PR_AtomicAdd(&test, -6);
     54  result = result | ((rv == -3) ? 0 : 1);
     55  PR_fprintf(output, "PR_AtomicAdd(%d,%d) == %d: %s\n", oldval, -6, rv,
     56             (rv == -3) ? "PASSED" : "FAILED");
     57 
     58  oldval = test = 2;
     59  rv = PR_AtomicDecrement(&test);
     60  result = result | ((rv == 1) ? 0 : 1);
     61  PR_fprintf(output, "PR_AtomicDecrement(%d) == %d: %s\n", oldval, rv,
     62             (rv == 1) ? "PASSED" : "FAILED");
     63  oldval = test;
     64  rv = PR_AtomicDecrement(&test);
     65  result = result | ((rv == 0) ? 0 : 1);
     66  PR_fprintf(output, "PR_AtomicDecrement(%d) == %d: %s\n", oldval, rv,
     67             (rv == 0) ? "PASSED" : "FAILED");
     68  oldval = test;
     69  rv = PR_AtomicDecrement(&test);
     70  result = result | ((rv == -1) ? 0 : 1);
     71  PR_fprintf(output, "PR_AtomicDecrement(%d) == %d: %s\n", oldval, rv,
     72             (rv == -1) ? "PASSED" : "FAILED");
     73 
     74  /* set to a different value */
     75  oldval = test = -2;
     76  rv = PR_AtomicSet(&test, 2);
     77  result = result | (((rv == -2) && (test == 2)) ? 0 : 1);
     78  PR_fprintf(output, "PR_AtomicSet(%d, %d) == %d: %s\n", oldval, 2, rv,
     79             ((rv == -2) && (test == 2)) ? "PASSED" : "FAILED");
     80 
     81  /* set to the same value */
     82  oldval = test = -2;
     83  rv = PR_AtomicSet(&test, -2);
     84  result = result | (((rv == -2) && (test == -2)) ? 0 : 1);
     85  PR_fprintf(output, "PR_AtomicSet(%d, %d) == %d: %s\n", oldval, -2, rv,
     86             ((rv == -2) && (test == -2)) ? "PASSED" : "FAILED");
     87 
     88  /***********************/
     89  /* Test the macros.    */
     90  /***********************/
     91 
     92  oldval = test = -2;
     93  rv = PR_ATOMIC_INCREMENT(&test);
     94  result = result | ((rv == -1) ? 0 : 1);
     95  PR_fprintf(output, "PR_ATOMIC_INCREMENT(%d) == %d: %s\n", oldval, rv,
     96             (rv == -1) ? "PASSED" : "FAILED");
     97  oldval = test;
     98  rv = PR_ATOMIC_INCREMENT(&test);
     99  result = result | ((rv == 0) ? 0 : 1);
    100  PR_fprintf(output, "PR_ATOMIC_INCREMENT(%d) == %d: %s\n", oldval, rv,
    101             (rv == 0) ? "PASSED" : "FAILED");
    102  oldval = test;
    103  rv = PR_ATOMIC_INCREMENT(&test);
    104  result = result | ((rv == 1) ? 0 : 1);
    105  PR_fprintf(output, "PR_ATOMIC_INCREMENT(%d) == %d: %s\n", oldval, rv,
    106             (rv == 1) ? "PASSED" : "FAILED");
    107 
    108  oldval = test = -2;
    109  rv = PR_ATOMIC_ADD(&test, 1);
    110  result = result | ((rv == -1) ? 0 : 1);
    111  PR_fprintf(output, "PR_ATOMIC_ADD(%d,%d) == %d: %s\n", oldval, 1, rv,
    112             (rv == -1) ? "PASSED" : "FAILED");
    113  oldval = test;
    114  rv = PR_ATOMIC_ADD(&test, 4);
    115  result = result | ((rv == 3) ? 0 : 1);
    116  PR_fprintf(output, "PR_ATOMIC_ADD(%d,%d) == %d: %s\n", oldval, 4, rv,
    117             (rv == 3) ? "PASSED" : "FAILED");
    118  oldval = test;
    119  rv = PR_ATOMIC_ADD(&test, -6);
    120  result = result | ((rv == -3) ? 0 : 1);
    121  PR_fprintf(output, "PR_ATOMIC_ADD(%d,%d) == %d: %s\n", oldval, -6, rv,
    122             (rv == -3) ? "PASSED" : "FAILED");
    123 
    124  oldval = test = 2;
    125  rv = PR_ATOMIC_DECREMENT(&test);
    126  result = result | ((rv == 1) ? 0 : 1);
    127  PR_fprintf(output, "PR_ATOMIC_DECREMENT(%d) == %d: %s\n", oldval, rv,
    128             (rv == 1) ? "PASSED" : "FAILED");
    129  oldval = test;
    130  rv = PR_ATOMIC_DECREMENT(&test);
    131  result = result | ((rv == 0) ? 0 : 1);
    132  PR_fprintf(output, "PR_ATOMIC_DECREMENT(%d) == %d: %s\n", oldval, rv,
    133             (rv == 0) ? "PASSED" : "FAILED");
    134  oldval = test;
    135  rv = PR_ATOMIC_DECREMENT(&test);
    136  result = result | ((rv == -1) ? 0 : 1);
    137  PR_fprintf(output, "PR_ATOMIC_DECREMENT(%d) == %d: %s\n", oldval, rv,
    138             (rv == -1) ? "PASSED" : "FAILED");
    139 
    140  /* set to a different value */
    141  oldval = test = -2;
    142  rv = PR_ATOMIC_SET(&test, 2);
    143  result = result | (((rv == -2) && (test == 2)) ? 0 : 1);
    144  PR_fprintf(output, "PR_ATOMIC_SET(%d, %d) == %d: %s\n", oldval, 2, rv,
    145             ((rv == -2) && (test == 2)) ? "PASSED" : "FAILED");
    146 
    147  /* set to the same value */
    148  oldval = test = -2;
    149  rv = PR_ATOMIC_SET(&test, -2);
    150  result = result | (((rv == -2) && (test == -2)) ? 0 : 1);
    151  PR_fprintf(output, "PR_ATOMIC_SET(%d, %d) == %d: %s\n", oldval, -2, rv,
    152             ((rv == -2) && (test == -2)) ? "PASSED" : "FAILED");
    153 
    154  PR_fprintf(output, "Atomic operations test %s\n",
    155             (result == 0) ? "PASSED" : "FAILED");
    156  return result;
    157 } /* main */
    158 
    159 /* atomic.c */