c -如何在不更改测试的情况下使测试通过?



我有以下使用指针的C语言代码。我已经编写了两个类似的测试用例。一个测试用例用宏匹配函数的输出,另一个用等于该宏的变量匹配。我知道浮点运算可以产生"假"与==操作。我读了重复的问题——"浮点数学坏了吗?"但解决办法是什么呢?我的代码如何在不更改测试的情况下通过此测试?代码如下:

#define TEST_LBS 5.5
#define CONVERSION_FACTOR 2.20462
#include <stdio.h>
void testConvertLbsKg(void);
double convertLbsKg(double *weightLbsPtr, double *weightKilosPtr);
int main() {
testConvertLbsKg();
return 0;
}
void testConvertLbsKg(void) {
double dblA, dblB, lbs = TEST_LBS;
dblA = dblB = 0.0;
printf("Test-1: n");
dblB = convertLbsKg(&lbs, &dblA);
if (dblA == dblB && dblA == TEST_LBS / CONVERSION_FACTOR)
printf("<PASSED> with macron");
else
printf("<!!! FAILED with macro!!!>n");
if (dblA == dblB && dblA == lbs / CONVERSION_FACTOR)
printf("<PASSED> with variablen");
else
printf("<!!! FAILED with variable!!!>n");
}
double convertLbsKg(double *weightLbsPtr, double *weightKilosPtr) {
double result;
result = *weightLbsPtr / CONVERSION_FACTOR;
if (weightKilosPtr != NULL) {
*weightKilosPtr = result;
}
return result;
}

输出:

Test-1: 
<PASSED> with macro
<!!! FAILED with variable!!!>

这对我来说是一个问题,因为它是一个赋值,我不能修改测试用例。

lbs == TEST_LBS //results to true

我像这样安装了C编译器:教程我正在使用可视化代码。我在VS Code终端使用的命令:

gcc -Wall test.c -o test
.test.exe

您的程序没有定义行为:由于double类型的不精确以及C编译器可能对常量表达式使用不同的精度,结果可能比较等于或不等于。

不同的编译器可能产生不同的输出,相同的编译器可能产生不同的输出,不同的编译器标志。例如,我在macOS上使用clang -O2得到以下输出:

Test-1:
<PASSED> with macro
<PASSED> with variable

最新更新