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