#!/usr/linguist/bin/perl # # make-test-arrays # # Given a test-arrays file, which specifies the test suite names, the # names of the functions which perform those test suites, and # descriptive comments, this script generates C structures for the # mpi-test program. The input consists of lines of the form: # # suite-name:function-name:comment # # The output is written to the standard output. Blank lines are # ignored, and comments beginning with '#' are stripped. # ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is the MPI Arbitrary Precision Integer Arithmetic library. # # The Initial Developer of the Original Code is # Michael J. Fromberger . # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** # $Id: make-test-arrays,v 1.2 2005/02/02 22:28:22 gerv%gerv.net Exp $ # # Read parameters from the environment, if available $NAMEVAR = $ENV{'NAMEVAR'} || "g_names"; $COUNTVAR = $ENV{'COUNTVAR'} || "g_count"; $FUNCVAR = $ENV{'FUNCVAR'} || "g_tests"; $DESCVAR = $ENV{'DESCVAR'} || "g_descs"; $FUNCLEN = 13; $NAMELEN = 18; $DESCLEN = 45; #------------------------------------------------------------------------ # Suck in input from the files on the command line, or standard input while(<>) { chomp; s/\#.*$//; next if /^\s*$/; ($suite, $func, $desc) = split(/:/, $_); $tmp = { "suite" => $suite, "func" => $func, "desc" => $desc }; push(@item, $tmp); } $count = scalar(@item); $last = pop(@item); #------------------------------------------------------------------------ # Output the table of names print "/* Table mapping test suite names to index numbers */\n"; printf("const int %s = %d;\n", $COUNTVAR, $count); printf("const char *%s[] = {\n", $NAMEVAR); foreach $elt (@item) { printf(" \"%s\",%s/* %s%s */\n", $elt->{"suite"}, " " x ($NAMELEN - length($elt->{"suite"})), $elt->{"desc"}, " " x ($DESCLEN - length($elt->{"desc"}))); } printf(" \"%s\" %s/* %s%s */\n", $last->{"suite"}, " " x ($NAMELEN - length($last->{"suite"})), $last->{"desc"}, " " x ($DESCLEN - length($last->{"desc"}))); print "};\n\n"; #------------------------------------------------------------------------ # Output the driver function prototypes print "/* Test function prototypes */\n"; foreach $elt (@item, $last) { printf("int %s(void);\n", $elt->{"func"}); } print "\n"; #------------------------------------------------------------------------ # Output the table of functions print "/* Table mapping index numbers to functions */\n"; printf("int (*%s[])(void) = {\n ", $FUNCVAR); $brk = 0; foreach $elt (@item) { print($elt->{"func"}, ", ", " " x ($FUNCLEN - length($elt->{"func"}))); $brk = ($brk + 1) & 3; print "\n " unless($brk); } print $last->{"func"}, "\n};\n\n"; #------------------------------------------------------------------------ # Output the table of descriptions print "/* Table mapping index numbers to descriptions */\n"; printf("const char *%s[] = {\n", $DESCVAR); foreach $elt (@item) { printf(" \"%s\",\n", $elt->{"desc"}); } printf(" \"%s\"\n};\n\n", $last->{"desc"}); exit 0;