# Copyright 1998-2013 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
