# 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 expressions with bitwise operators, and some
# logical operators
# Does not use a target program
# 


#
# test running programs
#


clean_restart

gdb_test "print !1" ".\[0-9\]* = 0" "print value of !1"

gdb_test "print !0" ".\[0-9\]* = 1" "print value of !0"

gdb_test "print !100" ".\[0-9\]* = 0" "print value of !100"

gdb_test "print !1000" ".\[0-9\]* = 0" "print value of !1000"

gdb_test "print !10" ".\[0-9\]* = 0" "print value of !10"

gdb_test "print !2" ".\[0-9\]* = 0" "print value of !2 "

gdb_test "print 10 | 5" ".\[0-9\]* = 15" "print value of 10 | 5"

gdb_test "print 10 & 5" ".\[0-9\]* = 0" "print value of 10 & 5"

gdb_test "print 10 ^ 5" ".\[0-9\]* = 15" "print value of 10 ^ 5"

gdb_test "print -!0" ".\[0-9\]* = -1" "print value of -!0"

gdb_test "print ~-!0" ".\[0-9\]* = 0" "print value of ~-!0"

gdb_test "print 3 * 2 / 4.0 * 2.0" ".\[0-9\]* = 3" \
    "print value of 3 * 2 / 4.0 * 2.0"

gdb_test "print 8 << 2 >> 4" ".\[0-9\]* = 2" \
    "print value of 8 << 2 >> 4"

gdb_test "print -1 < 0 > 1" ".\[0-9\]* = 0" \
    "print value of -1 < 0 > 1"

gdb_test "print 15 ^ 10 ^ 5 ^ 7" ".\[0-9\]* = 7" \
    "print value of 15 ^ 10 ^ 5 ^ 7"

gdb_test "print 3.5 < 4.0" ".\[0-9\]* = 1" \
    "print value of 3.5 < 4.0"

gdb_test "print 3.5 < -4.0" ".\[0-9\]* = 0" \
    "print value of 3.5 < -4.0"

gdb_test "print 2 > -3" ".\[0-9\]* = 1" "print value of 2 > -3"

gdb_test "print -3>4" ".\[0-9\]* = 0" "print value of -3>4"

gdb_test "print (-3 > 4)" ".\[0-9\]* = 0" "print value of (-3 > 4)"

gdb_test "print 3>=2.5" ".\[0-9\]* = 1" "print value of 3>=2.5"

gdb_test "print 3>=4.5" ".\[0-9\]* = 0" "print value of 3>=4.5"

gdb_test "print 3==3.0" ".\[0-9\]* = 1" "print value of 3==3.0"

gdb_test "print 3==4.0" ".\[0-9\]* = 0" "print value of 3==4.0"

gdb_test "print 3!=3.0" ".\[0-9\]* = 0" "print value of 3!=3.0"

gdb_test "print 3!=5.0" ".\[0-9\]* = 1" "print value of 3!=5.0"

gdb_test "print 0 || 1 && 0 | 0 ^ 0 == 8 > 128 >>1 +2 *2" \
    ".\[0-9\]* = 0" \
    "print value of 0 || 1 && 0 | 0 ^ 0 == 8 > 128 >>1 +2 *2"

gdb_test "print 1.0 || 0" ".\[0-9\]* = 1" \
    "print value of 1.0 || 0"

gdb_test "print 0.0 || 1.0" ".\[0-9\]* = 1" \
    "print value of 0.0 || 1.0"

gdb_test "print 0.0 || 0" ".\[0-9\]* = 0" \
    "print value of 0.0 || 0"

gdb_test "print 0 || 1 && 0 | 0 ^ 0 == 8" ".\[0-9\]* = 0" \
    "print value of 0 || 1 && 0 | 0 ^ 0 == 8"

gdb_test "print 0 == 8 > 128 >> 1 + 2 * 2" ".\[0-9\]* = 0" \
    "print value of 0 == 8 > 128 >> 1 + 2 * 2"

