Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "test.h"
  4.  
  5. #define TEST(r, f, x, m) ( \
  6.         errno=0, ((r) = (f)) == (x) || \
  7.         (t_error("%s failed (" m ")\n", #f, r, x, strerror(errno)), 0) )
  8.  
  9. #define TEST_S(s, x, m) ( \
  10.         !strcmp((s),(x)) || \
  11.         (t_error("[%s] != [%s] (%s)\n", s, x, m), 0) )
  12.  
  13. static FILE *writetemp(const char *data)
  14. {
  15.         FILE *f = fopen("_tmpfile.tmp", "w+");
  16.         if (!f) return 0;
  17.         if (!fwrite(data, strlen(data), 1, f)) {
  18.                 fclose(f);
  19.                 return 0;
  20.         }
  21.         rewind(f);
  22.         return f;
  23. }
  24.  
  25. int main(void)
  26. {
  27.         int i, x, y;
  28.         double u;
  29.         char a[100], b[100];
  30.         FILE *f;
  31.  
  32.  
  33.         TEST(i, !!(f=writetemp("hello, world")), 1, "failed to make temp file");
  34.         if (f) {
  35.                 TEST(i, fscanf(f, "%s %[own]", a, b), 2, "got %d fields, expected %d");
  36.                 TEST_S(a, "hello,", "wrong result for %s");
  37.                 TEST_S(b, "wo", "wrong result for %[own]");
  38.                 TEST(i, fgetc(f), 'r', "'%c' != '%c') (%s)");
  39.                 fclose(f);
  40.         }
  41.  
  42.         TEST(i, !!(f=writetemp("ld 0x12 0x34")), 1, "failed to make temp file");
  43.         if (f) {
  44.                 TEST(i, fscanf(f, "ld %5i%2i", &x, &y), 1, "got %d fields, expected %d");
  45.                 TEST(i, x, 0x12, "%d != %d");
  46.                 TEST(i, fgetc(f), '3', "'%c' != '%c'");
  47.                 fclose(f);
  48.         }
  49.  
  50.         TEST(i, !!(f=writetemp("      42")), 1, "failed to make temp file");
  51.         if (f) {
  52.                 x=y=-1;
  53.                 TEST(i, fscanf(f, " %n%*d%n", &x, &y), 0, "%d != %d");
  54.                 TEST(i, x, 6, "%d != %d");
  55.                 TEST(i, y, 8, "%d != %d");
  56.                 TEST(i, ftell(f), 8, "%d != %d");
  57.                 TEST(i, !!feof(f), 1, "%d != %d");
  58.                 fclose(f);
  59.         }
  60.  
  61.         TEST(i, !!(f=writetemp("[abc123]....x")), 1, "failed to make temp file");
  62.         if (f) {
  63.                 x=y=-1;
  64.                 TEST(i, fscanf(f, "%10[^]]%n%10[].]%n", a, &x, b, &y), 2, "%d != %d");
  65.                 TEST_S(a, "[abc123", "wrong result for %[^]]");
  66.                 TEST_S(b, "]....", "wrong result for %[].]");
  67.                 TEST(i, x, 7, "%d != %d");
  68.                 TEST(i, y, 12, "%d != %d");
  69.                 TEST(i, ftell(f), 12, "%d != %d");
  70.                 TEST(i, feof(f), 0, "%d != %d");
  71.                 TEST(i, fgetc(f), 'x', "%d != %d");
  72.                 fclose(f);
  73.         }
  74.  
  75.         TEST(i, !!(f=writetemp("0x1.0p12")), 1, "failed to make temp file");
  76.         if (f) {
  77.                 x=y=-1;
  78.                 u=-1;
  79.                 TEST(i, fscanf(f, "%lf%n %d", &u, &x, &y), 1, "%d != %d");
  80.                 TEST(u, u, 0.0, "%g != %g");
  81.                 TEST(i, x, 1, "%d != %d");
  82.                 TEST(i, y, -1, "%d != %d");
  83.                 TEST(i, ftell(f), 1, "%d != %d");
  84.                 TEST(i, feof(f), 0, "%d != %d");
  85.                 TEST(i, fgetc(f), 'x', "%d != %d");
  86.                 rewind(f);
  87.                 TEST(i, fgetc(f), '0', "%d != %d");
  88.                 TEST(i, fgetc(f), 'x', "%d != %d");
  89.                 TEST(i, fscanf(f, "%lf%n%c %d", &u, &x, a, &y), 3, "%d != %d");
  90.                 TEST(u, u, 1.0, "%g != %g");
  91.                 TEST(i, x, 3, "%d != %d");
  92.                 TEST(i, a[0], 'p', "%d != %d");
  93.                 TEST(i, y, 12, "%d != %d");
  94.                 TEST(i, ftell(f), 8, "%d != %d");
  95.                 TEST(i, !!feof(f), 1, "%d != %d");
  96.                 fclose(f);
  97.         }
  98.  
  99.         TEST(i, !!(f=writetemp("1.0       012")), 1, "failed to make temp file");
  100.         if (f) {
  101.                 x=y=-1;
  102.                 u=-1;
  103.                 TEST(i, fscanf(f, "%lf%n %i", &u, &x, &y), 2, "%d != %d");
  104.                 TEST(u, u, 1.0, "%g != %g");
  105.                 TEST(i, x, 3, "%d != %d");
  106.                 TEST(i, y, 10, "%d != %d");
  107.                 TEST(i, ftell(f), 13, "%d != %d");
  108.                 TEST(i, !!feof(f), 1, "%d != %d");
  109.                 fclose(f);
  110.         }
  111.  
  112.         TEST(i, !!(f=writetemp("0xx")), 1, "failed to make temp file");
  113.         if (f) {
  114.                 x=y=-1;
  115.                 TEST(i, fscanf(f, "%x%n", &x, &y), 0, "%d != %d");
  116.                 TEST(i, x, -1, "%d != %d");
  117.                 TEST(i, y, -1, "%d != %d");
  118.                 TEST(i, ftell(f), 2, "%d != %d");
  119.                 TEST(i, feof(f), 0, "%d != %d");
  120.                 fclose(f);
  121.         }
  122.  
  123.         printf("%s finished\n", __FILE__);
  124.         return t_status;
  125. }
  126.