4

我对 BOOST_CHECK_EQUAL_COLLECTIONS 有疑问。如果数组的数据类型恰好是 int 或 char,则可以直接将计算出的数组与预期的数组进行比较。但是,当数据类型为浮点或双精度时,使用 BOOST_CHECK_EQUAL_COLLECTIONS 变得非常棘手。例如,

            std::vector<float> dis_array;
            Distance<float,float>(pt_array,base_point,dis_array);
            std::vector<float> dis_ground_truth;
            dis_ground_truth.push_back(3.6055f);
            dis_ground_truth.push_back(1);
            dis_ground_truth.push_back(9.2194f);
            BOOST_CHECK_EQUAL_COLLECTIONS(dis_ground_truth.begin(), dis_ground_truth.end(),
                dis_array.begin(),dis_array.end());

但是,在运行 BOOST 单元测试框架时,会出现以下错误信息:

{ dis_array.begin(), dis_array.end() } failed.
Mismatch in a position 0: 3.6055 != 3.60555
Mismatch in a position 2: 9.2194 != 9.21954

问题来自比较两个双精度类型的变量,如果一个变量的类型是双精度,则很难给一个变量准确的期望值。目前,我能想到的唯一解决方案是比较两个数组的差异,如果差异的范数低于一个小阈值,那么它将通过单元测试。还有其他想法吗?谢谢!

4

0 回答 0