# This testcase is part of GDB, the GNU debugger.

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

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org

# Test printing of various values.
# NOTE: The tests here intentionally do not require an objc compiler.

load_lib "objc.exp"

proc test_float_accepted {} {
    global gdb_prompt

    # Test parsing of fp value with legit text following.
    gdb_test "p 1234.5+1" " = 1235.5" "check fp + text"

    # Test all the suffixes (including no suffix).
    gdb_test "p 1." " = 1"
    gdb_test "p 1.5" " = 1.5"
    setup_kfail gdb/11925 "*-*-*"
    gdb_test "p 1.f" " = 1"
    setup_kfail gdb/11925 "*-*-*"
    gdb_test "p 1.5f" " = 1.5"
    setup_kfail gdb/11925 "*-*-*"
    gdb_test "p 1.l" " = 1"
    setup_kfail gdb/11925 "*-*-*"
    gdb_test "p 1.5l" " = 1.5"

    # Test hexadecimal floating point.
    set test "p 0x1.1"
    gdb_test_multiple $test $test {
	-re " = 1\\.0625\r\n$gdb_prompt $" {
	    pass $test
	}
	-re "Invalid number \"0x1\\.1\"\\.\r\n$gdb_prompt $" {
	    # Older glibc does not support hex float, newer does.
	    xfail $test
	}
    }
}

proc test_float_rejected {} {
    # Test bad suffixes.
    test_print_reject "p 1.1x"
    test_print_reject "p 1.1ff"
    test_print_reject "p 1.1ll"
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

if [set_lang_objc] {
    test_float_accepted
    test_float_rejected
} else {
    warning "Objective-c print tests suppressed"
}
