LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/pgtypeslib - nan_test.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 55 55
Test Date: 2026-03-03 14:15:12 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit

            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