41 const QString &expectedKey, QString expectedUri )
44 mReport += QLatin1String(
"\n\n" );
49 if ( !verifiedProvider || !verifiedProvider->
isValid() )
51 error( QStringLiteral(
"Cannot load provider %1 with URI: %2" ).arg( verifiedKey, verifiedUri ), mReport );
57 if ( !expectedProvider || !expectedProvider->
isValid() )
59 error( QStringLiteral(
"Cannot load provider %1 with URI: %2" ).arg( expectedKey, expectedUri ), mReport );
63 mReport += QStringLiteral(
"Verified URI: %1<br>" ).arg( verifiedUri.replace(
'&', QLatin1String(
"&" ) ) );
64 mReport += QStringLiteral(
"Expected URI: %1<br>" ).arg( expectedUri.replace(
'&', QLatin1String(
"&" ) ) );
66 mReport += QLatin1String(
"<br>" );
67 mReport += QStringLiteral(
"<table style='%1'>\n" ).arg( mTabStyle );
68 mReport += compareHead();
70 compare( QStringLiteral(
"Band count" ), verifiedProvider->
bandCount(), expectedProvider->
bandCount(), mReport, ok );
72 compare( QStringLiteral(
"Width" ), verifiedProvider->
xSize(), expectedProvider->
xSize(), mReport, ok );
73 compare( QStringLiteral(
"Height" ), verifiedProvider->
ySize(), expectedProvider->
ySize(), mReport, ok );
77 if ( verifiedProvider->
extent() != expectedProvider->
extent() ) ok =
false;
80 mReport += QLatin1String(
"</table>\n" );
82 if ( !ok )
return false;
85 for (
int band = 1; band <= expectedProvider->
bandCount(); band++ )
87 mReport += QStringLiteral(
"<h3>Band %1</h3>\n" ).arg( band );
88 mReport += QStringLiteral(
"<table style='%1'>\n" ).arg( mTabStyle );
89 mReport += compareHead();
93 compare( QStringLiteral(
"Source data type" ), verifiedProvider->
sourceDataType( band ), expectedProvider->
sourceDataType( band ), mReport, typesOk );
94 compare( QStringLiteral(
"Data type" ), verifiedProvider->
dataType( band ), expectedProvider->
dataType( band ), mReport, typesOk );
111 compare( QStringLiteral(
"Minimum value" ), verifiedStats.
minimumValue, expectedStats.
minimumValue, mReport, statsOk, tol );
113 compare( QStringLiteral(
"Maximum value" ), verifiedStats.
maximumValue, expectedStats.
maximumValue, mReport, statsOk, tol );
118 tol = tolerance( expectedStats.
mean );
119 compare( QStringLiteral(
"Mean" ), verifiedStats.
mean, expectedStats.
mean, mReport, statsOk, tol );
122 tol = tolerance( expectedStats.
stdDev, 1 );
123 compare( QStringLiteral(
"Standard deviation" ), verifiedStats.
stdDev, expectedStats.
stdDev, mReport, statsOk, tol );
125 mReport += QLatin1String(
"</table>" );
126 mReport += QLatin1String(
"<br>" );
128 if ( !statsOk || !typesOk || !noDataOk )
134 mReport += QLatin1String(
"<table><tr>" );
135 mReport += QLatin1String(
"<td>Data comparison</td>" );
136 mReport += QStringLiteral(
"<td style='%1 %2 border: 1px solid'>correct value</td>" ).arg( mCellStyle, mOkStyle );
137 mReport += QLatin1String(
"<td></td>" );
138 mReport += QStringLiteral(
"<td style='%1 %2 border: 1px solid'>wrong value<br>expected value</td></tr>" ).arg( mCellStyle, mErrStyle );
139 mReport += QLatin1String(
"</tr></table>" );
140 mReport += QLatin1String(
"<br>" );
142 const int width = expectedProvider->
xSize();
143 const int height = expectedProvider->
ySize();
144 std::unique_ptr< QgsRasterBlock > expectedBlock( expectedProvider->
block( band, expectedProvider->
extent(), width, height ) );
145 std::unique_ptr< QgsRasterBlock > verifiedBlock( verifiedProvider->
block( band, expectedProvider->
extent(), width, height ) );
147 if ( !expectedBlock || !expectedBlock->isValid() ||
148 !verifiedBlock || !verifiedBlock->isValid() )
151 mReport += QLatin1String(
"cannot read raster block" );
156 QString htmlTable = QStringLiteral(
"<table style='%1'>" ).arg( mTabStyle );
157 for (
int row = 0; row < height; row ++ )
159 htmlTable += QLatin1String(
"<tr>" );
160 for (
int col = 0; col < width; col ++ )
163 const double verifiedVal = verifiedBlock->value( row, col );
164 const double expectedVal = expectedBlock->value( row, col );
167 if ( compare( verifiedVal, expectedVal, 0 ) )
169 valStr = QString::number( verifiedVal );
175 valStr = QStringLiteral(
"%1<br>%2" ).arg( verifiedVal ).arg( expectedVal );
177 htmlTable += QStringLiteral(
"<td style='%1 %2'>%3</td>" ).arg( mCellStyle, cellOk ? mOkStyle : mErrStyle, valStr );
179 htmlTable += QLatin1String(
"</tr>" );
181 htmlTable += QLatin1String(
"</table>" );
183 mReport += htmlTable;
185 delete verifiedProvider;
186 delete expectedProvider;