# Copyright 1998-1999, 2007-2012 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
#
# tests for whatis command on expressions.
# used in file eval.c. This flavor of whatis
# command performs evaluation of expressions w/o actually
# computing the value, but just the type
# of the result. It goes through the evaluate_subexp_standard
# with the EVAL_AVOID_SIDE_EFFECTS flag rather than EVAL_NORMAL
# 

#
# test running programs
#

if { [prepare_for_testing whatis-exp.exp whatis-exp int-type.c {debug nowarnings}] } {
    return -1
}

#
# set it up at a breakpoint so we can play with the variable values
#

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

#
# test expressions with "int" types
#

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=2" "set variable z=2"
gdb_test_no_output "set variable w=3" "set variable w=3"

gdb_test "print x" " = 14" "print value of x"
gdb_test "print y" " = 2" "print value of y"
gdb_test "print z" " = 2" "print value of z"
gdb_test "print w" " = 3" "print value of w"

gdb_test "whatis x+y" "type = int" "whatis value of x+y"
gdb_test "whatis x-y" "type = int" "whatis value of x-y"
gdb_test "whatis x*y" "type = int" "whatis value of x*y"
gdb_test "whatis x/y" "type = int" "whatis value of x/y"
gdb_test "whatis x%y" "type = int" "whatis value of x%y"
gdb_test "whatis x=y" "type = int" "whatis value of x=y"

gdb_test "whatis x+=2" "type = int" "whatis value of x+=2"
gdb_test "whatis ++x" "type = int" "whatis value of  ++x"
gdb_test "whatis --x" "type = int" "whatis value of  --x"
gdb_test "whatis x++" "type = int" "whatis value of  x++"
gdb_test "whatis x--" "type = int" "whatis value of  x--"

gdb_exit
return 0
