- 問題1
- 問題2
- 問題3
問題1:
IOS Swift, write the testing cases(including version1 < version2, version1 == version2, version1 > version2) and critical cases(ex: version1 or version2 is nil)
func cmpVersion(version1: String?, version2: String?) -> Int {
if version1 == nil && version2 == nil {
return 0
}
if version1 == nil {
return -1
}
if version2 == nil {
return 1
}
if let version1 = version1,
let version2 = version2 {
let version1Arr = version1.components(separatedBy: ".")
let version2Arr = version2.components(separatedBy: ".")
let count = version1Arr.count > version2.count ? version1.count: version2.count
for i in 0 ..< count {
let a = (i < version1Arr.count) ? Int(version1Arr[i]) ?? 0: 0
let b = (i < version2Arr.count) ? Int(version2Arr[i]) ?? 0: 0
if a > b {
return 1
} else if a < b {
return -1
}
}
}
return 0
}
回答:
import XCTest
class VersionComparisonTests: XCTestCase {
let obj = ClassName() // Replace ClassName with the actual class name containing the cmpVersion function
func testBothNil() {
XCTAssertEqual(obj.cmpVersion(version1: nil, version2: nil), 0)
}
func testVersion1Nil() {
XCTAssertEqual(obj.cmpVersion(version1: nil, version2: "1.0.0"), -1)
}
func testVersion2Nil() {
XCTAssertEqual(obj.cmpVersion(version1: "1.0.0", version2: nil), 1)
}
func testEqualVersions() {
XCTAssertEqual(obj.cmpVersion(version1: "1.0.0", version2: "1.0.0"), 0)
}
func testVersion1LessThanVersion2() {
XCTAssertEqual(obj.cmpVersion(version1: "1.0.0", version2: "1.0.1"), -1)
XCTAssertEqual(obj.cmpVersion(version1: "1.0", version2: "1.1"), -1)
XCTAssertEqual(obj.cmpVersion(version1: "1.0", version2: "2.0"), -1)
}
func testVersion1GreaterThanVersion2() {
XCTAssertEqual(obj.cmpVersion(version1: "1.0.1", version2: "1.0.0"), 1)
XCTAssertEqual(obj.cmpVersion(version1: "1.1", version2: "1.0"), 1)
XCTAssertEqual(obj.cmpVersion(version1: "2.0", version2: "1.0"), 1)
}
func testDifferentLengthVersions() {
XCTAssertEqual(obj.cmpVersion(version1: "1.0.1", version2: "1.0"), 1)
XCTAssertEqual(obj.cmpVersion(version1: "1.0", version2: "1.0.1"), -1)
}
// Add additional test cases if necessary
}
// Run the tests
let testSuite = XCTestSuite(name: "VersionComparisonTests")
testSuite.addTest(VersionComparisonTests.defaultTestSuite)
XCTMain([testSuite])
問題2:
Rewrite above code by replacing XCTAssertEqual to assert
回答:
import XCTest
class VersionComparisonTests: XCTestCase {
let obj = ClassName() // Replace ClassName with the actual class name containing the cmpVersion function
func testBothNil() {
assert(obj.cmpVersion(version1: nil, version2: nil) == 0)
}
func testVersion1Nil() {
assert(obj.cmpVersion(version1: nil, version2: "1.0.0") == -1)
}
func testVersion2Nil() {
assert(obj.cmpVersion(version1: "1.0.0", version2: nil) == 1)
}
func testEqualVersions() {
assert(obj.cmpVersion(version1: "1.0.0", version2: "1.0.0") == 0)
}
func testVersion1LessThanVersion2() {
assert(obj.cmpVersion(version1: "1.0.0", version2: "1.0.1") == -1)
assert(obj.cmpVersion(version1: "1.0", version2: "1.1") == -1)
assert(obj.cmpVersion(version1: "1.0", version2: "2.0") == -1)
}
func testVersion1GreaterThanVersion2() {
assert(obj.cmpVersion(version1: "1.0.1", version2: "1.0.0") == 1)
assert(obj.cmpVersion(version1: "1.1", version2: "1.0") == 1)
assert(obj.cmpVersion(version1: "2.0", version2: "1.0") == 1)
}
func testDifferentLengthVersions() {
assert(obj.cmpVersion(version1: "1.0.1", version2: "1.0") == 1)
assert(obj.cmpVersion(version1: "1.0", version2: "1.0.1") == -1)
}
// Add additional test cases if necessary
}
// Run the tests
let testSuite = XCTestSuite(name: "VersionComparisonTests")
testSuite.addTest(VersionComparisonTests.defaultTestSuite)
XCTMain([testSuite])
問題3:
Rewrite above code, in testDifferentLengthVersions, should add the case which compare result is 0
回答:
import XCTest
class VersionComparisonTests: XCTestCase {
let obj = ClassName() // Replace ClassName with the actual class name containing the cmpVersion function
func testBothNil() {
assert(obj.cmpVersion(version1: nil, version2: nil) == 0)
}
func testVersion1Nil() {
assert(obj.cmpVersion(version1: nil, version2: "1.0.0") == -1)
}
func testVersion2Nil() {
assert(obj.cmpVersion(version1: "1.0.0", version2: nil) == 1)
}
func testEqualVersions() {
assert(obj.cmpVersion(version1: "1.0.0", version2: "1.0.0") == 0)
}
func testVersion1LessThanVersion2() {
assert(obj.cmpVersion(version1: "1.0.0", version2: "1.0.1") == -1)
assert(obj.cmpVersion(version1: "1.0", version2: "1.1") == -1)
assert(obj.cmpVersion(version1: "1.0", version2: "2.0") == -1)
}
func testVersion1GreaterThanVersion2() {
assert(obj.cmpVersion(version1: "1.0.1", version2: "1.0.0") == 1)
assert(obj.cmpVersion(version1: "1.1", version2: "1.0") == 1)
assert(obj.cmpVersion(version1: "2.0", version2: "1.0") == 1)
}
func testDifferentLengthVersions() {
assert(obj.cmpVersion(version1: "1.0.1", version2: "1.0") == 1)
assert(obj.cmpVersion(version1: "1.0", version2: "1.0.1") == -1)
assert(obj.cmpVersion(version1: "1.0.0", version2: "1.0") == 0)
}
// Add additional test cases if necessary
}
// Run the tests
let testSuite = XCTestSuite(name: "VersionComparisonTests")
testSuite.addTest(VersionComparisonTests.defaultTestSuite)
XCTMain([testSuite])