HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
DigitalOutputGuardComprehensiveTest.cpp File Reference

DigitalOutputGuard comprehensive test suite for ESP32-C6 DevKit-M-1. More...

Include dependency graph for DigitalOutputGuardComprehensiveTest.cpp:

Functions

bool test_digital_output_guard_creation () noexcept
 
bool test_digital_output_guard_raii_cleanup () noexcept
 
bool test_digital_output_guard_manual_state_control () noexcept
 
bool test_digital_output_guard_pointer_constructor () noexcept
 
bool test_digital_output_guard_null_pointer_handling () noexcept
 
bool test_digital_output_guard_ensure_output_mode () noexcept
 
bool test_digital_output_guard_no_ensure_output_mode () noexcept
 
bool test_digital_output_guard_state_transitions () noexcept
 
bool test_digital_output_guard_get_current_state () noexcept
 
bool test_digital_output_guard_move_constructor () noexcept
 
bool test_digital_output_guard_move_assignment () noexcept
 
bool test_digital_output_guard_invalid_operations () noexcept
 
bool test_digital_output_guard_multiple_guards_same_gpio () noexcept
 
void concurrent_guard_task (void *param)
 
bool test_digital_output_guard_concurrent_access () noexcept
 
bool test_digital_output_guard_performance () noexcept
 
bool test_digital_output_guard_stress () noexcept
 
void app_main (void)
 

Variables

static const char * TAG = "DIGITAL_OUTPUT_GUARD_Test"
 
static TestResults g_test_results
 
static constexpr bool ENABLE_BASIC_TESTS = true
 
static constexpr bool ENABLE_CONSTRUCTOR_TESTS = true
 
static constexpr bool ENABLE_STATE_TESTS = true
 
static constexpr bool ENABLE_MOVE_SEMANTICS_TESTS = true
 
static constexpr bool ENABLE_EDGE_CASE_TESTS = true
 
static constexpr bool ENABLE_CONCURRENT_TESTS = true
 
static constexpr bool ENABLE_PERFORMANCE_TESTS = true
 
static constexpr hf_pin_num_t TEST_GPIO_PIN_1 = 2
 
static constexpr hf_pin_num_t TEST_GPIO_PIN_2 = 4
 
static constexpr hf_pin_num_t TEST_GPIO_PIN_3 = 5
 
static volatile int g_concurrent_guard_counter = 0
 
static volatile bool g_concurrent_guard_test_running = false
 
static EspGpiog_concurrent_test_gpio = nullptr
 

Detailed Description

DigitalOutputGuard comprehensive test suite for ESP32-C6 DevKit-M-1.

This test suite provides comprehensive testing of the DigitalOutputGuard class including:

  • RAII pattern verification and automatic cleanup
  • GPIO state management and direction control
  • Error handling and edge cases
  • Move semantics and resource management
  • Concurrent access patterns
  • Performance and stress testing

Test Coverage Includes: ✓ Basic RAII functionality and automatic cleanup ✓ GPIO direction management and output mode enforcement ✓ State transitions (active/inactive) with proper error handling ✓ Constructor variants (reference and pointer) ✓ Move semantics and resource transfer ✓ Edge cases and error conditions ✓ Concurrent access with multiple tasks/threads ✓ Performance benchmarking and stress testing ✓ Cross-platform GPIO compatibility verification

PERFORMANCE TESTING AND EXPECTED OUTPUTS:

The performance tests measure critical timing characteristics of the DigitalOutputGuard:

  1. GUARD CREATION/DESTRUCTION PERFORMANCE:
    • Tests: 1000 iterations of guard creation and destruction
    • Measures: Complete RAII lifecycle timing
    • Expected: < 100 μs per cycle (typically 2-5 μs on ESP32-C6)
    • Output: "Guard creation/destruction: 1000 iterations in X.XX ms (avg: X.XX us per cycle)"
    • Significance: Validates efficient object lifecycle management
  2. STATE TRANSITION PERFORMANCE:
    • Tests: 1000 iterations of SetActive()/SetInactive() operations
    • Measures: GPIO state change timing
    • Expected: < 50 μs per operation (typically 1-3 μs on ESP32-C6)
    • Output: "State transitions: 1000 iterations in X.XX ms (avg: X.XX us per operation)"
    • Significance: Validates fast GPIO control without overhead
  3. STRESS TEST PERFORMANCE:
    • Tests: 2000 iterations with 5 state changes per iteration across 3 GPIO pins
    • Measures: Complex multi-GPIO scenario timing
    • Expected: < 200 μs per iteration (typically 5-15 μs on ESP32-C6)
    • Output: "Stress test: 2000 iterations in X.XX ms (avg: X.XX us per iteration)"
    • Significance: Validates performance under realistic usage patterns
  4. CONCURRENT ACCESS PERFORMANCE:
    • Tests: 3 concurrent tasks performing 100 operations each (300 total)
    • Measures: Multi-threaded access timing and thread safety
    • Expected: All operations complete successfully without race conditions
    • Output: "DigitalOutputGuard concurrent access test successful: 300 operations"
    • Significance: Validates thread-safe operation under concurrent load

PERFORMANCE INTERPRETATION:

Excellent Performance Indicators:

  • Guard creation/destruction < 5 μs: Minimal RAII overhead
  • State transitions < 3 μs: Direct GPIO control efficiency
  • Stress test < 15 μs: Good scalability under load
  • 100% concurrent test success: Robust thread safety

Performance Degradation Warnings:

  • Guard creation/destruction > 50 μs: Potential memory allocation issues
  • State transitions > 20 μs: GPIO driver inefficiency
  • Stress test > 100 μs: Resource contention or memory fragmentation
  • Concurrent test failures: Thread safety violations
Author
Nebiyu Tadesse
Date
2025

Function Documentation

◆ app_main()

void app_main ( void )

◆ concurrent_guard_task()

void concurrent_guard_task ( void * param)

◆ test_digital_output_guard_concurrent_access()

bool test_digital_output_guard_concurrent_access ( )
noexcept

◆ test_digital_output_guard_creation()

bool test_digital_output_guard_creation ( )
noexcept

◆ test_digital_output_guard_ensure_output_mode()

bool test_digital_output_guard_ensure_output_mode ( )
noexcept

◆ test_digital_output_guard_get_current_state()

bool test_digital_output_guard_get_current_state ( )
noexcept

◆ test_digital_output_guard_invalid_operations()

bool test_digital_output_guard_invalid_operations ( )
noexcept

◆ test_digital_output_guard_manual_state_control()

bool test_digital_output_guard_manual_state_control ( )
noexcept

◆ test_digital_output_guard_move_assignment()

bool test_digital_output_guard_move_assignment ( )
noexcept

◆ test_digital_output_guard_move_constructor()

bool test_digital_output_guard_move_constructor ( )
noexcept

◆ test_digital_output_guard_multiple_guards_same_gpio()

bool test_digital_output_guard_multiple_guards_same_gpio ( )
noexcept

◆ test_digital_output_guard_no_ensure_output_mode()

bool test_digital_output_guard_no_ensure_output_mode ( )
noexcept

◆ test_digital_output_guard_null_pointer_handling()

bool test_digital_output_guard_null_pointer_handling ( )
noexcept

◆ test_digital_output_guard_performance()

bool test_digital_output_guard_performance ( )
noexcept

◆ test_digital_output_guard_pointer_constructor()

bool test_digital_output_guard_pointer_constructor ( )
noexcept

◆ test_digital_output_guard_raii_cleanup()

bool test_digital_output_guard_raii_cleanup ( )
noexcept

◆ test_digital_output_guard_state_transitions()

bool test_digital_output_guard_state_transitions ( )
noexcept

◆ test_digital_output_guard_stress()

bool test_digital_output_guard_stress ( )
noexcept

Variable Documentation

◆ ENABLE_BASIC_TESTS

constexpr bool ENABLE_BASIC_TESTS = true
staticconstexpr

◆ ENABLE_CONCURRENT_TESTS

constexpr bool ENABLE_CONCURRENT_TESTS = true
staticconstexpr

◆ ENABLE_CONSTRUCTOR_TESTS

constexpr bool ENABLE_CONSTRUCTOR_TESTS = true
staticconstexpr

◆ ENABLE_EDGE_CASE_TESTS

constexpr bool ENABLE_EDGE_CASE_TESTS = true
staticconstexpr

◆ ENABLE_MOVE_SEMANTICS_TESTS

constexpr bool ENABLE_MOVE_SEMANTICS_TESTS = true
staticconstexpr

◆ ENABLE_PERFORMANCE_TESTS

constexpr bool ENABLE_PERFORMANCE_TESTS = true
staticconstexpr

◆ ENABLE_STATE_TESTS

constexpr bool ENABLE_STATE_TESTS = true
staticconstexpr

◆ g_concurrent_guard_counter

volatile int g_concurrent_guard_counter = 0
static

◆ g_concurrent_guard_test_running

volatile bool g_concurrent_guard_test_running = false
static

◆ g_concurrent_test_gpio

EspGpio* g_concurrent_test_gpio = nullptr
static

◆ g_test_results

TestResults g_test_results
static

◆ TAG

const char* TAG = "DIGITAL_OUTPUT_GUARD_Test"
static

◆ TEST_GPIO_PIN_1

constexpr hf_pin_num_t TEST_GPIO_PIN_1 = 2
staticconstexpr

◆ TEST_GPIO_PIN_2

constexpr hf_pin_num_t TEST_GPIO_PIN_2 = 4
staticconstexpr

◆ TEST_GPIO_PIN_3

constexpr hf_pin_num_t TEST_GPIO_PIN_3 = 5
staticconstexpr