Files

138 lines
4.3 KiB
Swift

// PerformanceTests.swift
//
// Copyright (c) 2014 - 2017 Pinglin Tang
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import XCTest
import SwiftyJSON
class PerformanceTests: XCTestCase {
var testData: Data!
override func setUp() {
super.setUp()
if let file = Bundle(for: PerformanceTests.self).path(forResource: "Tests", ofType: "json") {
self.testData = try? Data(contentsOf: URL(fileURLWithPath: file))
} else {
XCTFail("Can't find the test JSON file")
}
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testInitPerformance() {
self.measure {
for _ in 1...100 {
guard let json = try? JSON(data: self.testData) else {
XCTFail("Unable to parse testData")
return
}
XCTAssertTrue(json != JSON.null)
}
}
}
func testObjectMethodPerformance() {
guard let json = try? JSON(data: self.testData) else {
XCTFail("Unable to parse testData")
return
}
self.measure {
for _ in 1...100 {
let object: Any? = json.object
XCTAssertTrue(object != nil)
}
}
}
func testArrayMethodPerformance() {
guard let json = try? JSON(data: self.testData) else {
XCTFail("Unable to parse testData")
return
}
self.measure {
for _ in 1...100 {
autoreleasepool {
if let array = json.array {
XCTAssertTrue(array.count > 0)
}
}
}
}
}
func testDictionaryMethodPerformance() {
guard let json = try? JSON(data: self.testData)[0] else {
XCTFail("Unable to parse testData")
return
}
self.measure {
for _ in 1...100 {
autoreleasepool {
if let dictionary = json.dictionary {
XCTAssertTrue(dictionary.count > 0)
}
}
}
}
}
func testRawStringMethodPerformance() {
guard let json = try? JSON(data: self.testData) else {
XCTFail("Unable to parse testData")
return
}
self.measure {
for _ in 1...100 {
autoreleasepool {
let string = json.rawString()
XCTAssertTrue(string != nil)
}
}
}
}
func testLargeDictionaryMethodPerformance() {
var data: [String: JSON] = [:]
(0...100000).forEach { n in
data["\(n)"] = JSON([
"name": "item\(n)",
"id": n
])
}
let json = JSON(data)
self.measure {
autoreleasepool {
if let dictionary = json.dictionary {
XCTAssertTrue(dictionary.count == 100001)
} else {
XCTFail("dictionary should not be nil")
}
}
}
}
}