# Copyright 1998-2023 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 {[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]} {
    return
}

# These are used as expected result values.
set false 0
set true 1

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"





