⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utests.cpp

📁 C++ Math Lib. C++ Builder must use.
💻 CPP
📖 第 1 页 / 共 2 页
字号:

  RandArr(a2,-1.0,1.0);
  b1 = a1*a2;
  b2 = MxM(a1,a2);
  if (! Equal(b1, b2) ) { fail = true;  s += " FArr2D * FArr2D |"; };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString ObjTest()
{
  AnsiString s = "", ss = "Obj Test";
  bool fail = false;
  int i1, i2, n = 3;

  FArr2D a1(n,n);
  FArr1D v1(n);
  RandArr(a1,-1.0,1.0);
  RandArr(v1,-1.0,1.0);

  container c(n);

  c.v = v1;
  if (! Equal(c.v, v1) ) { fail = true;  s += " FArr1D |"; };
  c.m = a1;
  if (! Equal(c.m, a1) ) { fail = true;  s += " FArr2D |"; };

  container* pc = new container(n);
  pc->v(1) = 2.0;
  pc->m = a1;
  delete pc;

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString ObjTest2()
{
  AnsiString s = "", ss = "Obj Test 2";
  bool fail = false;
  int i1 = 2, n = 3;
  double x1, x2;
  FArr1D v1(n);

  x1 = 1.0/3.0;
  v1(i1) = x1;
  x2 = GetValue(v1, i1);
  if (! Equal(x1, x2) ) { fail = true;  s += " GetValue |"; };

  v1(i1) = 0.0;
  SetValue(v1, i1, x1);
  if (! Equal(x1, v1(i1) ) ) { fail = true;  s += " SetValue |"; };

  x2 = GetValue(v1, i1);
  if (! Equal(x1, x2) ) { fail = true;  s += " Set/Get Value |"; };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString MiscTests()
{
  FArr2D a2, a3;
  AnsiString s = "", ss = "MiscTests";
  bool fail = false;
  int m = 2, n = 3;

  FArr2D a1(n,m);
  RandArr(a1,-1.0,1.0);
  a2 = MT(a1);
  a3 = MT(a2);

  if (! Equal(a3, a1) ) { fail = true;  s += " ( a^T )^T |"; };

  double y;
  y = sign( 2.2, 3.3);
  if (! Equal( 2.2, y) ) { fail = true;  s += " sign(2.2,3.3) |"; };
  y = sign(-2.2, 3.3);
  if (! Equal( 2.2, y) ) { fail = true;  s += " sign(-2.2,3.3) |"; };
  y = sign( 2.2,-3.3);
  if (! Equal(-2.2, y) ) { fail = true;  s += " sign(2.2,-3.3) |"; };
  y = sign(-2.2,-3.3);
  if (! Equal(-2.2, y) ) { fail = true;  s += " sign(-2.2,-3.3) |"; };

  y = max1(-2.2,3.3);
  if (! Equal(3.3, y) ) { fail = true;  s += " max1(-2.2,3.3) |"; };
  y = min1(-2.2,3.3);
  if (! Equal(-2.2, y) ) { fail = true;  s += " min1(-2.2,3.3) |"; };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString IArr1DTest()
{
  AnsiString s = "", ss = "IArr1D Test";
  bool fail = false;
  int n = 5;

  IArr1D a1(n);
  IArr1D a2(n);
//  IArr1D arr1(n);
//  IArr1D arr2(n);

  RandArr(a1,-9,9);
  a1(2) = 11;
  a2 = a1;
  if ( ! Equal(a1, a2) ) { fail = true;   s += " Assignment |"; };

  a1.swap1(2,4);
  int temp = a2(2);
  a2(2) = a2(4);
  a2(4) = temp;
  if ( ! Equal(a1, a2) ) { fail = true;   s += " Swap |"; };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString LinAlgTest()
{
  AnsiString s = "", ss = "LinAlg Test";
  bool fail = false;
  int n = 5;

  FArr1D a(n);
  FArr1D b(n);
  FArr1D c(n);
  FArr1D d(n);
  FArr1D e(n);

  a.fill(-1.0);
  b.fill(-2.0);
  d.fill(4.0);
  for(int i =1; i<=n;i++) e(i) = double(i);
  for(int i =1; i<=n;i++) c(i) = double(i+1);  c(5) = 12.0;
  strid(b, d, a, c);
  if ( ! Equal(c, e) ) { fail = true;   s += " strid |"; };

  FArr2D m(n,n+1);
  for(int i =1; i<=n;i++) { m(i,i) = 4.0; m(i,n+1) = double(i+1); };
  m(5,6) = 12.0;
  for(int i =1; i< n;i++) {m(i,i+1) = -1.0;  m(i+1,i) = -2.0;};
  fail = !GaussD(m);
  if (fail) s += " GaussD - singular |"; ;
  for(int i =1; i<=n;i++) c(i) = m(i,n+1);
  if ( ! Equal(c, e) ) { fail = true;   s += " GaussD |"; };

  // *** JacobiIter test
  FArr2D q(n,n);
  int err;
  double x = 0.1;
  for(int i =1; i<=n;i++)
    { q(i,i) = 4.0; b(i) = double(i+1); c(i) = e(i) + x; x = -x; };
  b(5) = 12.0;
  for(int i =1; i< n;i++) {q(i,i+1) = -1.0;  q(i+1,i) = -2.0;};
//  fail = !JacobiIter(q, c, b, d, 1.0e-6);
  fail = !JacobiIter(q, c, b, 1.0e-6);
  if (fail) s += " JacobiIter diverged |";
  if ( ! Equal(c, e, 1.0e-6) ) { fail = true;   s += " JacobiIter |"; };

  for(int i =1; i<=n;i++) { m(i,i) = 4.0; m(i,n+1) = double(i+1); };
  m(5,6) = 12.0;
  for(int i =1; i< n;i++) {m(i,i+1) = -1.0;  m(i+1,i) = -2.0;};
  fail = !GaussP(m);
  if (fail) s += " GaussP - singular |"; 
  for(int i =1; i<=n;i++) c(i) = m(i,n+1);
  if ( ! Equal(c, e) ) { fail = true;   s += " GaussP |"; };

  FArr1D r(n);
  x = 0.1;
  for(int i =1; i<=n;i++)
    { q(i,i) = 4.0; b(i) = double(i+1); c(i) = e(i) + x; x = -x; };
  b(5) = 12.0;
  c.fill(0.0);
  for(int i =1; i< n;i++) {q(i,i+1) = -1.0;  q(i+1,i) = -2.0;};
//  fail = !ConjGrad(q, b, c, a, d, r, 1.0e-8);
  fail = !ConjGrad(q, b, c, 1.0e-8);
  if (fail) {s += " ConjGrad: Iter > IterMax |"; };
  
  if ( ! Equal(c, e,1.1e-4) ) { fail = true;   s += " ConjGrad |"; };
  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString DiffTests()
{
  AnsiString s = "", ss = "Diff Tests";
  bool fail = false;
  int n = 5;

  FArr1D f(n);
  FArr1D f1(n);
  FArr1D f2(n);
  FArr1D f3(n);
  FArr1D f4(n);

  FArr1D g1(n);
  FArr1D g2(n);
  FArr1D g3(n);
  FArr1D g4(n);
  double x = -2.0;
  for (int i=1; i<=n;i++)
  {
    f(i)  = 1.0 + x + x*x + x*x*x + x*x*x*x;
    f1(i) =     1.0+2.0*x+3.0*x*x+4.0*x*x*x;
    f2(i) =           2.0 + 6.0*x +12.0*x*x;
    f3(i) =                   6.0  + 24.0*x;
    f4(i) =                            24.0;
    x+= 1.0;
  };
// -2
    g1(1) = (-25.0*f(1) +48.0*f(2) -36.0*f(3) +16.0*f(4)- 3.0*f(5))/12.0;
    g2(1) = (+35.0*f(1)-104.0*f(2)+114.0*f(3) -56.0*f(4)+11.0*f(5))/12.0;
    g3(1) = ( -5.0*f(1) +18.0*f(2) -24.0*f(3) +14.0*f(4) -3.0*f(5))/2.0;
    g4(1) = (  1.0*f(1) - 4.0*f(2) + 6.0*f(3) - 4.0*f(4)+ 1.0*f(5));
// -1
    g1(2) = ( -3.0*f(1) -10.0*f(2) +18.0*f(3)  -6.0*f(4) +1.0*f(5))/12.0;
    g2(2) = ( 11.0*f(1) -20.0*f(2)  +6.0*f(3) + 4.0*f(4) -1.0*f(5))/12.0;
    g3(2) = ( -3.0*f(1) +10.0*f(2) -12.0*f(3) + 6.0*f(4) -1.0*f(5))/2.0;
    g4(2) = (  1.0*f(1) - 4.0*f(2) + 6.0*f(3) - 4.0*f(4)+ 1.0*f(5));
// 0
    g1(3) = ( +1.0*f(1)  -8.0*f(2) + 0.0*f(3) + 8.0*f(4)- 1.0*f(5))/12.0;
    g2(3) = ( -1.0*f(1) +16.0*f(2) -30.0*f(3) +16.0*f(4)- 1.0*f(5))/12.0;
    g3(3) = ( -1.0*f(1) + 2.0*f(2) + 0.0*f(3) - 2.0*f(4)+ 1.0*f(5))/2.0;
    g4(3) = (  1.0*f(1) - 4.0*f(2) + 6.0*f(3) - 4.0*f(4)+ 1.0*f(5));
// 1
    g1(4) = ( -1.0*f(1)  +6.0*f(2) -18.0*f(3) +10.0*f(4) +3.0*f(5))/12.0;
    g2(4) = ( -1.0*f(1)  +4.0*f(2)  +6.0*f(3) -20.0*f(4)+11.0*f(5))/12.0;
    g3(4) = ( +1.0*f(1) - 6.0*f(2) +12.0*f(3) -10.0*f(4) +3.0*f(5))/2.0;
    g4(4) = (  1.0*f(1) - 4.0*f(2) + 6.0*f(3) - 4.0*f(4)+ 1.0*f(5));
// 2
    g1(5) = ( +3.0*f(1) -16.0*f(2) +36.0*f(3) -48.0*f(4)+25.0*f(5))/12.0;
    g2(5) = (+11.0*f(1) -56.0*f(2)+114.0*f(3)-104.0*f(4)+35.0*f(5))/12.0;
    g3(5) = ( +3.0*f(1) -14.0*f(2) +24.0*f(3) -18.0*f(4) +5.0*f(5))/2.0;
    g4(5) = (  1.0*f(1) - 4.0*f(2) + 6.0*f(3) - 4.0*f(4)+ 1.0*f(5));

  if ( ! Equal(g1, f1) ) { fail = true;   s += " d1 |"; };
  if ( ! Equal(g2, f2) ) { fail = true;   s += " d2 |"; };
  if ( ! Equal(g3, f3) ) { fail = true;   s += " d3 |"; };
  if ( ! Equal(g4, f4) ) { fail = true;   s += " d4 |"; };

  FArr1D p0(-3,3);
  FArr1D p1(-3,3);
  for (int i=-3; i<=3;i++) p0(i) = 1;
  Smooth5(p0,p1);
  if ( ! Equal(p1, p0) ) { fail = true;   s += " n=0 |"; };
  for (int i=-3; i<=3;i++) p0(i) = i;
  Smooth5(p0,p1);
  if ( ! Equal(p1, p0) ) { fail = true;   s += " n=1 |"; };
  for (int i=-3; i<=3;i++) p0(i) = i*i;
  Smooth5(p0,p1);
  if ( ! Equal(p1, p0) ) { fail = true;   s += " n=2 |"; };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString FArr3DTest()
{
  AnsiString s = "", ss = "FArr3D Test";
  bool fail = false;
  double x1, x2;
  int d1 = 5, d2 = 3, d3 = 4;

  FArr3D a3(d1,d2,d3);
  FArr3D a33(d1,d2,d3);

  FArr2D a22(d2,d3);
  FArr2D a2(d2,d3);

  for(int i1=1; i1<=d1; i1++)
  {
    RandArr(a2,-1.0,1.0);
    a3.SetFArr2D(i1,a2);
    a3.GetFArr2D(i1,a22);
    if ( ! Equal(a22, a2) ) { fail = true;   s.cat_sprintf(" Get/Set i= %d", i1); };
  };
  x1 = 1.23456789;
  a3(4,2,3) = x1;
  x2 = a3(4,2,3);
  if ( ! Equal(x1, x2) ) { fail = true;   s.cat_sprintf(" Element"); };

  a33 = a3;
  for(int i1=1; i1<=d1; i1++)
  {
    a33.GetFArr2D(i1,a22);
    a3.GetFArr2D(i1,a2);
    if ( ! Equal(a22, a2) ) { fail = true;   s.cat_sprintf(" Assign i= %d", i1); };
  };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};

AnsiString ComplexTest()
{
  AnsiString s = "", ss = "Complex Test";
  bool fail = false;

  Complex c0;
  Complex c1(2.3);
  Complex c2(3.3,3.2);

  if (! Equal(c0, 0.0, 0.0)) { fail = true; s += " constructor 0 |"; };

  if (! Equal(c1, 2.3, 0.0)) { fail = true; s += " constructor 1 |"; };

  if (! Equal(c2, 3.3, 3.2)) { fail = true; s += " constructor 2 |"; };

  c0 = 2.2;
  if (! Equal(c0, 2.2, 0.0)) { fail = true; s += " real assignment |"; };

  c1.Im = 1.1; c0 = c1;
  if (! Equal(c0, 2.3, 1.1)) { fail = true; s += " complex assignment |"; };

  c0 = c1 = c2;
  if (! Equal(c0, c2) || !Equal(c1, c2))
                                   { fail = true; s += " chain assignment |"; };

  c0 = c2 + 1.1;  c1 = 1.1 + c2;
  if (! Equal(c0, 4.4, 3.2) || !Equal(c1.Re, 4.4, 3.2))
                                       { fail = true; s += "real addition |"; };

  c0 = c2 - 1.1;  c1 = 1.1 - c2;
  if (! Equal(c0, 2.2, 3.2) || !Equal(c1, -2.2, -3.2))
                                    { fail = true; s += "real subtraction |"; };

  c0 = c2*2.0;  c1 = 2.0*c2;
  if (! Equal(c0, 6.6, 6.4) || !Equal(c1, 6.6, 6.4))
                                 { fail = true; s += "real multiplication |"; };
  c0 = c0/2.0;  c1 = mod2(c1)/c1;
  if (! Equal(c0, c2) || !Equal(c1, 6.6, -6.4))
                                       { fail = true; s += "real division |"; };

  if (fail) ss += " FAIL:" + s;
  else ss += " - OK";
  return ss;
};



⌨️ 快捷键说明

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