Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

WITHINでブレる値も扱う(Unity系TDDツール)

組込み機器といえば、センサーですね。
温度センサーで水温測ったり、加速度で転倒検知したり。
ところが、こういうモノは値ブレブレで一意に定まりません。
ここで活躍するのがWITHIN構文です。

TEST_ASSERT_INT_WITHIN(delta, expected, actual);

これは、expectedを中心として、deltaの範囲内のブレを許容します。
deltaに正の値をとれば、 (expected - delta) ~ expected ~ (expected + delta)まで対応します。
公式での解説は

Asserts that the actual value is within plus or minus delta of the expected value. Failures are displayed as signed integers.

となっています。
deltaにマイナスを取ると何も拾ってくれなくなるので注意が必要です。

実際のトコロ

例文

コード
#include <stdio.h>
#include <stdlib.h>

int rands(void)
{
  return -(rand() % 0x42);
}
テスト(本体のみ)
void test_rands(void) {
  TEST_ASSERT_INT_WITHIN(0x42,  0x00, rands());
}

void test_rands_minus(void) {
  TEST_ASSERT_INT_WITHIN(0x42, 0x00, -(rands()));  
}

void test_rands_minusDelta(void) {
  TEST_ASSERT_INT_WITHIN(-(0x42),  0x00, rands());
}

結果

test/TestProductionCode.c:64:test_rands:PASS
test/TestProductionCode.c:68:test_rands_minus:PASS
test/TestProductionCode.c:73:test_rands_minusDelta:FAIL: Values Not Within Delta -66 Expected 0 Was -39