MINIBLOG

Blog Note Tags Links About
Home Search
Apr 12, 2026
miniyuan

单元测试


任务为对 complexmatrix 类进行单元测试。

构造函数测试

// 测试默认构造函数
TEST(ComplexMatrixTest, DefaultConstructor) {
    ComplexMatrix m;
    EXPECT_EQ(m.nr, 0);
    EXPECT_EQ(m.nc, 0);
    EXPECT_EQ(m.size, 0);
    EXPECT_EQ(m.c, nullptr);
}

// 测试带参数的构造函数(flag_zero=1)
TEST(ComplexMatrixTest, ParameterizedConstructorWithZero) {
    ComplexMatrix m(3, 4, true);
    EXPECT_EQ(m.nr, 3);
    EXPECT_EQ(m.nc, 4);
    EXPECT_EQ(m.size, 12);
    EXPECT_NE(m.c, nullptr);
    
    // 检查是否初始化为0
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 4; ++j) {
            EXPECT_EQ(m(i, j), std::complex<double>(0.0, 0.0));
        }
    }
}

// 测试带参数的构造函数(flag_zero=0)
TEST(ComplexMatrixTest, ParameterizedConstructorWithoutZero) {
    ComplexMatrix m(2, 2, false);
    EXPECT_EQ(m.nr, 2);
    EXPECT_EQ(m.nc, 2);
    EXPECT_EQ(m.size, 4);
    EXPECT_NE(m.c, nullptr);
}

// 测试拷贝构造函数
TEST(ComplexMatrixTest, CopyConstructor) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(1.0, 2.0);
    m1(0, 1) = std::complex<double>(3.0, 4.0);
    m1(1, 0) = std::complex<double>(5.0, 6.0);
    m1(1, 1) = std::complex<double>(7.0, 8.0);
    
    ComplexMatrix m2(m1);
    EXPECT_EQ(m2.nr, 2);
    EXPECT_EQ(m2.nc, 2);
    EXPECT_EQ(m2.size, 4);
    EXPECT_NE(m2.c, nullptr);
    EXPECT_NE(m2.c, m1.c); // 确保深拷贝
    
    // 验证数据复制正确
    EXPECT_EQ(m2(0, 0), m1(0, 0));
    EXPECT_EQ(m2(0, 1), m1(0, 1));
    EXPECT_EQ(m2(1, 0), m1(1, 0));
    EXPECT_EQ(m2(1, 1), m1(1, 1));
    
    // 修改m2不应影响m1
    m2(0, 0) = std::complex<double>(100.0, 200.0);
    EXPECT_EQ(m1(0, 0), std::complex<double>(1.0, 2.0));
}

// 测试移动构造函数
TEST(ComplexMatrixTest, MoveConstructor) {
    ComplexMatrix m1(2, 3);
    m1(0, 0) = std::complex<double>(1.0, 1.0);
    
    std::complex<double>* old_ptr = m1.c;
    ComplexMatrix m2(std::move(m1));
    
    EXPECT_EQ(m2.nr, 2);
    EXPECT_EQ(m2.nc, 3);
    EXPECT_EQ(m2.c, old_ptr);
    EXPECT_EQ(m2(0, 0), std::complex<double>(1.0, 1.0));
    
    // m1应该被置空
    EXPECT_EQ(m1.nr, 0);
    EXPECT_EQ(m1.nc, 0);
    EXPECT_EQ(m1.size, 0);
    EXPECT_EQ(m1.c, nullptr);
}

赋值运算测试

// 测试拷贝赋值运算符
TEST(ComplexMatrixTest, CopyAssignment) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(1.0, 2.0);
    m1(1, 1) = std::complex<double>(3.0, 4.0);
    
    ComplexMatrix m2;
    m2 = m1;
    
    EXPECT_EQ(m2.nr, 2);
    EXPECT_EQ(m2.nc, 2);
    EXPECT_EQ(m2(0, 0), std::complex<double>(1.0, 2.0));
    EXPECT_EQ(m2(1, 1), std::complex<double>(3.0, 4.0));
    EXPECT_NE(m2.c, m1.c);
}

// 测试移动赋值运算符
TEST(ComplexMatrixTest, MoveAssignment) {
    ComplexMatrix m1(3, 3);
    m1(1, 1) = std::complex<double>(5.0, 5.0);
    
    std::complex<double>* old_ptr = m1.c;
    ComplexMatrix m2;
    m2 = std::move(m1);
    
    EXPECT_EQ(m2.nr, 3);
    EXPECT_EQ(m2.nc, 3);
    EXPECT_EQ(m2.c, old_ptr);
    EXPECT_EQ(m1.c, nullptr);
    EXPECT_EQ(m1.nr, 0);
}

元素访问测试

// 测试非const元素访问和修改
TEST(ComplexMatrixTest, ElementAccess) {
    ComplexMatrix m(2, 3);
    
    // 写入数据
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(1, 2) = std::complex<double>(3.0, 4.0);
    
    // 读取验证
    EXPECT_EQ(m(0, 0).real(), 1.0);
    EXPECT_EQ(m(0, 0).imag(), 2.0);
    EXPECT_EQ(m(1, 2).real(), 3.0);
    EXPECT_EQ(m(1, 2).imag(), 4.0);
}

// 测试const元素访问
TEST(ComplexMatrixTest, ConstElementAccess) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    
    const ComplexMatrix& cm = m;
    EXPECT_EQ(cm(0, 0), std::complex<double>(1.0, 2.0));
}

运算符重载测试

// 测试+运算符
TEST(ComplexMatrixTest, MatrixAddition) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(1.0, 1.0);
    m1(0, 1) = std::complex<double>(2.0, 2.0);
    m1(1, 0) = std::complex<double>(3.0, 3.0);
    m1(1, 1) = std::complex<double>(4.0, 4.0);
    
    ComplexMatrix m2(2, 2);
    m2(0, 0) = std::complex<double>(1.0, 0.0);
    m2(0, 1) = std::complex<double>(0.0, 1.0);
    m2(1, 0) = std::complex<double>(1.0, 1.0);
    m2(1, 1) = std::complex<double>(0.0, 0.0);
    
    ComplexMatrix m3 = m1 + m2;
    
    EXPECT_EQ(m3(0, 0), std::complex<double>(2.0, 1.0));
    EXPECT_EQ(m3(0, 1), std::complex<double>(2.0, 3.0));
    EXPECT_EQ(m3(1, 0), std::complex<double>(4.0, 4.0));
    EXPECT_EQ(m3(1, 1), std::complex<double>(4.0, 4.0));
}

// 测试+=运算符
TEST(ComplexMatrixTest, PlusEqualsOperator) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(1.0, 1.0);
    
    ComplexMatrix m2(2, 2);
    m2(0, 0) = std::complex<double>(2.0, 3.0);
    
    m1 += m2;
    
    EXPECT_EQ(m1(0, 0), std::complex<double>(3.0, 4.0));
}

// 测试-运算符
TEST(ComplexMatrixTest, MatrixSubtraction) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(5.0, 5.0);
    m1(0, 1) = std::complex<double>(3.0, 2.0);
    
    ComplexMatrix m2(2, 2);
    m2(0, 0) = std::complex<double>(2.0, 3.0);
    m2(0, 1) = std::complex<double>(1.0, 1.0);
    
    ComplexMatrix m3 = m1 - m2;
    
    EXPECT_EQ(m3(0, 0), std::complex<double>(3.0, 2.0));
    EXPECT_EQ(m3(0, 1), std::complex<double>(2.0, 1.0));
}

// 测试-=运算符
TEST(ComplexMatrixTest, MinusEqualsOperator) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(5.0, 5.0);
    
    ComplexMatrix m2(2, 2);
    m2(0, 0) = std::complex<double>(2.0, 3.0);
    
    m1 -= m2;
    
    EXPECT_EQ(m1(0, 0), std::complex<double>(3.0, 2.0));
}

// 测试*运算符(矩阵乘)
TEST(ComplexMatrixTest, MatrixMultiplication) {
    ComplexMatrix m1(2, 3);
    m1(0, 0) = std::complex<double>(1.0, 0.0);
    m1(0, 1) = std::complex<double>(2.0, 0.0);
    m1(0, 2) = std::complex<double>(3.0, 0.0);
    m1(1, 0) = std::complex<double>(4.0, 0.0);
    m1(1, 1) = std::complex<double>(5.0, 0.0);
    m1(1, 2) = std::complex<double>(6.0, 0.0);
    
    ComplexMatrix m2(3, 2);
    m2(0, 0) = std::complex<double>(7.0, 0.0);
    m2(0, 1) = std::complex<double>(8.0, 0.0);
    m2(1, 0) = std::complex<double>(9.0, 0.0);
    m2(1, 1) = std::complex<double>(10.0, 0.0);
    m2(2, 0) = std::complex<double>(11.0, 0.0);
    m2(2, 1) = std::complex<double>(12.0, 0.0);
    
    ComplexMatrix m3 = m1 * m2;
    
    EXPECT_EQ(m3.nr, 2);
    EXPECT_EQ(m3.nc, 2);
    
    EXPECT_EQ(m3(0, 0), std::complex<double>(58.0, 0.0));
    EXPECT_EQ(m3(0, 1), std::complex<double>(64.0, 0.0));
    EXPECT_EQ(m3(1, 0), std::complex<double>(139.0, 0.0));
    EXPECT_EQ(m3(1, 1), std::complex<double>(154.0, 0.0));
}

// 测试*运算符(复数标量左乘)
TEST(ComplexMatrixTest, ComplexScalarMultiplicationLeft) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(0, 1) = std::complex<double>(3.0, 0.0);
    m(1, 0) = std::complex<double>(0.0, 1.0);
    m(1, 1) = std::complex<double>(2.0, 2.0);
    
    std::complex<double> s(2.0, 1.0);
    ComplexMatrix result = s * m;
    
    // (2+i)*(1+2i) = 2+4i+i+2i^2 = 2+5i-2 = 5i
    EXPECT_NEAR(result(0, 0).real(), 0.0, 1e-10);
    EXPECT_NEAR(result(0, 0).imag(), 5.0, 1e-10);
}

// 测试*运算符(复数标量右乘)
TEST(ComplexMatrixTest, ComplexScalarMultiplicationRight) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    
    std::complex<double> s(2.0, 1.0);
    ComplexMatrix result = m * s;
    
    EXPECT_NEAR(result(0, 0).real(), 0.0, 1e-10);
    EXPECT_NEAR(result(0, 0).imag(), 5.0, 1e-10);
}

// 测试*运算符(实数标量乘)
TEST(ComplexMatrixTest, DoubleScalarMultiplication) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(0, 1) = std::complex<double>(3.0, -1.0);
    
    ComplexMatrix result = 2.0 * m;
    
    EXPECT_EQ(result(0, 0), std::complex<double>(2.0, 4.0));
    EXPECT_EQ(result(0, 1), std::complex<double>(6.0, -2.0));
    
    ComplexMatrix result2 = m * 3.0;
    EXPECT_EQ(result2(0, 0), std::complex<double>(3.0, 6.0));
}

// 测试*=运算符
TEST(ComplexMatrixTest, TimesEqualsOperator) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    
    std::complex<double> s(2.0, 0.0);
    m *= s;
    
    EXPECT_EQ(m(0, 0), std::complex<double>(2.0, 4.0));
}

功能函数测试

// 测试zero_out函数
TEST(ComplexMatrixTest, ZeroOut) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(0, 1) = std::complex<double>(3.0, 4.0);
    m(1, 0) = std::complex<double>(5.0, 6.0);
    m(1, 1) = std::complex<double>(7.0, 8.0);
    
    m.zero_out();
    
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 2; ++j) {
            EXPECT_EQ(m(i, j), std::complex<double>(0.0, 0.0));
        }
    }
}

// 测试set_as_identity_matrix函数
TEST(ComplexMatrixTest, SetAsIdentityMatrix) {
    ComplexMatrix m(3, 3);
    m(0, 0) = std::complex<double>(999.0, 999.0);
    
    m.set_as_identity_matrix();
    
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            if (i == j) {
                EXPECT_EQ(m(i, j), std::complex<double>(1.0, 0.0));
            } else {
                EXPECT_EQ(m(i, j), std::complex<double>(0.0, 0.0));
            }
        }
    }
}

// 测试trace函数
TEST(ComplexMatrixTest, TraceCalculation) {
    ComplexMatrix m(3, 3);
    m(0, 0) = std::complex<double>(1.0, 1.0);
    m(1, 1) = std::complex<double>(2.0, 2.0);
    m(2, 2) = std::complex<double>(3.0, 3.0);
    
    std::complex<double> tr = trace(m);
    EXPECT_EQ(tr, std::complex<double>(6.0, 6.0));
}

// 测试transpose函数(conjugate=0)
TEST(ComplexMatrixTest, TransposeWithoutConjugate) {
    ComplexMatrix m(2, 3);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(0, 1) = std::complex<double>(3.0, 4.0);
    m(0, 2) = std::complex<double>(5.0, 6.0);
    m(1, 0) = std::complex<double>(7.0, 8.0);
    m(1, 1) = std::complex<double>(9.0, 10.0);
    m(1, 2) = std::complex<double>(11.0, 12.0);
    
    ComplexMatrix mt = transpose(m, false);
    
    EXPECT_EQ(mt.nr, 3);
    EXPECT_EQ(mt.nc, 2);
    EXPECT_EQ(mt(0, 0), m(0, 0));
    EXPECT_EQ(mt(0, 1), m(1, 0));
    EXPECT_EQ(mt(1, 0), m(0, 1));
    EXPECT_EQ(mt(2, 1), m(1, 2));
}

// 测试transpose函数(conjugate=1)
TEST(ComplexMatrixTest, TransposeWithConjugate) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(0, 1) = std::complex<double>(3.0, 4.0);
    m(1, 0) = std::complex<double>(5.0, 6.0);
    m(1, 1) = std::complex<double>(7.0, 8.0);
    
    ComplexMatrix mt = transpose(m, true);
    
    EXPECT_EQ(mt(0, 0), std::complex<double>(1.0, -2.0));
    EXPECT_EQ(mt(1, 0), std::complex<double>(3.0, -4.0));
    EXPECT_EQ(mt(0, 1), std::complex<double>(5.0, -6.0));
}

// 测试conj函数
TEST(ComplexMatrixTest, ConjugateFunction) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.0, 2.0);
    m(0, 1) = std::complex<double>(-3.0, -4.0);
    
    ComplexMatrix mc = conj(m);
    
    EXPECT_EQ(mc(0, 0), std::complex<double>(1.0, -2.0));
    EXPECT_EQ(mc(0, 1), std::complex<double>(-3.0, 4.0));
}

// 测试real函数
TEST(ComplexMatrixTest, RealFunction) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(3.0, 4.0);
    m(0, 1) = std::complex<double>(5.0, -6.0);
    m(1, 0) = std::complex<double>(-1.0, 2.0);
    m(1, 1) = std::complex<double>(0.0, 0.0);
    
    matrix mr = m.real();
    
    EXPECT_EQ(mr.nr, 2);
    EXPECT_EQ(mr.nc, 2);
    EXPECT_DOUBLE_EQ(mr(0, 0), 3.0);
    EXPECT_DOUBLE_EQ(mr(0, 1), 5.0);
    EXPECT_DOUBLE_EQ(mr(1, 0), -1.0);
    EXPECT_DOUBLE_EQ(mr(1, 1), 0.0);
}

// 测试abs2函数
TEST(ComplexMatrixTest, Abs2Function) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(3.0, 4.0);
    m(0, 1) = std::complex<double>(1.0, 0.0);
    m(1, 0) = std::complex<double>(0.0, 1.0);
    m(1, 1) = std::complex<double>(0.0, 0.0);
    
    double result = abs2(m);
    EXPECT_DOUBLE_EQ(result, 27.0);
}

// 测试abs2_row函数
TEST(ComplexMatrixTest, Abs2RowFunction) {
    ComplexMatrix m(2, 3);
    m(0, 0) = std::complex<double>(3.0, 4.0);
    m(0, 1) = std::complex<double>(1.0, 0.0);
    m(0, 2) = std::complex<double>(0.0, 1.0);
    m(1, 0) = std::complex<double>(1.0, 1.0);
    
    double result = abs2_row(m, 0);
    EXPECT_DOUBLE_EQ(result, 27.0);
}

// 测试abs2_column函数
TEST(ComplexMatrixTest, Abs2ColumnFunction) {
    ComplexMatrix m(3, 2);
    m(0, 0) = std::complex<double>(3.0, 4.0);
    m(1, 0) = std::complex<double>(1.0, 0.0);
    m(2, 0) = std::complex<double>(0.0, 1.0);
    m(0, 1) = std::complex<double>(1.0, 1.0);
    
    double result = abs2_column(m, 0);
    EXPECT_DOUBLE_EQ(result, 27.0);
}

// 测试checkreal函数
TEST(ComplexMatrixTest, CheckRealFunction) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(1.0, 1e-13);
    m1(0, 1) = std::complex<double>(2.0, 0.0);
    m1(1, 0) = std::complex<double>(3.0, 0.0);
    m1(1, 1) = std::complex<double>(4.0, 0.0);
    
    EXPECT_TRUE(m1.checkreal());
    
    ComplexMatrix m2(2, 2);
    m2(0, 0) = std::complex<double>(1.0, 1e-11);
    m2(0, 1) = std::complex<double>(2.0, 0.0);
    m2(1, 0) = std::complex<double>(3.0, 0.0);
    m2(1, 1) = std::complex<double>(4.0, 0.0);
    
    EXPECT_FALSE(m2.checkreal());
}

// 测试scale_accumulate函数
TEST(ComplexMatrixTest, ScaleAccumulate) {
    ComplexMatrix min(2, 2);
    min(0, 0) = std::complex<double>(1.0, 1.0);
    min(0, 1) = std::complex<double>(2.0, 0.0);
    min(1, 0) = std::complex<double>(0.0, 2.0);
    min(1, 1) = std::complex<double>(3.0, 3.0);
    
    ComplexMatrix mout(2, 2);
    mout(0, 0) = std::complex<double>(1.0, 0.0);
    mout(0, 1) = std::complex<double>(0.0, 1.0);
    mout(1, 0) = std::complex<double>(1.0, 1.0);
    mout(1, 1) = std::complex<double>(0.0, 0.0);
    
    std::complex<double> s(2.0, 0.0);
    scale_accumulate(s, min, mout);
    
    EXPECT_EQ(mout(0, 0), std::complex<double>(3.0, 2.0));
    EXPECT_EQ(mout(0, 1), std::complex<double>(4.0, 1.0));
}

// 测试scaled_sum函数
TEST(ComplexMatrixTest, ScaledSum) {
    ComplexMatrix m1(2, 2);
    m1(0, 0) = std::complex<double>(1.0, 0.0);
    m1(0, 1) = std::complex<double>(0.0, 1.0);
    
    ComplexMatrix m2(2, 2);
    m2(0, 0) = std::complex<double>(0.0, 1.0);
    m2(0, 1) = std::complex<double>(1.0, 0.0);
    
    ComplexMatrix mout(2, 2);
    
    std::complex<double> s1(2.0, 0.0);
    std::complex<double> s2(3.0, 0.0);
    
    scaled_sum(s1, m1, s2, m2, mout);
    
    EXPECT_EQ(mout(0, 0), std::complex<double>(2.0, 3.0));
    EXPECT_EQ(mout(0, 1), std::complex<double>(3.0, 2.0));
}

// 测试create函数
TEST(ComplexMatrixTest, CreateReuseMemory) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(999.0, 999.0);
    
    m.create(2, 2, true);
    EXPECT_EQ(m(0, 0), std::complex<double>(0.0, 0.0));
    
    m.create(3, 3);
    EXPECT_EQ(m.nr, 3);
    EXPECT_EQ(m.nc, 3);
}

边界情况测试

// 测试空矩阵
TEST(ComplexMatrixTest, EmptyMatrixOperations) {
    ComplexMatrix m1;
    ComplexMatrix m2(0, 0);
    
    EXPECT_EQ(m1.nr, 0);
    EXPECT_EQ(m1.nc, 0);
    EXPECT_EQ(m1.size, 0);
    EXPECT_EQ(m1.c, nullptr);
    
    // 测试create为0
    m1.create(0, 0);
    EXPECT_EQ(m1.c, nullptr);
}

// 测试单元素矩阵
TEST(ComplexMatrixTest, SingleRowColumnMatrix) {
    ComplexMatrix m(1, 1);
    m(0, 0) = std::complex<double>(5.0, 5.0);
    
    EXPECT_EQ(m.nr, 1);
    EXPECT_EQ(m.nc, 1);
    EXPECT_EQ(trace(m), std::complex<double>(5.0, 5.0));
    
    ComplexMatrix m2(1, 5);
    m2(0, 0) = std::complex<double>(1.0, 0.0);
    m2(0, 4) = std::complex<double>(0.0, 1.0);
    
    double r = abs2_row(m2, 0);
    EXPECT_DOUBLE_EQ(r, 2.0);
}

输出测试

// 测试print函数
TEST(ComplexMatrixTest, PrintFunction) {
    ComplexMatrix m(2, 2);
    m(0, 0) = std::complex<double>(1.5, 0.0);
    m(0, 1) = std::complex<double>(0.0, 2.5);
    m(1, 0) = std::complex<double>(0.001, 0.0);
    m(1, 1) = std::complex<double>(3.0, 0.0000001);
    
    std::ostringstream oss;
    m.print(oss, 0.01, 0.001);
    
    std::string output = oss.str();
    EXPECT_NE(output.find("1.5"), std::string::npos);
    EXPECT_NE(output.find("(0,2.5)"), std::string::npos);
    EXPECT_NE(output.find("0"), std::string::npos);
}

编译脚本

注意必需使用 -D__NORMAL 在编译时定义宏,因为 complexmatrix.cpp 中必须定义该宏避免外部依赖。

#!/bin/bash

set -e

echo "========================================="
echo "开始编译 ComplexMatrix 单元测试..."
echo "========================================="

GTEST_CFLAGS="-I/usr/include"
GTEST_LIBS="-lgtest -lgtest_main -pthread"

# 编译选项
CXX=g++
CXXFLAGS="-std=c++11 -O2 -g ${GTEST_CFLAGS} -D__NORMAL"
LDFLAGS="${GTEST_LIBS} -pthread"

# 源文件
TEST_SRC="complexmatrix_test.cpp"
IMPL_SRC="complexmatrix.cpp"
MATRIX_SRC="matrix.cpp"
OUTPUT="complexmatrix_test"

echo "编译选项:"
echo "  CXXFLAGS: $CXXFLAGS"
echo "  LDFLAGS: $LDFLAGS"
echo ""

# 编译
if $CXX $CXXFLAGS $TEST_SRC $IMPL_SRC $MATRIX_SRC -o $OUTPUT $LDFLAGS; then
    echo ""
    echo "编译成功! 生成可执行文件: ./$OUTPUT"
    echo ""
    echo "运行测试:"
    echo "  ./$OUTPUT  # 运行所有测试"
    echo "  ./$OUTPUT --gtest_filter=ComplexMatrixTest.DefaultConstructor  # 运行特定测试"
    echo "  ./$OUTPUT --gtest_list_tests  # 列出所有测试"
    echo ""
else
    echo "编译失败"
    exit 1
fi

测试结果

[==========] Running 35 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 35 tests from ComplexMatrixTest
[ RUN      ] ComplexMatrixTest.DefaultConstructor
[       OK ] ComplexMatrixTest.DefaultConstructor (0 ms)
[ RUN      ] ComplexMatrixTest.ParameterizedConstructorWithZero
[       OK ] ComplexMatrixTest.ParameterizedConstructorWithZero (0 ms)
[ RUN      ] ComplexMatrixTest.ParameterizedConstructorWithoutZero
[       OK ] ComplexMatrixTest.ParameterizedConstructorWithoutZero (0 ms)
[ RUN      ] ComplexMatrixTest.CopyConstructor
[       OK ] ComplexMatrixTest.CopyConstructor (0 ms)
[ RUN      ] ComplexMatrixTest.MoveConstructor
[       OK ] ComplexMatrixTest.MoveConstructor (0 ms)
[ RUN      ] ComplexMatrixTest.CopyAssignment
[       OK ] ComplexMatrixTest.CopyAssignment (0 ms)
[ RUN      ] ComplexMatrixTest.MoveAssignment
[       OK ] ComplexMatrixTest.MoveAssignment (0 ms)
[ RUN      ] ComplexMatrixTest.ElementAccess
[       OK ] ComplexMatrixTest.ElementAccess (0 ms)
[ RUN      ] ComplexMatrixTest.ConstElementAccess
[       OK ] ComplexMatrixTest.ConstElementAccess (0 ms)
[ RUN      ] ComplexMatrixTest.MatrixAddition
[       OK ] ComplexMatrixTest.MatrixAddition (0 ms)
[ RUN      ] ComplexMatrixTest.PlusEqualsOperator
[       OK ] ComplexMatrixTest.PlusEqualsOperator (0 ms)
[ RUN      ] ComplexMatrixTest.MatrixSubtraction
[       OK ] ComplexMatrixTest.MatrixSubtraction (0 ms)
[ RUN      ] ComplexMatrixTest.MinusEqualsOperator
[       OK ] ComplexMatrixTest.MinusEqualsOperator (0 ms)
[ RUN      ] ComplexMatrixTest.MatrixMultiplication
[       OK ] ComplexMatrixTest.MatrixMultiplication (0 ms)
[ RUN      ] ComplexMatrixTest.ComplexScalarMultiplicationLeft
[       OK ] ComplexMatrixTest.ComplexScalarMultiplicationLeft (0 ms)
[ RUN      ] ComplexMatrixTest.ComplexScalarMultiplicationRight
[       OK ] ComplexMatrixTest.ComplexScalarMultiplicationRight (0 ms)
[ RUN      ] ComplexMatrixTest.DoubleScalarMultiplication
[       OK ] ComplexMatrixTest.DoubleScalarMultiplication (0 ms)
[ RUN      ] ComplexMatrixTest.TimesEqualsOperator
[       OK ] ComplexMatrixTest.TimesEqualsOperator (0 ms)
[ RUN      ] ComplexMatrixTest.ZeroOut
[       OK ] ComplexMatrixTest.ZeroOut (0 ms)
[ RUN      ] ComplexMatrixTest.SetAsIdentityMatrix
[       OK ] ComplexMatrixTest.SetAsIdentityMatrix (0 ms)
[ RUN      ] ComplexMatrixTest.TraceCalculation
[       OK ] ComplexMatrixTest.TraceCalculation (0 ms)
[ RUN      ] ComplexMatrixTest.TransposeWithoutConjugate
[       OK ] ComplexMatrixTest.TransposeWithoutConjugate (0 ms)
[ RUN      ] ComplexMatrixTest.TransposeWithConjugate
[       OK ] ComplexMatrixTest.TransposeWithConjugate (0 ms)
[ RUN      ] ComplexMatrixTest.ConjugateFunction
[       OK ] ComplexMatrixTest.ConjugateFunction (0 ms)
[ RUN      ] ComplexMatrixTest.RealFunction
[       OK ] ComplexMatrixTest.RealFunction (0 ms)
[ RUN      ] ComplexMatrixTest.Abs2Function
[       OK ] ComplexMatrixTest.Abs2Function (0 ms)
[ RUN      ] ComplexMatrixTest.Abs2RowFunction
[       OK ] ComplexMatrixTest.Abs2RowFunction (0 ms)
[ RUN      ] ComplexMatrixTest.Abs2ColumnFunction
[       OK ] ComplexMatrixTest.Abs2ColumnFunction (0 ms)
[ RUN      ] ComplexMatrixTest.CheckRealFunction
[       OK ] ComplexMatrixTest.CheckRealFunction (0 ms)
[ RUN      ] ComplexMatrixTest.ScaleAccumulate
[       OK ] ComplexMatrixTest.ScaleAccumulate (0 ms)
[ RUN      ] ComplexMatrixTest.ScaledSum
[       OK ] ComplexMatrixTest.ScaledSum (0 ms)
[ RUN      ] ComplexMatrixTest.CreateReuseMemory
[       OK ] ComplexMatrixTest.CreateReuseMemory (0 ms)
[ RUN      ] ComplexMatrixTest.EmptyMatrixOperations
[       OK ] ComplexMatrixTest.EmptyMatrixOperations (0 ms)
[ RUN      ] ComplexMatrixTest.SingleRowColumnMatrix
[       OK ] ComplexMatrixTest.SingleRowColumnMatrix (0 ms)
[ RUN      ] ComplexMatrixTest.PrintFunction
[       OK ] ComplexMatrixTest.PrintFunction (0 ms)
[----------] 35 tests from ComplexMatrixTest (0 ms total)

[----------] Global test environment tear-down
[==========] 35 tests from 1 test suite ran. (0 ms total)
[  PASSED  ] 35 tests.
目录
  • 构造函数测试
  • 赋值运算测试
  • 元素访问测试
  • 运算符重载测试
  • 功能函数测试
  • 边界情况测试
  • 输出测试
  • 编译脚本
  • 测试结果
© 2026 miniyuan. All rights reserved.
Go to miniyuan's GitHub repo