# test_vercmp.py -- Portage Unit Testing Functionality
# Copyright 2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.tests import TestCase
from portage.versions import vercmp

class VerCmpTestCase(TestCase):
	""" A simple testCase for portage.versions.vercmp()
	"""

	def testVerCmpGreater(self):

		tests = [
			("6.0", "5.0"), ("5.0", "5"),
			("1.0-r1", "1.0-r0"),
			("1.0-r1", "1.0"),
			("cvs.9999", "9999"),
			("999999999999999999999999999999", "999999999999999999999999999998"),
			("1.0.0", "1.0"),
			("1.0.0", "1.0b"),
			("1b", "1"),
			("1b_p1", "1_p1"),
			("1.1b", "1.1"),
			("12.2.5", "12.2b"),
		]
		for test in tests:
			self.assertFalse(vercmp(test[0], test[1]) <= 0, msg="%s < %s? Wrong!" % (test[0], test[1]))

	def testVerCmpLess(self):
		"""
		pre < alpha < beta < rc < p -> test each of these, they are inductive (or should be..)
		"""
		tests = [
			("4.0", "5.0"), ("5", "5.0"), ("1.0_pre2", "1.0_p2"),
			("1.0_alpha2", "1.0_p2"), ("1.0_alpha1", "1.0_beta1"), ("1.0_beta3", "1.0_rc3"),
			("1.001000000000000000001", "1.001000000000000000002"),
			("1.00100000000", "1.0010000000000000001"),
			("9999", "cvs.9999"),
			("999999999999999999999999999998", "999999999999999999999999999999"),
			("1.01", "1.1"),
			("1.0-r0", "1.0-r1"),
			("1.0", "1.0-r1"),
			("1.0", "1.0.0"),
			("1.0b", "1.0.0"),
			("1_p1", "1b_p1"),
			("1", "1b"),
			("1.1", "1.1b"),
			("12.2b", "12.2.5"),
		]
		for test in tests:
			self.assertFalse(vercmp(test[0], test[1]) >= 0, msg="%s > %s? Wrong!" % (test[0], test[1]))

	def testVerCmpEqual(self):

		tests = [
			("4.0", "4.0"),
			("1.0", "1.0"),
			("1.0-r0", "1.0"),
			("1.0", "1.0-r0"),
			("1.0-r0", "1.0-r0"),
			("1.0-r1", "1.0-r1")
		]
		for test in tests:
			self.assertFalse(vercmp(test[0], test[1]) != 0, msg="%s != %s? Wrong!" % (test[0], test[1]))

	def testVerNotEqual(self):

		tests = [
			("1", "2"), ("1.0_alpha", "1.0_pre"), ("1.0_beta", "1.0_alpha"),
			("0", "0.0"),
			("cvs.9999", "9999"),
			("1.0-r0", "1.0-r1"),
			("1.0-r1", "1.0-r0"),
			("1.0", "1.0-r1"),
			("1.0-r1", "1.0"),
			("1.0", "1.0.0"),
			("1_p1", "1b_p1"),
			("1b", "1"),
			("1.1b", "1.1"),
			("12.2b", "12.2"),
		]
		for test in tests:
			self.assertFalse(vercmp(test[0], test[1]) == 0, msg="%s == %s? Wrong!" % (test[0], test[1]))
