#!/usr/bin/perl6

# xml.pl

# use:
# cd rakudo
# cd t/
# mkdir -p lib/XML
# cp Grammar.pm lib/XML/
# wget http://www.w3.org/XML/Test/xmlts20080827.tar.gz
# tar xvzf xmlts20080827.tar.gz
# cd ..
# parrot/parrot perl6.pbc t/xml.pl 

# use v6;
BEGIN { @*INC.push: 't/lib' };
use XML::Grammar;

my @tests = (
        [1, '<a/>', 'inline'],
        [1, '<a />', 'inline'],
        [0, '< a/>', 'inline'],
        [1, '<a></a>', 'inline'],
        [1, ' <a></a>', 'inline'],
        [0, '< a></a>', 'inline'],
        [1, '<a ></a>', 'inline'],
        [1, '<a></a >', 'inline'],
        [0, '<a></ a>', 'inline'],
        [0, '<a>< /a>', 'inline'],
        [0, '</a>', 'inline'],
        [0, '<a><a/>', 'inline'],
        [0, '<a>', 'inline'],
        [0, '<', 'inline'],
        [0, '<a>b</b>', 'inline'],
        [0, '<a>b</a', 'inline'],
        [0, '<a>b</a href="foo">', 'inline'],
        [0, '</a href="foo">', 'inline'],
        [1, '<a href="foo"/>', 'inline'],
        [1, '<a href="foo" />', 'inline'],
        [1, '<a href="foo">b</a>', 'inline'],
        [0, '<ahref="foo">b</a>', 'inline'],
        [1, '<_ab>foo</_ab>', 'inline'],
        [1, '<Ab>foo</Ab>', 'inline'],
        [0, '<2ab>foo</2ab>', 'inline'],
        [1, '<a2b>foo</a2b>', 'inline'],
        [1, '<_ab>foo</_ab>', 'inline'],
        [1, '<:ab>foo</:ab>', 'inline'],
        [1, '<a:ab>foo</a:ab>', 'inline'],
        [1, '<a.ab>foo</a.ab>', 'inline'],
        [0, '..<ab>foo</ab>', 'inline'],
        [0, '..<ab>foo</ab>dd', 'inline'],
        [0, '<ab>foo</ab>dd', 'inline'],
        [1, '<a><b>c</b></a>', 'inline'],
        [1, '<a href="foo"><b>c</b></a>', 'inline'],
        [1, '<a href="fo\'o"><b>c</b></a>', 'inline'],
        [1, '<a href=\'fo"o\'><b>c</b></a>', 'inline'],
        [0, '<a href=\'foo\'\'><b>c</b></a>', 'inline'],
        [1, '<a href=\'foo\'><b>c</b></a>', 'inline'],
        [1, '<a href = "foo"><b>c</b></a>', 'inline'],
        [1, '<a href = \'foo\'><b>c</b></a>', 'inline'],
        [0, '<a href="foo""><b>c</b></a>', 'inline'],
        [1, '<a href="&foo;"><b>c</b></a>', 'inline'],
        [1, '<a href="%foo;"><b>c</b></a>', 'inline'],
        [0, '<a href="&f\'oo;"><b>c</b></a>', 'inline'],
        [1, '<a href="%f\'oo;"><b>c</b></a>', 'inline'],
        [1, '<a href="%foo;"><b>c</b></a>', 'inline'],
        [1, '<a href=\'&foo;\'><b>c</b></a>', 'inline'],
        [1, '<a href=\'%foo;\'><b>c</b></a>', 'inline'],
        [1, '<a empty="" ><b>c</b></a>', 'inline'],
        [1, '<a empty=\'\' ><b>c</b></a>', 'inline'],
        [1, '<a><b>c</b><c></c></a>', 'inline'],
        [0, '<?a?>', 'inline'],
        [1, '<?a?><a></a>', 'inline'],
        [1, '<a><?a?></a>', 'inline'],
        [1, '<a></a><?a?>', 'inline'],
        [0, '<? a?><a></a>', 'inline'],
        [1, '<?a ?><a></a>', 'inline'],
        [1, '<?a  ?><a></a>', 'inline'],
        [1, '<?a aaa ?><a></a>', 'inline'],
        [1, '<?a  aaa  ?><a></a>', 'inline'],
        [1, '<?a a a a ?><a></a>', 'inline'],
        [1, '<?a ?a> a a ?><a></a>', 'inline'],
        [1, '<?a >>????a> a a ?><a></a>', 'inline'],
        [0, '<?a a?> a a ?><a></a>', 'inline'],
        [1, '<?a2b ?><a></a>', 'inline'],
        [1, '<?_2a ?><a></a>', 'inline'],
        [1, '<?:2a ?><a></a>', 'inline'],
        [0, '<?xml?>', 'inline'],
        [0, '<?xml?><a></a>', 'inline'],
        [1, '<?xml version="1.0"?><a/>', 'inline'],
        [1, '<?xml version=\'1.0\'?><a/>', 'inline'],
        [1, '<?xml version="1.0"?><a></a>', 'inline'],
        [1, '<?xml version="1.1"?><a></a>', 'inline'],
        [1, '<?xml version="1.12"?><a></a>', 'inline'],
        [0, '<?xml version="-1.0_a:B"?><a></a>', 'inline'],
        [1, '<a><![CDATA[]]></a>', 'inline'],
        [1, '<a><![CDATA[blabla]]></a>', 'inline'],
        [1, '<a><![CDATA[<>&jhk;huawk%jj%%&\$><]]></a>', 'inline'],
        [0, '<![CDATA[<>&jhk;huawk%jj%%&\$><]]>', 'inline'],
        [1, '<a><![CDATA[<>&jhk;huawk%j]>$&gt;j%%&\$><]]></a>', 'inline'],
        [1, '<a><![CDATA[<>&jhk;huawk%j]]&gt;j%%&\$><]]></a>', 'inline'],
        [0, '<a><![CDATA[<>&jhk;huawk%j]]>$&gt;j%%&\$><]]></a>', 'inline'],
        [1, '<!DOCTYPE a ><a/>', 'inline'],
        [1, '<!DOCTYPE a ><a></a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a/>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a></a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!--blabla-->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- blabla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- bla bla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- bla  bla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!-- blabla --><!DOCTYPE a ><a>ab<!-- blabla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!-- blabla --><!DOCTYPE a ><!-- blabla --><a>ab<!-- blabla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!-- blabla --><!-- blabla --><!DOCTYPE a ><!-- blabla --><a>ab<!-- blabla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>abc</a><!-- blabla -->', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- blabla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- bla-bla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- - - - - -->c</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- - - - - --->c</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<!-- bla--bla -->c</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a ><a>ab<-- bla---bla -->c</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a SYSTEM \'http://bla.com\'><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a SYSTEM \'http://bla.com\' [ ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a SYSTEM \'http://bla.com\' []><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a SYSTEM \'http://bla.com\' ><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a PUBLIC "-//XML//blabla//EN" ><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a PUBLIC "-//XML//blabla//EN" \'http://bla.com\' ><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a PUBLIC "-//XML//blabla//EN" \'http://bla.com\' [  ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a PUBLIC "-//XML//blabla//EN" \'http://bla.com\' [  ><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [  ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!-- blabla --> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!-- - - -  --> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <?yepp?> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <?yepp bla bla ?> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <?yepp ?bla >bla ?> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <?yepp >?bla bla ?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?yepp bla?> bla ?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?xml?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?XML?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?Xml?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?xml bla bla ?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?xmlyepp?> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <?xmlyepp bla bla ?> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <?yeppxml?> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <?yeppxml bla bla?> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ %bla; %bli; ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ %bla; <!-- blabla --> %bli; ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ %bla; <!-- bla--bla --> %bli; ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ &bla; %bli; ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ %%bla; %bli; ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ %&bla; %bli; ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "blabla"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     \'blabla\'> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "&blabla"> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "%blabla"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "&#38;#60;"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "%blabla;"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "bli %blabla;"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "%blabla; bli"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "bli %blabla; bli"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "bli %blabla; bli &bla; bli"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "bli %blabla; bli &bla; bli &#38; bli &#x32; bli"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt     "bli<a>bli</a> %blabla; bli &bla; bli &#38; bli &#x32; bli"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY hatchpic SYSTEM "OpenHatch.gif"> ] ><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY hatchpic SYSTEM \'OpenHatch.gif\'> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY hatch-pic SYSTEM "OpenHatch.gif"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY hatch-pic SYSTEM "OpenHatch.gif" NDATA gif > ]><a>abc</a>', 'inline'],  
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> ]><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY Pub-Status  PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY Pub-Status  PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://bla.com"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY open-hatch PUBLIC "-\'()+,./:=?;!*#@$_% boilerplate//EN" "http://OpenHatch.xml"> ] ><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY % pub    "&#xc9;ditions Gallimard" > ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!NOTATION Sys-Status  SYSTEM "bla.inc"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!NOTATION Pub-Status  PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!NOTATION Pub-Status  PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://bla.com"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT br EMPTY> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT p (#PCDATA|emph)* > ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT %name.para; %content.para; > ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT container ANY> ]><a>abc</a>', 'inline'],
    #    [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT spec (front, body, back?)> ]><a>abc</a>', 'inline'], #rakudo bug
    #    [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT div1 (head, (p | list | note)*, div2*)> ]><a>abc</a>', 'inline'], #rakudo bug
    #    [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*> ]><a>abc</a>', 'inline' ], #rakudo bug
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT p (#PCDATA|a|ul|b|i|em)*> ]><a>abc</a>', 'inline'],
    #    [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* > ]><a>abc</a>', 'inline'], #rakudo bug
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT b (#PCDATA)> ]><a>abc</a>', 'inline'], #rakudo bug
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT br EMPTY><!ELEMENT p (#PCDATA|emph)* ><!ELEMENT b (#PCDATA)> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ENTITY lt  "blabla"><!ELEMENT br EMPTY><!ELEMENT p (#PCDATA|emph)* ><!ELEMENT b (#PCDATA)> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ATTLIST termdef id      ID      #REQUIRED   name    CDATA   #IMPLIED> ]><a>abc</a>', 'inline'],
    #    [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ATTLIST list  type    (bullets|ordered|glossary)  "ordered"> ]><a>abc</a>', 'inline'], #rakudo bug
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ATTLIST form  method  CDATA   #FIXED "POST"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><!DOCTYPE a [ <!ELEMENT br EMPTY><!ELEMENT b (#PCDATA)><!ATTLIST form  method  CDATA   #FIXED "POST"> ]><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0"?><a>ab&blabla;c</a>', 'inline'],
        [1, '<?xml version="1.0"?><a>ab&quot;c</a>', 'inline'],
        [1, '<?xml version="1.0"?><a>ab&x123;c</a>', 'inline'],
        [0, '<?xml version="1.0"?><a>ab&123;c</a>', 'inline'],
        [0, '<?xml version="1.0"?><a>ab&1x23;c</a>', 'inline'],
        [1, '<?xml version="1.0"?><a>ab&#123;c</a>', 'inline'],
        [1, '<?xml version="1.0"?><a>ab&#x123;c</a>', 'inline'],
        [1, '<?xml version="1.0"?><a>ab&#xaf3;c</a>', 'inline'],
        [1, '<?xml version="1.0" standalone="no"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" standalone="on"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" standalone="no" ?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" standalone = \'yes\' ?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" standalone=\'yes\'?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" standalone="yes"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" standalone=\'no\'?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" standalone="bla"?><a>abc</a>', 'inline'],
        [0, '<?xml versionerr="bla"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="blabla"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="blabla" ?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding=\'blabla\'?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding=\'blabla"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding="blabla\'?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="bla-bla"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="bla.bla"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="bla_bla"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="bla-bla"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding="bla bla"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding="bla:bla"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding=".blabla"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding="_blabla?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" encoding="-blabla"?><a>abc</a>', 'inline'],
        [0, '<?xml version="1.0" standalone="no" encoding="bla"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="blabla" standalone="no"?><a>abc</a>', 'inline'],
        [1, '<?xml version="1.0" encoding="blabla" standalone="no" ?><a>abc</a>', 'inline'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v01.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v02.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v03.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v04.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v05.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v06.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v07.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P10/ibm10v08.xml', 'file'],
        [1, 't/xmlconf/ibm/valid/P13/ibm13v01.xml', 'file'],
    );

    my $count = 1;
    for @tests -> $t {
        my $s = $t[2] eq 'inline' ?? $t[1] !! slurp $t[1];

    #    my $M := $s ~~ /<XML::Grammar::TOP>/;
        my $M = XML::Grammar.parse($s);
   
        if !($M  xor $t[0]) {
            say "ok $count - '$s'";
        } else {
            say "not ok $count - '$s'";
        }
        #$M.perl.say if $M;
        #$M<root_element>.perl.say if $M;
        $M<root_element>.ast.say if $M;

        $count++;
   } 
