[英]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.