LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/pgtypeslib - nan_test.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 20devel Lines: 100.0 % 55 55
Test Date: 2026-07-25 22:15:46 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 62.2 % 74 46

             Branch data     Line data    Source code
       1                 :             : #include <stdio.h>
       2                 :             : #include <stdlib.h>
       3                 :             : #include <float.h>
       4                 :             : #include <math.h>
       5                 :             : #include <pgtypes_numeric.h>
       6                 :             : #include <decimal.h>
       7                 :             : 
       8                 :             : exec sql include ../regression;
       9                 :             : 
      10                 :             : int
      11                 :           2 : main(void)
      12                 :             : {
      13                 :             :     exec sql begin declare section;
      14                 :             :     int id, loopcount;
      15                 :             :     double  d;
      16                 :             :     numeric *num;
      17                 :             :     char    val[16];
      18                 :             :     exec sql end declare section;
      19                 :             : 
      20                 :           2 :     ECPGdebug(1, stderr);
      21                 :             :     exec sql whenever sqlerror do sqlprint();
      22                 :             : 
      23                 :           2 :     exec sql connect to REGRESSDB1;
      24         [ -  + ]:           2 : 
      25                 :           2 :     exec sql create table nantest1 (id int4, d float8);
      26         [ -  + ]:           2 :     exec sql insert into nantest1 (id, d) values (1, 'nan'::float8), (2, 'infinity'::float8), (3, '-infinity'::float8);
      27         [ -  + ]:           2 : 
      28                 :             :     exec sql declare cur cursor for select id, d, d from nantest1;
      29                 :           2 :     exec sql open cur;
      30   [ -  +  +  - ]:           8 :     for (loopcount = 0; loopcount < 100; loopcount++)
      31                 :             :     {
      32                 :           8 :         exec sql fetch from cur into :id, :d, :val;
      33   [ -  +  +  + ]:           8 :         if (sqlca.sqlcode)
      34                 :           2 :             break;
      35         [ +  + ]:           6 :         if (isnan(d))
      36                 :           2 :             printf("%d  NaN '%s'\n", id, val);
      37   [ +  -  +  - ]:           4 :         else if (isinf(d))
      38         [ +  + ]:           4 :             printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val);
      39                 :             : 
      40                 :           6 :         exec sql insert into nantest1 (id, d) values (:id + 3, :d);
      41         [ -  + ]:           6 :         exec sql insert into nantest1 (id, d) values (:id + 6, :val);
      42         [ -  + ]:           6 :     }
      43                 :           2 :     exec sql close cur;
      44         [ -  + ]:           2 : 
      45                 :           2 :     exec sql open cur;
      46   [ -  +  +  - ]:          20 :     for (loopcount = 0; loopcount < 100; loopcount++)
      47                 :             :     {
      48                 :          20 :         exec sql fetch from cur into :id, :d, :val;
      49   [ -  +  +  + ]:          20 :         if (sqlca.sqlcode)
      50                 :           2 :             break;
      51   [ +  +  +  + ]:          18 :         if (isinf(d))
      52         [ +  + ]:          12 :             printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val);
      53         [ +  + ]:          18 :         if (isnan(d))
      54                 :           6 :             printf("%d  NaN '%s'\n", id, val);
      55                 :             :     }
      56                 :           2 :     exec sql close cur;
      57         [ -  + ]:           2 : 
      58                 :           2 :     num = PGTYPESnumeric_new();
      59                 :             : 
      60                 :           2 :     exec sql create table nantest2 (id int4, d numeric);
      61         [ -  + ]:           2 :     exec sql insert into nantest2 (id, d) values (4, 'nan'::numeric);
      62         [ -  + ]:           2 : 
      63                 :           2 :     exec sql select id, d, d into :id, :num, :val from nantest2 where id = 4;
      64         [ -  + ]:           2 : 
      65         [ +  - ]:           2 :     printf("%d %s '%s'\n", id, (num->sign == NUMERIC_NAN ? "NaN" : "not NaN"), val);
      66                 :             : 
      67                 :           2 :     exec sql insert into nantest2 (id, d) values (5, :num);
      68         [ -  + ]:           2 :     exec sql insert into nantest2 (id, d) values (6, :val);
      69         [ -  + ]:           2 : 
      70                 :             :     exec sql declare cur1 cursor for select id, d, d from nantest2;
      71                 :           2 :     exec sql open cur1;
      72   [ -  +  +  - ]:           8 :     for (loopcount = 0; loopcount < 100; loopcount++)
      73                 :             :     {
      74                 :           8 :         exec sql fetch from cur1 into :id, :num, :val;
      75   [ -  +  +  + ]:           8 :         if (sqlca.sqlcode)
      76                 :           2 :             break;
      77         [ +  - ]:           6 :         printf("%d %s '%s'\n", id, (num->sign == NUMERIC_NAN ? "NaN" : "not NaN"), val);
      78                 :             :     }
      79                 :           2 :     exec sql close cur1;
      80         [ -  + ]:           2 : 
      81                 :           2 :     PGTYPESnumeric_free(num);
      82                 :             : 
      83                 :           2 :     exec sql rollback;
      84         [ -  + ]:           2 :     exec sql disconnect;
      85         [ -  + ]:           2 : 
      86                 :           2 :     return 0;
      87                 :             : }
        

Generated by: LCOV version 2.0-1