github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/for.c (about)

     1  #include "tests.h"
     2  #include <stdio.h>
     3  
     4  int main()
     5  {
     6      plan(62);
     7  
     8      int i = 0;
     9  
    10      diag("Missing init");
    11      for (; i < 3; i++)
    12          pass("%d", i);
    13  
    14      diag("CompountStmt");
    15      for (i = 0; i < 3; i++) {
    16          pass("%d", i);
    17      }
    18  
    19      diag("Not CompountStmt");
    20      for (i = 0; i < 3; i++)
    21          pass("%d", i);
    22  
    23      diag("Infinite loop");
    24      int j = 0;
    25      for (;;) {
    26          pass("%d", j);
    27          j++;
    28          if (j > 3)
    29              break;
    30      }
    31  
    32      diag("continue");
    33      i = 0;
    34      j = 0;
    35      for (;;) {
    36          pass("%d %d", i, j);
    37          i++;
    38          if (i < 3)
    39              continue;
    40          j++;
    41          if (j > 3)
    42              break;
    43      }
    44  
    45      diag("big initialization 1");
    46      for (i = 0, j = 0; i < 3; i++) {
    47          pass("%d %d", i, j);
    48      }
    49  
    50      diag("big initialization 2");
    51      for (i = 0, j = 0; i < 3;) {
    52          pass("%d %d", i, j);
    53          i++;
    54          j++;
    55      }
    56  
    57      diag("big increment");
    58      i = 0;
    59      j = 0;
    60      for (; i < 3; i++, j++) {
    61          pass("%d %d", i, j);
    62      }
    63  
    64      diag("big condition");
    65      i = -1;
    66      j = 0;
    67      for (; i++, j < 3;) {
    68          pass("%d %d", i, j);
    69          j++;
    70      }
    71  
    72      diag("Without body and with 2 and more increments");
    73      for (i = 0, j = 0; i < 2; j++, i++)
    74          ;
    75      pass("%d", i);
    76  
    77      diag("Without body and with 2 and more conditions");
    78      for (i = 0, j = 0; j++, i++, i < 2;)
    79          ;
    80      pass("%d", i);
    81  
    82      diag("initialization inside for");
    83      for (int h = 0; h < 3; h++)
    84          pass("%d", h);
    85  
    86      diag("double initialization inside for");
    87      for (int f = 0, g = 0; g < 2 || f < 2; g++, f++) {
    88          pass("%d", f);
    89          pass("%d", g);
    90      }
    91  
    92      {
    93          diag("double initialization inside for with double for");
    94          for (int ef = 0, eg = 0; eg < 2 || ef < 2; eg++, ef++) {
    95              pass("%d", ef);
    96              pass("%d", eg);
    97          }
    98          for (int ef = 0, eg = 0; eg < 2 || ef < 2; eg++, ef++) {
    99              pass("%d", ef);
   100              pass("%d", eg);
   101          }
   102      }
   103  
   104      diag("NULL in for");
   105      int nn = 0;
   106      for (; NULL; nn++) {
   107          if (nn > 2) {
   108              break;
   109          }
   110      }
   111      is_eq(nn, 0);
   112  
   113      diag("! NULL in for");
   114      int nn2 = 0;
   115      for (; !NULL; nn2++) {
   116          if (nn2 > 2) {
   117              break;
   118          }
   119      }
   120      is_eq(nn2, 3);
   121  
   122      diag("for with specific body");
   123      {
   124          double vars = 42.0;
   125          for (int s = 0; s < 1; s++)
   126              vars++;
   127          is_eq(vars, 43.0);
   128      }
   129      {
   130          double vars = 42.0;
   131          for (int s = 0; s < 1; s++)
   132              vars += 1.0;
   133          is_eq(vars, 43.0);
   134      }
   135      {
   136          double vars = 42.0;
   137          int X, Y;
   138          for (X = 0, Y = 0; X < 1; X++, Y++)
   139              vars += 1.0;
   140          is_eq(vars, 43.0);
   141      }
   142      {
   143          double vars = 42.0;
   144          for (int s = 0; s < 1; s++)
   145              vars = vars + 1.0;
   146          is_eq(vars, 43.0);
   147      }
   148      {
   149          double vars = 42.0;
   150          int X, Y;
   151          for (X = 0, Y = 0; X < 1; X++, Y++)
   152              vars = vars + 1.0;
   153          is_eq(vars, 43.0);
   154      }
   155      {
   156          int X, Y;
   157          for (X = 0, Y = 0; X < 1; X++, Y++)
   158              X += Y;
   159          pass("ok");
   160      }
   161      {
   162          int X, Y;
   163          for (X = 0, Y = 0; X < 1; X++, Y++)
   164              X = X + Y;
   165          pass("ok");
   166      }
   167  
   168      diag("increment --");
   169      for (i = 3; i >= 1; i--)
   170          pass("%d", i);
   171  
   172      diag("increment -= 3");
   173      for (i = 3; i >= 1; i -= 3)
   174          pass("%d", i);
   175  
   176      diag("for with empty body");
   177      int varI = 10;
   178      int nCopy = 50;
   179      for (; varI > 0 && varI < nCopy; varI++)
   180          ;
   181      is_eq(varI, 50);
   182  
   183      done_testing();
   184  }