# Copyright 1998-2026 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 { [prepare_for_testing "prepare" $testfile $srcfile] != 0 } {
    return
}

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