1 # Copyright 2022-2024 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 3 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, see <http://www.gnu.org/licenses/>. 15 16 # Test the detection and printing of repeated elements in C/C++ arrays. 17 18 standard_testfile ${srcdir}/gdb.base/array-repeat.c 19 20 if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ 21 [list debug ${lang}]]} { 22 return -1 23 } 24 25 if {![runto_main]} { 26 perror "Could not run to main." 27 continue 28 } 29 30 gdb_breakpoint [gdb_get_line_number "Break here"] 31 gdb_continue_to_breakpoint "Break here" 32 33 # Build up the expected output for each array. 34 set a9p9o "{9, 9, 9, 9, 9, 9}" 35 set a1p "{1, 1, 1, 1, 1}" 36 set a1p9 "{1, 1, 1, 1, 1, 9}" 37 set a2po "{2, 2, 2, 2, 2}" 38 set a2p "{${a2po}, ${a2po}, ${a2po}, ${a2po}, ${a2po}}" 39 set a2p9o "{2, 2, 2, 2, 2, 9}" 40 set a2p9 "{${a2p9o}, ${a2p9o}, ${a2p9o}, ${a2p9o}, ${a2p9o}, ${a9p9o}}" 41 set a3po "{3, 3, 3, 3, 3}" 42 set a3p "{${a3po}, ${a3po}, ${a3po}, ${a3po}, ${a3po}}" 43 set a3p "{${a3p}, ${a3p}, ${a3p}, ${a3p}, ${a3p}}" 44 set a3p9o "{3, 3, 3, 3, 3, 9}" 45 set a3p9 "{${a3p9o}, ${a3p9o}, ${a3p9o}, ${a3p9o}, ${a3p9o}, ${a9p9o}}" 46 set a9p9 "{${a9p9o}, ${a9p9o}, ${a9p9o}, ${a9p9o}, ${a9p9o}, ${a9p9o}}" 47 set a3p9 "{${a3p9}, ${a3p9}, ${a3p9}, ${a3p9}, ${a3p9}, ${a9p9}}" 48 49 # Convert the output into a regexp. 50 set r1p [string_to_regexp $a1p] 51 set r1p9 [string_to_regexp $a1p9] 52 set r2po [string_to_regexp $a2po] 53 set r2p9o [string_to_regexp $a2p9o] 54 set r2p [string_to_regexp $a2p] 55 set r2p9 [string_to_regexp $a2p9] 56 set r3po [string_to_regexp $a3po] 57 set r3p9o [string_to_regexp $a3p9o] 58 set r3p [string_to_regexp $a3p] 59 set r3p9 [string_to_regexp $a3p9] 60 61 set rep5 "<repeats 5 times>" 62 set rep6 "<repeats 6 times>" 63 64 with_test_prefix "repeats=unlimited, elements=unlimited" { 65 # Check the arrays print as expected. 66 gdb_test_no_output "set print repeats unlimited" 67 gdb_test_no_output "set print elements unlimited" 68 69 gdb_test "print array_1d" "${r1p}" 70 gdb_test "print array_1d9" "${r1p9}" 71 gdb_test "print array_2d" "${r2p}" 72 gdb_test "print array_2d9" "${r2p9}" 73 gdb_test "print array_3d" "${r3p}" 74 gdb_test "print array_3d9" "${r3p9}" 75 } 76 77 with_test_prefix "repeats=4, elements=unlimited" { 78 # Now set the repeat limit. 79 gdb_test_no_output "set print repeats 4" 80 gdb_test_no_output "set print elements unlimited" 81 82 gdb_test "print array_1d" \ 83 [string_to_regexp "{1 ${rep5}}"] 84 gdb_test "print array_1d9" \ 85 [string_to_regexp "{1 ${rep5}, 9}"] 86 gdb_test "print array_2d" \ 87 [string_to_regexp "{{2 ${rep5}} ${rep5}}"] 88 gdb_test "print array_2d9" \ 89 [string_to_regexp "{{2 ${rep5}, 9} ${rep5}, {9 ${rep6}}}"] 90 gdb_test "print array_3d" \ 91 [string_to_regexp "{{{3 ${rep5}} ${rep5}} ${rep5}}"] 92 gdb_test "print array_3d9" \ 93 [string_to_regexp "{{{3 ${rep5}, 9} ${rep5}, {9 ${rep6}}} ${rep5},\ 94 {{9 ${rep6}} ${rep6}}}"] 95 } 96 97 with_test_prefix "repeats=unlimited, elements=3" { 98 # Now set the element limit. 99 gdb_test_no_output "set print repeats unlimited" 100 gdb_test_no_output "set print elements 3" 101 102 gdb_test "print array_1d" \ 103 [string_to_regexp "{1, 1, 1...}"] 104 gdb_test "print array_1d9" \ 105 [string_to_regexp "{1, 1, 1...}"] 106 gdb_test "print array_2d" \ 107 [string_to_regexp "{{2, 2, 2...}, {2, 2, 2...}, {2, 2, 2...}...}"] 108 gdb_test "print array_2d9" \ 109 [string_to_regexp "{{2, 2, 2...}, {2, 2, 2...}, {2, 2, 2...}...}"] 110 gdb_test "print array_3d" \ 111 [string_to_regexp "{{{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\ 112 {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\ 113 {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...}...}"] 114 gdb_test "print array_3d9" \ 115 [string_to_regexp "{{{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\ 116 {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\ 117 {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...}...}"] 118 } 119 120 with_test_prefix "repeats=4, elements=12" { 121 # Now set both limits. 122 gdb_test_no_output "set print repeats 4" 123 gdb_test_no_output "set print elements 12" 124 125 gdb_test "print array_1d" \ 126 [string_to_regexp "{1 ${rep5}}"] 127 gdb_test "print array_1d9" \ 128 [string_to_regexp "{1 ${rep5}, 9}"] 129 gdb_test "print array_2d" \ 130 [string_to_regexp "{{2 ${rep5}} ${rep5}}"] 131 gdb_test "print array_2d9" \ 132 [string_to_regexp "{{2 ${rep5}, 9} ${rep5}, {9 ${rep6}}}"] 133 gdb_test "print array_3d" \ 134 [string_to_regexp "{{{3 ${rep5}} ${rep5}} ${rep5}}"] 135 gdb_test "print array_3d9" \ 136 [string_to_regexp "{{{3 ${rep5}, 9} ${rep5}, {9 ${rep6}}} ${rep5},\ 137 {{9 ${rep6}} ${rep6}}}"] 138 } 139