为什么我不能使用 CppUnitLite 测试 CHECK_DOUBLES_EQUAL
Why can't I use CppUnitLite test CHECK_DOUBLES_EQUAL
我是一名正在学习 C++ 的新手程序员 class。
作业是使用 stringstream 编写一个 double,然后使用 CppUnitLite 中的一个宏检查它。我想在我的写操作中使用 CHECK_DOUBLES_EQUAL 检查双精度值,但 VS 中的智能感知说它不会工作。在下面的示例中,我保留了有效的内容,一个简单的 CHECK_EQUAL。这还不够好。我需要使用 CHECK_DOUBLES_EQUAL 作为浮点数。
我试过 CHECK_DOUBLES_EQUAL(dvalue, svalue, 0.1) 但这行不通。我也尝试过使用预期的实际值,但这也不起作用。
CHECK_DOUBLES_EQUAL 确实适用于读取操作(第二个示例),但我无法在第一个示例中使用它。
这是为什么?我做错了什么?
TEST(writeDouble, stringStream)
{
std::stringstream sValue;
double dvalue =34.9;
sValue << dvalue;
if (!sValue)
{
CHECK_FAIL("conversion failed");
}
CHECK_EQUAL("34.9", sValue.str());
}
TEST(readDouble, stringStream)
{
std::stringstream sValue("34.9");
double dvalue;
sValue >> dvalue;
if (!sValue)
{
CHECK_FAIL("conversion failed");
}
CHECK_DOUBLES_EQUAL(34.9, dvalue, 0.1);
}
问题在于,在您的写入操作中,您并没有尝试与双精度数进行比较:您正在尝试与 STRING 进行比较。 C++ 是一种静态类型语言,不会将字符串与双精度数进行比较。
您与 CHECK_EQUAL("34.9", sValue.str());
一起使用的代码似乎是用于确保 stringstream
正确解释输入双精度值的正确代码。
我是一名正在学习 C++ 的新手程序员 class。
作业是使用 stringstream 编写一个 double,然后使用 CppUnitLite 中的一个宏检查它。我想在我的写操作中使用 CHECK_DOUBLES_EQUAL 检查双精度值,但 VS 中的智能感知说它不会工作。在下面的示例中,我保留了有效的内容,一个简单的 CHECK_EQUAL。这还不够好。我需要使用 CHECK_DOUBLES_EQUAL 作为浮点数。
我试过 CHECK_DOUBLES_EQUAL(dvalue, svalue, 0.1) 但这行不通。我也尝试过使用预期的实际值,但这也不起作用。
CHECK_DOUBLES_EQUAL 确实适用于读取操作(第二个示例),但我无法在第一个示例中使用它。
这是为什么?我做错了什么?
TEST(writeDouble, stringStream)
{
std::stringstream sValue;
double dvalue =34.9;
sValue << dvalue;
if (!sValue)
{
CHECK_FAIL("conversion failed");
}
CHECK_EQUAL("34.9", sValue.str());
}
TEST(readDouble, stringStream)
{
std::stringstream sValue("34.9");
double dvalue;
sValue >> dvalue;
if (!sValue)
{
CHECK_FAIL("conversion failed");
}
CHECK_DOUBLES_EQUAL(34.9, dvalue, 0.1);
}
问题在于,在您的写入操作中,您并没有尝试与双精度数进行比较:您正在尝试与 STRING 进行比较。 C++ 是一种静态类型语言,不会将字符串与双精度数进行比较。
您与 CHECK_EQUAL("34.9", sValue.str());
一起使用的代码似乎是用于确保 stringstream
正确解释输入双精度值的正确代码。