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

standard_testfile all-types.c

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
     untested "failed to compile"
     return -1
    }


clean_restart ${binfile}


#
# set it up at a breakpoint so we can play with the variable values
#

if {![runto_main]} {
    return
}

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