# Copyright 1998, 1999, 2007, 2008 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/>.

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# 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 prms_id 0
set bug_id 0

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()"

send_gdb "print v_int+v_char\n"
gdb_expect {
    -re ".*71.*$gdb_prompt $" {
        pass "print value of v_int+v_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_char" }
    timeout           { fail "(timeout) print value of v_int+v_char" }    
  }

send_gdb "print v_int+v_short\n"
gdb_expect {
    -re ".*9.*$gdb_prompt $" {
        pass "print value of v_int+v_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_short" }
    timeout           { fail "(timeout) print value of v_int+v_short" }    
  }


send_gdb "print v_int+v_signed_char\n"
gdb_expect {
    -re ".*72.*$gdb_prompt $" {
        pass "print value of v_int+v_signed_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_signed_char" }
    timeout           { fail "(timeout) print value of v_int+v_signed_char" }    
  }


send_gdb "print v_int+v_unsigned_char\n"
gdb_expect {
    -re ".*73.*$gdb_prompt $" {
        pass "print value of v_int+v_unsigned_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_unsigned_char" }
    timeout           { fail "(timeout) print value of v_int+v_unsigned_char" }    
  }


send_gdb "print v_int+v_signed_short\n"
gdb_expect {
    -re ".*10.*$gdb_prompt $" {
        pass "print value of v_int+v_signed_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_signed_short" }
    timeout           { fail "(timeout) print value of v_int+v_signed_short" }    
  }


send_gdb "print v_int+v_unsigned_short\n"
gdb_expect {
    -re ".*11.*$gdb_prompt $" {
        pass "print value of v_int+v_unsigned_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_unsigned_short" }
    timeout           { fail "(timeout) print value of v_int+v_unsigned_short" }    
  }


send_gdb "print v_int+v_signed_int\n"
gdb_expect {
    -re ".*13.*$gdb_prompt $" {
        pass "print value of v_int+v_signed_int"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_signed_int" }
    timeout           { fail "(timeout) print value of v_int+v_signed_int" }    
  }


send_gdb "print v_int+v_unsigned_int\n"
gdb_expect {
    -re ".*14.*$gdb_prompt $" {
        pass "print value of v_int+v_unsigned_int"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_unsigned_int" }
    timeout           { fail "(timeout) print value of v_int+v_unsigned_int" }    
  }


send_gdb "print v_int+v_long\n"
gdb_expect {
    -re ".*15.*$gdb_prompt $" {
        pass "print value of v_int+v_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_long" }
    timeout           { fail "(timeout) print value of v_int+v_long" }    
  }


send_gdb "print v_int+v_signed_long\n"
gdb_expect {
    -re ".*16.*$gdb_prompt $" {
        pass "print value of v_int+v_signed_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_signed_long" }
    timeout           { fail "(timeout) print value of v_int+v_signed_long" }    
  }


send_gdb "print v_int+v_unsigned_long\n"
gdb_expect {
    -re ".*17.*$gdb_prompt $" {
        pass "print value of v_int+v_unsigned_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_unsigned_long" }
    timeout           { fail "(timeout) print value of v_int+v_unsigned_long" }    
  }


send_gdb "print v_int+v_float\n"
gdb_expect {
    -re ".*106.34343.*$gdb_prompt $" {
        pass "print value of v_int+v_float"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_float" }
    timeout           { fail "(timeout) print value of v_int+v_float" }    
  }


send_gdb "print v_int+v_double\n"
gdb_expect {
    -re ".*206.565.*$gdb_prompt $" {
        pass "print value of v_int+v_double"
    }
    -re ".*$gdb_prompt $" { fail "print value of v_int+v_double" }
    timeout     { fail "(timeout) print value of v_int+v_double" }
}


#
# test the relational operators with mixed types
#

send_gdb "print v_int <= v_char\n"
gdb_expect {
    -re ".*1.*$gdb_prompt $" {
        pass "print value of v_int<=v_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_char" }
    timeout           { fail "(timeout) print value of v_int<=v_char" }    
  }

send_gdb "print v_int <= v_short\n"
gdb_expect {
    -re ".*$false.*$gdb_prompt $" {
        pass "print value of v_int<=v_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_short" }
    timeout           { fail "(timeout) print value of v_int<=v_short" }    
  }


send_gdb "print v_int <= v_signed_char\n"
gdb_expect {
    -re ".*1.*$gdb_prompt $" {
        pass "print value of v_int<=v_signed_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_char" }
    timeout           { fail "(timeout) print value of v_int<=v_signed_char" }    
  }


send_gdb "print v_int <= v_unsigned_char\n"
gdb_expect {
    -re ".*1.*$gdb_prompt $" {
        pass "print value of v_int<=v_unsigned_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_char" }
    timeout           { fail "(timeout) print value of v_int<=v_unsigned_char" }    
  }


send_gdb "print v_int <= v_signed_short\n"
gdb_expect {
    -re ".*$false.*$gdb_prompt $" {
        pass "print value of v_int<=v_signed_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_short" }
    timeout           { fail "(timeout) print value of v_int<=v_signed_short" }    
  }


send_gdb "print v_int <= v_unsigned_short\n"
gdb_expect {
    -re ".*$false.*$gdb_prompt $" {
        pass "print value of v_int<=v_unsigned_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_short" }
    timeout           { fail "(timeout) print value of v_int<=v_unsigned_short" }    
  }


send_gdb "print v_int <= v_signed_int\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_signed_int"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_int" }
    timeout           { fail "(timeout) print value of v_int<=v_signed_int" }    
  }


send_gdb "print v_int <= v_unsigned_int\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_unsigned_int"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_int" }
    timeout           { fail "(timeout) print value of v_int<=v_unsigned_int" }    
  }


send_gdb "print v_int <= v_long\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_long" }
    timeout           { fail "(timeout) print value of v_int<=v_long" }    
  }


send_gdb "print v_int <= v_signed_long\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_signed_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_long" }
    timeout           { fail "(timeout) print value of v_int<=v_signed_long" }    
  }


send_gdb "print v_int <= v_unsigned_long\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_unsigned_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_long" }
    timeout           { fail "(timeout) print value of v_int<=v_unsigned_long" }    
  }


send_gdb "print v_int <= v_float\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_float"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_float" }
    timeout           { fail "(timeout) print value of v_int<=v_float" }    
  }


send_gdb "print v_int <= v_double\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int<=v_double"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int<=v_double" }
    timeout           { fail "(timeout) print value of v_int<=v_double" }    
  }



#
# test the logical operators with mixed types
#

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

send_gdb "print v_int && v_char\n"
gdb_expect {
    -re ".*$false.*$gdb_prompt $" {
        pass "print value of v_int&&v_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_char" }
    timeout           { fail "(timeout) print value of v_int&&v_char" }    
  }

send_gdb "print v_int && v_short\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_short" }
    timeout           { fail "(timeout) print value of v_int&&v_short" }    
  }


send_gdb "print v_int && v_signed_char\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_signed_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_char" }
    timeout           { fail "(timeout) print value of v_int&&v_signed_char" }    
  }


send_gdb "print v_int && v_unsigned_char\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_unsigned_char"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_char" }
    timeout           { fail "(timeout) print value of v_int&&v_unsigned_char" }    
  }


send_gdb "print v_int && v_signed_short\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_signed_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_short" }
    timeout           { fail "(timeout) print value of v_int&&v_signed_short" }    
  }


send_gdb "print v_int && v_unsigned_short\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_unsigned_short"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_short" }
    timeout           { fail "(timeout) print value of v_int&&v_unsigned_short" }    
  }


send_gdb "print v_int && v_signed_int\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_signed_int"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_int" }
    timeout           { fail "(timeout) print value of v_int&&v_signed_int" }    
  }


send_gdb "print v_int && v_unsigned_int\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_unsigned_int"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_int" }
    timeout           { fail "(timeout) print value of v_int&&v_unsigned_int" }    
  }


send_gdb "print v_int && v_long\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_long" }
    timeout           { fail "(timeout) print value of v_int&&v_long" }    
  }


send_gdb "print v_int && v_signed_long\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_signed_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_long" }
    timeout           { fail "(timeout) print value of v_int&&v_signed_long" }    
  }


send_gdb "print v_int && v_unsigned_long\n"
gdb_expect {
    -re ".*$false.*$gdb_prompt $" {
        pass "print value of v_int&&v_unsigned_long"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_long" }
    timeout           { fail "(timeout) print value of v_int&&v_unsigned_long" }    
  }


send_gdb "print v_int && v_float\n"
gdb_expect {
    -re ".*$true.*$gdb_prompt $" {
        pass "print value of v_int&&v_float"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_float" }
    timeout           { fail "(timeout) print value of v_int&&v_float" }    
  }


send_gdb "print v_int && v_double\n"
gdb_expect {
    -re ".*$false.*$gdb_prompt $" {
        pass "print value of v_int&&v_double"
      }
    -re ".*$gdb_prompt $" { fail "print value of v_int&&v_double" }
    timeout           { fail "(timeout) print value of v_int&&v_double" }    
  }





