Тестирование с метаоператором не печатает описание теста - PullRequest
6 голосов
/ 29 марта 2020

Я писал тесты для сложных массивов и использовал оператор Z≅, чтобы проверить, были ли массивы приблизительно равными, когда я заметил отсутствующее описание теста.
Я попытался поиграть в кусок кода, чтобы выяснить, самый простой случай, который показывает результат, который я видел. Описание отсутствует во втором тесте, даже когда я использую переменные Num или Int и оператор Z==.

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;

Есть простое объяснение или это ошибка?

1 Ответ

8 голосов
/ 29 марта 2020

Это просто приоритет - вам нужны парены.

== - это бинарный оператор, который принимает один операнд с любой стороны.

Z metaop распределяет свой оператор по списку по обеим сторонам.

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;

Без скобок 'description2' становится дополнительным элементом списка справа. И в соответствии с делом c для Z:

Если у одного из операндов преждевременно заканчивается элемент, оператор zip остановится.

...