# Copyright 2008-2021 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/>.

# Simple test for alternate punctuators.

# This file is part of the gdb testsuite

if { [skip_cplus_tests] } { continue }

gdb_exit
gdb_start

gdb_test_no_output "set lang c++"
gdb_test "print (0x5a5a bitand 0xaaaa) == (0x5a5a & 0xaaaa)" " = true"
gdb_test "print (0x5a5a bitor 0xaaaa) == (0x5a5a | 0xaaaa)" " = true"
gdb_test "print (0x5a5a xor 0xaaaa) == (0x5a5a ^ 0xaaaa)" " = true"
gdb_test "print (0x5a5a and 0xaaaa) == (0x5a5a && 0xaaaa)" " = true"
gdb_test "print (0x5a5a or 0xaaaa) == (0x5a5a || 0xaaaa)" " = true"
gdb_test "print (not not 0xaaaa) == (!!0xaaaa)" " = true"
gdb_test "print (compl 0xaaaa) == (~0xaaaa)" " = true"

gdb_test_no_output "set \$u = 0x5a5a" "set \$u 1"
gdb_test_no_output "set \$v = 0x5a5a" "set \$v 1"
gdb_test "print (\$u not_eq 0xaaaa) == (\$v != 0xaaaa)" "= true"
gdb_test "print (\$u and_eq 0xaaaa) == (\$v &= 0xaaaa)" "= true"

gdb_test_no_output "set \$u = 0x5a5a" "set \$u 2"
gdb_test_no_output "set \$v = 0x5a5a" "set \$v 2"
gdb_test "print (\$u or_eq 0xaaaa) == (\$v |= 0xaaaa)" "= true"

gdb_test_no_output "set \$u = 0x5a5a" "set \$u 3"
gdb_test_no_output "set \$v = 0x5a5a" "set \$v 3"
gdb_test "print (\$u xor_eq 0xaaaa) == (\$v ^= 0xaaaa)" "= true"

gdb_exit
return 0
