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 + -
显示快捷键?