# 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}
