diff --git a/test/host/phasor/phasor_test.c b/test/host/phasor/phasor_test.c index f32b028e..0a14e669 100644 --- a/test/host/phasor/phasor_test.c +++ b/test/host/phasor/phasor_test.c @@ -26,6 +26,7 @@ * TC-PH-020 L2-2 实例层:实例数/实例表/未攒满一周波不产出 * TC-PH-021 L2-6 滑动窗:连续滑动 20 拍基波读数恒定 * TC-PH-022 L2-7 双区交换:使用区交替 + get 返回**最后一次** run 的结果(非陈旧) + * TC-PH-030..034 phasor_zero 四字段清零 / phasor_init 双区清零 + 使用区与就绪标志复位 + 幂等 * * 通过:全部 TC PASS(main 返回 0)。 * 入口:int main(void),返回 0=PASS / 1=FAIL(由 run 脚本判读)。 @@ -432,6 +433,45 @@ static void tc_instances(void) { CHECK(ok, "L2-2/L2-6 instance results == phasor_calc() on the same ring window"); } +/* ===================== TC-PH-030..034:phasor_zero / init 清零 ===================== */ + +static void tc_zero(void) { + phasor_t p; + uint8_t i; + int zones_dirty = 0; + + /* 1) 直接白盒:phasor_zero 把四个字段(含 fAm / fAmSQ)全部清零 */ + p.fRe = 1.0f; p.fIm = -2.0f; p.fAm = 3.0f; p.fAmSQ = 4.0f; + phasor_zero(&p); + CHECK((p.fRe == 0.0f) && (p.fIm == 0.0f) && (p.fAm == 0.0f) && (p.fAmSQ == 0.0f), + "TC-PH-030 phasor_zero clears all four fields"); + + /* 2) 经 phasor_init:先把双区写成脏值,init 后必须全零,使用区复位、就绪标志清 */ + for (i = 0u; i < (uint8_t)PHASOR_INST_N; i++) { + s_zone[0][i].fRe = 9.0f; s_zone[0][i].fIm = 9.0f; + s_zone[0][i].fAm = 9.0f; s_zone[0][i].fAmSQ = 9.0f; + s_zone[1][i].fRe = 9.0f; s_zone[1][i].fIm = 9.0f; + s_zone[1][i].fAm = 9.0f; s_zone[1][i].fAmSQ = 9.0f; + } + s_use_zone = 1u; + (void)phasor_init(); + for (i = 0u; i < (uint8_t)PHASOR_INST_N; i++) { + if ((s_zone[0][i].fRe != 0.0f) || (s_zone[0][i].fIm != 0.0f) || + (s_zone[0][i].fAm != 0.0f) || (s_zone[0][i].fAmSQ != 0.0f) || + (s_zone[1][i].fRe != 0.0f) || (s_zone[1][i].fIm != 0.0f) || + (s_zone[1][i].fAm != 0.0f) || (s_zone[1][i].fAmSQ != 0.0f)) { + zones_dirty = 1; + } + } + CHECK(zones_dirty == 0, "TC-PH-031 phasor_init zeroes both result zones"); + CHECK(s_use_zone == 0u, "TC-PH-032 phasor_init resets use zone to 0"); + CHECK(phasor_get(0u, &p) == -2, "TC-PH-033 phasor_init clears ready (get -> -2)"); + + /* 3) 幂等:重复 init 不改变结果 */ + (void)phasor_init(); + CHECK((s_use_zone == 0u) && (phasor_get(0u, &p) == -2), "TC-PH-034 phasor_init is idempotent"); +} + /* ===================== TC-PH-022:L2-7 双区指针原子交换 ===================== */ static void tc_dualzone(void) { @@ -504,6 +544,8 @@ int main(void) { tc_instances(); printf("-- L2-7 dual-zone swap --\n"); tc_dualzone(); + printf("-- L2 zero / init --\n"); + tc_zero(); printf("\n=== Phasor Tests: %d/%d PASSED (failed=%d) ===\n", s_passed, s_total, s_failed);