Skip to content

Instantly share code, notes, and snippets.

@allendav
Created November 5, 2021 15:40
Show Gist options
  • Save allendav/ba11ff214af1d0abc19be3a2589d4b93 to your computer and use it in GitHub Desktop.
Save allendav/ba11ff214af1d0abc19be3a2589d4b93 to your computer and use it in GitHub Desktop.
Testing if a version meets the minimum
import Foundation
struct Test {
var foundVersion: String
var requiredMinimumVersion: String
var meetsMinimum: Bool
}
let tests = [
Test(foundVersion: "2.8", requiredMinimumVersion: "2.9", meetsMinimum: false),
Test(foundVersion: "2.9", requiredMinimumVersion: "2.9", meetsMinimum: true),
Test(foundVersion: "2.9.1", requiredMinimumVersion: "2.9", meetsMinimum: true),
Test(foundVersion: "3.0", requiredMinimumVersion: "2.9", meetsMinimum: true),
Test(foundVersion: "2.9", requiredMinimumVersion: "2.9.0", meetsMinimum: true), // FAILS
Test(foundVersion: "2.9.1", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
Test(foundVersion: "3.0", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
Test(foundVersion: "3.3.0-test-1", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
]
for test in tests {
let meetsMinimum = test.foundVersion.compare(test.requiredMinimumVersion, options: .numeric) != .orderedAscending
if meetsMinimum == test.meetsMinimum {
print("PASS")
} else {
print("FAIL \(test.foundVersion) \(test.requiredMinimumVersion)")
}
}
@joshheald
Copy link

@allendav probably worth adding:

Test(foundVersion: "2.15", requiredMinimumVersion: "2.2", meetsMinimum: true), // Checks that 2.15 isn't compared as a decimal
Test(foundVersion: "2.9.1-test-1", requiredMinimumVersion: "2.9.1", meetsMinimum: true), //checks that it's not just passing because of the major/minor numbers being higher
Test(foundVersion: "2.8.1", requiredMinimumVersion: "2.8.2", meetsMinimum: false), //didn't have a negative test for patch
Test(foundVersion: "2.9.0", requiredMinimumVersion: "2.9", meetsMinimum: true), //To check that fixing the reverse case doesn't break this one! 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment