The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use TAEB::Test tests => 1374;

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"          =>
                ""
);