testcase_matrix.cpp

来自「c++ 实现的矩阵运算库」· C++ 代码 · 共 1,295 行 · 第 1/3 页

CPP
1,295
字号
#include <time.h>
#include <cmath>
#include <complex>
#include <iostream>
#include "TestCase_Matrix.h"

using namespace Zenautics;
using namespace std;


void testCplx( const stComplex& cplx );

TestCase_Matrix::TestCase_Matrix()
{  
}

TestCase_Matrix::~TestCase_Matrix()
{
}

TestCase_Matrix::TestCase_Matrix( const TestCase_Matrix& src )
{
  // no use required
}

void TestCase_Matrix::operator =( const TestCase_Matrix& rhs )
{
  //no use required
}
void TestCase_Matrix::setUp()
{
}

void TestCase_Matrix::tearDown()
{
}

void TestCase_Matrix::Test_Constructors()
{
  Matrix A;
  CPPUNIT_ASSERT( A.GetNrRows() == 0 );
  CPPUNIT_ASSERT( A.GetNrCols() == 0 );  
  CPPUNIT_ASSERT( A.isEmpty() == true );    
  CPPUNIT_ASSERT( A.isReal() );

  Matrix B(5);
  CPPUNIT_ASSERT( B.GetNrRows() == 5 );
  CPPUNIT_ASSERT( B.GetNrCols() == 1 );  
  CPPUNIT_ASSERT( B.isEmpty() == false );    
  CPPUNIT_ASSERT( B.isReal() );

  Matrix C(5,5);
  CPPUNIT_ASSERT( C.GetNrRows() == 5 );
  CPPUNIT_ASSERT( C.GetNrCols() == 5 );  
  CPPUNIT_ASSERT( C.isEmpty() == false );    
  CPPUNIT_ASSERT( C.Identity() );
  CPPUNIT_ASSERT( C.isReal() );

  Matrix D(C);
  CPPUNIT_ASSERT( D.GetNrRows() == 5 );
  CPPUNIT_ASSERT( D.GetNrCols() == 5 );  
  CPPUNIT_ASSERT( D.isEmpty() == false );    
  CPPUNIT_ASSERT( D.isReal() );
  double d = D(0,0).real();
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 1.0, 1.0e-06 );
  d = D(4,4).real();
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 1.0, 1.0e-06 );
  d = D(1,4).real();
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 0.0, 1.0e-06 );

  d = D[0][0];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 1.0, 1.0e-06 );
  d = D[4][4];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 1.0, 1.0e-06 );
  d = D[1][4];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 0.0, 1.0e-06 );

  D[0][0] = 100.0;
  d = D[0][0];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 100.0, 1.0e-06 );

  std::complex<double> cplx(10.0,20.0);
  D(0,0) = cplx;
  CPPUNIT_ASSERT( !D.isReal() );
  d = D[0][0];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 10.0, 1.0e-06 );
  d = D(0,0).real();
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 10.0, 1.0e-06 );
  d = D(0,0).imag();
  CPPUNIT_ASSERT_DOUBLES_EQUAL( d, 20.0, 1.0e-06 );
}


void TestCase_Matrix::Test_Operators()
{
  bool result;
  Matrix A;
  
  // operator= from a double value.
  A = 10.0;
  CPPUNIT_ASSERT( A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 1 );
  CPPUNIT_ASSERT( A.nrows() == 1 );
  CPPUNIT_ASSERT( A.ncols() == 1 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0).real(), 10.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).real(), 10.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 10.0, 1e-06 );

  // operator= from a real matrix.
  Matrix B(3,1);
  B(0) = 1.0;
  B(1) = 2.0;
  B(2) = 3.0;
  A = B;
  CPPUNIT_ASSERT( A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 3 );
  CPPUNIT_ASSERT( A.nrows() == 3 );
  CPPUNIT_ASSERT( A.ncols() == 1 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0).real(), 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).real(), 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1).real(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).real(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2).real(), 3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,0).real(), 3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][0], 3.0, 1e-06 );

  // operator= from a complex matrix.
  Matrix C(3,1,false);
  std::complex<double> c1(1.0,2.0);
  C(0) = c1;
  C(1) = c1*2.0;
  C(2) = c1*-1.0;
  A = C;
  CPPUNIT_ASSERT( !A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 3 );
  CPPUNIT_ASSERT( A.nrows() == 3 );
  CPPUNIT_ASSERT( A.ncols() == 1 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0).real(), 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0).imag(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).real(), 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).imag(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1).real(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1).imag(), 4.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).real(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).imag(), 4.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2).real(), -1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2).imag(), -2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,0).real(), -1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,0).imag(), -2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][0], -1.0, 1e-06 );

  // operator= from a string matrix.
  A = "1 2 3 4 -5"; // real matrix
  CPPUNIT_ASSERT( A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 5 );
  CPPUNIT_ASSERT( A.nrows() == 1 );
  CPPUNIT_ASSERT( A.ncols() == 5 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][1], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][2], 3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][3], 4.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][4], -5.0, 1e-06 );  
  A = "[1+1i 2+2j -3-3i; 4 5 6]"; // complex string matrix
  CPPUNIT_ASSERT( !A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 6 );
  CPPUNIT_ASSERT( A.nrows() == 2 );
  CPPUNIT_ASSERT( A.ncols() == 3 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).real(), 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).imag(), 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,1).real(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,1).imag(), 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,2).real(), -3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,2).imag(), -3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).real(), 4.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).imag(), 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,1).real(), 5.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,1).imag(), 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,2).real(), 6.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,2).imag(), 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][1], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][2], -3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 4.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][1], 5.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][2], 6.0, 1e-06 );

  // operator= on a element basis
  A.Clear();
  A.Resize(2,2); // A is zeros(2,2)
  A(0,0) = 1.0;
  A(0,1) = 2.0;
  A(1,0) = 3.0;
  A(1,1) = 4.0;
  CPPUNIT_ASSERT( A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 4 );
  CPPUNIT_ASSERT( A.nrows() == 2 );
  CPPUNIT_ASSERT( A.ncols() == 2 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][1], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][1], 4.0, 1e-06 );
  std::complex<double> c2(-1.0,-2.0);
  A(1,1) = c2;
  CPPUNIT_ASSERT( !A.isReal() );
  CPPUNIT_ASSERT( A.GetNrElems() == 4 );
  CPPUNIT_ASSERT( A.nrows() == 2 );
  CPPUNIT_ASSERT( A.ncols() == 2 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][1], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,1).real(), -1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,1).imag(), -2.0, 1e-06 );
  A(0,1) = A(1,1);
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,1).real(), -1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,1).imag(), -2.0, 1e-06 );

  // operator= on a real only access basis as a matrix
  Matrix X(2,2);
  X[0][0] = 1.0;
  X[0][1] = 2.0;
  X[1][0] = 3.0;
  X[1][1] = 4.0;
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][1], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[1][0], 3.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[1][1], 4.0, 1e-06 );
  X[0][0] = X(1).real(); // mixing the operators X(1) == 3
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][0], 3.0, 1e-06 );
  X[0][0] = X(0,1).real(); // mixing the operators X(0,1) == 2
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][0], 2.0, 1e-06 );

  // operator= on a real only access basis as a vector
  result = X.Resize(4,1);
  CPPUNIT_ASSERT( result );

  X(0) = 10.0;
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][0], 10.0, 1e-06 );
  double x = X[0];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( x, 10.0, 1e-06 );
  X[0] = 20.0;
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][0], 20.0, 1e-06 );
  X(1) = 30;
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[1][0], 30.0, 1e-06 );
  X[0] = X[1];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X[0][0], 30.0, 1e-06 );
  X(1) = X[0]*4.0;
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X(1).real(), 120.0, 1e-06 );
  X(2) = X[0];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( X(2).real(), 30.0, 1e-06 );


  Matrix V(10);
  V.Fill(1.0);
  V[0] += 5.0;
  V[1] -= 5.0;
  V[2] *= 5.0;
  V[3] /= 5.0;
  V[4] += V[0];
  CPPUNIT_ASSERT_DOUBLES_EQUAL( V[0], 6.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( V[1], -4.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( V[2], 5.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( V[3], 1.0/5.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( V[4], 7.0, 1e-06 );

  V.Redim(11);
  CPPUNIT_ASSERT( V.nrows() == 11 );
  V.Resize(11);
  CPPUNIT_ASSERT( V.nrows() == 11 );


  Matrix Y;
  result = Y.ReadFromFile( "TestMatrixA_WithCommentLine.txt" );
  CPPUNIT_ASSERT( result );
  std::string comment = Y.GetMatrixComment();
  CPPUNIT_ASSERT( comment == "column1,column2\n" );

  Y = "[1.123 2.123; 3.123 4.123]";
  char buffer[256];
  result = Y.PrintRowToString( 1, buffer, 256, 8, 6 );
  cout << endl;
  cout << buffer << endl;
  // results in 

  Y = "[1.123 2.123; 3.123 4.123]";  // Set A using string notation.
  result = Y.PrintDelimitedToBuffer( buffer, 256, 6, ',' ); // Print to a buffer using comma delimiters.
  cout << buffer << endl;
  // results in:
  // 1.123,2.123
  // 3.123,4.123

  Y = "[1.123 2.123 -1; 3.123 4.123 -1]";  // Set A using string notation.
  result = Y.PrintFixedWidthToBuffer( buffer, 256, 10, 6); 
  cout << buffer << endl;
  // results in:
  // 0123456789012345678901234567890
  //  1.123     2.123    -1
  //  3.123     4.123    -1

  Y = "[1.123 0 2.123 -1; 3.123 0 4.123 -1]";  // Set A using string notation.
  result = Y.PrintToBuffer( buffer, 256, 6); 
  cout << buffer << endl;
  // results in:
  // 0123456789012345678901234567890
  //  1.123  0  2.123 -1
  //  3.123  0  4.123 -1

  cout << "test" << endl;
}


void TestCase_Matrix::Test_PrintStdout()
{
  Matrix A;
  bool result;

  A = "[ 1 2 3; 4 5 6; 7 8 9]";

  result = A.PrintStdout(3);
  CPPUNIT_ASSERT( result );

  A = "[ 1-1i 2+2i 3; 4 5 6; 7 8 9]";

  result = A.PrintStdout(3);
  CPPUNIT_ASSERT( result );

  A = "[1.123 0 2.123 -1; 3.123 0 4.123 -1]";  // Set A using string notation.

  result = A.PrintStdout(7);
  CPPUNIT_ASSERT( result );
}

void TestCase_Matrix::Test_SetFromMatrixString()
{
  Matrix A;
  bool result;

  result = A.SetFromMatrixString("[ 1 2 3; 4 5 6; 7 8 9]");
  CPPUNIT_ASSERT( result );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 1.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][1], 2.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][2], 3.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 4.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][1], 5.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][2], 6.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][0], 7.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][1], 8.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][2], 9.0, 1e-05 );


  result = A.SetFromMatrixString("[1-1i 2+2i 3; 4 5 6; 7 8 9]");
  CPPUNIT_ASSERT( result );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).real(), 1.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,0).imag(), -1.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,1).real(), 2.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,1).imag(), 2.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,2).real(), 3.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(0,2).imag(), 0.0, 1e-05 );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).real(), 4.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,0).imag(), 0.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,1).real(), 5.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,1).imag(), 0.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,2).real(), 6.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(1,2).imag(), 0.0, 1e-05 );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,0).real(), 7.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,0).imag(), 0.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,1).real(), 8.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,1).imag(), 0.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,2).real(), 9.0, 1e-05 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A(2,2).imag(), 0.0, 1e-05 );
}

void TestCase_Matrix::Test_CopyColumn()
{
  cout << "\nTestCase_Matrix::Test_CopyColumn" << endl;
  Matrix A;
  A = "[1 -1; 2 -2; 3 -3]";
  Matrix B;
  bool result;
  result = A.PrintStdout();   // print Matrix A.
  CPPUNIT_ASSERT(result);
  result = A.CopyColumn(0,B); // copy the first column of A into B.
  CPPUNIT_ASSERT(result);
  result = B.PrintStdout();   // print Matrix B. B = [1;2;3];
  CPPUNIT_ASSERT(result);
  CPPUNIT_ASSERT_DOUBLES_EQUAL( B[0], 1.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( B[1], 2.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( B[2], 3.0, 1e-06 );
}

void TestCase_Matrix::Test_InsertSubMatrix()
{
  cout << "\nTestCase_Matrix::Test_InsertSubMatrix" << endl;
  Matrix A(4,4); // A 4x4 matrix of zeros.
  Matrix B(2,2);
  B.Fill(7.0);
  bool result;
  result = A.PrintStdout();   // Print Matrix A.
  CPPUNIT_ASSERT(result);  
  result = A.InsertSubMatrix(B,1,1); // Put B in the middle of A.
  CPPUNIT_ASSERT(result);  
  result = A.PrintStdout();   // print Matrix A. A = [0 0 0 0; 0 7 7 0; 0 7 7 0; 0 0 0 0].
  CPPUNIT_ASSERT(result);
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][0], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][1], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][2], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[0][3], 0.0, 1e-06 );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][0], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][1], 7.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][2], 7.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[1][3], 0.0, 1e-06 );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][0], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][1], 7.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][2], 7.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[2][3], 0.0, 1e-06 );

  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[3][0], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[3][1], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[3][2], 0.0, 1e-06 );
  CPPUNIT_ASSERT_DOUBLES_EQUAL( A[3][3], 0.0, 1e-06 );
}

void TestCase_Matrix::Test_Zero()

⌨️ 快捷键说明

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