# Copyright 1998, 1999, 2007, 2008, 2009, 2010, 2011
# 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"











