LCOV - code coverage report
Current view: top level - tests/src - test0017.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 97.9 % 97 95
Test Date: 2026-03-01 04:31:48 Functions: 100.0 % 3 3
Branches: 48.7 % 76 37

             Branch data     Line data    Source code
       1                 :             : #include "sute.h"
       2                 :             : #include <errno.h>
       3                 :             : 
       4                 :          15 : static void test_conversion(
       5                 :             :         int          value,
       6                 :             :         unsigned int base,
       7                 :             :         const char   *string)
       8                 :             : {
       9                 :             :         char buffer[66];  /* 64 bits + sign + null terminator */
      10                 :          15 :         itoa(value,buffer,base);
      11                 :             : 
      12                 :             :         /* Print original value in decimal and result in specified base */
      13                 :          15 :         printf("Value: %d (decimal)\n",value);
      14                 :          15 :         printf("Base %2u result: %s, %s\n",base,buffer,string);
      15                 :          15 :         printf("-------------------\n");
      16                 :          15 : }
      17                 :             : 
      18                 :             : /**
      19                 :             :  * @brief Test program for itoa function
      20                 :             :  *
      21                 :             :  * @note Tests edge cases and different bases with special focus on
      22                 :             :  *       negative numbers and MIN/MAX integer values
      23                 :             :  */
      24                 :           1 : static void test_itoa(void)
      25                 :             : {
      26                 :             :         /* Test extreme values */
      27                 :           1 :         printf("=== Testing extreme values ===\n");
      28                 :           1 :         test_conversion(INT_MAX,10,"2147483647");
      29                 :           1 :         test_conversion(INT_MIN,10,"-2147483648");
      30                 :           1 :         test_conversion(INT_MIN,16,"Should show in hex");
      31                 :             : 
      32                 :             :         /* Test regular cases */
      33                 :           1 :         printf("\n=== Testing regular values ===\n");
      34                 :           1 :         test_conversion(255,16,"FF");
      35                 :           1 :         test_conversion(255,2,"11111111");
      36                 :           1 :         test_conversion(-255,10,"-255");
      37                 :             : 
      38                 :             :         /* Test zero handling */
      39                 :           1 :         printf("\n=== Testing zero ===\n");
      40                 :           1 :         test_conversion(0,10,"0");
      41                 :           1 :         test_conversion(0,16,"0");
      42                 :           1 :         test_conversion(0,2,"0");
      43                 :             : 
      44                 :             :         /* Test larger bases */
      45                 :           1 :         printf("\n=== Testing different bases ===\n");
      46                 :           1 :         test_conversion(12345,36,"Maximum supported base");
      47                 :           1 :         test_conversion(12345,16,"Common hex value");
      48                 :           1 :         test_conversion(12345,8,"Octal");
      49                 :             : 
      50                 :             :         /* Test negative values in different bases */
      51                 :           1 :         printf("\n=== Testing negative values ===\n");
      52                 :           1 :         test_conversion(-12345,10,"Only base 10 shows negative sign");
      53                 :           1 :         test_conversion(-12345,16,"Should show unsigned hex");
      54                 :           1 :         test_conversion(-1,2,"All bits set");
      55                 :             : 
      56                 :           1 :         printf("\n=== Few more examples ===\n");
      57                 :             :         char buffer[33];  /* Buffer for 32-bit integer */
      58                 :             : 
      59                 :             :         /* Decimal conversion */
      60                 :           1 :         itoa(12345,buffer,10);
      61                 :           1 :         puts(buffer);
      62                 :             : 
      63                 :             :         /* Hexadecimal conversion */
      64                 :           1 :         itoa(255,buffer,16);
      65                 :           1 :         puts(buffer);
      66                 :             : 
      67                 :             :         /* Binary conversion */
      68                 :           1 :         itoa(15,buffer,2);
      69                 :           1 :         puts(buffer);
      70                 :             : 
      71                 :             :         /* Negative number */
      72                 :           1 :         itoa(-789,buffer,10);
      73                 :           1 :         puts(buffer);
      74                 :             : 
      75                 :             :         /* Zero case */
      76                 :           1 :         itoa(0,buffer,10);
      77                 :           1 :         puts(buffer);
      78                 :             : 
      79                 :             :         char str[100];
      80                 :           1 :         printf("Number: %d\nBase: %d\tConverted String: %s\n",1567,10,itoa(1567,str,10));
      81                 :           1 :         printf("Base: %d\t\tConverted String: %s\n",2,itoa(1567,str,2));
      82                 :           1 :         printf("Base: %d\t\tConverted String: %s\n",8,itoa(1567,str,8));
      83                 :           1 :         printf("Base: %d\tConverted String: %s\n",16,itoa(1567,str,16));
      84                 :             : 
      85                 :           1 :         printf("\n=== Invalid base handling ===\n");
      86                 :             :         char errbuf[4];
      87                 :           1 :         char *ret = NULL;
      88                 :             : 
      89                 :           1 :         errno = 0;
      90                 :           1 :         ret = itoa(123,errbuf,0);
      91         [ +  - ]:           1 :         printf("Base 0 result: '%s', errno: %d\n",ret ? ret : "NULL",errno);
      92                 :             : 
      93                 :           1 :         errno = 0;
      94                 :           1 :         ret = itoa(123,errbuf,1);
      95         [ +  - ]:           1 :         printf("Base 1 result: '%s', errno: %d\n",ret ? ret : "NULL",errno);
      96                 :             : 
      97                 :           1 :         errno = 0;
      98                 :           1 :         ret = itoa(123,errbuf,37);
      99         [ +  - ]:           1 :         printf("Base 37 result: '%s', errno: %d\n",ret ? ret : "NULL",errno);
     100                 :             : 
     101                 :           1 :         printf("\n=== NULL buffer handling ===\n");
     102                 :           1 :         errno = 0;
     103                 :           1 :         ret = itoa(123,NULL,10);
     104         [ -  + ]:           1 :         printf("NULL buffer result: %s, errno: %d\n",ret ? "non-NULL" : "NULL",errno);
     105                 :           1 : }
     106                 :             : 
     107                 :             : /**
     108                 :             :  * @brief Test program for itoa function
     109                 :             :  *
     110                 :             :  */
     111                 :           1 : Return test0017(void)
     112                 :             : {
     113                 :           1 :         INITTEST;
     114                 :             : 
     115                 :           1 :         create(char,captured_stdout);
     116                 :           1 :         create(char,captured_stderr);
     117                 :             : 
     118                 :           1 :         create(char,pattern);
     119                 :             : 
     120   [ +  -  +  - ]:           1 :         ASSERT(SUCCESS == function_capture(test_itoa,captured_stdout,captured_stderr));
     121                 :             : 
     122         [ -  + ]:           1 :         if(captured_stderr->length > 0)
     123                 :             :         {
     124                 :           0 :                 echo(STDERR,"ERROR: Stderr buffer is not empty. It contains characters: %zu\n",captured_stderr->length);
     125                 :           0 :                 status = FAILURE;
     126                 :             :                 #if 0
     127                 :             :                 echo(STDOUT,"%s\n",getcstring(captured_stderr));
     128                 :             :                 #endif
     129                 :             :         }
     130                 :             : 
     131                 :           1 :         const char *template_name = "templates/0017.txt";
     132   [ +  -  +  - ]:           1 :         ASSERT(SUCCESS == get_file_content(template_name,pattern));
     133                 :             : 
     134                 :             :         // Match the result against the pattern
     135   [ +  -  +  - ]:           1 :         ASSERT(SUCCESS == match_pattern(captured_stdout,pattern,template_name));
     136                 :             : 
     137                 :             :         char buffer[8];
     138                 :           1 :         char *result = NULL;
     139                 :             : 
     140                 :           1 :         errno = 0;
     141                 :           1 :         buffer[0] = 'X';
     142                 :           1 :         result = itoa(123,buffer,0);
     143   [ +  -  +  - ]:           1 :         ASSERT(result == buffer);
     144   [ +  -  +  - ]:           1 :         ASSERT(errno == EINVAL);
     145   [ +  -  +  - ]:           1 :         ASSERT(buffer[0] == '\0');
     146                 :             : 
     147                 :           1 :         errno = 0;
     148                 :           1 :         buffer[0] = 'Y';
     149                 :           1 :         result = itoa(123,buffer,1);
     150   [ +  -  +  - ]:           1 :         ASSERT(result == buffer);
     151   [ +  -  +  - ]:           1 :         ASSERT(errno == EINVAL);
     152   [ +  -  +  - ]:           1 :         ASSERT(buffer[0] == '\0');
     153                 :             : 
     154                 :           1 :         errno = 0;
     155                 :           1 :         buffer[0] = 'Z';
     156                 :           1 :         result = itoa(123,buffer,37);
     157   [ +  -  +  - ]:           1 :         ASSERT(result == buffer);
     158   [ +  -  +  - ]:           1 :         ASSERT(errno == EINVAL);
     159   [ +  -  +  - ]:           1 :         ASSERT(buffer[0] == '\0');
     160                 :             : 
     161                 :           1 :         errno = 0;
     162                 :           1 :         result = itoa(123,NULL,10);
     163   [ +  -  +  - ]:           1 :         ASSERT(result == NULL);
     164   [ +  -  +  - ]:           1 :         ASSERT(errno == EINVAL);
     165                 :             : 
     166                 :           1 :         del(pattern);
     167                 :             : 
     168                 :           1 :         del(captured_stdout);
     169                 :           1 :         del(captured_stderr);
     170                 :             : 
     171   [ +  -  -  +  :           1 :         RETURN_STATUS;
          -  -  -  +  +  
                      - ]
     172                 :             : }
        

Generated by: LCOV version 2.0-1