# 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 arithmetic, logical and relational operators
# with mixed types
# 



#
# test running programs
#

set testfile "all-types"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
    untested all-bin.exp
    return -1
    }

if [get_compiler_info] {
    return -1
}

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


#
# 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
}

gdb_test "next" "return 0;" "continuing after dummy()"

gdb_test "print v_int+v_char" " = 71" "print value of v_int+v_char"

gdb_test "print v_int+v_short" " = 9" "print value of v_int+v_short"

gdb_test "print v_int+v_signed_char" " = 72" \
    "print value of v_int+v_signed_char"

gdb_test "print v_int+v_unsigned_char" " = 73" \
    "print value of v_int+v_unsigned_char"

gdb_test "print v_int+v_signed_short" " = 10" \
    "print value of v_int+v_signed_short"

gdb_test "print v_int+v_unsigned_short" " = 11" \
    "print value of v_int+v_unsigned_short"

gdb_test "print v_int+v_signed_int" " = 13" \
    "print value of v_int+v_signed_int"

gdb_test "print v_int+v_unsigned_int" " = 14" \
    "print value of v_int+v_unsigned_int"

gdb_test "print v_int+v_long" " = 15" "print value of v_int+v_long"

gdb_test "print v_int+v_signed_long" " = 16" \
    "print value of v_int+v_signed_long"

gdb_test "print v_int+v_unsigned_long" " = 17" \
    "print value of v_int+v_unsigned_long"

gdb_test "print v_int+v_float" " = 106.34343.*" \
    "print value of v_int+v_float"

gdb_test "print v_int+v_double" " = 206.565.*" \
    "print value of v_int+v_double"


#
# test the relational operators with mixed types
#

gdb_test "print v_int <= v_char" " = 1" "print value of v_int<=v_char"

gdb_test "print v_int <= v_short" " = $false" \
    "print value of v_int<=v_short"

gdb_test "print v_int <= v_signed_char" " = 1" \
    "print value of v_int<=v_signed_char"

gdb_test "print v_int <= v_unsigned_char" " = 1" \
    "print value of v_int<=v_unsigned_char"

gdb_test "print v_int <= v_signed_short" " = $false" \
    "print value of v_int<=v_signed_short"

gdb_test "print v_int <= v_unsigned_short" " = $false" \
    "print value of v_int<=v_unsigned_short"

gdb_test "print v_int <= v_signed_int" " = $true" \
    "print value of v_int<=v_signed_int"

gdb_test "print v_int <= v_unsigned_int" " = $true" \
    "print value of v_int<=v_unsigned_int"

gdb_test "print v_int <= v_long" " = $true" "print value of v_int<=v_long"

gdb_test "print v_int <= v_signed_long" " = $true" \
    "print value of v_int<=v_signed_long"

gdb_test "print v_int <= v_unsigned_long" " = $true" \
    "print value of v_int<=v_unsigned_long"

gdb_test "print v_int <= v_float" " = $true" "print value of v_int<=v_float"

gdb_test "print v_int <= v_double" " = $true" \
    "print value of v_int<=v_double"

#
# test the logical operators with mixed types
#

gdb_test_no_output "set variable v_char=0" "set v_char=0"
gdb_test_no_output "set variable v_double=0.0" "set v_double=0"
gdb_test_no_output "set variable v_unsigned_long=0" "set v_unsigned_long=0"

gdb_test "print v_int && v_char" " = $false" "print value of v_int&&v_char"

gdb_test "print v_int && v_short" " = $true" "print value of v_int&&v_short"

gdb_test "print v_int && v_signed_char" " = $true" \
    "print value of v_int&&v_signed_char"

gdb_test "print v_int && v_unsigned_char" " = $true" \
    "print value of v_int&&v_unsigned_char"

gdb_test "print v_int && v_signed_short" " = $true" \
    "print value of v_int&&v_signed_short"

gdb_test "print v_int && v_unsigned_short" " = $true" \
    "print value of v_int&&v_unsigned_short"

gdb_test "print v_int && v_signed_int" " = $true" \
    "print value of v_int&&v_signed_int"

gdb_test "print v_int && v_unsigned_int" " = $true" \
    "print value of v_int&&v_unsigned_int"

gdb_test "print v_int && v_long" " = $true" "print value of v_int&&v_long"

gdb_test "print v_int && v_signed_long" " = $true" \
    "print value of v_int&&v_signed_long"

gdb_test "print v_int && v_unsigned_long" " = $false" \
    "print value of v_int&&v_unsigned_long"

gdb_test "print v_int && v_float" " = $true" "print value of v_int&&v_float"

gdb_test "print v_int && v_double" " = $false" \
    "print value of v_int&&v_double"





