OSDN Git Service

Initial revision
[pf3gnuchains/pf3gnuchains4x.git] / gdb / testsuite / gdb.chill / builtins.exp
1 # Copyright (C) 1995, 1997 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
7
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
16
17 # Please email any bugs, comments, and/or additions to this file to:
18 # bug-gdb@prep.ai.mit.edu
19
20 # This file tests various Chill values, expressions, and types.
21
22 if $tracelevel then {
23         strace $tracelevel
24 }
25
26 if [skip_chill_tests] then { continue }
27
28 set testfile "builtins"
29 set srcfile ${srcdir}/$subdir/${testfile}.ch
30 set binfile ${objdir}/${subdir}/${testfile}.exe
31 if  { [compile "${srcfile} -g -w -o ${binfile} ${CHILL_RT0} ${CHILL_LIB}"] != "" } {
32     perror "Couldn't compile ${srcfile}"
33     return -1
34 }
35
36 # Set the current language to chill.  This counts as a test.  If it
37 # fails, then we skip the other tests.
38
39 proc set_lang_chill {} {
40     global gdb_prompt
41     global binfile objdir subdir
42
43     verbose "loading file '$binfile'"
44     gdb_load $binfile
45     send_gdb "set language chill\n"
46     gdb_expect {
47         -re ".*$gdb_prompt $" {}
48         timeout { fail "set language chill (timeout)" ; return 0 }
49     }
50
51     send_gdb "show language\n"
52     gdb_expect {
53         -re ".* source language is \"chill\".*$gdb_prompt $" {
54             pass "set language to \"chill\""
55             send_gdb "break xx_\n"
56             gdb_expect {
57                 -re ".*$gdb_prompt $" {
58                     send_gdb "run\n" 
59                     gdb_expect -re ".*$gdb_prompt $" {}
60                     return 1
61                 }
62                 timeout {
63                     fail "can't set breakpoint (timeout)"
64                     return 0
65                 }
66             }
67         }
68         -re ".*$gdb_prompt $" {
69             fail "setting language to \"chill\""
70             return 0
71         }
72         timeout {
73             fail "can't show language (timeout)"
74             return 0
75         }
76     }
77 }
78
79 # Testing printing of a specific value.  Increment passcount for
80 # success or issue fail message for failure.  In both cases, return
81 # a 1 to indicate that more tests can proceed.  However a timeout
82 # is a serious error, generates a special fail message, and causes
83 # a 0 to be returned to indicate that more tests are likely to fail
84 # as well.
85 #
86 # Args are:
87 #
88 #       First one is string to send_gdb to gdb
89 #       Second one is string to match gdb result to
90 #       Third one is an optional message to be printed
91
92 proc test_print_accept { args } {
93     global gdb_prompt
94     global passcount
95     global verbose
96
97     if [llength $args]==3 then {
98         set message [lindex $args 2]
99     } else {
100         set message [lindex $args 0]
101     }
102     set sendthis [lindex $args 0]
103     set expectthis [lindex $args 1]
104     set result [gdb_test $sendthis ".* = ${expectthis}" $message]
105     if $result==0 {incr passcount}
106     return $result
107 }
108
109 proc test_lower {} {
110     global passcount
111
112     verbose "testing builtin LOWER"
113     set passcount 0
114
115     # discrete mode names
116     test_print_accept "print lower(bool)" "FALSE"
117     test_print_accept "print lower(char)" {'\^[(]0[)]'}
118     test_print_accept "print lower(byte)" "-128"
119     test_print_accept "print lower(ubyte)" "0"
120     if [istarget "alpha-*-*"] then {
121         test_print_accept "print lower(int)" "-2147483648"
122     } else {
123         test_print_accept "print lower(int)" "-32768"
124     }
125     test_print_accept "print lower(uint)" "0"
126     setup_xfail "alpha-*-*"
127     test_print_accept "print lower(long)" "-2147483648"
128     test_print_accept "print lower(ulong)" "0"
129     test_print_accept "print lower(m_set)" "e1"
130     test_print_accept "print lower(m_set_range)" "e2"
131     test_print_accept "print lower(m_numbered_set)" "n2"
132     test_print_accept "print lower(m_char_range)" "'A'"
133     test_print_accept "print lower(m_bool_range)" "FALSE"
134     test_print_accept "print lower(m_long_range)" "255"
135     test_print_accept "print lower(m_range)" "12"
136
137     # discrete locations
138     test_print_accept "print lower(v_bool)" "FALSE"
139     test_print_accept "print lower(v_char)" {'\^[(]0[)]'}
140     test_print_accept "print lower(v_byte)" "-128"
141     test_print_accept "print lower(v_ubyte)" "0"
142     if [istarget "alpha-*-*"] then {
143         test_print_accept "print lower(v_int)" "-2147483648"
144     } else {
145         test_print_accept "print lower(v_int)" "-32768"
146     }
147     test_print_accept "print lower(v_uint)" "0"
148     setup_xfail "alpha-*-*"
149     test_print_accept "print lower(v_long)" "-2147483648"
150     test_print_accept "print lower(v_ulong)" "0"
151     test_print_accept "print lower(v_set)" "e1"
152     test_print_accept "print lower(v_set_range)" "e2"
153     test_print_accept "print lower(v_numbered_set)" "n2"
154     test_print_accept "print lower(v_char_range)" "'A'"
155     test_print_accept "print lower(v_bool_range)" "FALSE"
156     test_print_accept "print lower(v_long_range)" "255"
157     test_print_accept "print lower(v_range)" "12"
158
159     # string mode names
160     test_print_accept "print lower(m_chars)" "0"
161     test_print_accept "print lower(m_chars_v)" "0"
162     test_print_accept "print lower(m_bits)" "0"
163
164     # string locations
165     test_print_accept "print lower(v_chars)" "0"
166     test_print_accept "print lower(v_chars_v)" "0"
167     test_print_accept "print lower(v_bits)" "0"
168
169     # string expressions
170     test_print_accept "print lower(\"abcd\")" "0"
171     test_print_accept "print lower(B'010101')" "0"
172
173     # array mode name
174     test_print_accept "print lower(m_arr)" "1";
175     test_print_accept "print lower(m_char_arr)" {'\^[(]0[)]'}
176     test_print_accept "print lower(m_bool_arr)" "FALSE"
177     if [istarget "alpha-*-*"] then {
178         test_print_accept "print lower(m_int_arr)" "-2147483648"
179     } else {
180         test_print_accept "print lower(m_int_arr)" "-32768"
181     }
182     test_print_accept "print lower(m_set_arr)" "e1"
183     test_print_accept "print lower(m_set_range_arr)" "e2"
184     test_print_accept "print lower(m_numbered_set_arr)" "n2"
185     test_print_accept "print lower(m_char_range_arr)" "'A'"
186     test_print_accept "print lower(m_bool_range_arr)" "FALSE"
187     test_print_accept "print lower(m_long_range_arr)" "255"
188     test_print_accept "print lower(m_range_arr)" "12"
189
190     # array locations
191     test_print_accept "print lower(v_arr)" "1";
192     test_print_accept "print lower(v_char_arr)" {'\^[(]0[)]'}
193     test_print_accept "print lower(v_bool_arr)" "FALSE"
194     if [istarget "alpha-*-*"] then {
195         test_print_accept "print lower(v_int_arr)" "-2147483648"
196     } else {
197         test_print_accept "print lower(v_int_arr)" "-32768"
198     }
199     test_print_accept "print lower(v_set_arr)" "e1"
200     test_print_accept "print lower(v_set_range_arr)" "e2"
201     test_print_accept "print lower(v_numbered_set_arr)" "n2"
202     test_print_accept "print lower(v_char_range_arr)" "'A'"
203     test_print_accept "print lower(v_bool_range_arr)" "FALSE"
204     test_print_accept "print lower(v_long_range_arr)" "255"
205     test_print_accept "print lower(v_range_arr)" "12"
206 }
207
208 proc test_upper {} {
209     global passcount
210
211     verbose "testing builtin UPPER"
212     set passcount 0
213
214     # discrete mode names
215     test_print_accept "print upper(bool)" "TRUE"
216     test_print_accept "print upper(char)" {'\^[(]255[)]'}
217     test_print_accept "print upper(byte)" "127"
218     test_print_accept "print upper(ubyte)" "255"
219     if [istarget "alpha-*-*"] then {
220         test_print_accept "print upper(int)" "2147483647"
221         test_print_accept "print upper(uint)" "4294967295"
222         setup_xfail "alpha-*-*"
223         test_print_accept "print upper(long)" "4294967295"
224         test_print_accept "print upper(ulong)" "18446744073709551615"
225     } else {
226         test_print_accept "print upper(int)" "32767"
227         test_print_accept "print upper(uint)" "65535"
228         test_print_accept "print upper(long)" "2147483647"
229         test_print_accept "print upper(ulong)" "4294967295"
230     }
231     test_print_accept "print upper(m_set)" "e6"
232     test_print_accept "print upper(m_set_range)" "e5"
233     test_print_accept "print upper(m_numbered_set)" "n5"
234     test_print_accept "print upper(m_char_range)" "'Z'"
235     test_print_accept "print upper(m_bool_range)" "FALSE"
236     test_print_accept "print upper(m_long_range)" "3211"
237     test_print_accept "print upper(m_range)" "28"
238
239     # discrete locations
240     test_print_accept "print upper(v_bool)" "TRUE"
241     test_print_accept "print upper(v_char)" {'\^[(]255[)]'}
242     test_print_accept "print upper(v_byte)" "127"
243     test_print_accept "print upper(v_ubyte)" "255"
244     if [istarget "alpha-*-*"] then {
245         test_print_accept "print upper(v_int)" "2147483647"
246         test_print_accept "print upper(v_uint)" "4294967295"
247         setup_xfail "alpha-*-*"
248         test_print_accept "print upper(v_long)" "4294967295"
249         test_print_accept "print upper(v_ulong)" "18446744073709551615"
250     } else {
251         test_print_accept "print upper(v_int)" "32767"
252         test_print_accept "print upper(v_uint)" "65535"
253         test_print_accept "print upper(v_long)" "2147483647"
254         test_print_accept "print upper(v_ulong)" "4294967295"
255     }
256     test_print_accept "print upper(v_set)" "e6"
257     test_print_accept "print upper(v_set_range)" "e5"
258     test_print_accept "print upper(v_numbered_set)" "n5"
259     test_print_accept "print upper(v_char_range)" "'Z'"
260     test_print_accept "print upper(v_bool_range)" "FALSE"
261     test_print_accept "print upper(v_long_range)" "3211"
262     test_print_accept "print upper(v_range)" "28"
263
264     # string mode names
265     test_print_accept "print upper(m_chars)" "19"
266     test_print_accept "print upper(m_chars_v)" "19"
267     test_print_accept "print upper(m_bits)" "9"
268
269     # string locations
270     test_print_accept "print upper(v_chars)" "19"
271     test_print_accept "print upper(v_chars_v)" "19"
272     test_print_accept "print upper(v_bits)" "9"
273
274     # string expressions
275     test_print_accept "print upper(\"abcd\")" "3"
276     test_print_accept "print upper(B'010101')" "5"
277
278     # array mode name
279     test_print_accept "print upper(m_arr)" "10";
280     test_print_accept "print upper(m_char_arr)" {'\^[(]255[)]'}
281     test_print_accept "print upper(m_bool_arr)" "TRUE"
282     if [istarget "alpha-*-*"] then {
283         test_print_accept "print upper(m_int_arr)" "2147483647"
284     } else {
285         test_print_accept "print upper(m_int_arr)" "32767"
286     }
287     test_print_accept "print upper(m_set_arr)" "e6"
288     test_print_accept "print upper(m_set_range_arr)" "e5"
289     test_print_accept "print upper(m_numbered_set_arr)" "n5"
290     test_print_accept "print upper(m_char_range_arr)" "'Z'"
291     test_print_accept "print upper(m_bool_range_arr)" "FALSE"
292     test_print_accept "print upper(m_long_range_arr)" "3211"
293     test_print_accept "print upper(m_range_arr)" "28"
294
295     # array locations
296     test_print_accept "print upper(v_arr)" "10";
297     test_print_accept "print upper(v_char_arr)" {'\^[(]255[)]'}
298     test_print_accept "print upper(v_bool_arr)" "TRUE"
299     if [istarget "alpha-*-*"] then {
300         test_print_accept "print upper(v_int_arr)" "2147483647"
301     } else {
302         test_print_accept "print upper(v_int_arr)" "32767"
303     }
304     test_print_accept "print upper(v_set_arr)" "e6"
305     test_print_accept "print upper(v_set_range_arr)" "e5"
306     test_print_accept "print upper(v_numbered_set_arr)" "n5"
307     test_print_accept "print upper(v_char_range_arr)" "'Z'"
308     test_print_accept "print upper(v_bool_range_arr)" "FALSE"
309     test_print_accept "print upper(v_long_range_arr)" "3211"
310     test_print_accept "print upper(v_range_arr)" "28"
311 }
312
313 proc test_length {} {
314     global passcount
315
316     verbose "testing builtin LENGTH"
317     set passcount 0
318
319     # string locations
320     test_print_accept "print length(v_chars)" "20"
321     test_print_accept "print length(v_chars_v)" "7";
322     test_print_accept "print length(v_bits)" "10";
323
324     # string expressions
325     test_print_accept "print length(\"the quick brown fox ...\")" "23"
326     test_print_accept "print length(B'010101010101')" "12"
327     test_print_accept "print length(\"foo \" // \"bar\")" "7"
328
329     # check some failures
330     setup_xfail "*-*-*"
331     test_print_accept "print length(m_chars)" "typename in invalid context"
332     setup_xfail "*-*-*"
333     test_print_accept "print length(v_byte)" "bad argument to LENGTH builtin"
334     setup_xfail "*-*-*"
335     test_print_accept "print length(b'000000' // b'111111')" "12"
336 }
337
338 proc test_size {} {
339     global passcount
340
341     verbose "testing builtin SIZE"
342     set passcount 0
343
344     # modes
345     test_print_accept "print size(bool)" "1"
346     test_print_accept "print size(char)" "1"
347     test_print_accept "print size(byte)" "1"
348     if [istarget "alpha-*-*"] then {
349         test_print_accept "print size(int)" "4"
350         test_print_accept "print size(ulong)" "8"
351         test_print_accept "print size(ptr)" "8"
352         test_print_accept "print size(m_chars_v)" "24"
353         test_print_accept "print size(m_struct)" "40"
354     } else {
355         test_print_accept "print size(int)" "2"
356         test_print_accept "print size(ulong)" "4"
357         test_print_accept "print size(ptr)" "4"
358         test_print_accept "print size(m_chars_v)" "22"
359         test_print_accept "print size(m_struct)" "36"
360     }
361     test_print_accept "print size(m_set)" "1"
362     test_print_accept "print size(m_numbered_set)" "1"
363     test_print_accept "print size(m_char_range)" "1"
364     test_print_accept "print size(m_range_arr)" "17"
365     test_print_accept "print size(m_chars)" "20"
366     test_print_accept "print size(m_bits)" "2"
367
368     # locations
369     test_print_accept "print size(v_bool)" "1"
370     test_print_accept "print size(v_char)" "1"
371     test_print_accept "print size(v_byte)" "1"
372     if [istarget "alpha-*-*"] then {
373         test_print_accept "print size(v_int)" "4"
374         test_print_accept "print size(v_ulong)" "8"
375         test_print_accept "print size(v_ptr)" "8"
376         test_print_accept "print size(v_chars_v)" "24"
377         test_print_accept "print size(v_struct)" "40"
378     } else {
379         test_print_accept "print size(v_int)" "2"
380         test_print_accept "print size(v_ulong)" "4"
381         test_print_accept "print size(v_ptr)" "4"
382         test_print_accept "print size(v_chars_v)" "22"
383         test_print_accept "print size(v_struct)" "36"
384     }
385     test_print_accept "print size(v_set)" "1"
386     test_print_accept "print size(v_numbered_set)" "1"
387     test_print_accept "print size(v_char_range)" "1"
388     test_print_accept "print size(v_range_arr)" "17"
389     test_print_accept "print size(v_chars)" "20"
390     test_print_accept "print size(v_bits)" "2"
391 }
392
393 proc test_num {} {
394     global passcount
395
396     verbose "testing builtin NUM"
397     set passcount 0
398
399     # constants
400     test_print_accept "print num(false)" "0"
401     test_print_accept "print num(true)" "1"
402     test_print_accept "print num(10)" "10"
403     test_print_accept "print num(33-34)" "-1"
404     test_print_accept "print num('X')" "88"
405     test_print_accept "print num(e5)" "4"
406
407     # locations
408     test_print_accept "print num(v_bool)" "0"
409     test_print_accept "print num(v_char)" "88"
410     test_print_accept "print num(v_byte)" "-30"
411     test_print_accept "print num(v_ubyte)" "30"
412     test_print_accept "print num(v_int)" "-333"
413     test_print_accept "print num(v_uint)" "333"
414     test_print_accept "print num(v_long)" "-4444"
415     test_print_accept "print num(v_ulong)" "4444"
416     test_print_accept "print num(v_set)" "2"
417     test_print_accept "print num(v_set_range)" "2"
418     test_print_accept "print num(v_numbered_set)" "35"
419     test_print_accept "print num(v_char_range)" "71"
420     test_print_accept "print num(v_long_range)" "1000"
421     test_print_accept "print num(v_range)" "23"
422 }
423
424 # Start with a fresh gdb.
425
426 gdb_exit
427 gdb_start
428 gdb_reinitialize_dir $srcdir/$subdir
429
430 gdb_test "set print sevenbit-strings" ".*"
431
432 if [set_lang_chill] then {
433     # test builtins as described in chapter 6.20.3 Z.200
434     test_num
435     test_size
436     test_lower
437     test_upper
438     test_length
439 } else {
440     warning "$test_name tests suppressed."
441 }