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

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