summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
index 427bc092a5..89978319a0 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
@@ -126,6 +126,8 @@ private slots:
void formatValueTrimStrings();
void precisionPolicy_data() { generic_data(); }
void precisionPolicy();
+ void infinityAndNan_data() { generic_data(); }
+ void infinityAndNan();
void multipleThreads_data() { generic_data(); }
void multipleThreads();
@@ -1467,6 +1469,46 @@ void tst_QSqlDatabase::precisionPolicy()
db.setNumericalPrecisionPolicy(oldPrecision);
}
+void tst_QSqlDatabase::infinityAndNan()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::PostgreSQL)
+ QSKIP("checking for infinity/nan currently only works for PostgreSQL");
+
+ QSqlQuery q(db);
+ const QString tableName(qTableName("infititytest", __FILE__, db));
+ tst_Databases::safeDropTables(db, {tableName});
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, val double precision)").arg(tableName)));
+
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(tableName)));
+
+ q.bindValue(0, 1);
+ q.bindValue(1, qQNaN());
+ QVERIFY_SQL(q, exec());
+ q.bindValue(0, 2);
+ q.bindValue(1, qInf());
+ QVERIFY_SQL(q, exec());
+ q.bindValue(0, 3);
+ q.bindValue(1, -qInf());
+ QVERIFY_SQL(q, exec());
+
+ QVERIFY_SQL(q, exec(QString("SELECT val FROM %1 ORDER BY id").arg(tableName)));
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsNaN(q.value(0).toDouble()));
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsInf(q.value(0).toDouble()));
+ QVERIFY(q.value(0).toDouble() > 0);
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsInf(q.value(0).toDouble()));
+ QVERIFY(q.value(0).toDouble() < 0);
+}
+
// This test needs a ODBC data source containing MYSQL in it's name
void tst_QSqlDatabase::mysqlOdbc_unsignedIntegers()
{