LCOV - code coverage report
Current view: top level - test - test_sensors.c (source / functions) Coverage Total Hit
Test: combined.info Lines: 100.0 % 108 108
Test Date: 2025-05-05 14:46:49 Functions: 100.0 % 13 13

            Line data    Source code
       1              : #include "unity.h"
       2              : #include <sys/stat.h>
       3              : #include "sensors_input.h"
       4              : #include "dbc.h"
       5              : 
       6              : // Declaration of functions implemented in sensors.c that will be tested
       7              : can_msg conv2CANCarClusterData(bool aeb_system_enabled);
       8              : can_msg conv2CANVelocityData(bool vehicle_direction, double relative_velocity, double relative_acceleration);
       9              : can_msg conv2CANObstacleData(bool has_obstacle, double obstacle_distance);
      10              : can_msg conv2CANPedalsData(bool brake_pedal, bool accelerator_pedal);
      11              : 
      12              : 
      13              : // Global variables
      14              : bool test_on_off_aeb_system;
      15              : bool test_vehicle_direction;
      16              : bool test_has_obstacle;
      17              : bool test_brake_pedal, test_accelerator_pedal;
      18              : double test_relative_velocity = 108.0;
      19              : double test_obstacle_distance = 60;
      20              : double test_relative_acceleration; 
      21              : 
      22              : /**
      23              :  * @brief setUp function to initialize AEB input state before each test.
      24              :  */
      25           10 : void setUp()
      26              : {
      27              :     // empty setUp
      28           10 : }
      29              : 
      30              : /**
      31              :  * @brief tearDown function to clean up after each test.
      32              :  */
      33           10 : void tearDown()
      34              : {
      35              :     // empty tearDown
      36           10 : }
      37              : 
      38              : /** 
      39              :  * @test
      40              :  * @brief Tests for the function conv2CANCarClusterData on sensors.c 
      41              :  * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
      42              :  * \anchor test_conv2CANCarClusterData_AEB_on
      43              :  * [TC_SENSORS_001](@ref TC_SENSORS_001)
      44              : */
      45            1 : void test_conv2CANCarClusterData_AEB_on()
      46              : {
      47            1 :     test_on_off_aeb_system = true;
      48            1 :     can_msg result = conv2CANCarClusterData(test_on_off_aeb_system);
      49              :     
      50              :     // Test Case ID: TC_SENSORS_001
      51            1 :     TEST_ASSERT_EQUAL_INT(ID_CAR_C, result.identifier);
      52            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[0]); // Check if AEB is on
      53              : 
      54            1 : }
      55              : 
      56              : /** @test 
      57              :  * \anchor test_conv2CANCarClusterData_AEB_off
      58              :  * [TC_SENSORS_002](@ref TC_SENSORS_002)
      59              : */
      60            1 : void test_conv2CANCarClusterData_AEB_off()
      61              : {
      62            1 :     test_on_off_aeb_system = false;
      63            1 :     can_msg result = conv2CANCarClusterData(test_on_off_aeb_system);
      64              :     
      65              :     // Test Case ID: TC_SENSORS_002
      66            1 :     TEST_ASSERT_EQUAL_INT(ID_CAR_C, result.identifier);
      67            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[0]); // Check if AEB is off
      68              :     
      69            1 : }
      70              : 
      71              : /** 
      72              :  * @test
      73              :  * @brief Tests for the function conv2CANVelocityData on sensors.c 
      74              :  * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
      75              :  * \anchor test_conv2CANVelocityData_Forward
      76              :  * [TC_SENSORS_003](@ref TC_SENSORS_003)
      77              : */
      78            1 : void test_conv2CANVelocityData_Forward() 
      79              : {
      80            1 :     test_vehicle_direction = true;
      81            1 :     test_relative_acceleration = 9.1234;
      82            1 :     can_msg result = conv2CANVelocityData(test_vehicle_direction, test_relative_velocity, test_relative_acceleration);
      83              :     
      84              :     // Test Case ID: TC_SENSORS_003
      85              : 
      86              :     // vehicle direction data
      87            1 :     TEST_ASSERT_EQUAL_INT(ID_SPEED_S, result.identifier);
      88            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[2]); // Check if vehicle direction is forward
      89              :     
      90              :     // relative velocity data
      91            1 :     unsigned int expected_speed = test_relative_velocity / RES_SPEED_S;
      92            1 :     TEST_ASSERT_EQUAL_UINT8(expected_speed & 0xFF, result.dataFrame[0]); // LS Byte
      93            1 :     TEST_ASSERT_EQUAL_UINT8((expected_speed >> 8) & 0xFF, result.dataFrame[1]); // MS Byte
      94              : 
      95              :     // relative acceleration data
      96            1 :     unsigned int expected_accel = ((test_relative_acceleration * RES_ACCELERATION_DIV_S) - OFFSET_ACCELERATION_S);
      97            1 :     TEST_ASSERT_EQUAL_UINT8(expected_accel & 0xFF, result.dataFrame[3]); // LS Byte
      98            1 :     TEST_ASSERT_EQUAL_UINT8((expected_accel >> 8) & 0xFF, result.dataFrame[4]); // MS Byte
      99            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[5]); // Acceleration is positive
     100            1 : }
     101              : 
     102              : /** @test 
     103              :  * \anchor test_conv2CANVelocityData_Reverse
     104              :  * [TC_SENSORS_004](@ref TC_SENSORS_004)
     105              : */
     106            1 : void test_conv2CANVelocityData_Reverse() 
     107              : {
     108            1 :     test_vehicle_direction = false;
     109            1 :     test_relative_acceleration = -1.1234;
     110            1 :     can_msg result = conv2CANVelocityData(test_vehicle_direction, test_relative_velocity, test_relative_acceleration);
     111              :     
     112              :     // Test Case ID: TC_SENSORS_004
     113              : 
     114              :     // vehicle direction data
     115            1 :     TEST_ASSERT_EQUAL_INT(ID_SPEED_S, result.identifier);
     116            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[2]); // Check if vehicle direction is reverse
     117              :     
     118              :     // relative velocity data
     119            1 :     unsigned int expected_speed = test_relative_velocity / RES_SPEED_S;
     120            1 :     TEST_ASSERT_EQUAL_UINT8(expected_speed & 0xFF, result.dataFrame[0]); // least significant byte
     121            1 :     TEST_ASSERT_EQUAL_UINT8((expected_speed >> 8) & 0xFF, result.dataFrame[1]); // most significant bytes
     122              : 
     123              :     // relative acceleration data
     124            1 :     double accel_abs = -test_relative_acceleration; // convert to positive
     125            1 :     unsigned int expected_accel = ((accel_abs * RES_ACCELERATION_DIV_S) - OFFSET_ACCELERATION_S);
     126            1 :     TEST_ASSERT_EQUAL_UINT8(expected_accel & 0xFF, result.dataFrame[3]); // LS Byte
     127            1 :     TEST_ASSERT_EQUAL_UINT8((expected_accel >> 8) & 0xFF, result.dataFrame[4]); // MS Byte
     128            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[5]); // Acceleration is negative
     129            1 : }
     130              : 
     131              : /** 
     132              :  * @test
     133              :  * @brief Tests for the function conv2CANObstacleData on sensors.c 
     134              :  * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
     135              :  * \anchor test_conv2CANObstacleData_Present
     136              :  * [TC_SENSORS_005](@ref TC_SENSORS_005)
     137              : */
     138            1 : void test_conv2CANObstacleData_Present() 
     139              : {
     140            1 :     test_has_obstacle = true;
     141            1 :     can_msg result = conv2CANObstacleData(test_has_obstacle, test_obstacle_distance);
     142              :     
     143              :     // Test Case ID: TC_SENSORS_005
     144              : 
     145            1 :     TEST_ASSERT_EQUAL_INT(ID_OBSTACLE_S, result.identifier);
     146            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[2]); // Check if obstacle is present
     147              :     
     148            1 :     unsigned int expected_distance = test_obstacle_distance / RES_OBSTACLE_S;
     149            1 :     TEST_ASSERT_EQUAL_UINT8(expected_distance & 0xFF, result.dataFrame[0]); // least significant byte
     150            1 :     TEST_ASSERT_EQUAL_UINT8((expected_distance >> 8) & 0xFF, result.dataFrame[1]); // most significant byte
     151            1 : }
     152              : 
     153              : /** @test 
     154              :  * \anchor test_conv2CANObstacleData_NotPresent
     155              :  * [TC_SENSORS_006](@ref TC_SENSORS_006)
     156              : */
     157            1 : void test_conv2CANObstacleData_NotPresent() 
     158              : {
     159            1 :     test_has_obstacle = false;
     160            1 :     can_msg result = conv2CANObstacleData(test_has_obstacle, test_obstacle_distance);
     161              :     
     162              :     // Test Case ID: TC_SENSORS_006
     163              : 
     164            1 :     TEST_ASSERT_EQUAL_INT(ID_OBSTACLE_S, result.identifier);
     165            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[2]); // Check if obstacle is not present
     166              :     
     167            1 :     unsigned int expected_distance = test_obstacle_distance / RES_OBSTACLE_S;
     168            1 :     TEST_ASSERT_EQUAL_UINT8(expected_distance & 0xFF, result.dataFrame[0]); // least significant byte
     169            1 :     TEST_ASSERT_EQUAL_UINT8((expected_distance >> 8) & 0xFF, result.dataFrame[1]); // most significant byte
     170            1 : }
     171              : 
     172              : /** 
     173              :  * @test
     174              :  * @brief Tests for the function conv2CANPedalsData on sensors.c 
     175              :  * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
     176              :  * \anchor test_conv2CANPedalsData_BrakeAndAccelerator
     177              :  * [TC_SENSORS_007](@ref TC_SENSORS_007)
     178              : */
     179            1 : void test_conv2CANPedalsData_BrakeAndAccelerator() 
     180              : {
     181            1 :     test_brake_pedal = true;
     182            1 :     test_accelerator_pedal = true;
     183            1 :     can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
     184              :     
     185              :     // Test Case ID: TC_SENSORS_007
     186              : 
     187            1 :     TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
     188            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[0]); // Accelerator pedal active
     189            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[1]); // Brake pedal active
     190            1 : }
     191              : 
     192              : /** @test 
     193              :  * \anchor test_conv2CANPedalsData_BrakeOnly
     194              :  * [TC_SENSORS_008](@ref TC_SENSORS_008)
     195              : */
     196            1 : void test_conv2CANPedalsData_BrakeOnly() 
     197              : {
     198            1 :     test_brake_pedal = true;
     199            1 :     test_accelerator_pedal = false;
     200            1 :     can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
     201              :     
     202              :     // Test Case ID: TC_SENSORS_008
     203              : 
     204            1 :     TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
     205            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[0]); // Accelerator pedal inactive
     206            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[1]); // Brake pedal active
     207            1 : }
     208              : 
     209              : /** @test 
     210              :  * \anchor test_conv2CANPedalsData_AcceleratorOnly
     211              :  * [TC_SENSORS_009](@ref TC_SENSORS_009)
     212              : */
     213            1 : void test_conv2CANPedalsData_AcceleratorOnly() 
     214              : {
     215            1 :     test_brake_pedal = false;
     216            1 :     test_accelerator_pedal = true;
     217            1 :     can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
     218              :     
     219              :     // Test Case ID: TC_SENSORS_009
     220              : 
     221            1 :     TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
     222            1 :     TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[0]); // Accelerator pedal active
     223            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[1]); // Brake pedal inactive
     224            1 : }
     225              : 
     226              : /** @test 
     227              :  * \anchor test_conv2CANPedalsData_NoneActive
     228              :  * [TC_SENSORS_010](@ref TC_SENSORS_010)
     229              : */
     230            1 : void test_conv2CANPedalsData_NoneActive() 
     231              : {
     232            1 :     test_brake_pedal = false;
     233            1 :     test_accelerator_pedal = false;
     234            1 :     can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
     235              :     
     236              :     // Test Case ID: TC_SENSORS_010
     237              : 
     238            1 :     TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
     239            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[0]); // Accelerator pedal inactive
     240            1 :     TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[1]); // Brake pedal inactive
     241            1 : }
     242              : 
     243              : 
     244            1 : int main()
     245              : {
     246            1 :     UNITY_BEGIN();
     247            1 :     RUN_TEST(test_conv2CANCarClusterData_AEB_on);
     248            1 :     RUN_TEST(test_conv2CANCarClusterData_AEB_off);
     249            1 :     RUN_TEST(test_conv2CANVelocityData_Forward);
     250            1 :     RUN_TEST(test_conv2CANVelocityData_Reverse);
     251            1 :     RUN_TEST(test_conv2CANObstacleData_Present);
     252            1 :     RUN_TEST(test_conv2CANObstacleData_NotPresent);
     253            1 :     RUN_TEST(test_conv2CANPedalsData_BrakeAndAccelerator);
     254            1 :     RUN_TEST(test_conv2CANPedalsData_BrakeOnly);
     255            1 :     RUN_TEST(test_conv2CANPedalsData_AcceleratorOnly);
     256            1 :     RUN_TEST(test_conv2CANPedalsData_NoneActive);
     257            1 :     return UNITY_END();
     258              : 
     259              : }
        

Generated by: LCOV version 2.3.1-beta