@@ -89,6 +89,8 @@ final class SemanticVersionTests: XCTestCase {
8989 XCTAssertEqual ( SemanticVersion ( " 1.2.3-rc " ) , SemanticVersion ( 1 , 2 , 3 , " rc " ) )
9090 XCTAssertEqual ( SemanticVersion ( " v1.2.3-beta1 " ) , SemanticVersion ( 1 , 2 , 3 , " beta1 " ) )
9191 XCTAssertEqual ( SemanticVersion ( " v1.2.3-beta1+build5 " ) , SemanticVersion ( 1 , 2 , 3 , " beta1 " , " build5 " ) )
92+ XCTAssertEqual ( SemanticVersion ( " 1.2.3-beta-foo " ) , SemanticVersion ( 1 , 2 , 3 , " beta-foo " ) )
93+ XCTAssertEqual ( SemanticVersion ( " 1.2.3-beta-foo+build-42 " ) , SemanticVersion ( 1 , 2 , 3 , " beta-foo " , " build-42 " ) )
9294 XCTAssertEqual ( SemanticVersion ( " " ) , nil )
9395 XCTAssertEqual ( SemanticVersion ( " 1 " ) , nil )
9496 XCTAssertEqual ( SemanticVersion ( " 1.2 " ) , nil )
@@ -109,6 +111,14 @@ final class SemanticVersionTests: XCTestCase {
109111 XCTAssert ( SemanticVersion ( 1 , 0 , 0 ) < SemanticVersion ( 1 , 0 , 1 ) )
110112 XCTAssert ( SemanticVersion ( 1 , 0 , 0 , " a " ) < SemanticVersion ( 1 , 0 , 0 , " b " ) )
111113 XCTAssert ( SemanticVersion ( 1 , 0 , 0 , " a " , " a " ) < SemanticVersion ( 1 , 0 , 0 , " a " , " b " ) )
114+
115+ // ensure betas come before releases
116+ XCTAssert ( SemanticVersion ( 1 , 0 , 0 , " b1 " ) < SemanticVersion ( 1 , 0 , 0 ) )
117+ XCTAssertFalse ( SemanticVersion ( 1 , 0 , 0 , " b1 " ) > SemanticVersion ( 1 , 0 , 0 ) )
118+ // but only if major/minor/patch are the same
119+ XCTAssert ( SemanticVersion ( 1 , 0 , 0 ) < SemanticVersion ( 1 , 0 , 1 , " b1 " ) )
120+ // once the patch bumps up to the beta level again, it sorts higher
121+ XCTAssert ( SemanticVersion ( 1 , 0 , 1 ) > SemanticVersion ( 1 , 0 , 1 , " b1 " ) )
112122 }
113123
114124 func test_isStable( ) throws {
0 commit comments