test(pcnt): expend assert value to decrease failure ratio

This commit is contained in:
Chen Jichang
2025-10-24 16:21:30 +08:00
parent feb1eddd7c
commit 642bff6fc4

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -288,7 +288,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[0]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[0]);
//2, 0, 0, 0
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -300,7 +300,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[1]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[1]);
//0,0,0,0
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -312,7 +312,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[2]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[2]);
//1,0,1,0
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -324,7 +324,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[3]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[3]);
//1,0,0,1
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -336,7 +336,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[4]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[4]);
//2,0,0,1
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -348,7 +348,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[5]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[5]);
//1,0,2,0
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -360,7 +360,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[6]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[6]);
//1,0,0,2
TEST_ESP_OK(pcnt_counter_pause(PCNT_UNIT_0));
@@ -372,7 +372,7 @@ static void count_mode_test(gpio_num_t ctl_io)
vTaskDelay(1000 / portTICK_PERIOD_MS);
TEST_ESP_OK(pcnt_get_counter_value(PCNT_UNIT_0, &test_counter));
printf("value: %d\n", test_counter);
TEST_ASSERT_INT16_WITHIN(1, test_counter, result[7]);
TEST_ASSERT_INT16_WITHIN(2, test_counter, result[7]);
}
/* PCNT basic property:
@@ -521,24 +521,24 @@ TEST_CASE("PCNT_interrupt_method_test_control_IO_high", "[pcnt][timeout=120]")
// test event
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 2);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 2);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 2);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 2);
TEST_ASSERT(event.l_limit == 0);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 2);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 4);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 2);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(4, event.filter_time, 4);
// test interrupt disable
TEST_ESP_OK(pcnt_intr_disable(PCNT_UNIT_0));
TEST_ESP_OK(pcnt_counter_clear(PCNT_UNIT_0));
// for the original control io disable interrupt status
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 2);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 2);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 2);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 2);
TEST_ASSERT(event.l_limit == 0);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 2);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 4);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 2);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(4, event.filter_time, 4);
// enable the intr
TEST_ESP_OK(pcnt_intr_enable(PCNT_UNIT_0));
@@ -546,24 +546,24 @@ TEST_CASE("PCNT_interrupt_method_test_control_IO_high", "[pcnt][timeout=120]")
TEST_ESP_OK(pcnt_counter_clear(PCNT_UNIT_0));
TEST_ESP_OK(pcnt_counter_resume(PCNT_UNIT_0));
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 4);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 4);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 4);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 4);
TEST_ASSERT(event.l_limit == 0);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 4);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 4);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 10);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 4);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 4);
TEST_ASSERT_INT_WITHIN(4, event.filter_time, 10);
// disable part of events
TEST_ESP_OK(pcnt_event_disable(PCNT_UNIT_0, PCNT_EVT_ZERO));
TEST_ESP_OK(pcnt_event_disable(PCNT_UNIT_0, PCNT_EVT_L_LIM));
TEST_ESP_OK(pcnt_event_disable(PCNT_UNIT_0, PCNT_EVT_THRES_0));
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 5);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 4);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 5);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 4);
TEST_ASSERT(event.l_limit == 0);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 6);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 4);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 14);
TEST_ASSERT_INT_WITHIN(4, event.h_limit, 6);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 4);
TEST_ASSERT_INT_WITHIN(4, event.filter_time, 14);
// Because this test uses its own ISR, we need to release it with `pcnt_isr_unregister` instead of `pcnt_isr_service_uninstall`
TEST_ESP_OK(pcnt_isr_unregister(pcnt_isr_service));
@@ -621,24 +621,24 @@ TEST_CASE("PCNT_interrupt_method_test_control_IO_low", "[pcnt][timeout=120]")
// test event
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 1);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 1);
TEST_ASSERT_INT_WITHIN(2, event.l_limit, 1);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 1);
TEST_ASSERT_INT_WITHIN(2, event.filter_time, 2);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 1);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 1);
TEST_ASSERT_INT_WITHIN(3, event.l_limit, 1);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 1);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 2);
// test interrupt disable
TEST_ESP_OK(pcnt_intr_disable(PCNT_UNIT_0));
TEST_ESP_OK(pcnt_counter_clear(PCNT_UNIT_0));
// for the original control io disable interrupt status
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 1);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 1);
TEST_ASSERT_INT_WITHIN(2, event.l_limit, 1);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 1);
TEST_ASSERT_INT_WITHIN(2, event.filter_time, 2);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 1);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 1);
TEST_ASSERT_INT_WITHIN(3, event.l_limit, 1);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 1);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 2);
// enable the intr
pcnt_unit_config(&config);
@@ -648,24 +648,24 @@ TEST_CASE("PCNT_interrupt_method_test_control_IO_low", "[pcnt][timeout=120]")
TEST_ESP_OK(pcnt_counter_clear(PCNT_UNIT_0));
TEST_ESP_OK(pcnt_counter_resume(PCNT_UNIT_0));
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 2);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 3);
TEST_ASSERT_INT_WITHIN(2, event.l_limit, 2);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(2, event.filter_time, 6);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 2);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 3);
TEST_ASSERT_INT_WITHIN(3, event.l_limit, 2);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 6);
// disable part of events
TEST_ESP_OK(pcnt_event_disable(PCNT_UNIT_0, PCNT_EVT_ZERO));
TEST_ESP_OK(pcnt_event_disable(PCNT_UNIT_0, PCNT_EVT_L_LIM));
TEST_ESP_OK(pcnt_event_disable(PCNT_UNIT_0, PCNT_EVT_THRES_0));
event_calculate(&event);
TEST_ASSERT_INT_WITHIN(2, event.h_threshold, 4);
TEST_ASSERT_INT_WITHIN(2, event.l_threshold, 3);
TEST_ASSERT_INT_WITHIN(2, event.l_limit, 2);
TEST_ASSERT_INT_WITHIN(2, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(2, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(2, event.filter_time, 8);
TEST_ASSERT_INT_WITHIN(3, event.h_threshold, 4);
TEST_ASSERT_INT_WITHIN(3, event.l_threshold, 3);
TEST_ASSERT_INT_WITHIN(3, event.l_limit, 2);
TEST_ASSERT_INT_WITHIN(3, event.h_limit, 0);
TEST_ASSERT_INT_WITHIN(3, event.zero_times, 2);
TEST_ASSERT_INT_WITHIN(3, event.filter_time, 8);
// Because this test uses its own ISR, we need to release it with `pcnt_isr_unregister` instead of `pcnt_isr_service_uninstall`
TEST_ESP_OK(pcnt_isr_unregister(pcnt_isr_service));