# Copyright 1994, 1995, 1997, 1998, 2007, 2008 Free Software Foundation, Inc.
# Copyright 2007 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 adapted from old Chill tests by Stan Shebs
# (shebs@cygnus.com).
# Adapted to pascal by Pierre Muller

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

# Set the current language to pascal.  This counts as a test.  If it
# fails, then we skip the other tests.

proc set_lang_pascal {} {
    global gdb_prompt
    
    if [gdb_test "set language pascal" ""] {
	return 0;
    }

    if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
	return 1;
    } else {
	return 0;
    }
}

proc test_integer_literal_types_accepted {} {
    global gdb_prompt

    # Test various decimal values.
    # Should be integer*4 probably.
    gdb_test "pt 123" "type = int" 
}
proc test_character_literal_types_accepted {} {
    global gdb_prompt

    # Test various character values.

    gdb_test "pt 'a'" "type = char"
}

proc test_string_literal_types_accepted {} {
    global gdb_prompt

    # Test various character values.

    setup_kfail *-*-* gdb/2326
    gdb_test "pt 'a simple string'" "type = string"
}

proc test_logical_literal_types_accepted {} {
    global gdb_prompt

    # Test the only possible values for a logical, TRUE and FALSE.

    gdb_test "pt TRUE" "type = bool"
    gdb_test "pt FALSE" "type = bool"
}

proc test_float_literal_types_accepted {} {
    global gdb_prompt

    # Test various floating point formats

    # this used to guess whether to look for "real*4" or
    # "real*8" based on a target config variable, but noone
    # maintained it properly.

    gdb_test "pt .44" "type = double"
    gdb_test "pt 44.0" "type = double"
    gdb_test "pt 10e20" "type = double"
    gdb_test "pt 10E20" "type = double"
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

if [set_lang_pascal] then {
    test_integer_literal_types_accepted
    test_logical_literal_types_accepted
    test_character_literal_types_accepted
    test_string_literal_types_accepted
    test_float_literal_types_accepted
} else {
    warning "$test_name tests suppressed." 0
}
