@@ -256,12 +256,52 @@ void TestQgsField::convertCompatible()
256
256
257
257
// test special rules
258
258
259
- // conversion of longlong to int
259
+ // conversion of double to int
260
260
QgsField intField ( " int" , QVariant::Int, " int" );
261
+ // small double, should be rounded
262
+ QVariant smallDouble ( 45.7 );
263
+ QVERIFY ( intField.convertCompatible ( smallDouble ) );
264
+ QCOMPARE ( smallDouble.type (), QVariant::Int );
265
+ QCOMPARE ( smallDouble, QVariant ( 46 ) );
266
+ QVariant negativeSmallDouble ( -9345.754534525235235 );
267
+ QVERIFY ( intField.convertCompatible ( negativeSmallDouble ) );
268
+ QCOMPARE ( negativeSmallDouble.type (), QVariant::Int );
269
+ QCOMPARE ( negativeSmallDouble, QVariant ( -9346 ) );
270
+ // large double, cannot be converted
271
+ QVariant largeDouble ( 9999999999.99 );
272
+ QVERIFY ( !intField.convertCompatible ( largeDouble ) );
273
+ QCOMPARE ( largeDouble.type (), QVariant::Int );
274
+ QVERIFY ( largeDouble.isNull ( ) );
275
+
276
+ // conversion of string double value to int
277
+ QVariant notNumberString ( " notanumber" );
278
+ QVERIFY ( !intField.convertCompatible ( notNumberString ) );
279
+ QCOMPARE ( notNumberString.type (), QVariant::Int );
280
+ QVERIFY ( notNumberString.isNull ( ) );
281
+ // small double, should be rounded
282
+ QVariant smallDoubleString ( " 45.7" );
283
+ QVERIFY ( intField.convertCompatible ( smallDoubleString ) );
284
+ QCOMPARE ( smallDoubleString.type (), QVariant::Int );
285
+ QCOMPARE ( smallDoubleString, QVariant ( 46 ) );
286
+ QVariant negativeSmallDoubleString ( " -9345.754534525235235" );
287
+ QVERIFY ( intField.convertCompatible ( negativeSmallDoubleString ) );
288
+ QCOMPARE ( negativeSmallDoubleString.type (), QVariant::Int );
289
+ QCOMPARE ( negativeSmallDoubleString, QVariant ( -9346 ) );
290
+ // large double, cannot be converted
291
+ QVariant largeDoubleString ( " 9999999999.99" );
292
+ QVERIFY ( !intField.convertCompatible ( largeDoubleString ) );
293
+ QCOMPARE ( largeDoubleString.type (), QVariant::Int );
294
+ QVERIFY ( largeDoubleString.isNull ( ) );
295
+
296
+ // conversion of longlong to int
261
297
QVariant longlong ( 99999999999999999LL );
262
298
QVERIFY ( !intField.convertCompatible ( longlong ) );
263
299
QCOMPARE ( longlong.type (), QVariant::Int );
264
300
QVERIFY ( longlong.isNull ( ) );
301
+ QVariant smallLonglong ( 99LL );
302
+ QVERIFY ( intField.convertCompatible ( smallLonglong ) );
303
+ QCOMPARE ( smallLonglong.type (), QVariant::Int );
304
+ QCOMPARE ( smallLonglong, QVariant ( 99 ) );
265
305
// conversion of longlong to longlong field
266
306
QgsField longlongField ( " long" , QVariant::LongLong, " longlong" );
267
307
longlong = QVariant ( 99999999999999999LL );
0 commit comments