From a2b1b0292d3d9909a690ba701f0a447cdf1a66fa Mon Sep 17 00:00:00 2001 From: Andrei Golubev Date: Mon, 17 Aug 2020 09:48:20 +0200 Subject: Prepend optimize QString Added prepend optimization to QString Task-number: QTBUG-84320 Change-Id: Iaa8df790a10c56ecceb06f7143718fb94874ce76 Reviewed-by: Thiago Macieira --- tests/auto/corelib/text/qstring/tst_qstring.cpp | 103 ++++++++++++++++++++++++ 1 file changed, 103 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 172e8c41af..126bc08903 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -360,11 +360,14 @@ private slots: void replace_qchar_qstring(); void replace_uint_uint_data(); void replace_uint_uint(); + void replace_uint_uint_extra(); void replace_extra(); void replace_string_data(); void replace_string(); + void replace_string_extra(); void replace_regexp_data(); void replace_regexp(); + void replace_regexp_extra(); void remove_uint_uint_data(); void remove_uint_uint(); void remove_string_data(); @@ -2367,6 +2370,15 @@ void tst_QString::insert_special_cases() QCOMPARE(a.insert(3, QLatin1String(0)), montreal); QCOMPARE(a.insert(3, static_cast(0)), montreal); QCOMPARE(a.insert(0, QLatin1String("a")), QLatin1String("aMontreal")); + + a = "Mont"; + QCOMPARE(a.insert(a.size(), QLatin1String("real")), montreal); + QCOMPARE(a.insert(a.size() + 1, QLatin1String("ABC")), QString("Montreal ABC")); + + a = "AEF"; + QCOMPARE(a.insert(1, QLatin1String("BCD")), QString("ABCDEF")); + QCOMPARE(a.insert(3, QLatin1String("-")), QString("ABC-DEF")); + QCOMPARE(a.insert(a.size() + 1, QLatin1String("XYZ")), QString("ABC-DEF XYZ")); } void tst_QString::append_data(bool emptyIsNoop) @@ -2417,6 +2429,14 @@ void tst_QString::append_special_cases() a.append(0, 1); // no-op QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!")); } + + { + QString a; + a.insert(0, QChar(u'A')); + QVERIFY(a.capacity() >= 3); + a.append(QLatin1String("BC")); + QCOMPARE(a, QLatin1String("ABC")); + } } void tst_QString::append_bytearray_special_cases_data() @@ -2670,6 +2690,29 @@ void tst_QString::replace_uint_uint() } } +void tst_QString::replace_uint_uint_extra() +{ + { + QString s; + s.insert(0, QChar('A')); + + auto bigReplacement = QString("B").repeated(s.capacity() * 3); + + s.replace( 0, 1, bigReplacement ); + QCOMPARE( s, bigReplacement ); + } + + { + QString s; + s.insert(0, QLatin1String("BBB")); + + auto smallReplacement = QString("C"); + + s.replace( 0, 3, smallReplacement ); + QCOMPARE( s, smallReplacement ); + } +} + void tst_QString::replace_extra() { /* @@ -2775,6 +2818,29 @@ void tst_QString::replace_string() QTEST( s3, "result" ); } +void tst_QString::replace_string_extra() +{ + { + QString s; + s.insert(0, QChar('A')); + + auto bigReplacement = QString("B").repeated(s.capacity() * 3); + + s.replace( QString("A"), bigReplacement ); + QCOMPARE( s, bigReplacement ); + } + + { + QString s; + s.insert(0, QLatin1String("BBB")); + + auto smallReplacement = QString("C"); + + s.replace( QString("BBB"), smallReplacement ); + QCOMPARE( s, smallReplacement ); + } +} + void tst_QString::replace_regexp() { QFETCH( QString, string ); @@ -2789,6 +2855,35 @@ void tst_QString::replace_regexp() QTEST( s2, "result" ); } +void tst_QString::replace_regexp_extra() +{ + { + QString s; + s.insert(0, QChar('A')); + + auto bigReplacement = QString("B").repeated(s.capacity() * 3); + + QRegularExpression regularExpression(QString("A")); + QVERIFY(regularExpression.isValid()); + + s.replace( regularExpression, bigReplacement ); + QCOMPARE( s, bigReplacement ); + } + + { + QString s; + s.insert(0, QLatin1String("BBB")); + + auto smallReplacement = QString("C"); + + QRegularExpression regularExpression(QString("BBB")); + QVERIFY(regularExpression.isValid()); + + s.replace( regularExpression, smallReplacement ); + QCOMPARE( s, smallReplacement ); + } +} + void tst_QString::remove_uint_uint() { QFETCH( QString, string ); @@ -2864,6 +2959,14 @@ void tst_QString::remove_extra() "The lazy dog jumps over the quick brown fox."; s.remove(s); } + + { + QString s = "BCDEFGHJK"; + QString s1 = s; + s1.insert(0, u'A'); // detaches + s1.remove(0, 1); + QCOMPARE(s1, s); + } } void tst_QString::toNum() -- cgit v1.2.3