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

standard_testfile all-types.c

if [get_compiler_info] {
    return -1
}

if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
    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
}

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"





