tdf#132388: add unit test

I hope that this performance test is OK. I chose 20 s threshold, as
it works much faster on my system (under 4 s); it shouldn't be much
slower elsewhere; and both the original bug, and the regression that
followed the initial fix, made it execute orders of magnitute slower
(I expect hours on fast systems).

Change-Id: I75ee4c60e562473fe70a203faa94b48c5fbfb4fe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129203
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>

Fix format string

Change-Id: I18952bf6641175d25128b512ddfb56fd51767038
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129083
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>

Adapt test to slow builds

...like my local ASan+UBSan build, which kept failing with

>  Failed: TestReplacePerformance (t = 35 s)
> Tests passed: 0
> Tests failed: 1

when the machine was under load during a parallelizing `make check`

Change-Id: I59c81a61a29df7165f6fad33e3fe3da975f05ed2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129237
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129284
diff --git a/basic/qa/basic_coverage/test_tdf132388_ReplacePerformance.bas b/basic/qa/basic_coverage/test_tdf132388_ReplacePerformance.bas
new file mode 100644
index 0000000..531cdec5
--- /dev/null
+++ b/basic/qa/basic_coverage/test_tdf132388_ReplacePerformance.bas
@@ -0,0 +1,28 @@
'
' This file is part of the LibreOffice project.
'
' This Source Code Form is subject to the terms of the Mozilla Public
' License, v. 2.0. If a copy of the MPL was not distributed with this
' file, You can obtain one at http://mozilla.org/MPL/2.0/.
'

Function doUnitTest as String
    TestUtil.TestInit
    TestReplacePerformance()
    doUnitTest = TestUtil.GetResult()
End Function

Sub TestReplacePerformance()
    On Error GoTo errorHandler
    ' Assume the normal case to be much faster than 60 s even on slow boxes, and the test string
    ' is long enough to cause serious performance regressions make it perform much longer
    n = 10000000
    s = Space(n)
    t = Now
    s = Replace(s, " ", "*", 1, -1, 1)
    t = Now - t
    TestUtil.Assert(t <= TimeSerial(0, 1, 0), "TestReplacePerformance", Format(t, """t = ""[s]"" s"""))
    Exit Sub
errorHandler:
    TestUtil.ReportErrorHandler("TestReplacePerformance", Err, Error$, Erl)
End Sub