Author: bernhard
Date: Tue Nov 15 14:47:26 2005
New Revision: 10005

Added:
   trunk/languages/regex/lib/Parrot/
   trunk/languages/regex/lib/Parrot/Test/
   trunk/languages/regex/lib/Parrot/Test/Regex.pm
   trunk/languages/regex/t/harness
Modified:
   trunk/MANIFEST
   trunk/languages/LANGUAGES.STATUS
   trunk/languages/regex/t/basic/a.t
   trunk/languages/regex/t/basic/alt.t
   trunk/languages/regex/t/basic/backopt.t
   trunk/languages/regex/t/basic/example.t
   trunk/languages/regex/t/basic/group.t
   trunk/languages/regex/t/basic/infinite.t
   trunk/languages/regex/t/basic/literal.t
   trunk/languages/regex/t/basic/ngplus.t
   trunk/languages/regex/t/basic/optional.t
   trunk/languages/regex/t/basic/plus.t
   trunk/languages/regex/t/basic/quantindex.t
   trunk/languages/regex/t/basic/regress1.t
   trunk/languages/regex/t/basic/scanalt.t
   trunk/languages/regex/t/basic/scanstar.t
   trunk/languages/regex/t/basic/star.t
   trunk/languages/regex/t/basic/staralt.t
   trunk/languages/regex/test.pl
   trunk/languages/testall
Log:
Introduce 'languages/regex' to smoke testing.


Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST      (original)
+++ trunk/MANIFEST      Tue Nov 15 14:47:26 2005
@@ -1348,6 +1348,7 @@ languages/regex/Makefile                
 languages/regex/README                            [regex]
 languages/regex/README.hacking                    [regex]
 languages/regex/docs/regex.pod                    [regex]
+languages/regex/lib/Parrot/Test/Regex.pm          [regex]
 languages/regex/lib/Regex.pm                      [regex]
 languages/regex/lib/Regex/CodeGen.pm              [regex]
 languages/regex/lib/Regex/CodeGen/IMCC.pm         [regex]
@@ -1385,6 +1386,7 @@ languages/regex/t/basic/scanalt.t       
 languages/regex/t/basic/scanstar.t                [regex]
 languages/regex/t/basic/star.t                    [regex]
 languages/regex/t/basic/staralt.t                 [regex]
+languages/regex/t/harness                         [regex]
 languages/regex/test.pl                           [regex]
 languages/ruby/Changes                            [ruby]
 languages/ruby/MANIFEST                           [ruby]

Modified: trunk/languages/LANGUAGES.STATUS
==============================================================================
--- trunk/languages/LANGUAGES.STATUS    (original)
+++ trunk/languages/LANGUAGES.STATUS    Tue Nov 15 14:47:26 2005
@@ -682,7 +682,8 @@ regex
 
 =item Status
 
-Working but fairly minimal
+Working but fairly minimal.
+Part of languages smoke testing, a lot of tests failing.
 
 =item Last verified with parrot version
 

Added: trunk/languages/regex/lib/Parrot/Test/Regex.pm
==============================================================================
--- (empty file)
+++ trunk/languages/regex/lib/Parrot/Test/Regex.pm      Tue Nov 15 14:47:26 2005
@@ -0,0 +1,123 @@
+# $Id$
+
+require Parrot::Test;
+
+package Parrot::Test::Regex;
+
+use strict;
+
+use Data::Dumper;
+use File::Basename;
+use File::Spec::Functions;
+
+
+=head1 NAME
+
+Test/Regex.pm - Testing routines specific to 'regex'.
+
+=head1 DESCRIPTION
+
+Does the same a 'languages/regex/test.pl'
+
+=cut
+
+# FIXME: This is still probably unix-only, because the parrot binary
+# will have different names
+my $PARROT_EXE = catfile(catdir($FindBin::Bin, updir(), updir(), updir(), 
updir()), "parrot");
+
+sub run_spec {
+    my ( $spec_fh ) = @_;
+
+    my $pattern = <$spec_fh>;
+    chomp($pattern);
+
+    generate_regular($pattern);
+
+    $_ = <$spec_fh>;
+    my @spec;
+    while (1) {
+         my ($input, $output);
+
+         last if ! defined $_;
+         die "INPUT: expected" if ! /^INPUT:/;
+
+         # Gather input, look for OUTPUT:
+         $input = '';
+         undef $output;
+         while (<$spec_fh>) {
+             $output = '', last if /^OUTPUT:/;
+             $input .= $_;
+         }
+         chomp($input);
+         die "EOF during INPUT section" if ! defined($output);
+
+         # Gather output
+         while (<$spec_fh>) {
+             last if /^INPUT:/;
+             $output .= $_;
+         }
+
+         push @spec, { input => $input, output => $output };
+    }
+    
+    Test::More::plan( tests => scalar(@spec) );
+    foreach ( @spec ) {
+        process($_->{input}, $_->{output});
+    }
+
+    return 0;
+}
+
+sub generate_regular_imc {
+    my ($filename, $pattern) = @_;
+    open(PIR, ">$filename") or die "create $filename: $!";
+
+    my $ctx = { };
+    my $trees = Regex::expr_to_tree($pattern, $ctx, DEBUG => 0);
+
+    my $driver = Regex::Driver->new('pir', emit_main => 1);
+
+    print PIR <<"END";
+# Regular expression test
+# Generated by $0
+# Pattern >>$pattern<<
+
+END
+
+    $driver->output_header(*PIR);
+
+    for my $tree (@$trees) {
+        $driver->output_rule(*PIR, '_regex', $tree, $ctx, DEBUG => 0);
+    }
+
+    close PIR;
+}
+
+sub generate_pbc {
+    my ($imc, $pbc) = @_;
+    my $status = system("$PARROT_EXE", "-o", $pbc, $imc);
+    if (! defined($status) || $status) {
+        die "assemble failed with status " . ($? >> 8);
+    }
+}
+
+sub generate_regular {
+    my $pattern = shift;
+
+    generate_regular_imc("test.imc", $pattern);
+    generate_pbc("test.imc", "test.pbc");
+}
+
+sub process {
+    my ($input, $output) = @_;
+
+    open(TEST, "$PARROT_EXE test.pbc '$input' |");
+
+    local $/;
+    my $actual_output = <TEST>;
+    Test::More::is($actual_output, $output); 
+
+    return;
+}
+
+1;

Modified: trunk/languages/regex/t/basic/a.t
==============================================================================
--- trunk/languages/regex/t/basic/a.t   (original)
+++ trunk/languages/regex/t/basic/a.t   Tue Nov 15 14:47:26 2005
@@ -1,3 +1,18 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+__END__
 a
 INPUT:
 aa

Modified: trunk/languages/regex/t/basic/alt.t
==============================================================================
--- trunk/languages/regex/t/basic/alt.t (original)
+++ trunk/languages/regex/t/basic/alt.t Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 ^a|b
 INPUT:
 a

Modified: trunk/languages/regex/t/basic/backopt.t
==============================================================================
--- trunk/languages/regex/t/basic/backopt.t     (original)
+++ trunk/languages/regex/t/basic/backopt.t     Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 (a+)?a
 INPUT:
 aa

Modified: trunk/languages/regex/t/basic/example.t
==============================================================================
--- trunk/languages/regex/t/basic/example.t     (original)
+++ trunk/languages/regex/t/basic/example.t     Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 (a*a|(aaa))a
 INPUT:
 xxxxxxxxaaabb

Modified: trunk/languages/regex/t/basic/group.t
==============================================================================
--- trunk/languages/regex/t/basic/group.t       (original)
+++ trunk/languages/regex/t/basic/group.t       Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 ((a*)a)
 INPUT:
 aaa

Modified: trunk/languages/regex/t/basic/infinite.t
==============================================================================
--- trunk/languages/regex/t/basic/infinite.t    (original)
+++ trunk/languages/regex/t/basic/infinite.t    Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 (a?)*
 INPUT:
 bbb

Modified: trunk/languages/regex/t/basic/literal.t
==============================================================================
--- trunk/languages/regex/t/basic/literal.t     (original)
+++ trunk/languages/regex/t/basic/literal.t     Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 abc
 INPUT:
 ababc

Modified: trunk/languages/regex/t/basic/ngplus.t
==============================================================================
--- trunk/languages/regex/t/basic/ngplus.t      (original)
+++ trunk/languages/regex/t/basic/ngplus.t      Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 a+?
 INPUT:
 x

Modified: trunk/languages/regex/t/basic/optional.t
==============================================================================
--- trunk/languages/regex/t/basic/optional.t    (original)
+++ trunk/languages/regex/t/basic/optional.t    Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 a?
 INPUT:
 

Modified: trunk/languages/regex/t/basic/plus.t
==============================================================================
--- trunk/languages/regex/t/basic/plus.t        (original)
+++ trunk/languages/regex/t/basic/plus.t        Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 a+
 INPUT:
 x

Modified: trunk/languages/regex/t/basic/quantindex.t
==============================================================================
--- trunk/languages/regex/t/basic/quantindex.t  (original)
+++ trunk/languages/regex/t/basic/quantindex.t  Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 (a)+
 INPUT:
 aaa

Modified: trunk/languages/regex/t/basic/regress1.t
==============================================================================
--- trunk/languages/regex/t/basic/regress1.t    (original)
+++ trunk/languages/regex/t/basic/regress1.t    Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 ^(?:r|s)r
 INPUT:
 r

Modified: trunk/languages/regex/t/basic/scanalt.t
==============================================================================
--- trunk/languages/regex/t/basic/scanalt.t     (original)
+++ trunk/languages/regex/t/basic/scanalt.t     Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 a|b
 INPUT:
 a

Modified: trunk/languages/regex/t/basic/scanstar.t
==============================================================================
--- trunk/languages/regex/t/basic/scanstar.t    (original)
+++ trunk/languages/regex/t/basic/scanstar.t    Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 a*
 INPUT:
 aaax

Modified: trunk/languages/regex/t/basic/star.t
==============================================================================
--- trunk/languages/regex/t/basic/star.t        (original)
+++ trunk/languages/regex/t/basic/star.t        Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 ^a*
 INPUT:
 aaax

Modified: trunk/languages/regex/t/basic/staralt.t
==============================================================================
--- trunk/languages/regex/t/basic/staralt.t     (original)
+++ trunk/languages/regex/t/basic/staralt.t     Tue Nov 15 14:47:26 2005
@@ -1,3 +1,19 @@
+# $Id$
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+
+use Parrot::Test::Regex;
+use Regex;
+use Regex::Driver;
+
+use Test::More;
+
+Parrot::Test::Regex::run_spec( \*DATA );
+
+
+__END__
 a*|b
 INPUT:
 hello

Added: trunk/languages/regex/t/harness
==============================================================================
--- (empty file)
+++ trunk/languages/regex/t/harness     Tue Nov 15 14:47:26 2005
@@ -0,0 +1,51 @@
+# $Id$
+
+=head1 NAME
+
+languages/regex/t/harness - A harness for Parrot bc
+
+=head1 SYNOPSIS
+
+  cd languages && perl -I../lib regex/t/harness --files
+
+=head1 DESCRIPTION
+
+If I'm called with a single
+argument of "--files", I just return a list of files to process.
+This list is one per line, and is relative to the languages dir.
+
+=cut
+
+use strict;
+use lib '..';
+
+use Cwd();
+use Data::Dumper;
+use File::Spec;
+use Test::Harness();
+
+my $language = 'regex';
+
+if ( grep { m/^--files$/ } @ARGV ) {
+    # Only the Makefile in 'parrot/languages' uses --files
+    my $dir = File::Spec->catfile( $language, 't' );
+    my @files = glob( File::Spec->catfile( $dir, '*', '*.t' ) );
+    print join( "\n", @files );
+    print "\n" if scalar(@files);
+} else {
+    die "Only '--files' is supported"; 
+}
+
+=head1 HISTORY
+
+Mostly taken from bc/t/harness.
+
+=head1 SEE ALSO
+
+  F<languages/tcl/t/harness>, F<languages/scheme/t/harness>, 
F<languages/m4/t/harness>, F<languages/python/t/harness>
+
+=head1 AUTHOR
+
+Bernhard Schmalhofer - <[EMAIL PROTECTED]>
+
+=cut

Modified: trunk/languages/regex/test.pl
==============================================================================
--- trunk/languages/regex/test.pl       (original)
+++ trunk/languages/regex/test.pl       Tue Nov 15 14:47:26 2005
@@ -27,8 +27,9 @@ sub usage {
     print <<"END";
 Usage: $0 [-c|--compile] [--language=LANGUAGE] 
[--optimize=PASSES|--nooptimize] <filename>
 
-  Test files must contain a single regular expression on the first
-  line. Next there should be any number of pairs of INPUT and OUTPUT
+  Test files are Perl5 source files which must contain a __END__ section.
+  Right after the __END__ there must be a single regular expression.
+  Next there should be any number of pairs of INPUT and OUTPUT
   sections, where an INPUT: section begins with the string 'INPUT:' on
   a line by itself, followed by some data and a newline. (The newline
   is not regarded as part of the data, so add an extra one if you want
@@ -36,6 +37,7 @@ Usage: $0 [-c|--compile] [--language=LAN
 
   Example:
 
+__END__
 (a*a|(aaa))a
 INPUT:
 xxxxxxxxaaabb

Modified: trunk/languages/testall
==============================================================================
--- trunk/languages/testall     (original)
+++ trunk/languages/testall     Tue Nov 15 14:47:26 2005
@@ -79,7 +79,6 @@ my $html = grep { $_ eq '--html' } @ARGV
 # parakeet             No t/harness
 # perl6                t/harness has no --files
 # python               needs testing
-# regex                No t/harness
 # ruby                 No t/harness
 
 
@@ -93,8 +92,10 @@ my @unified_testable_languages = 
        parrot_compiler
        punie
        scheme
+       regex
        tcl
        urm );
+# @unified_testable_languages = qw( regex );
 
 my @harnesses =
     grep {-f $_}

Reply via email to