rpm-nvr-0.1.0: test/RPM/VersionSpec.hs
-- taken from codec-rpm-0.2.2 and based on rpm/tests/rpmvercmp.at
-- Copyright 2017-2018 Red Hat
module RPM.VersionSpec (verspec) where
import Test.Hspec
import Data.Foldable(forM_)
import Data.RPM.VerCmp
-- can also call rpm vercmp():
-- `rpm --eval '%{lua: print(rpm.vercmp("$1", "$2"))}'`
verspec :: Spec
verspec = do
describe "Data.RPM.Version.vercmp" $ do
let vercmpCases = [
("1.0", "1.0", EQ),
("1.0", "2.0", LT),
("2.0", "1.0", GT),
("2.0.1", "2.0.1", EQ),
("2.0", "2.0.1", LT),
("2.0.1", "2.0", GT),
("2.0.1a", "2.0.1a", EQ),
("2.0.1a", "2.0.1", GT),
("2.0.1", "2.0.1a", LT),
("5.5p1", "5.5p1", EQ),
("5.5p1", "5.5p2", LT),
("5.5p2", "5.5p1", GT),
("5.5p10", "5.5p10", EQ),
("5.5p1", "5.5p10", LT),
("5.5p10", "5.5p1", GT),
("10xyz", "10.1xyz", LT),
("10.1xyz", "10xyz", GT),
("xyz10", "xyz10", EQ),
("xyz10", "xyz10.1", LT),
("xyz10.1", "xyz10", GT),
("xyz.4", "xyz.4", EQ),
("xyz.4", "8", LT),
("8", "xyz.4", GT),
("xyz.4", "2", LT),
("2", "xyz.4", GT),
("5.5p2", "5.6p1", LT),
("5.6p1", "5.5p2", GT),
("5.6p1", "6.5p1", LT),
("6.5p1", "5.6p1", GT),
("6.0.rc1", "6.0", GT),
("6.0", "6.0.rc1", LT),
("10b2", "10a1", GT),
("10a2", "10b2", LT),
("1.0aa", "1.0aa", EQ),
("1.0a", "1.0aa", LT),
("1.0aa", "1.0a", GT),
("10.0001", "10.0001", EQ),
("10.0001", "10.1", EQ),
("10.1", "10.0001", EQ),
("10.0001", "10.0039", LT),
("10.0039", "10.0001", GT),
("4.999.9", "5.0", LT),
("5.0", "4.999.9", GT),
("20101121", "20101121", EQ),
("20101121", "20101122", LT),
("20101122", "20101121", GT),
("2_0", "2_0", EQ),
("2.0", "2_0", EQ),
("2_0", "2.0", EQ),
-- RhBug:178798 case
("a", "a", EQ),
("a+", "a+", EQ),
("a+", "a_", EQ),
("a_", "a+", EQ),
("+a", "+a", EQ),
("+a", "_a", EQ),
("_a", "+a", EQ),
("+_", "+_", EQ),
("_+", "+_", EQ),
("_+", "_+", EQ),
("+", "_", EQ),
("_", "+", EQ),
-- Basic testcases for tilde sorting
("1.0~rc1", "1.0~rc1", EQ),
("1.0~rc1", "1.0", LT),
("1.0", "1.0~rc1", GT),
("1.0~rc1", "1.0~rc2", LT),
("1.0~rc2", "1.0~rc1", GT),
("1.0~rc1~git123", "1.0~rc1~git123", EQ),
("1.0~rc1~git123", "1.0~rc1", LT),
("1.0~rc1", "1.0~rc1~git123", GT),
-- Basic testcases for caret sorting
("1.0^", "1.0^", EQ),
("1.0^", "1.0", GT),
("1.0", "1.0^", LT),
("1.0^git1", "1.0^git1", EQ),
("1.0^git1", "1.0", GT),
("1.0", "1.0^git1", LT),
("1.0^git1", "1.0^git2", LT),
("1.0^git2", "1.0^git1", GT),
("1.0^git1", "1.01", LT),
("1.01", "1.0^git1", GT),
("1.0^20160101", "1.0^20160101", EQ),
("1.0^20160101", "1.0.1", LT),
("1.0.1", "1.0^20160101", GT),
("1.0^20160101^git1", "1.0^20160101^git1", EQ),
("1.0^20160102", "1.0^20160101^git1", GT),
("1.0^20160101^git1", "1.0^20160102", LT),
-- Basic testcases for tilde and caret sorting
("1.0~rc1^git1", "1.0~rc1^git1", EQ),
("1.0~rc1^git1", "1.0~rc1", GT),
("1.0~rc1", "1.0~rc1^git1", LT),
("1.0^git1~pre", "1.0^git1~pre", EQ),
("1.0^git1", "1.0^git1~pre", GT),
("1.0^git1~pre", "1.0^git1", LT)
]
forM_ vercmpCases $ \(verA, verB, ord) ->
it (verA ++ " " ++ show ord ++ " " ++ verB) $
rpmVerCompare verA verB `shouldBe` ord