@@ -780,6 +780,35 @@ def test_specifier_prereleases_detection(
780780 ("<=2.0.dev1" , "1.0a1" , None , None , True ),
781781 ("<2.0" , "2.0a1" , None , None , False ),
782782 ("<2.0a2" , "2.0a1" , None , None , True ),
783+ # <V.postN: pre-releases of V.postN itself are excluded
784+ ("<1.0.post1" , "1.0.post1.dev0" , None , None , False ),
785+ ("<1.0.post0" , "1.0.post0.dev0" , None , None , False ),
786+ # <V.postN: pre-releases of the base release are NOT
787+ # pre-releases of V.postN, so they are accepted
788+ ("<1.0.post1" , "1.0.dev0" , None , None , True ),
789+ ("<1.0.post1" , "1.0a1" , None , None , True ),
790+ ("<1.0.post1" , "1.0rc1" , None , None , True ),
791+ ("<1.0.post0" , "1.0.dev0" , None , None , True ),
792+ ("<1.0.post0" , "1.0a1" , None , None , True ),
793+ ("<1.0.post0" , "1.0b1" , None , None , True ),
794+ ("<1.0.post0" , "1.0rc2" , None , None , True ),
795+ # <V.postN: dev of a different post is not a pre-release
796+ # of V.postN either
797+ ("<1.0.post1" , "1.0.post0.dev0" , None , None , True ),
798+ ("<1.0.post2" , "1.0.post1.dev0" , None , None , True ),
799+ # <V.postN: non-pre-release versions below V.postN
800+ ("<1.0.post1" , "1.0" , None , None , True ),
801+ ("<1.0.post1" , "1.0.post0" , None , None , True ),
802+ ("<1.0.post1" , "0.9" , None , None , True ),
803+ ("<1.0.post0" , "1.0" , None , None , True ),
804+ # <V.postN: higher post numbers
805+ ("<1.0.post10" , "1.0.dev0" , None , None , True ),
806+ ("<1.0.post10" , "1.0.post9.dev0" , None , None , True ),
807+ ("<1.0.post10" , "1.0.post9" , None , None , True ),
808+ # <V.postN: locals and different bases
809+ ("<1.0.post1" , "1.0+local" , None , None , True ),
810+ ("<1.0.post1" , "1.0.post0+local" , None , None , True ),
811+ ("<1.0.post1" , "0.9.dev0" , None , None , True ),
783812 ("<=2.0" , "1.0.dev1" , False , None , False ),
784813 ("<=2.0a1" , "1.0.dev1" , False , None , False ),
785814 ("<=2.0" , "1.0.dev1" , None , False , False ),
@@ -1933,6 +1962,26 @@ def test_filter_exclusionary_bridges(
19331962 (">=1!0,!=1!1.*,!=1!2.*,<1!3" , True , "0!5.0" , False ),
19341963 (">=1!0,!=1!1.*,!=1!2.*,<1!3" , False , "1!0.5" , True ),
19351964 (">=1!0,!=1!1.*,!=1!2.*,<1!3" , False , "0!5.0" , False ),
1965+ # <V.postN combined with other specifiers: pre-releases of
1966+ # the base release are accepted (they are not pre-releases
1967+ # of V.postN).
1968+ ("==1.0.dev0,<1.0.post1" , None , "1.0.dev0" , True ),
1969+ ("==1.0a1,<1.0.post0" , None , "1.0a1" , True ),
1970+ ("==1.0.post0.dev0,<1.0.post1" , None , "1.0.post0.dev0" , True ),
1971+ (">=1.0,<1.0.post1" , None , "1.0" , True ),
1972+ (">=1.0,<1.0.post1" , None , "1.0.post0" , True ),
1973+ # 1.0.dev0 < 1.0, so it fails >=1.0 regardless of <
1974+ (">=1.0,<1.0.post1" , True , "1.0.dev0" , False ),
1975+ # With a lower bound that includes pre-releases
1976+ (">=1.0.dev0,<1.0.post1" , True , "1.0.dev0" , True ),
1977+ (">=1.0.dev0,<1.0.post1" , True , "1.0.a1" , True ),
1978+ (">=1.0.dev0,<1.0.post1" , True , "1.0.post0.dev0" , True ),
1979+ # != can remove non-pre-releases but pre-releases still match
1980+ (">=1.0.dev0,<1.0.post1,!=1.0,!=1.0.post0" , True , "1.0.dev0" , True ),
1981+ (">=1.0.dev0,<1.0.post1,!=1.0,!=1.0.post0" , True , "1.0.post0.dev0" , True ),
1982+ # Post-release survivors still match
1983+ (">=1.0.dev0,<1.0.post2,!=1.0,!=1.0.post0" , True , "1.0.post1" , True ),
1984+ (">=1.0.dev0,<1.0.post2,!=1.0" , True , "1.0.post0" , True ),
19361985 ],
19371986 )
19381987 def test_contains_exclusionary_bridges (
0 commit comments