在C中使用assert和数组

时间:2015-11-02 18:26:00

标签: c arrays assert

程序的一部分我写的是编写一个函数来测试断言。这个是测试我的Shift3DPoint函数,它接受第一个数组并通过添加第二个数组的内容来修改它(例如,test14和test15(如下所示)将导致新的test14 {6,8,0}但是,我对我如何在我的函数中说出这个问题感到困惑,因为它应该返回一个数组而且我之前只使用过双精度函数。任何帮助都会受到赞赏!< / p>

void UnitTest3D(void); //function for assertions
void Shift3DPoint (double pt[], double offset[]); 

void UnitTest3D(void){
    double test13[3] = {0,0,0};
    double test14[3] = {6,0,0};
    double test15[3] = {0,8,0};
    assert(UnitTest3D(test13, test14) ???
return;
}

void Shift3DPoint(double pt[], double offset[]) {
    int i = 0;
    for (i = 0; i < 3; ++i) {
    pt[i] = pt[i] + offset[i]; //changes array contents by adding corresponding ptB
  }

return;
}

1 个答案:

答案 0 :(得分:0)

assert只是您可能使用或不使用的辅助函数。如果你想明确地使用assert(可能是因为它失败了你的程序)你可以自己编写测试然后用assert测试它。在您的情况下,test14将具有预期值。乍看之下我会如何对待这件事:

void UnitTest3D(void){
    double test14[3] = {6,0,0};
    double test15[3] = {0,8,0};
    double expected_result[3] = {6,8,0};

    // Test the result after calling the function
    Shift3DPoint(test14, test15);
    for (int i = 0; i < 3; ++i)
         assert(test14[i] == expected_result[i]);

    return;
}

(请注意,您可以使用不同的数组进行调用,但我认为您明白了这一点)。您可以编写辅助宏或更多通用函数,但您可以理解。

此外,考虑到double很少使用==检查assert ( fabs(test14[i] - expected_result[i]) < epsilon); 值,因为出现了预防问题,因此您应该给出某种类型的epsilon,因为您希望计算得以保留:

din