Entry

プログラミングメモ - operator== の Unit Testing とか

2010年01月22日

徹底してやるなら,Unit Testing に operator== のテストは含めなくちゃいけません。なぜなら,AssertEqual なんかで使うわけで,テスト全体の信頼性に関わるから。

operator== のテストなんかいらねぇよ,という向きは,例えば,正規化されていない不動小数点数について,単純に == 演算子で判断している場合なんかに大変なことになる。というのも,等しいと言えるのは,リテラルを代入した直後くらいで,その後は誤差がわんさか出るから。まず等しいと判断される機会は,なくなると思ったほうがいい。正規化しないまま等号判定するなら,こゆ風にするのが(とりあえず)正しい。

bool
A::operator==(const A& rhs) const {
    bool ret = false;
    // member value fn_ is defined as double.
    if (::fabs(rhs.fn_ - fn_) < std::numeric_limits::epsilon) {
        ret = true;
    }
    return ret;
}

さらに,計算過程で生じる丸め誤差等々を考慮に入れるなら,std::numeric_limits::epsilon と同等の ε を自分で定義する必要があるんだと思います。

で,こゆのもやっぱりテストした方がいいんだろうか。つか,大変だよな……。ほとんどメタテスト(造語)の領域なんでねいだろうか。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN