]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Add gdb.testsuite/version-compare.exp
authorTom de Vries <tdevries@suse.de>
Thu, 3 Apr 2025 15:13:12 +0000 (17:13 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 3 Apr 2025 15:13:12 +0000 (17:13 +0200)
Add a test-case gdb.testsuite/version-compare.exp that excercises proc
version_compare, and a note to proc version_compare that it considers
v1 < v1.0 instead of v1 == v1.0.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
gdb/testsuite/gdb.testsuite/version-compare.exp [new file with mode: 0644]
gdb/testsuite/lib/gdb-utils.exp

diff --git a/gdb/testsuite/gdb.testsuite/version-compare.exp b/gdb/testsuite/gdb.testsuite/version-compare.exp
new file mode 100644 (file)
index 0000000..8f2573e
--- /dev/null
@@ -0,0 +1,74 @@
+# Copyright 2025 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/>.
+
+# Check version_compare proc.
+
+proc eq { a b } {
+    with_test_prefix "$a == $b" {
+       gdb_assert { [version_compare $a == $b] }
+       gdb_assert { [version_compare $a <= $b] }
+       gdb_assert { [version_compare $a >= $b] }
+       gdb_assert { ![version_compare $a < $b] }
+       gdb_assert { ![version_compare $a > $b] }
+    }
+}
+
+proc lt { a b } {
+    with_test_prefix "$a < $b" {
+       gdb_assert { [version_compare $a < $b] }
+       gdb_assert { [version_compare $a <= $b] }
+       gdb_assert { [version_compare $b > $a] }
+       gdb_assert { [version_compare $b >= $a] }
+       gdb_assert { ![version_compare $a == $b] }
+       gdb_assert { ![version_compare $b == $a] }
+       gdb_assert { ![version_compare $a > $b] }
+       gdb_assert { ![version_compare $a >= $b] }
+       gdb_assert { ![version_compare $b < $a] }
+       gdb_assert { ![version_compare $b <= $a] }
+    }
+}
+
+# Equal, same length.
+eq {1 0} {1 0}
+
+# Smaller than, same length.
+lt {1 0} {1 1}
+lt {1 1} {2 0}
+
+# Smaller than, different length.
+lt {1 3} {2}
+lt {1}   {2 0}
+
+# The question how v1 and v1.0 relate to each other is not a trivial one.
+#
+# For instance, Python considers v1 == v1.0:
+#   $ test.py
+#   #!/usr/bin/python3
+#   from packaging.version import parse
+#   v1_0 = parse("1.0")
+#   v1 = parse("1")
+#   print (v1 == v1_0)
+#   $ ./test.py
+#   True
+#
+# OTOH, version sort from coreutils considers v1 < v1.0:
+#   $ cat bla.txt
+#   1.0
+#   1
+#   $ sort -V bla.txt
+#   1
+#   1.0
+#
+# Proc version_compare seems to have taken the latter approach.
+lt {1}   {1 0}
index b8ab30a43ff9234a4f760d99b00d988b146c0184..f32f533d11444932b60e358b8234942e2b052461 100644 (file)
@@ -117,7 +117,10 @@ proc gdb_get_bp_addr { num } {
 
 # Compare the version numbers in L1 to those in L2 using OP, and
 # return 1 if the comparison is true.  OP can be "<", "<=", ">", ">=",
-# or "==".  It is ok if the lengths of the lists differ.
+# or "==".
+# It is ok if the lengths of the lists differ, but note that we have
+# "{1} < {1 0}" instead of "{1} == {1 0}".  See also
+# gdb.testsuite/version-compare.exp.
 
 proc version_compare { l1 op l2 } {
     switch -exact $op {