Fernando Santagata
Fernando Santagata

Reputation: 1487

Testing with a metaoperator doesn't print the test description

I was writing tests on Complex arrays and I was using the Z≅ operator to check whether the arrays were approximately equal, when I noticed a missing test description.
I tried to golf the piece of code to find out the simplest case that shows the result I was seeing. The description is missing in the second test even when I use Num or Int variables and the Z== operator.

use Test;

my @a = 1e0, 3e0;
my @b = 1e0, 3e0;
ok @a[0] == @b[0], 'description1';     # prints: ok 1 - description1
ok @a[^2] Z== @b[^2], 'description2';  # prints: ok 2 -

done-testing;

Is there a simple explanation or is this a bug?

Upvotes: 6

Views: 59

Answers (1)

raiph
raiph

Reputation: 32489

It's just precedence -- you need parens.

== is a binary op that takes a single operand on either side.

The Z metaop distributes its operator to a list on either side.

use Test;

my @a = 1e0, 3e0;
my @b = 1e0, 3e0;
ok  @a[0]   == @b[0],   'description1';  # prints: ok 1 - description1
ok (@a[^2] Z== @b[^2]), 'description2';  # prints: ok 2 - description2

done-testing;

Without parens, 'description2' becomes an additional element of the list on the right. And per the doc for Z:

If one of the operands runs out of elements prematurely, the zip operator will stop.

Upvotes: 8

Related Questions