# Copyright 1998-1999, 2007-2012 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
#


gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir


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"

