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



if $tracelevel then {
	strace $tracelevel
	}

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





