test2.cpp

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C++ 代码 · 共 936 行 · 第 1/2 页

CPP
936
字号


      c = a - b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == a[i] - b[i]);

      c = a;
      c -= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == a[i] - b[i]);


      c = a ^ b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] ^ b[i]));

      c = a;
      c ^= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] ^ b[i]));


      c = a | b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] | b[i]));

      c = a;
      c |= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] | b[i]));


      c = a & b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] & b[i]));

      c = a;
      c &= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] & b[i]));


      c = a << b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == a[i] << b[i]);

      c = a;
      c <<= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == a[i] << b[i]);


      c = a >> b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == a[i] >> b[i]);

      c = a;
      c >>= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == a[i] >> b[i]);


      c = a == b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] == b[i]));


      c = a != b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] != b[i]));


      c = a < b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] < b[i]));


      c = a > b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] > b[i]));


      c = a <= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] <= b[i]));


      c = a >= b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] >= b[i]));


      c = a || b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] || b[i]));


      c = a && b;
      Assert(c.Length() == l);
      for (i=0; i<l; i++)
        Assert(c[i] == (a[i] && b[i]));
    }

// Operators returning field
    {
      ifield b = a;
      ifield c = 2*a;
      ifield ib, ic;


      ib = (a == 2);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] == 2));
      }

      ib = (2 == a);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (2 == a[i]));
      }

      ib = (a == b);
      ic = (a == c);
      Assert(ib.Length() == l);
      Assert(ic.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] == b[i]));
        Assert(ic[i] == (a[i] == c[i]));
      }


      ib = (a != 2);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] != 2));
      }

      ib = (2 != a);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (2 != a[i]));
      }

      ib = (a != b);
      ic = (a != c);
      Assert(ib.Length() == l);
      Assert(ic.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] != b[i]));
        Assert(ic[i] == (a[i] != c[i]));
      }


      ib = (a < 2);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] < 2));
      }

      ib = (2 < a);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (2 < a[i]));
      }

      ib = (a < b);
      ic = (a < c);
      Assert(ib.Length() == l);
      Assert(ic.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] < b[i]));
        Assert(ic[i] == (a[i] < c[i]));
      }


      ib = (a > 2);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] > 2));
      }

      ib = (2 > a);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (2 > a[i]));
      }

      ib = (a > b);
      ic = (a > c);
      Assert(ib.Length() == l);
      Assert(ic.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] > b[i]));
        Assert(ic[i] == (a[i] > c[i]));
      }


      ib = (a <= 2);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] <= 2));
      }

      ib = (2 <= a);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (2 <= a[i]));
      }

      ib = (a <= b);
      ic = (a <= c);
      Assert(ib.Length() == l);
      Assert(ic.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] <= b[i]));
        Assert(ic[i] == (a[i] <= c[i]));
      }


      ib = (a >= 2);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] >= 2));
      }

      ib = (2 >= a);
      Assert(ib.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (2 >= a[i]));
      }

      ib = (a >= b);
      ic = (a >= c);
      Assert(ib.Length() == l);
      Assert(ic.Length() == l);
      for (i=0; i<l; i++){
        Assert(ib[i] == (a[i] >= b[i]));
        Assert(ic[i] == (a[i] >= c[i]));
      }
    }

// Sum
    {
      int sum = 0;
      for (i=0; i<l; i++)
        sum += data[i];
      Assert(a.Sum() == sum);
    }

// Transcendentals
    {
      ifield b, c, d;
      field ib;

      b = abs(a);
      Assert(b.Length() == l);
      for (i=0; i<l; i++)
        Assert(b[i] == (a[i]>0? a[i] : -a[i]));

      b = a + 1;
      div(a, b, c, d);
      Assert(c.Length() == l);
      Assert(d.Length() == l);
      for (i=0; i<l; i++){
        Assert(c[i] == a[i]/b[i]);
        Assert(d[i] == a[i]%b[i]);
      }

      a.rand();
      for (i=1; i<l; i++){
        Assert(a[i] != a[i-1]);
      }
    }
  }

// FORTRAN-like functions
  {
    static const int data1[] = {2, 1, 3, 4};
    static const int data2[] = {3, 4, 2, 1};
    static const size_t l = 4;
    const ifield a(l, data1), b(l, data2);
    ifield c;


    c = dim(a, 2);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] > 2? a[i] - 2 : 0));

    c = dim(2, a);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] < 2? 2 - a[i] : 0));

    c = dim(a, b);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] > b[i]? a[i] - b[i] : 0));


    c = min(a, 2);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] < 2? a[i] : 2));

    c = min(2, a);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] < 2? a[i] : 2));

    c = min(a, b);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] < b[i]? a[i] : b[i]));


    c = max(a, 2);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] > 2? a[i] : 2));

    c = max(2, a);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] > 2? a[i] : 2));

    c = max(a, b);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == (a[i] > b[i]? a[i] : b[i]));

    Assert(min(a) == 1);
    Assert(max(b) == 4);


    c = sign(a, 2);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == a[i]);

    c = sign(2, a);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == 2);

    c = sign(a, b);
    Assert(c.Length() == l);
    for (i=0; i<l; i++)
      Assert(c[i] == a[i]);
  }

// Shifts
  {
    static const int data[] = {1, 2, 3, 4};
    ifield a(4, data), b, c;

    b = a.Shift(-2);
    Assert(b.Length() == 4);
    for (i=0; i<2; i++)
      Assert(b[i] = a[i+2]);

    b = a.Shift(1);
    Assert(b.Length() == 4);
    for (i=1; i<4; i++)
      Assert(b[i] = a[i-1]);
  }

// Assembly, Scatter, Gather
  {
     static const int data_a[] = {1, 2, 3, 4};
     static const int data_b[] = {4, 3, 2, 1};
     static const int data_ia[] = {0, 2, 1, 3};
     static const int data_ib[] = {0, 1, 3, 2};
     const ifield ca(4, data_a);
     const ifield cb(4, data_b);
     const ifield ia(4, data_ia);
     const ifield ib(4, data_ib);
     ifield a, b;

// Assembly, first form
     a = ca;
     a.Assemble(cb, ia, ib);
     for (i=0; i<4; i++)
       Assert(a[ia[i]] == ca[ia[i]] + cb[ib[i]]);

// Assembly, second form
     a = ca;
     a.Assemble(cb, ia);
     for (i=0; i<4; i++)
       Assert(a[ia[i]] == ca[ia[i]] + cb[i]);

// Assembly, third form
     a = ca;
     a.Assemble(1, ia);
     for (i=0; i<4; i++)
       Assert(a[ia[i]] == ca[ia[i]] + 1);


// Scatter, first form
     a = ca;
     a.Scatter(cb, ia, ib);
     for (i=0; i<4; i++)
       Assert(a[ia[i]] == cb[ib[i]]);

// Scatter, second form
     a = ca;
     a.Scatter(cb, ia);
     for (i=0; i<4; i++)
       Assert(a[ia[i]] == cb[i]);

// Scatter, third form
     a = ca;
     a.Scatter(1, ia);
     for (i=0; i<4; i++)
       Assert(a[ia[i]] == 1);

// Gather, first form
    a = ca.Gather(ib);
    Assert(a.Length() == 4);
    for (i=0; i<4; i++)
      Assert(a[i] == ca[ib[i]]);

// Scatter, fourth form
    a = ca;
    a.Scatter(cb, 0, 3, 2);
    for (i=0; i<2; i++)
      Assert(a[i<<1] == cb[i]);

// Gather, second form
    a = ca.Gather(0, 3, 2);
    Assert(a.Length() == 2);
    for (i=0; i<2; i++)
      Assert(a[i] == ca[i<<1]);
  }   

// test the Free function
  {
    ifield a(27, 2);
    a.Free();
    Assert(a.Length() == 0);
  }

  cout << "*****Test completed successfully*****\n";
  fclose(tmp);
  exit(0);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?