
#include "gdal.h"
#include "cpl_conv.h"

void nans32()
{

    GDALDriverH hDriver = GDALGetDriverByName( "GTiff" );
    
    int nXSize = 10000;
    int nYSize = 10000;
    GDALDatasetH hOutDS = GDALCreate( hDriver, "nans_32.tif", 
                            nXSize, nYSize, 1, GDT_Float32, 
                            NULL );
    if( hOutDS == NULL )
        exit( 1 );

    GDALRasterBandH hBand = GDALGetRasterBand(hOutDS, 1);
    
    float* data = (float*)CPLMalloc(nXSize * sizeof(float));
    int i;
    double inf = 1. / 0.;
    for(i=0;i<nXSize;i++)
        data[i] = 50 + i;
    data[nXSize-1] = inf / inf;

    int iLine;
    for(iLine=0;iLine<nYSize;iLine++)
    {
        GDALDatasetRasterIO( hOutDS, GF_Write, 0, iLine, nXSize, 1, 
                                    data, nXSize, 1, GDT_Float32, 
                                    1, NULL, 0, 0, 0 );

    }

    CPLFree(data);
    GDALClose( hOutDS );
}

void nans64()
{

    GDALDriverH hDriver = GDALGetDriverByName( "GTiff" );
    
    int nXSize = 10000;
    int nYSize = 5000;
    GDALDatasetH hOutDS = GDALCreate( hDriver, "nans_64.tif", 
                            nXSize, nYSize, 1, GDT_Float64, 
                            NULL );
    if( hOutDS == NULL )
        exit( 1 );

    GDALRasterBandH hBand = GDALGetRasterBand(hOutDS, 1);
    
    double* data = (double*)CPLMalloc(nXSize * sizeof(double));
    int i;
    double inf = 1. / 0.;
    for(i=0;i<nXSize;i++)
        data[i] = 50 + i;
    data[nXSize-1] = inf / inf;

    int iLine;
    for(iLine=0;iLine<nYSize;iLine++)
    {
        GDALDatasetRasterIO( hOutDS, GF_Write, 0, iLine, nXSize, 1, 
                                    data, nXSize, 1, GDT_Float64, 
                                    1, NULL, 0, 0, 0 );

    }

    CPLFree(data);
    GDALClose( hOutDS );
}

/************************************************************************/
/*                                main()                                */
/************************************************************************/

int main( int argc, char ** argv )

{
    GDALAllRegister();
    GDALSetCacheMax( 100000000 );
    argc = GDALGeneralCmdLineProcessor( argc, &argv, 0 );

    GDALDumpOpenDatasets( stderr );
    GDALDestroyDriverManager();
}

