BOOST_CHECK_EQUAL_COLLECTIONS について質問があります。配列のデータ型が int または char である場合、計算された配列と期待される配列を比較するのは簡単です。ただし、データ型が float または double の場合、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
問題は double 型の 2 つの変数を比較することから発生し、1 つの変数の型が double である場合、1 つの変数に正確な期待値を与えることは非常に困難です。今のところ、私が考えることができる唯一の解決策は、2 つの配列の違いを比較することです。違いのノルムが小さなしきい値を下回っていれば、単体テストに合格します。他のアイデアはありますか?ありがとう!