@@ -12,6 +12,9 @@
* (at your option) any later version. *
* *
***************************************************************************/
#include < limits>
#include < QtTest/QtTest>
#include < QObject>
#include < QString>
@@ -42,6 +45,9 @@ class TestQgsGdalProvider : public QObject
void scaleDataType (); // test resultant data types for int raster with float scale (#11573)
void warpedVrt (); // test loading raster which requires a warped vrt
void noData ();
void invalidNoDataInSourceIgnored ();
void isRepresentableValue ();
private:
QString mTestDataDir ;
@@ -104,5 +110,85 @@ void TestQgsGdalProvider::warpedVrt()
delete provider;
}
void TestQgsGdalProvider::noData ()
{
QString raster = QString ( TEST_DATA_DIR ) + " /raster/band1_byte_ct_epsg4326.tif" ;
QgsDataProvider* provider = QgsProviderRegistry::instance ()->provider ( " gdal" , raster );
QVERIFY ( provider->isValid () );
QgsRasterDataProvider* rp = dynamic_cast < QgsRasterDataProvider* >( provider );
QVERIFY ( rp );
QCOMPARE ( rp->srcNoDataValue ( 1 ), static_cast <double >( 255 ) );
delete provider;
}
void TestQgsGdalProvider::invalidNoDataInSourceIgnored ()
{
QString raster = QString ( TEST_DATA_DIR ) + " /raster/byte_with_nan_nodata.tif" ;
QgsDataProvider* provider = QgsProviderRegistry::instance ()->provider ( " gdal" , raster );
QVERIFY ( provider->isValid () );
QgsRasterDataProvider* rp = dynamic_cast < QgsRasterDataProvider* >( provider );
QVERIFY ( rp );
QCOMPARE ( rp->srcHasNoDataValue ( 1 ), false );
delete provider;
}
void TestQgsGdalProvider::isRepresentableValue ()
{
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::Byte ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::Byte ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::Byte ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -1 ., QGis::Byte ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( 0 ., QGis::Byte ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 255 ., QGis::Byte ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 256 ., QGis::Byte ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::UInt16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::UInt16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::UInt16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -1 ., QGis::UInt16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( 0 ., QGis::UInt16 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 65535 ., QGis::UInt16 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 65536 ., QGis::UInt16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::Int16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::Int16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::Int16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -32769 ., QGis::Int16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -32768 ., QGis::Int16 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 32767 ., QGis::Int16 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 32768 ., QGis::Int16 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::UInt32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::UInt32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::UInt32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -1 ., QGis::UInt32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( 0 ., QGis::UInt32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 4294967295 ., QGis::UInt32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 4294967296 ., QGis::UInt32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::Int32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::Int32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::Int32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -2147483649 ., QGis::Int32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -2147483648 ., QGis::Int32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 2147483647 ., QGis::Int32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( 2147483648 ., QGis::Int32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( 4294967296 ., QGis::UInt32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::Float32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::Float32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::Float32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::max (), QGis::Float32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::max (), QGis::Float32 ), false );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<float >::max (), QGis::Float32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<float >::max (), QGis::Float32 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::infinity (), QGis::Float64 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::infinity (), QGis::Float64 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::quiet_NaN (), QGis::Float64 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( -std::numeric_limits<double >::max (), QGis::Float64 ), true );
QCOMPARE ( QgsRaster::isRepresentableValue ( std::numeric_limits<double >::max (), QGis::Float64 ), true );
}
QTEST_MAIN ( TestQgsGdalProvider )
#include " testqgsgdalprovider.moc"