# OBSOLETE # Copyright 1995, 1996, 1997 Free Software Foundation, Inc.
# OBSOLETE 
# OBSOLETE # This program is free software; you can redistribute it and/or modify
# OBSOLETE # it under the terms of the GNU General Public License as published by
# OBSOLETE # the Free Software Foundation; either version 2 of the License, or
# OBSOLETE # (at your option) any later version.
# OBSOLETE # 
# OBSOLETE # This program is distributed in the hope that it will be useful,
# OBSOLETE # but WITHOUT ANY WARRANTY; without even the implied warranty of
# OBSOLETE # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# OBSOLETE # GNU General Public License for more details.
# OBSOLETE # 
# OBSOLETE # You should have received a copy of the GNU General Public License
# OBSOLETE # along with this program; if not, write to the Free Software
# OBSOLETE # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
# OBSOLETE 
# OBSOLETE # Please email any bugs, comments, and/or additions to this file to:
# OBSOLETE # bug-gdb@prep.ai.mit.edu
# OBSOLETE 
# OBSOLETE # This file tests various Chill values, expressions, and types.
# OBSOLETE 
# OBSOLETE if $tracelevel then {
# OBSOLETE 	strace $tracelevel
# OBSOLETE }
# OBSOLETE 
# OBSOLETE if [skip_chill_tests] then { continue }
# OBSOLETE 
# OBSOLETE set testfile "powerset"
# OBSOLETE set srcfile ${srcdir}/$subdir/${testfile}.ch
# OBSOLETE set binfile ${objdir}/${subdir}/${testfile}.exe
# OBSOLETE if  { [compile "${srcfile} -g -w -o ${binfile} ${CHILL_RT0} ${CHILL_LIB}"] != "" } {
# OBSOLETE     perror "Couldn't compile ${srcfile}"
# OBSOLETE     return -1
# OBSOLETE }
# OBSOLETE 
# OBSOLETE # Set the current language to chill.  This counts as a test.  If it
# OBSOLETE # fails, then we skip the other tests.
# OBSOLETE 
# OBSOLETE proc set_lang_chill {} {
# OBSOLETE     global gdb_prompt
# OBSOLETE     global binfile objdir subdir
# OBSOLETE 
# OBSOLETE     verbose "loading file '$binfile'"
# OBSOLETE     gdb_load $binfile
# OBSOLETE     send_gdb "set language chill\n"
# OBSOLETE     gdb_expect {
# OBSOLETE 	-re ".*$gdb_prompt $" {}
# OBSOLETE 	timeout { fail "set language chill (timeout)" ; return 0 }
# OBSOLETE     }
# OBSOLETE 
# OBSOLETE     send_gdb "show language\n"
# OBSOLETE     gdb_expect {
# OBSOLETE 	-re ".* source language is \"chill\".*$gdb_prompt $" {
# OBSOLETE 	    pass "set language to \"chill\""
# OBSOLETE 	    send_gdb "break xx_\n"
# OBSOLETE 	    gdb_expect {
# OBSOLETE 		-re ".*$gdb_prompt $" {
# OBSOLETE 		    send_gdb "run\n" 
# OBSOLETE 		    gdb_expect -re ".*$gdb_prompt $" {}
# OBSOLETE 		    return 1
# OBSOLETE 		}
# OBSOLETE 		timeout {
# OBSOLETE 		    fail "can't set breakpoint (timeout)"
# OBSOLETE 		    return 0
# OBSOLETE 		}
# OBSOLETE 	    }
# OBSOLETE 	}
# OBSOLETE 	-re ".*$gdb_prompt $" {
# OBSOLETE 	    fail "setting language to \"chill\""
# OBSOLETE 	    return 0
# OBSOLETE 	}
# OBSOLETE 	timeout {
# OBSOLETE 	    fail "can't show language (timeout)"
# OBSOLETE 	    return 0
# OBSOLETE 	}
# OBSOLETE     }
# OBSOLETE }
# OBSOLETE 
# OBSOLETE # Testing printing of a specific value.  Increment passcount for
# OBSOLETE # success or issue fail message for failure.  In both cases, return
# OBSOLETE # a 1 to indicate that more tests can proceed.  However a timeout
# OBSOLETE # is a serious error, generates a special fail message, and causes
# OBSOLETE # a 0 to be returned to indicate that more tests are likely to fail
# OBSOLETE # as well.
# OBSOLETE #
# OBSOLETE # Args are:
# OBSOLETE #
# OBSOLETE #	First one is string to send_gdb to gdb
# OBSOLETE #	Second one is string to match gdb result to
# OBSOLETE #	Third one is an optional message to be printed
# OBSOLETE 
# OBSOLETE proc test_print_accept { args } {
# OBSOLETE     global gdb_prompt
# OBSOLETE     global passcount
# OBSOLETE     global verbose
# OBSOLETE 
# OBSOLETE     if [llength $args]==3 then {
# OBSOLETE 	set message [lindex $args 2]
# OBSOLETE     } else {
# OBSOLETE 	set message [lindex $args 0]
# OBSOLETE     }
# OBSOLETE     set sendthis [lindex $args 0]
# OBSOLETE     set expectthis [lindex $args 1]
# OBSOLETE     set result [gdb_test $sendthis ".* = ${expectthis}" $message]
# OBSOLETE     if $result==0 {incr passcount}
# OBSOLETE     return $result
# OBSOLETE }
# OBSOLETE 
# OBSOLETE proc test_card {} {
# OBSOLETE     global passcount
# OBSOLETE 
# OBSOLETE     verbose "testing builtin CARD"
# OBSOLETE     set passcount 0
# OBSOLETE 
# OBSOLETE     # discrete mode names
# OBSOLETE     test_print_accept "print card(v_ps1)" "4"
# OBSOLETE     test_print_accept "print card(v_ps2)" "15"
# OBSOLETE     test_print_accept "print card(v_ps3)" "4"
# OBSOLETE     test_print_accept "print card(v_ps4)" "11"
# OBSOLETE     test_print_accept "print card(v_ps5)" "1"
# OBSOLETE     test_print_accept "print card(v_ps51)" "0"
# OBSOLETE     test_print_accept "print card(v_ps6)" "101"
# OBSOLETE 
# OBSOLETE     # a failure
# OBSOLETE     setup_xfail "*-*-*"
# OBSOLETE     test_print_accept "print card(m_ps1)" "typename in invalid context"
# OBSOLETE }
# OBSOLETE 
# OBSOLETE proc test_min {} {
# OBSOLETE     global passcount
# OBSOLETE 
# OBSOLETE     verbose "testing builtin MIN"
# OBSOLETE     set passcount 0
# OBSOLETE 
# OBSOLETE     # discrete mode names
# OBSOLETE     test_print_accept "print min(v_ps1)" "1"
# OBSOLETE     test_print_accept "print min(v_ps2)" "-100"
# OBSOLETE     test_print_accept "print min(v_ps3)" "bb"
# OBSOLETE     test_print_accept "print min(v_ps4)" "','"
# OBSOLETE     test_print_accept "print min(v_ps5)" "FALSE"
# OBSOLETE     test_print_accept "print min(v_ps6)" "-50"
# OBSOLETE 
# OBSOLETE     # a failure
# OBSOLETE     setup_xfail "*-*-*"
# OBSOLETE     test_print_accept "print min(v_ps51)" "MIN for empty powerset"
# OBSOLETE     setup_xfail "*-*-*"
# OBSOLETE     test_print_accept "print min(m_ps1)" "typename in invalid context"
# OBSOLETE }
# OBSOLETE 
# OBSOLETE proc test_max {} {
# OBSOLETE     global passcount
# OBSOLETE 
# OBSOLETE     verbose "testing builtin MIN"
# OBSOLETE     set passcount 0
# OBSOLETE 
# OBSOLETE     # discrete mode names
# OBSOLETE     test_print_accept "print max(v_ps1)" "7"
# OBSOLETE     test_print_accept "print max(v_ps2)" "100"
# OBSOLETE     test_print_accept "print max(v_ps3)" "ii"
# OBSOLETE     test_print_accept "print max(v_ps4)" "'z'"
# OBSOLETE     test_print_accept "print max(v_ps5)" "FALSE"
# OBSOLETE     test_print_accept "print max(v_ps6)" "50"
# OBSOLETE 
# OBSOLETE     # test an IN
# OBSOLETE     test_print_accept "print 0 in v_ps6" "TRUE"
# OBSOLETE 
# OBSOLETE     # a failure
# OBSOLETE     setup_xfail "*-*-*"
# OBSOLETE     test_print_accept "print max(v_ps51)" "MAX for empty powerset"
# OBSOLETE }
# OBSOLETE 
# OBSOLETE # Start with a fresh gdb.
# OBSOLETE 
# OBSOLETE gdb_exit
# OBSOLETE gdb_start
# OBSOLETE gdb_reinitialize_dir $srcdir/$subdir
# OBSOLETE 
# OBSOLETE gdb_test "set print sevenbit-strings" ".*"
# OBSOLETE 
# OBSOLETE if [set_lang_chill] then {
# OBSOLETE     # test builtins as described in chapter 6.20.3 Z.200
# OBSOLETE     test_card
# OBSOLETE     test_min
# OBSOLETE     test_max
# OBSOLETE } else {
# OBSOLETE     warning "$test_name tests suppressed."
# OBSOLETE }
