The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use lib 't/lib';
use Test::More;

use Test::NetHack::Engravings;

degrade_ok  "Elbereth" => "Elbereth";
degrade_ok  "Elbereth" => "Flbereth";
degrade_nok "Flbereth" => "Elbereth";
degrade_ok  "Elbereth" => "";
degrade_ok  "Elbereth" => "????????";
degrade_ok  "Elbereth" => "       ?";
degrade_nok "Elbereth" => "        ?";

degrade_progression(
    "Elbereth" =>
    "Elbcret?" =>
    "E|b?re ?" =>
    "F| ???"   =>
    "F  ???"   =>
    "F    ?"   =>
    "F"        =>
    "-"        =>
    ""
);

degrade_progression(
    "Elbereth" =>
    "Elbe?eth" =>
    "El e?et?" =>
    "El e e??" =>
    "El c e?"  =>
    "El c e"   =>
    "E  c ?"   =>
    "E  c"     =>
    "E  ?"     =>
    "E"        =>
    ""
);

degrade_progression(
    "               x" =>
                   "x" =>
                   ""
);

degrade_progression(
    "E0E0E0E0E0E0E0E0E0ECE0" =>
    "E0E0E0E([0E0E0E0E?ECE0" =>
    "E0E0E0E([0E0E0E0E?EC?0" =>
    "E0E0?0E([0E0E?E0E?E(?0" =>
    "E0E? 0E([0E0E?E0E?E(?0" =>
    "E0L? 0E([0E0E?E0E?E(?0" =>
    "F?L? 0E([0E?E?E(E?E(?0" =>
    "F?L? (E([0E?E?E(E?E(?0" =>
    "F?L? (F([0??E?E?E?E? 0" =>
    "F?L? (F([0? E?E?E?E? 0" =>
    "F L? ?F([(? E?E?E?E? 0" =>
    "F L? ?|([(? E?L?E?E  0" =>
    "F L  ?|([(? E?L?E?E  0" =>
    "- L  ?|([(? E?L?E?E  0" =>
    "- L  ?|([(? E???E?E  0" =>
    "- L  ?|([?? E???E?E  0" =>
    "- L   |([?? E???E?F  0" =>
    "- L   |(??? E???|?F  0" =>
    "- L   |(??? E ??|?|  0" =>
    "- L   |( ?? E ??| |  0" =>
    "- |   |( ?? E ? | |  0" =>
      "|   |(  ? E ? | |  0" =>
      "|   |(  ? E   | |  0" =>
      "|   |?    E   | |  0" =>
      "|   |?    L   | |  0" =>
      "|   |?    L     |  0" =>
      "|   |?    L        0" =>
          "|?    L        0" =>
           "?    L        0" =>
           "?    L        C" =>
                "L        C" =>
                "L        ?" =>
                "L"          =>
                ""
);

degrade_progression(
    "Warning:  fortune reading can be hazardous to your health.",
    "W?rning:  fortune re?ding can be haza?dous to your nealth.",
    "W?rning:  ?ortune re??ing ?an be haza?dous ?o your nealth.",
    "W?rning:  ?ortune re? ing ??n bc haza?dous ?o your neal?h.",
    "W??nin?:  ?crtune re? ing  ?n bc haza?dous ?o your neal?h.",
    "W??n?n?:  ?crtune re? ing  ?r bc haza?dous ?o your nea|?h.",
    "W??n?n?:  ?crtunc re? ing  ?r bc haza?dous ?o your nea|?h.",
    "W??n?n?:  ?crtunc re? i?g  ?r bc haza?dous ?o your nea|?h.",
    "W??n n?:  ?crtunc re? i g  ?r bc haza?dou? ?o your nea|?h.",
    "W??n n?:  ?crtunc re? ? g  ?r bc haza?dou? ?o your rea|?h",
    "W??n n?:  ?crtunc re? ? g  ?r bc haza dou? ?o y?ur rea|?h",
    "W??n n?:  ?crtunc re? ? g  ?r bc haza dou? ?o ??ur rea|?h",
    "W??n n?:  ?crtunc re? ? g  ?r b? haza do?? ?c ? ur rea|?h",
    "W??n n?:  ?crtunc re? ? g  ?r b? haz? do ? ?c ? ur rea|?h",
    "W??n n?:  ?crtunc re? ? g  ?r b? haz? do ? ?c ? ur rea|?h",
    "W??n n?:  ?crtunc rc? ? g  ?r b? haz? do ? ?c ? ur rea|?h",
    "W??n n?:  ?crt?nc rc? ? g  ?r b  haz? |o ? ?c ? ur re?|?h",
    "W??n n?:  ?crt?nc rc? ? c  ?r b  haz? |o ? ?? ? ur ?e?|?h",
    "W??n r?:  ?crt?nc rc? ? c  ?r b  haz? |o ? ?? ? ur ?e?|?h",
    "V??n r?.  ?crt?nc rc? ? c  ?r b  haz? |o ? ?? ? ur ?e?|?h",
    "V??n r?.  ?crt?nc rc? ? c  ?r b  ?az? |o ? ?? ? ur ?e?|?h",
    "V??r r?.  ?crt?nc rc? ? c  ?r b  ??z? |o ?  ? ? ur ?e?|?h",
    "V??r r .  ?crt?nc rc? ? c  ?r b  ??z? |o ?  ? ? ur ?e |?h",
    "V??r r .  ?crt?nc rc? ? c  ?r b  ??z? |o ?  ? ? ?r ?e |?h",
    "V??r r .  ?crt??c rc? ? c  ?r b   ?z? |o ?  ? ? ?r ?e |?h",
    "V??r r .  ?crt??c rc? ? ?  ?r b   ?z? |o ?  ? ? ?r ?e  ?h",
    "V??r r    ??rt??c rc? ? ?  ?r b   ?z? |o ?    ?  r ?e  ?h",
    "???r r    ??rt??c rc? ? ?  ?r b   ?z? |o ?    ?  r ?e  ?h",
     "??r r    ??rt??c ?c? ? ?  ?r b   ?z? |o ?    ?  r ?e  ?h",
     "??r r    ??rt??c ?c? ? ?  ?r b   ?z? |o ?    ?  ? ?e  ?h",
     "??r r    ??rt??c ?c? ? ?  ?r b   ?z  |o ?    ?  ? ?e  ?h",
     "??r r    ??rt??c ?c? ? ?  ?? b   ?z  |o ?    ?  ? ?e  ?h",
      "?r r    ? rt? c ?c? ? ?  ?? b   ?z  |o ?    ?  ? ?e  ?h",
      "?r r    ? rt  c ?c? ? ?  ?? b   ?z  |o ?    ?  ? ?e  ?h",
      "?? r    ? rt  c ?c? ? ?  ?? b   ?z   o ?    ?  ? ?e  ?h",
      "?? r    ? rt  c ??? ? ?  ?? b   ?z   o ?    ?  ? ?e  ?h",
      "?? r    ? rt  c  ?? ? ?  ?? b   ?z   o ?    ?  ? ?e  ?h",
      "?? r    ? rt  c  ?  ? ?  ?? b   ??   o ?    ?  ? ?e  ?h",
      "?? r      rt  c  ?  ? ?  ?? b   ??   o ?    ?  ? ?e  ?h",
      "?? r      rt  c  ?    ?  ?? b   ??   o ?    ?  ? ?e  ?h",
);

done_testing;