test(newlib): Added unit tests for usleep and sleep_for functions

This commit adds unit tests to verify the basic functionality of
usleep() and this_thread::sleep_for() std functions.
This commit is contained in:
Sudeep Mohanty
2025-04-17 10:38:04 +02:00
parent 3dda3d2438
commit 5f5fc0882f
4 changed files with 53 additions and 5 deletions

View File

@@ -1,2 +1,2 @@
idf_component_register(SRCS "test_cxx_general.cpp"
PRIV_REQUIRES unity driver)
PRIV_REQUIRES unity driver esp_timer)

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
*/
@@ -14,6 +14,9 @@
#include "unity.h"
#include "unity_test_utils.h"
#include "soc/soc.h"
#include <chrono>
#include <thread>
#include "esp_timer.h"
extern "C" void setUp()
{
@@ -197,7 +200,7 @@ struct PriorityInitTest {
int PriorityInitTest::order = 0;
// init_priority objects are initialized from the lowest to the heighest priority number
// init_priority objects are initialized from the lowest to the highest priority number
// Default init_priority is always the lowest (highest priority number)
PriorityInitTest g_static_init_priority_test2;
PriorityInitTest g_static_init_priority_test1 __attribute__((init_priority(1000)));
@@ -289,6 +292,29 @@ TEST_CASE("stack smashing protection CXX", "[stack_smash]")
recur_and_smash_cxx();
}
TEST_CASE("test std::this_thread::sleep_for basic functionality", "[misc]")
{
const int us_per_tick = portTICK_PERIOD_MS * 1000;
// Test sub-tick sleep
const auto short_sleep = std::chrono::microseconds(us_per_tick / 4);
int64_t start = esp_timer_get_time();
std::this_thread::sleep_for(short_sleep);
int64_t end = esp_timer_get_time();
int64_t elapsed_us = end - start;
printf("short sleep: %lld us\n", elapsed_us);
TEST_ASSERT_GREATER_OR_EQUAL(short_sleep.count(), elapsed_us);
// Test multi-tick sleep
const auto long_sleep = std::chrono::microseconds(us_per_tick * 2);
start = esp_timer_get_time();
std::this_thread::sleep_for(long_sleep);
end = esp_timer_get_time();
elapsed_us = end - start;
printf("long sleep: %lld us\n", elapsed_us);
TEST_ASSERT_GREATER_OR_EQUAL(long_sleep.count(), elapsed_us);
}
extern "C" void app_main(void)
{
printf("CXX GENERAL TEST\n");