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