The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Test::NetHack::Engravings;
use strict;
use warnings;

use Exporter 'import';
our @EXPORT = ('degrade_ok', 'degrade_nok', 'degrade_progression');

use NetHack::Engravings 'is_degradation';

sub degrade_ok {
    local $Test::Builder::Level = $Test::Builder::Level + 1;
    my $exp = shift;
    my $got = shift;

    Test::More::ok(is_degradation($exp, $got), "$exp degrades to $got");
}

sub degrade_nok {
    local $Test::Builder::Level = $Test::Builder::Level + 1;
    my $exp = shift;
    my $got = shift;

    Test::More::ok(!is_degradation($exp, $got), "$exp does not degrade to $got");
}

sub degrade_progression {
    local $Test::Builder::Level = $Test::Builder::Level + 1;
    for (my $i = 0; $i < @_; ++$i) {
        for (my $j = $i; $j < @_; ++$j) {
            degrade_ok($_[$i] => $_[$j]);
            degrade_nok($_[$j] => $_[$i]) unless $_[$i] eq $_[$j];
        }
    }
}

1;