簡體   English   中英

在C中對數組使用斷言

[英]Using assert with arrays in C

我正在編寫的程序的一部分涉及到一個函數來測試斷言。 這是測試我的Shift3DPoint函數,該函數接受第一個數組並通過添加第二個數組的內容對其進行修改(例如,test14和test15(如下所示)將使用新的test14 {6,8,0}但是,我對如何在函數中寫這個詞感到困惑,因為它應該返回一個數組,並且在斷言之前我只使用過doubles。

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;
}

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精度值,因此對於要保留計算的精度,您應該給出某種epsilon:

assert ( fabs(test14[i] - expected_result[i]) < epsilon);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM