test1.cpp
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C++ 代码 · 共 755 行 · 第 1/2 页
CPP
755 行
for (i=0; i<l; i++){
Assert(ib[i] == (a[i] <= 2.0));
}
ib = (2.0 <= a);
Assert(ib.Length() == l);
for (i=0; i<l; i++){
Assert(ib[i] == (2.0 <= 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.0);
Assert(ib.Length() == l);
for (i=0; i<l; i++){
Assert(ib[i] == (a[i] >= 2.0));
}
ib = (2.0 >= a);
Assert(ib.Length() == l);
for (i=0; i<l; i++){
Assert(ib[i] == (2.0 >= 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
{
double sum = 0.0;
for (i=0; i<l; i++)
sum += data[i];
Assert(a.Sum() == sum);
}
// Transcendentals
{
double __max = max(a);
Assert( __max > 4.9 && __max < 5.1 );
field aa = a/max(a);
field b, c;
ifield ib;
int j;
double cc;
b = acos(aa);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == acos(aa[i]));
b = asin(aa);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(asin(aa[i])));
b = atan(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(atan(a[i])));
aa = a+1.0;
b = atan2(a, aa);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(atan2(a[i], aa[i])));
b = atan2(a, 3.);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(atan2(a[i], 3.)));
b = atan2(3., a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(atan2(3.0, a[i])));
b = ceil(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == ceil(a[i]));
b = cos(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(cos(a[i])));
b = cosh(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == cosh(a[i]));
b = exp(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == exp(a[i]));
b = fabs(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == fabs(a[i]));
b = floor(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == floor(a[i]));
b = frexp(a, ib);
Assert(b.Length() == l);
Assert(ib.Length() == l);
for (i=0; i<l; i++){
Assert(b[i] == frexp(a[i], &j));
Assert(ib[i] == j);
}
b = fmod(a, 3.0);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == fmod(a[i], 3.0));
b = fmod(3.0, a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == fmod(3.0, a[i]));
b = ldexp(a, ib);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == ldexp(a[i], ib[i]));
b = log(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(log(a[i])));
b = log10(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(log10(a[i])));
b = modf(a, c);
Assert(b.Length() == l);
Assert(c.Length() == l);
for (i=0; i<l; i++){
Assert(b[i] == modf(a[i], &cc));
Assert(c[i] == cc);
}
b = pow(a, 2.5);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == pow(a[i], 2.5));
b = pow(2.5, a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == pow(2.5, a[i]));
b = pow(a, aa);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == pow(a[i], aa[i]));
b = sin(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(sin(a[i])));
b = sinh(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == sinh(a[i]));
b = sqrt(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == sqrt(a[i]));
b = tan(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == force_double(tan(a[i])));
b = tanh(a);
Assert(b.Length() == l);
for (i=0; i<l; i++)
Assert(b[i] == tanh(a[i]));
}
}
// FORTRAN-like functions
{
static const double data1[] = {2., 1., 3., 4.};
static const double data2[] = {3., 4., 2., 1.};
static const size_t l = 4;
const field a(l, data1), b(l, data2);
field 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.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.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.0));
c = min(a, 2.);
Assert(c.Length() == l);
for (i=0; i<l; i++)
Assert(c[i] == (a[i] < 2.? a[i] : 2.0));
c = min(2., a);
Assert(c.Length() == l);
for (i=0; i<l; i++)
Assert(c[i] == (a[i] < 2.? a[i] : 2.0));
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.0));
c = max(2., a);
Assert(c.Length() == l);
for (i=0; i<l; i++)
Assert(c[i] == (a[i] > 2.? a[i] : 2.0));
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.0);
Assert(max(b) == 4.0);
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.0);
c = sign(a, b);
Assert(c.Length() == l);
for (i=0; i<l; i++)
Assert(c[i] == a[i]);
}
// Shifts
{
static const double data[] = {1., 2., 3., 4.};
field 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 double data_a[] = {1., 2., 3., 4.};
static const double 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 field ca(4, data_a);
const field cb(4, data_b);
const ifield ia(4, data_ia);
const ifield ib(4, data_ib);
field 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.0, ia);
for (i=0; i<4; i++)
Assert(a[ia[i]] == ca[ia[i]] + 1.0);
// 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.0, ia);
for (i=0; i<4; i++)
Assert(a[ia[i]] == 1.0);
// 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
{
field a(27, 2.);
a.Free();
Assert(a.Length() == 0);
}
cout << "*****Test completed successfully*****\n";
fclose(tmp);
return(0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?