# 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 ${binfile}] {
    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"





