# Copyright 1998, 1999, 2007, 2008, 2009, 2010 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
# 


if $tracelevel then {
        strace $tracelevel
        }

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

