# 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 all the assignemnt operators
# with mixed types and with int type variables
# 

#
# 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 assign.exp
     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_multiple "print v_int=57" "v_int=57" {
    -re " = 57.*$gdb_prompt $" {
	gdb_test "print v_int" " = 57" "v_int=57"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6"

gdb_test_multiple "print v_int+=57" "v_int+=57" {
    -re " = 63.*$gdb_prompt $" {
	gdb_test "print v_int" " = 63" "v_int+=57"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (2)"

gdb_test_multiple "print v_int-=57" "v_int-=57" {
    -re " = -51.*$gdb_prompt $" {
	gdb_test "print v_int" " = -51" "v_int-=57"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (3)"

gdb_test_multiple "print v_int*=5" "v_int*=5" {
    -re " = 30.*$gdb_prompt $" {
	gdb_test "print v_int" " = 30" "v_int*=5"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (4)"

gdb_test_multiple "print v_int/=4" "v_int/=4" {
    -re " = 1.*$gdb_prompt $" {
	gdb_test "print v_int" " = 1" "v_int/=4"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (5)"

gdb_test_multiple "print v_int%=4" "v_int%=4" {
    -re " = 2.*$gdb_prompt $" {
	gdb_test "print v_int" " = 2" "v_int%=4"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (6)"

gdb_test_multiple "print v_int+=v_char" "v_int+=char" {
    -re " = 71.*$gdb_prompt $" {
	gdb_test "print v_int" " = 71" "v_int+=char"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (7)"

gdb_test_multiple "print v_int+=v_signed_char" "v_int+=signed_char" {
    -re " = 72.*$gdb_prompt $" {
	gdb_test "print v_int" " = 72" "v_int+=signed_char"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (8)"

gdb_test_multiple "print v_int+=v_unsigned_char" "v_int+=unsigned_char" {
    -re " = 73.*$gdb_prompt $" {
	gdb_test "print v_int" " = 73" "v_int+=unsigned_char"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (9)"

gdb_test_multiple "print v_int+=v_short" "v_int+=short" {
    -re " = 9.*$gdb_prompt $" {
	gdb_test "print v_int" " = 9" "v_int+=short"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (10)"

gdb_test_multiple "print v_int+=v_signed_short" "v_int+=signed_short" {
    -re " = 10.*$gdb_prompt $" {
	gdb_test "print v_int" " = 10" "v_int+=signed_short"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (11)"

gdb_test_multiple "print v_int+=v_unsigned_short" "v_int=+unsigned_short" {
    -re " = 11.*$gdb_prompt $" {
	gdb_test "print v_int" " = 11" "v_int=+unsigned_short"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (12)"

gdb_test_multiple "print v_int+=v_signed_int" "v_int+=signed_int" {
    -re " = 13.*$gdb_prompt $" {
	gdb_test "print v_int" " = 13" "v_int+=signed_int"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (13)"

gdb_test_multiple "print v_int+=v_unsigned_int" "v_int+=unsigned_int" {
    -re " = 14.*$gdb_prompt $" {
	gdb_test "print v_int" " = 14" "v_int+=unsigned_int"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (14)"

gdb_test_multiple "print v_int+=v_long" "v_int+=long" {
    -re " = 15.*$gdb_prompt $" {
	gdb_test "print v_int" " = 15" "v_int+=long"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (15)"

gdb_test_multiple "print v_int+=v_signed_long" "v_int+=signed_long" {
    -re " = 16.*$gdb_prompt $" {
	gdb_test "print v_int" " = 16" "v_int+=signed_long"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (16)"

gdb_test_multiple "print v_int+=v_unsigned_long" "v_int+=unsigned_long" {
    -re " = 17.*$gdb_prompt $" {
	gdb_test "print v_int" " = 17" "v_int+=unsigned_long"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (17)"

gdb_test_multiple "print v_int+=v_float" "v_int+=v_float" {
    -re " = 106.*$gdb_prompt $" {
	gdb_test "print v_int" " = 106" "v_int+=v_float"
    }
}

gdb_test_no_output "set variable v_int = 6" "set v_int to 6 (18)"

gdb_test_multiple "print v_int+=v_double" "v_int+=double" {
    -re " = 206.*$gdb_prompt $" {
	gdb_test "print v_int" " = 206" "v_int+=double"
    }
}
