読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

TDD C

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