# Expect driver script for GCC Regression Tests
# Copyright (C) 1993, 1995, 1997 Free Software Foundation
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 

# These tests come from Torbjorn Granlund's (tege@cygnus.com)
# F torture test suite, and other contributors.

if $tracelevel then {
    strace $tracelevel
}

# load support procs
load_lib f-torture.exp

foreach testcase [glob -nocomplain $srcdir/$subdir/*.f] {
    # If we're only testing specific files and this isn't one of them, skip it.
    if ![runtest_file_p $runtests $testcase] then {
	continue
    }

    f-torture $testcase
}

foreach testcase [glob -nocomplain $srcdir/$subdir/*.F] {
    # If we're only testing specific files and this isn't one of them, skip it.
    if ![runtest_file_p $runtests $testcase] then {
	continue
    }

    f-torture $testcase
}
