diff options
Diffstat (limited to 'tests/auto')
| -rw-r--r-- | tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp index 8fcf9c49fe6..88e67b34a2d 100644 --- a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp +++ b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp @@ -18,6 +18,9 @@ public: private slots: void getSetCheck(); + + void displayEdgeCases_data(); + void displayEdgeCases(); }; tst_QLCDNumber::tst_QLCDNumber() @@ -42,5 +45,30 @@ void tst_QLCDNumber::getSetCheck() QCOMPARE(99, obj1.digitCount()); // Range<0, 99> } +// Test case for undefined behavior when displaying INT_MIN +void tst_QLCDNumber::displayEdgeCases_data() +{ + QTest::addColumn<int>("number"); + QTest::addColumn<QString>("expected"); + + // INT_MIN previously caused UB due to -INT_MIN overflow in int2string(). + QTest::newRow("INT_MIN") << INT_MIN << QString::number(INT_MIN); + QTest::newRow("INT_MAX") << INT_MAX << QString::number(INT_MAX); + QTest::newRow("Zero") << 0 << QStringLiteral("0"); +} + +void tst_QLCDNumber::displayEdgeCases() +{ + QFETCH(int, number); + QFETCH(QString, expected); + + QLCDNumber lcd; + lcd.setDigitCount(12); + lcd.display(number); + + QString result = QString::number(lcd.intValue()); + QCOMPARE(result, expected); +} + QTEST_MAIN(tst_QLCDNumber) #include "tst_qlcdnumber.moc" |
