忍者ブログ
[200] [199] [198] [197] [196] [195] [194] [193] [192] [191] [190]

DATE : 2017/06/27 (Tue)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/11/04 (Sat)

(Brew Test Unit 1.0.4 対象)

想定した浮動小数点数が得られたかどうかを確認するマクロ関数に、ASSERT_EQUALS_DELTA というものがあります。(参照:テストケースの基本

このマクロ関数では、想定値と実際の値、誤差を指定できます。

一見すると、実際の値と想定値との差が誤差の範囲内に収まっているか否かを判定するマクロ関数のように思えます。

しかし、Brew Test Unit 1.0.4 では、誤差に等しいか否かの判定になっています。

以下に示すのは、その判定部分(UnitAssert.cpp, 110~118、インデントはレイアウトにあわせて変更)のコードです。

「aExpected」は想定値、「aActual」が実際の値、「aDelta」が誤差を表します。

bool Assert::assertEquals(String aMessage,
    double aExpected, double aActual, double aDelta,
    String aFile, int aLine)
{
    // Do comparison.
    if((aExpected <= aActual && aActual - aExpected == aDelta) ||
        (aExpected > aActual && aExpected - aActual == aDelta))
    {
        // Return True if equal.
        return true;
    }

誤差を判断している部分が、「==」となっています。そのため、この部分では、実際の値と想定値との差が誤差と等しいか否かを判断していると分かります。

参考として、JUnit で同じ機能を持つメソッド org.junit.Assert#assertEquals(String, double, double, double) のコードを挙げておきます。(Assert.java, 159~164、インデントはレイアウトに合わせて変更)

「expected」が想定値、「actual」が実際の値、「delta」が誤差を表します。

static public void assertEquals(String message,
        double expected, double actual, double delta) {
    if (Double.compare(expected, actual) == 0)
        return;
    if (!(Math.abs(expected - actual) <= delta))
        failNotEquals(message, new Double(expected),
            new Double(actual));
}

こちらは、想定値と実際の値との差が誤差以内に収まるかどうかを判断していることが分かります。

なお、Brew Test Unit の ASSERT_EQUALS_DELTA も 誤差の範囲内に収まるような判断に変更する場合は、以下のようにコードを書き換えます。

    if((aExpected <= aActual && aActual - aExpected <= aDelta) ||
        (aExpected > aActual && aExpected - aActual <= aDelta))
    {
        // Return True if equal.
        return true;
    }

気付くまで相当苦しめられました……orz

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
05 2017/06 07
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
05 2017/06 07
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)