# Copyright 1998, 1999, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.

# This program 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 3 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, see <http://www.gnu.org/licenses/>.

# This file was written by Elena Zannoni (ezannoni@cygnus.com)

# This file is part of the gdb testsuite

#
# test of evaluation of conditional expressions, with constants and 
# variables. Using the print and the whatis command
# written with the only purpose in mind to cover the holes in the
# eval.c file
#
# source file "int-type.c"
#


if $tracelevel then {
        strace $tracelevel
}

# Check to see if we have an executable to test.  If not, then either we
# haven't tried to compile one, or the compilation failed for some reason.
# In either case, just notify the user and skip the tests in this file.

set testfile "int-type"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
     untested cond-expr.exp
     return -1
    }


gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}


if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

gdb_test "print (2 ? 3 : 4)" "\[0-9\]* = 3" \
    "print value of cond expr (const true)"

gdb_test "print (0 ? 3 : 4)" "\[0-9\]* = 4" \
    "print value of cond expr (const false)"

gdb_test_no_output "set variable x=14" "set variable x=14"
gdb_test_no_output "set variable y=2" "set variable y=2"
gdb_test_no_output "set variable z=3" "set variable z=3"

gdb_test "print (x ? y : z)" "\[0-9\]* = 2" \
    "print value of cond expr (var true)"

gdb_test_no_output "set variable x=0" "set variable x=0"

gdb_test "print (x ? y : z)" "\[0-9\]* = 3" \
    "print value of cond expr (var false)"

gdb_test "whatis (0 ? 3 : 4)" "type = int" \
    "print whatis of cond expr"











