modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/builtins/strncmp-2.c (about)

     1  /* Copyright (C) 2000, 2001, 2003, 2005  Free Software Foundation.
     2  
     3     Ensure all expected transformations of builtin strncmp occur and
     4     perform correctly.
     5  
     6     Written by Kaveh R. Ghazi, 11/26/2000.  */
     7  
     8  extern void abort (void);
     9  typedef __SIZE_TYPE__ size_t;
    10  extern int strncmp (const char *, const char *, size_t);
    11  
    12  void
    13  main_test (void)
    14  {
    15  #if !defined(__OPTIMIZE__) || ((defined(__sh__) || defined(__i386__) || defined (__x86_64__)) && !defined(__OPTIMIZE_SIZE__))
    16    /* These tests work on platforms which support cmpstrsi.  We test it
    17       at -O0 on all platforms to ensure the strncmp logic is correct.  */
    18    const char *const s1 = "hello world";
    19    const char *s2;
    20    int n = 6, x;
    21    
    22    s2 = s1;
    23    if (strncmp (++s2, "ello", 3) != 0 || s2 != s1+1)
    24      abort();
    25    s2 = s1;
    26    if (strncmp ("ello", ++s2, 3) != 0 || s2 != s1+1)
    27      abort();
    28    s2 = s1;
    29    if (strncmp (++s2, "ello", 4) != 0 || s2 != s1+1)
    30      abort();
    31    s2 = s1;
    32    if (strncmp ("ello", ++s2, 4) != 0 || s2 != s1+1)
    33      abort();
    34    s2 = s1;
    35    if (strncmp (++s2, "ello", 5) <= 0 || s2 != s1+1)
    36      abort();
    37    s2 = s1;
    38    if (strncmp ("ello", ++s2, 5) >= 0 || s2 != s1+1)
    39      abort();
    40    s2 = s1;
    41    if (strncmp (++s2, "ello", 6) <= 0 || s2 != s1+1)
    42      abort();
    43    s2 = s1;
    44    if (strncmp ("ello", ++s2, 6) >= 0 || s2 != s1+1)
    45      abort();
    46  
    47    s2 = s1;
    48    if (strncmp (++s2, "zllo", 3) >= 0 || s2 != s1+1)
    49      abort();
    50    s2 = s1;
    51    if (strncmp ("zllo", ++s2, 3) <= 0 || s2 != s1+1)
    52      abort();
    53    s2 = s1;
    54    if (strncmp (++s2, "zllo", 4) >= 0 || s2 != s1+1)
    55      abort();
    56    s2 = s1;
    57    if (strncmp ("zllo", ++s2, 4) <= 0 || s2 != s1+1)
    58      abort();
    59    s2 = s1;
    60    if (strncmp (++s2, "zllo", 5) >= 0 || s2 != s1+1)
    61      abort();
    62    s2 = s1;
    63    if (strncmp ("zllo", ++s2, 5) <= 0 || s2 != s1+1)
    64      abort();
    65    s2 = s1;
    66    if (strncmp (++s2, "zllo", 6) >= 0 || s2 != s1+1)
    67      abort();
    68    s2 = s1;
    69    if (strncmp ("zllo", ++s2, 6) <= 0 || s2 != s1+1)
    70      abort();
    71  
    72    s2 = s1;
    73    if (strncmp (++s2, "allo", 3) <= 0 || s2 != s1+1)
    74      abort();
    75    s2 = s1;
    76    if (strncmp ("allo", ++s2, 3) >= 0 || s2 != s1+1)
    77      abort();
    78    s2 = s1;
    79    if (strncmp (++s2, "allo", 4) <= 0 || s2 != s1+1)
    80      abort();
    81    s2 = s1;
    82    if (strncmp ("allo", ++s2, 4) >= 0 || s2 != s1+1)
    83      abort();
    84    s2 = s1;
    85    if (strncmp (++s2, "allo", 5) <= 0 || s2 != s1+1)
    86      abort();
    87    s2 = s1;
    88    if (strncmp ("allo", ++s2, 5) >= 0 || s2 != s1+1)
    89      abort();
    90    s2 = s1;
    91    if (strncmp (++s2, "allo", 6) <= 0 || s2 != s1+1)
    92      abort();
    93    s2 = s1;
    94    if (strncmp ("allo", ++s2, 6) >= 0 || s2 != s1+1)
    95      abort();
    96  
    97    s2 = s1; n = 2; x = 1;
    98    if (strncmp (++s2, s1+(x&3), ++n) != 0 || s2 != s1+1 || n != 3)
    99      abort();
   100    s2 = s1; n = 2; x = 1;
   101    if (strncmp (s1+(x&3), ++s2, ++n) != 0 || s2 != s1+1 || n != 3)
   102      abort();
   103    s2 = s1; n = 3; x = 1;
   104    if (strncmp (++s2, s1+(x&3), ++n) != 0 || s2 != s1+1 || n != 4)
   105      abort();
   106    s2 = s1; n = 3; x = 1;
   107    if (strncmp (s1+(x&3), ++s2, ++n) != 0 || s2 != s1+1 || n != 4)
   108      abort();
   109    s2 = s1; n = 4; x = 1;
   110    if (strncmp (++s2, s1+(x&3), ++n) != 0 || s2 != s1+1 || n != 5)
   111      abort();
   112    s2 = s1; n = 4; x = 1;
   113    if (strncmp (s1+(x&3), ++s2, ++n) != 0 || s2 != s1+1 || n != 5)
   114      abort();
   115    s2 = s1; n = 5; x = 1;
   116    if (strncmp (++s2, s1+(x&3), ++n) != 0 || s2 != s1+1 || n != 6)
   117      abort();
   118    s2 = s1; n = 5; x = 1;
   119    if (strncmp (s1+(x&3), ++s2, ++n) != 0 || s2 != s1+1 || n != 6)
   120      abort();
   121  
   122    s2 = s1; n = 2;
   123    if (strncmp (++s2, "zllo", ++n) >= 0 || s2 != s1+1 || n != 3)
   124      abort();
   125    s2 = s1; n = 2; x = 1;
   126    if (strncmp ("zllo", ++s2, ++n) <= 0 || s2 != s1+1 || n != 3)
   127      abort();
   128    s2 = s1; n = 3; x = 1;
   129    if (strncmp (++s2, "zllo", ++n) >= 0 || s2 != s1+1 || n != 4)
   130      abort();
   131    s2 = s1; n = 3; x = 1;
   132    if (strncmp ("zllo", ++s2, ++n) <= 0 || s2 != s1+1 || n != 4)
   133      abort();
   134    s2 = s1; n = 4; x = 1;
   135    if (strncmp (++s2, "zllo", ++n) >= 0 || s2 != s1+1 || n != 5)
   136      abort();
   137    s2 = s1; n = 4; x = 1;
   138    if (strncmp ("zllo", ++s2, ++n) <= 0 || s2 != s1+1 || n != 5)
   139      abort();
   140    s2 = s1; n = 5; x = 1;
   141    if (strncmp (++s2, "zllo", ++n) >= 0 || s2 != s1+1 || n != 6)
   142      abort();
   143    s2 = s1; n = 5; x = 1;
   144    if (strncmp ("zllo", ++s2, ++n) <= 0 || s2 != s1+1 || n != 6)
   145      abort();
   146  
   147    s2 = s1; n = 2;
   148    if (strncmp (++s2, "allo", ++n) <= 0 || s2 != s1+1 || n != 3)
   149      abort();
   150    s2 = s1; n = 2; x = 1;
   151    if (strncmp ("allo", ++s2, ++n) >= 0 || s2 != s1+1 || n != 3)
   152      abort();
   153    s2 = s1; n = 3; x = 1;
   154    if (strncmp (++s2, "allo", ++n) <= 0 || s2 != s1+1 || n != 4)
   155      abort();
   156    s2 = s1; n = 3; x = 1;
   157    if (strncmp ("allo", ++s2, ++n) >= 0 || s2 != s1+1 || n != 4)
   158      abort();
   159    s2 = s1; n = 4; x = 1;
   160    if (strncmp (++s2, "allo", ++n) <= 0 || s2 != s1+1 || n != 5)
   161      abort();
   162    s2 = s1; n = 4; x = 1;
   163    if (strncmp ("allo", ++s2, ++n) >= 0 || s2 != s1+1 || n != 5)
   164      abort();
   165    s2 = s1; n = 5; x = 1;
   166    if (strncmp (++s2, "allo", ++n) <= 0 || s2 != s1+1 || n != 6)
   167      abort();
   168    s2 = s1; n = 5; x = 1;
   169    if (strncmp ("allo", ++s2, ++n) >= 0 || s2 != s1+1 || n != 6)
   170      abort();
   171  
   172  #endif  
   173  }