# Copyright 2015-2023 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 . # This file is part of the gdb testsuite. # Test the operation of the "history remove-duplicates" option. # Check that the previous history entry is ENTRY. proc check_prev_history_entry { entry { test_suffix "" } } { set test_name "history entry is $entry" if { $test_suffix != "" } { append test_name " $test_suffix" } # Send ^P followed by ^L. send_gdb "\x10\x0c" gdb_expect { -re $entry { pass $test_name } timeout { fail $test_name } } } # Foreach element ELT in THINGS, run the command "print $ELT", making sure that # each invocation of "print" has a unique test name. proc run_print_on_each_thing { things } { set index 0 foreach thing $things { gdb_test "print $thing" "" "printing $thing (item #$index)" incr index } } gdb_exit gdb_start # These tests require readline support. if { ![readline_is_used] } { unsupported "readline isn't used." return -1 } # By default the option is set to 0. gdb_test "show history remove-duplicates" "is 0\\." # Test the "unlimited" setting. with_test_prefix "remove-duplicates=unlimited" { gdb_exit gdb_start gdb_test "set history remove-duplicates unlimited" run_print_on_each_thing { 0 1 2 1 1 2 3 3 4 1 2 3 4 } check_prev_history_entry "print 4" check_prev_history_entry "print 3" check_prev_history_entry "print 2" check_prev_history_entry "print 1" check_prev_history_entry "print 0" } # Test the "1" setting. with_test_prefix "remove-duplicates=1" { gdb_exit gdb_start gdb_test "set history remove-duplicates 1" run_print_on_each_thing { 0 1 0 2 2 1 } check_prev_history_entry "print 1" check_prev_history_entry "print 2" check_prev_history_entry "print 0" check_prev_history_entry "print 1" "(again)" check_prev_history_entry "print 0" "(again)" } # Test the "0" setting. with_test_prefix "remove-duplicates=0" { gdb_exit gdb_start gdb_test "set history remove-duplicates 0" run_print_on_each_thing { 0 0 1 1 } check_prev_history_entry "print 1" check_prev_history_entry "print 1" "(again)" check_prev_history_entry "print 0" check_prev_history_entry "print 0" "(again)" } # Test the "2" setting. with_test_prefix "remove-duplicates=2" { gdb_exit gdb_start gdb_test "set history remove-duplicates 2" run_print_on_each_thing { 1 2 0 2 0 } check_prev_history_entry "print 0" check_prev_history_entry "print 2" check_prev_history_entry "print 1" }