# Copyright 1993, 1997 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Fred Fish. (fnf@cygnus.com)

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

proc test_input_radix_2 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #1"
    gdb_test "set input-radix 2" \
	"Input radix now set to decimal 2, hex 2, octal 2."
    gdb_test "show radix" \
	"Input radix set to decimal 2, hex 2, octal 2.\r\nOutput radix set to decimal 10, hex a, octal 12." \
	"show radix #1"
    gdb_test "p 010"		"8"
    gdb_test "p 20."		"20"
    gdb_test "p (int) 20."	"20"
    gdb_test "p 0xf"		"15"
    gdb_test "p 10"		"2"
    gdb_test "p -101"		"-5"
    gdb_test "p 101"		"5"
    gdb_test "p 10101"		"21"
    gdb_test "p 4"		"Invalid number \"4\"\\."
    gdb_test "p -2"		"Invalid number \"2\"\\."
}

# Test input radix 3 (an non-typical radix)

proc test_input_radix_3 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #2"
    gdb_test "set input-radix 3" \
	"Input radix now set to decimal 3, hex 3, octal 3."
    gdb_test "show radix" \
	"Input radix set to decimal 3, hex 3, octal 3.\r\nOutput radix set to decimal 10, hex a, octal 12." \
	"show radix #2"
    gdb_test "p 010"		"8"
    gdb_test "p 20."		"20"
    gdb_test "p (int) 20."	"20"
    gdb_test "p 0xf"		"15"
    gdb_test "p 10"		"3"
    gdb_test "p 0"		"0"
    gdb_test "p 1"		"1"
    gdb_test "p 2"		"2"
    gdb_test "p 10"		"3"
    gdb_test "p 20"		"6"
    gdb_test "p 100"		"9"
    gdb_test "p -100"		"-9"
    gdb_test "p 3"		"Invalid number \"3\"."
    gdb_test "p 30"		"Invalid number \"30\"."
}

proc test_input_radix_8 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #3"
    gdb_test "set input-radix 8" \
	"Input radix now set to decimal 8, hex 8, octal 10."
    gdb_test "show radix" \
	"Input radix set to decimal 8, hex 8, octal 10.\r\nOutput radix set to decimal 10, hex a, octal 12." \
	"set radix #3"
    gdb_test "p 010"		"8"
    gdb_test "p 20."		"20"
    gdb_test "p (int) 20."	"20"
    gdb_test "p 0xf"		"15"
    gdb_test "p 10"		"8"
    gdb_test "p 20"		"16"
    gdb_test "p -20"		"-16"
    gdb_test "p 100"		"64"
    gdb_test "p 8"		"Invalid number \"8\"."
    gdb_test "p -9"		"Invalid number \"9\"."
}

proc test_input_radix_10 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #4"
    gdb_test "set input-radix 10" \
	"Input radix now set to decimal 10, hex a, octal 12."
    gdb_test "show radix" \
	"Input and output radices set to decimal 10, hex a, octal 12." \
	"show radix #4"
    gdb_test "p 010"		"8"
    gdb_test "p 20."		"20"
    gdb_test "p (int) 20."	"20"
    gdb_test "p 0xf"		"15"
    gdb_test "p 10"		"10"
    gdb_test "p -12"		"-12"
}

proc test_input_radix_16 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #5"
    gdb_test "set input-radix 16" \
	"Input radix now set to decimal 16, hex 10, octal 20."
    gdb_test "show radix" \
	"Input radix set to decimal 16, hex 10, octal 20.\r\nOutput radix set to decimal 10, hex a, octal 12." \
	"show radix #5"
    gdb_test "p 010"		"8"
    gdb_test "p 20."		"20"
    gdb_test "p (int) 20."	"20"
    gdb_test "p 0xf"		"15"
    gdb_test "p 10"		"16"
    gdb_test "p 100"		"256"
}

proc test_output_radix_8 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #6"
    gdb_test "set output-radix 8" \
	"Output radix now set to decimal 8, hex 8, octal 10."
    gdb_test "show radix" \
	"Input radix set to decimal 10, hex a, octal 12.\r\nOutput radix set to decimal 8, hex 8, octal 10." \
	"show radix #6"
    gdb_test "p 010"		"010"
    # FIXME:  If gdb can't handle float printing in different radices, it
    # should at least warn once the first time that is attempted.
    setup_xfail "*-*-*"
    gdb_test "p 20."		"24"	"Float printing when output radix is 8"
    gdb_test "p (int) 20."	"24"
    gdb_test "p 0xf"		"17"
    gdb_test "p 10"		"12"
    gdb_test "p 100"		"144"
}

proc test_output_radix_10 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #7"
    gdb_test "set output-radix 10" \
	"Output radix now set to decimal 10, hex a, octal 12."
    gdb_test "show radix" \
	"Input and output radices set to decimal 10, hex a, octal 12." \
	"show radix #7"
    gdb_test "p 010"		"8"
    gdb_test "p 20."		"20"
    gdb_test "p (int) 20."	"20"
    gdb_test "p 0xf"		"15"
    gdb_test "p 10"		"10"
    gdb_test "p 100"		"100"
}

proc test_output_radix_16 {} {
    gdb_test "set radix" \
	"Input and output radices now set to decimal 10, hex a, octal 12." \
	"set radix #8"
    gdb_test "set output-radix 16" \
	"Output radix now set to decimal 16, hex 10, octal 20."
    gdb_test "show radix" \
	"Input radix set to decimal 10, hex a, octal 12.\r\nOutput radix set to decimal 16, hex 10, octal 20." \
	"show radix #8"
    gdb_test "p 010"		"8"
    # FIXME:  If gdb can't handle float printing in different radices, it
    # should at least warn once the first time that is attempted.
    setup_xfail "*-*-*"
    gdb_test "p 20."		"14"	"Float printing when output radix is 16"
    gdb_test "p (int) 20."	"14"
    gdb_test "p 0xf"		"f"
    gdb_test "p 10"		"a"
    gdb_test "p 100"		"64"
}

# Start with a fresh gdb.

gdb_exit
gdb_start

test_input_radix_2
test_input_radix_3
test_input_radix_8
test_input_radix_10
test_input_radix_16
test_output_radix_8
test_output_radix_10
test_output_radix_16
