//
//  SwiftExamplesTests.swift
//  SwiftExamplesTests
//
//  Created by Erik Doernenburg on 11/06/2014.
//  Copyright (c) 2014 Mulle Kybernetik. All rights reserved.
//

import XCTest

class SwiftExamplesTests: XCTestCase {
    
    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }
    
    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }
    
    func testExample() {
        // This is an example of a functional test case.
        XCTAssert(true, "Pass")
    }
    
    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measureBlock() {
            // Put the code you want to measure the time of here.
        }
    }
    
}
