This might also improve other tests using the same assert.
LambdaTestHelpers
--
s/if(/if (
+ int i = -1;
+ while (actual.hasNext() && expected.hasNext()) {
+ i++;
+ Object e = expected.next();
+ Object a = actual.next();
+ assertEquals(a, e, "Iterators differ");
+
+ }
‘i' is redundant. I presume might have wanted to use it to print out the index
on element assertion failure, but it would of course induce garbage.
Paul.
> On 9 Jan 2018, at 13:15, Claes Redestad <[email protected]> wrote:
>
> Hi,
>
> the java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java
> has
> started timing out locallty on my machine, and analyzing why it seems it
> simply has
> added enough test cases recently to hit the default 120s timeout.
>
> Quickly analyzing what is taking so much time I ran into an inefficiency in
> TestNGs
> assertEquals(Iterator<?>, Iterator<?>) implementation, where at least one
> error message
> string is created unconditionally in an inner loop, leading to quite a bit of
> allocation
> pressure in a test like WhileOpTest.
>
> On my machine, avoiding this extra work speeds up the test from taking around
> ~130s
> to ~100s. A good improvement, but still somewhat close to the default 120s
> timeout.
>
> So as a fix I propose:
>
> - work around this by providing simplified assert methods in the
> LambdaTestHelper that
> avoid the excessively allocating methods in TestNG
> - increasing the timeout of WhileOpTest to 240s
>
> http://cr.openjdk.java.net/~redestad/8134459/open.00/
>
> Regards
>
> /Claes