// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//


#if DEPLOYMENT_RUNTIME_OBJC || os(Linux)
    import Foundation
    import XCTest
    import CoreFoundation
#else
    import SwiftFoundation
    import SwiftXCTest
#endif

private func assertEqual(_ rect: CGRect,
                         x: CGFloat,
                         y: CGFloat,
                         width: CGFloat,
                         height: CGFloat,
                         accuracy: CGFloat? = nil,
                         _ message: @autoclosure () -> String = "",
                         file: StaticString = #file,
                         line: UInt = #line) {

    if let accuracy = accuracy {
        XCTAssertEqual(rect.origin.x, x, accuracy: accuracy, message, file: file, line: line)
        XCTAssertEqual(rect.origin.y, y, accuracy: accuracy, message, file: file, line: line)
        XCTAssertEqual(rect.size.width, width, accuracy: accuracy, message, file: file, line: line)
        XCTAssertEqual(rect.size.height, height, accuracy: accuracy, message, file: file, line: line)
    } else {
        XCTAssertEqual(rect.origin.x, x, message, file: file, line: line)
        XCTAssertEqual(rect.origin.y, y, message, file: file, line: line)
        XCTAssertEqual(rect.size.width, width, message, file: file, line: line)
        XCTAssertEqual(rect.size.height, height, message, file: file, line: line)
    }
}

class TestNSGeometry : XCTestCase {

    static var allTests: [(String, (TestNSGeometry) -> () throws -> Void)] {
        return [
            ("test_CGFloat_BasicConstruction", test_CGFloat_BasicConstruction),
            ("test_CGFloat_Equality", test_CGFloat_Equality),
            ("test_CGFloat_LessThanOrEqual", test_CGFloat_LessThanOrEqual),
            ("test_CGFloat_GreaterThanOrEqual", test_CGFloat_GreaterThanOrEqual),
            ("test_CGPoint_BasicConstruction", test_CGPoint_BasicConstruction),
            ("test_CGPoint_ExtendedConstruction", test_CGPoint_ExtendedConstruction),
            ("test_CGSize_BasicConstruction", test_CGSize_BasicConstruction),
            ("test_CGSize_ExtendedConstruction", test_CGSize_ExtendedConstruction),
            ("test_CGRect_BasicConstruction", test_CGRect_BasicConstruction),
            ("test_CGRect_ExtendedConstruction", test_CGRect_ExtendedConstruction),
            ("test_CGRect_SpecialValues", test_CGRect_SpecialValues),
            ("test_CGRect_IsNull", test_CGRect_IsNull),
            ("test_CGRect_IsInfinite", test_CGRect_IsInfinite),
            ("test_CGRect_IsEmpty", test_CGRect_IsEmpty),
            ("test_CGRect_Equatable", test_CGRect_Equatable),
            ("test_CGRect_CalculatedGeometricProperties", test_CGRect_CalculatedGeometricProperties),
            ("test_CGRect_Standardized", test_CGRect_Standardized),
            ("test_CGRect_Integral", test_CGRect_Integral),
            ("test_CGRect_ContainsPoint", test_CGRect_ContainsPoint),
            ("test_CGRect_ContainsRect", test_CGRect_ContainsRect),
            ("test_CGRect_Union", test_CGRect_Union),
            ("test_CGRect_Intersection", test_CGRect_Intersection),
            ("test_CGRect_Intersects", test_CGRect_Intersects),
            ("test_CGRect_OffsetBy", test_CGRect_OffsetBy),
            ("test_CGRect_Divide", test_CGRect_Divide),
            ("test_CGRect_InsetBy", test_CGRect_InsetBy),
            ("test_NSEdgeInsets_BasicConstruction", test_NSEdgeInsets_BasicConstruction),
            ("test_NSEdgeInsetsEqual", test_NSEdgeInsetsEqual),
            ("test_NSMakePoint", test_NSMakePoint),
            ("test_NSMakeSize", test_NSMakeSize),
            ("test_NSMakeRect", test_NSMakeRect),
            ("test_NSEdgeInsetsMake", test_NSEdgeInsetsMake),
            ("test_NSUnionRect", test_NSUnionRect),
            ("test_NSIntersectionRect", test_NSIntersectionRect),
            ("test_NSOffsetRect", test_NSOffsetRect),
            ("test_NSPointInRect", test_NSPointInRect),
            ("test_NSMouseInRect", test_NSMouseInRect),
            ("test_NSContainsRect", test_NSContainsRect),
            ("test_NSIntersectsRect", test_NSIntersectsRect),
            ("test_NSIntegralRect", test_NSIntegralRect),
            ("test_NSIntegralRectWithOptions", test_NSIntegralRectWithOptions),
            ("test_NSDivideRect", test_NSDivideRect),
            ("test_EncodeToNSString", test_EncodeToNSString),
            ("test_EncodeNegativeToNSString", test_EncodeNegativeToNSString),
            ("test_DecodeFromNSString", test_DecodeFromNSString),
            ("test_DecodeEmptyStrings", test_DecodeEmptyStrings),
            ("test_DecodeNegativeFromNSString", test_DecodeNegativeFromNSString),
            ("test_DecodeGarbageFromNSString", test_DecodeGarbageFromNSString),
        ]
    }

    func test_CGFloat_BasicConstruction() {
        XCTAssertEqual(CGFloat().native, 0.0)
        XCTAssertEqual(CGFloat(Double(3.0)).native, 3.0)
    }

    func test_CGFloat_Equality() {
        XCTAssertEqual(CGFloat(), CGFloat())
        XCTAssertEqual(CGFloat(1.0), CGFloat(1.0))
        XCTAssertEqual(CGFloat(-42.0), CGFloat(-42.0))

        XCTAssertNotEqual(CGFloat(1.0), CGFloat(1.4))
        XCTAssertNotEqual(CGFloat(37.3), CGFloat(-42.0))
        XCTAssertNotEqual(CGFloat(1.345), CGFloat())
    }

    func test_CGFloat_LessThanOrEqual() {
        let w = CGFloat(-4.5)
        let x = CGFloat(1.0)
        let y = CGFloat(2.2)

        XCTAssertLessThanOrEqual(CGFloat(), CGFloat())
        XCTAssertLessThanOrEqual(w, w)
        XCTAssertLessThanOrEqual(y, y)

        XCTAssertLessThan(w, x)
        XCTAssertLessThanOrEqual(w, x)
        XCTAssertLessThan(x, y)
        XCTAssertLessThanOrEqual(x, y)
        XCTAssertLessThan(w, y)
        XCTAssertLessThanOrEqual(w, y)
    }

    func test_CGFloat_GreaterThanOrEqual() {
        let w = CGFloat(-4.5)
        let x = CGFloat(1.0)
        let y = CGFloat(2.2)

        XCTAssertGreaterThanOrEqual(CGFloat(), CGFloat())
        XCTAssertGreaterThanOrEqual(w, w)
        XCTAssertGreaterThanOrEqual(y, y)

        XCTAssertGreaterThan(x, w)
        XCTAssertGreaterThanOrEqual(x, w)
        XCTAssertGreaterThan(y, x)
        XCTAssertGreaterThanOrEqual(y, x)
        XCTAssertGreaterThan(y, w)
        XCTAssertGreaterThanOrEqual(y, w)
    }

    func test_CGPoint_BasicConstruction() {
        let p1 = CGPoint()
        XCTAssertEqual(p1.x, CGFloat(0.0))
        XCTAssertEqual(p1.y, CGFloat(0.0))

        let p2 = CGPoint(x: CGFloat(3.6), y: CGFloat(4.5))
        XCTAssertEqual(p2.x, CGFloat(3.6))
        XCTAssertEqual(p2.y, CGFloat(4.5))
    }
    
    func test_CGPoint_ExtendedConstruction() {
        let p1 = CGPoint.zero
        XCTAssertEqual(p1.x, CGFloat(0))
        XCTAssertEqual(p1.y, CGFloat(0))
        
        let p2 = CGPoint(x: Int(3), y: Int(4))
        XCTAssertEqual(p2.x, CGFloat(3))
        XCTAssertEqual(p2.y, CGFloat(4))
        
        let p3 = CGPoint(x: Double(3.6), y: Double(4.5))
        XCTAssertEqual(p3.x, CGFloat(3.6))
        XCTAssertEqual(p3.y, CGFloat(4.5))
    }

    func test_CGSize_BasicConstruction() {
        let s1 = CGSize()
        XCTAssertEqual(s1.width, CGFloat(0.0))
        XCTAssertEqual(s1.height, CGFloat(0.0))

        let s2 = CGSize(width: CGFloat(3.6), height: CGFloat(4.5))
        XCTAssertEqual(s2.width, CGFloat(3.6))
        XCTAssertEqual(s2.height, CGFloat(4.5))
    }
    
    func test_CGSize_ExtendedConstruction() {
        let s1 = CGSize.zero
        XCTAssertEqual(s1.width, CGFloat(0))
        XCTAssertEqual(s1.height, CGFloat(0))
        
        let s2 = CGSize(width: Int(3), height: Int(4))
        XCTAssertEqual(s2.width, CGFloat(3))
        XCTAssertEqual(s2.height, CGFloat(4))
        
        let s3 = CGSize(width: Double(3.6), height: Double(4.5))
        XCTAssertEqual(s3.width, CGFloat(3.6))
        XCTAssertEqual(s3.height, CGFloat(4.5))
    }

    func test_CGRect_BasicConstruction() {
        let r1 = CGRect()
        XCTAssertEqual(r1.origin.x, CGFloat(0.0))
        XCTAssertEqual(r1.origin.y, CGFloat(0.0))
        XCTAssertEqual(r1.size.width, CGFloat(0.0))
        XCTAssertEqual(r1.size.height, CGFloat(0.0))

        let p = CGPoint(x: CGFloat(2.2), y: CGFloat(3.0))
        let s = CGSize(width: CGFloat(5.0), height: CGFloat(5.0))
        let r2 = CGRect(origin: p, size: s)
        XCTAssertEqual(r2.origin.x, p.x)
        XCTAssertEqual(r2.origin.y, p.y)
        XCTAssertEqual(r2.size.width, s.width)
        XCTAssertEqual(r2.size.height, s.height)
    }
    
    func test_CGRect_ExtendedConstruction() {
        let r1 = CGRect.zero
        XCTAssertEqual(r1.origin.x, CGFloat(0.0))
        XCTAssertEqual(r1.origin.y, CGFloat(0.0))
        XCTAssertEqual(r1.size.width, CGFloat(0.0))
        XCTAssertEqual(r1.size.height, CGFloat(0.0))
        
        let r2 = CGRect(x: CGFloat(1.2), y: CGFloat(2.3), width: CGFloat(3.4), height: CGFloat(4.5))
        XCTAssertEqual(r2.origin.x, CGFloat(1.2))
        XCTAssertEqual(r2.origin.y, CGFloat(2.3))
        XCTAssertEqual(r2.size.width, CGFloat(3.4))
        XCTAssertEqual(r2.size.height, CGFloat(4.5))
        
        let r3 = CGRect(x: Double(1.2), y: Double(2.3), width: Double(3.4), height: Double(4.5))
        XCTAssertEqual(r3.origin.x, CGFloat(1.2))
        XCTAssertEqual(r3.origin.y, CGFloat(2.3))
        XCTAssertEqual(r3.size.width, CGFloat(3.4))
        XCTAssertEqual(r3.size.height, CGFloat(4.5))
        
        let r4 = CGRect(x: Int(1), y: Int(2), width: Int(3), height: Int(4))
        XCTAssertEqual(r4.origin.x, CGFloat(1))
        XCTAssertEqual(r4.origin.y, CGFloat(2))
        XCTAssertEqual(r4.size.width, CGFloat(3))
        XCTAssertEqual(r4.size.height, CGFloat(4))
    }

    func test_CGRect_IsNull() {
        XCTAssertTrue(CGRect.null.isNull)
        XCTAssertTrue(CGRect(x: CGFloat.infinity, y: CGFloat.infinity, width: 0, height: 0).isNull)
        XCTAssertTrue(CGRect(x: CGFloat.infinity, y: CGFloat.infinity, width: 10, height: 10).isNull)
        XCTAssertTrue(CGRect(x: CGFloat.infinity, y: CGFloat.infinity, width: -10, height: -10).isNull)
        XCTAssertTrue(CGRect(x: CGFloat.infinity, y: 0, width: 0, height: 0).isNull)
        XCTAssertTrue(CGRect(x: 0, y: CGFloat.infinity, width: 0, height: 0).isNull)
        XCTAssertFalse(CGRect(x: 0, y: 0, width: 0, height: 0).isNull)
    }

    func test_CGRect_IsInfinite() {
        XCTAssertTrue(CGRect.infinite.isInfinite)

        XCTAssertFalse(CGRect(x: 0,
                              y: CGRect.infinite.origin.y,
                              width: CGRect.infinite.size.width,
                              height: CGRect.infinite.size.height).isInfinite)

        XCTAssertFalse(CGRect(x: CGRect.infinite.origin.x,
                              y: 0,
                              width: CGRect.infinite.size.width,
                              height: CGRect.infinite.size.height).isInfinite)

        XCTAssertFalse(CGRect(x: CGRect.infinite.origin.x,
                              y: CGRect.infinite.origin.y,
                              width: 0,
                              height: CGRect.infinite.size.height).isInfinite)

        XCTAssertFalse(CGRect(x: CGRect.infinite.origin.x,
                              y: CGRect.infinite.origin.y,
                              width: CGRect.infinite.size.width,
                              height: 0).isInfinite)

        XCTAssertFalse(CGRect(x: CGFloat.infinity,
                              y: CGFloat.infinity,
                              width: CGFloat.infinity,
                              height: CGFloat.infinity).isInfinite)

        XCTAssertFalse(CGRect.null.isInfinite)
    }

    func test_CGRect_IsEmpty() {
        XCTAssertTrue(CGRect.zero.isEmpty)
        XCTAssertTrue(CGRect.null.isEmpty)
        XCTAssertTrue(CGRect(x: 10, y: 20, width: 30, height: 0).isEmpty)
        XCTAssertTrue(CGRect(x: 10, y: 20, width: 0, height: 30).isEmpty)
        XCTAssertTrue(CGRect(x: 10, y: 20, width: -30, height: 0).isEmpty)
        XCTAssertTrue(CGRect(x: 10, y: 20, width: 0, height: -30).isEmpty)

        var r1 = CGRect.null
        r1.origin.x = 0
        XCTAssertTrue(r1.isEmpty)

        var r2 = CGRect.null
        r2.origin.y = 0
        XCTAssertTrue(r2.isEmpty)

        var r3 = CGRect.null
        r3.size.width = 20
        XCTAssertTrue(r3.isEmpty)

        var r4 = CGRect.null
        r4.size.height = 20
        XCTAssertTrue(r4.isEmpty)

        var r5 = CGRect.null
        r5.size.width = 20
        r5.size.height = 20
        XCTAssertTrue(r5.isEmpty)

        XCTAssertFalse(CGRect.infinite.isEmpty)
        XCTAssertFalse(CGRect.infinite.isEmpty)
    }

    func test_CGRect_Equatable() {
        XCTAssertEqual(CGRect(x: 10, y: 20, width: 30, height: 40), CGRect(x: 10, y: 20, width: 30, height: 40))
        XCTAssertEqual(CGRect(x: -10, y: -20, width: -30, height: -40), CGRect(x: -10, y: -20, width: -30, height: -40))
        XCTAssertEqual(CGRect(x: -10, y: -20, width: 30, height: 40), CGRect(x: 20, y: 20, width: -30, height: -40))

        XCTAssertNotEqual(CGRect(x: 10, y: 20, width: 30, height: 40), CGRect(x: 10, y: 20, width: 30, height: -40))
        XCTAssertNotEqual(CGRect(x: 10, y: 20, width: 30, height: 40), CGRect(x: 10, y: 20, width: -30, height: 40))
        XCTAssertNotEqual(CGRect(x: 10, y: 20, width: 30, height: 40), CGRect(x: 10, y: -20, width: 30, height: 40))
        XCTAssertNotEqual(CGRect(x: 10, y: 20, width: 30, height: 40), CGRect(x: -10, y: 20, width: 30, height: 40))

        XCTAssertEqual(CGRect.infinite, CGRect.infinite)
        XCTAssertEqual(CGRect.null, CGRect.null)
        XCTAssertNotEqual(CGRect.infinite, CGRect.null)

        var r1 = CGRect.null
        r1.size = CGSize(width: 20, height: 20)
        XCTAssertEqual(r1, CGRect.null)

        var r2 = CGRect.null
        r2.origin.x = 20
        XCTAssertEqual(r2, CGRect.null)

        var r3 = CGRect.null
        r3.origin.y = 20
        XCTAssertEqual(r3, CGRect.null)

        var r4 = CGRect.null
        r4.origin = CGPoint(x: 10, y: 20)
        XCTAssertNotEqual(r4, CGRect.null)
    }

    func test_CGRect_CalculatedGeometricProperties() {
        let ε = CGFloat(0.00001)

        let r1 = CGRect(x: 1.2, y: 3.4, width: 5.6, height: 7.8)
        XCTAssertEqual(r1.width, 5.6, accuracy: ε)
        XCTAssertEqual(r1.height, 7.8, accuracy: ε)

        XCTAssertEqual(r1.minX, 1.2, accuracy: ε)
        XCTAssertEqual(r1.midX, 4, accuracy: ε)
        XCTAssertEqual(r1.maxX, 6.8, accuracy: ε)

        XCTAssertEqual(r1.minY, 3.4, accuracy: ε)
        XCTAssertEqual(r1.midY, 7.3, accuracy: ε)
        XCTAssertEqual(r1.maxY, 11.2, accuracy: ε)

        let r2 = CGRect(x: -1.2, y: -3.4, width: 5.6, height: 7.8)
        XCTAssertEqual(r2.width, 5.6, accuracy: ε)
        XCTAssertEqual(r2.height, 7.8, accuracy: ε)

        XCTAssertEqual(r2.minX, -1.2, accuracy: ε)
        XCTAssertEqual(r2.midX, 1.6, accuracy: ε)
        XCTAssertEqual(r2.maxX, 4.4, accuracy: ε)

        XCTAssertEqual(r2.minY, -3.4, accuracy: ε)
        XCTAssertEqual(r2.midY, 0.5, accuracy: ε)
        XCTAssertEqual(r2.maxY, 4.4, accuracy: ε)

        let r3 = CGRect(x: 1.2, y: 3.4, width: -5.6, height: -7.8)
        XCTAssertEqual(r3.width, 5.6, accuracy: ε)
        XCTAssertEqual(r3.height, 7.8, accuracy: ε)

        XCTAssertEqual(r3.minX, -4.4, accuracy: ε)
        XCTAssertEqual(r3.midX, -1.6, accuracy: ε)
        XCTAssertEqual(r3.maxX, 1.2, accuracy: ε)

        XCTAssertEqual(r3.minY, -4.4, accuracy: ε)
        XCTAssertEqual(r3.midY, -0.5, accuracy: ε)
        XCTAssertEqual(r3.maxY, 3.4, accuracy: ε)

        let r4 = CGRect(x: -1.2, y: -3.4, width: -5.6, height: -7.8)
        XCTAssertEqual(r4.width, 5.6, accuracy: ε)
        XCTAssertEqual(r4.height, 7.8, accuracy: ε)

        XCTAssertEqual(r4.minX, -6.8, accuracy: ε)
        XCTAssertEqual(r4.midX, -4.0, accuracy: ε)
        XCTAssertEqual(r4.maxX, -1.2, accuracy: ε)

        XCTAssertEqual(r4.minY, -11.2, accuracy: ε)
        XCTAssertEqual(r4.midY, -7.3, accuracy: ε)
        XCTAssertEqual(r4.maxY, -3.4, accuracy: ε)
    }

    func test_CGRect_Standardized() {
        let ε = CGFloat(0.00001)
        let nullX = CGRect.null.origin.x
        let nullY = CGRect.null.origin.y
        let nullWidth = CGRect.null.size.width
        let nullHeight = CGRect.null.size.height

        let r1 = CGRect(x: 1.9, y: 1.9, width: 10.1, height: 10.2).standardized
        assertEqual(r1, x: 1.9, y: 1.9, width: 10.1, height: 10.2, accuracy: ε)

        let r2 = CGRect(x: 1.9, y: 1.9, width: -10.1, height: -10.2).standardized
        assertEqual(r2, x: -8.2, y: -8.3, width: 10.1, height: 10.2, accuracy: ε)

        let r3 = CGRect(x: -1.9, y: -1.9, width: 10.1, height: 10.2).standardized
        assertEqual(r3, x: -1.9, y: -1.9, width: 10.1, height: 10.2, accuracy: ε)

        let r4 = CGRect(x: -1.9, y: -1.9, width: -10.1, height: -10.2).standardized
        assertEqual(r4, x: -12, y: -12.1, width: 10.1, height: 10.2, accuracy: ε)

        let r5 = CGRect.null.standardized
        assertEqual(r5, x: nullX, y: nullY, width: nullWidth, height: nullHeight)

        var r6 = CGRect.null
        r6.size = CGSize(width: 10, height: 20)
        r6 = r6.standardized
        assertEqual(r6, x: nullX, y: nullY, width: nullWidth, height: nullHeight)

        var r7 = CGRect.null
        r7.size = CGSize(width: -10, height: -20)
        r7 = r7.standardized
        assertEqual(r7, x: nullX, y: nullY, width: nullWidth, height: nullHeight)

        var r8 = CGRect.null
        r8.origin.x = 20
        r8 = r8.standardized
        assertEqual(r8, x: nullX, y: nullY, width: nullWidth, height: nullHeight)

        var r9 = CGRect.null
        r9.origin.y = 20
        r9 = r9.standardized
        assertEqual(r9, x: nullX, y: nullY, width: nullWidth, height: nullHeight)

        var r10 = CGRect.null
        r10.origin = CGPoint(x: 10, y: 20)
        r10 = r10.standardized
        assertEqual(r10, x: 10, y: 20, width: 0, height: 0)
    }

    func test_CGRect_Integral() {
        let ε = CGFloat(0.00001)

        let r1 = CGRect(x: 1.9, y: 1.9, width: 10.1, height: 10.2).integral
        XCTAssertEqual(r1.origin.x, 1, accuracy: ε)
        XCTAssertEqual(r1.origin.y, 1, accuracy: ε)
        XCTAssertEqual(r1.size.width, 11, accuracy: ε)
        XCTAssertEqual(r1.size.height, 12, accuracy: ε)

        let r2 = CGRect(x: 1.9, y: 1.9, width: -10.1, height: -10.2).integral
        XCTAssertEqual(r2.origin.x, -9, accuracy: ε)
        XCTAssertEqual(r2.origin.y, -9, accuracy: ε)
        XCTAssertEqual(r2.size.width, 11, accuracy: ε)
        XCTAssertEqual(r2.size.height, 11, accuracy: ε)

        let r3 = CGRect(x: -1.9, y: -1.9, width: 10.1, height: 10.2).integral
        XCTAssertEqual(r3.origin.x, -2, accuracy: ε)
        XCTAssertEqual(r3.origin.y, -2, accuracy: ε)
        XCTAssertEqual(r3.size.width, 11, accuracy: ε)
        XCTAssertEqual(r3.size.height, 11, accuracy: ε)

        let r4 = CGRect(x: -1.9, y: -1.9, width: -10.1, height: -10.2).integral
        XCTAssertEqual(r4.origin.x, -12, accuracy: ε)
        XCTAssertEqual(r4.origin.y, -13, accuracy: ε)
        XCTAssertEqual(r4.size.width, 11, accuracy: ε)
        XCTAssertEqual(r4.size.height, 12, accuracy: ε)

        let r5 = CGRect.null.integral
        XCTAssertEqual(r5.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(r5.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(r5.size.width, CGRect.null.size.width)
        XCTAssertEqual(r5.size.height, CGRect.null.size.height)

        var r6 = CGRect.null
        r6.origin.x = 10
        r6.size = CGSize(width: -20, height: -30)
        r6 = r6.integral
        XCTAssertEqual(r6.origin.x, 10)
        XCTAssertEqual(r6.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(r6.size.width, -20)
        XCTAssertEqual(r6.size.height, -30)

        var r7 = CGRect.null
        r7.origin.y = 10
        r7.size = CGSize(width: -20, height: -30)
        r7 = r7.integral
        XCTAssertEqual(r7.origin.x, CGRect.null.origin.y)
        XCTAssertEqual(r7.origin.y, 10)
        XCTAssertEqual(r7.size.width, -20)
        XCTAssertEqual(r7.size.height, -30)

        var r8 = CGRect.null
        r8.origin = CGPoint(x: 10, y: 20)
        r8.size = CGSize(width: -30, height: -40)
        r8 = r8.integral
        XCTAssertEqual(r8.origin.x, -20)
        XCTAssertEqual(r8.origin.y, -20)
        XCTAssertEqual(r8.size.width, 30)
        XCTAssertEqual(r8.size.height, 40)
    }

    func test_CGRect_ContainsPoint() {
        XCTAssertFalse(CGRect.null.contains(CGPoint()))
        XCTAssertFalse(CGRect.zero.contains(CGPoint()))

        let r1 = CGRect(x: 5, y: 5, width: 10, height: 10)
        XCTAssertFalse(r1.contains(CGPoint(x: 1, y: 2)))
        XCTAssertFalse(r1.contains(CGPoint(x: 7, y: 2)))
        XCTAssertFalse(r1.contains(CGPoint(x: 2, y: 7)))
        XCTAssertFalse(r1.contains(CGPoint(x: -7, y: -7)))
        XCTAssertFalse(r1.contains(CGPoint(x: 15, y: 15)))
        XCTAssertTrue(r1.contains(CGPoint(x: 7, y: 7)))
        XCTAssertTrue(r1.contains(CGPoint(x: 10, y: 10)))
        XCTAssertTrue(r1.contains(CGPoint(x: 5, y: 5)))

        let r2 = CGRect(x: -5, y: -5, width: -10, height: -10)
        XCTAssertFalse(r2.contains(CGPoint(x: -1, y: -2)))
        XCTAssertFalse(r2.contains(CGPoint(x: -7, y: -2)))
        XCTAssertFalse(r2.contains(CGPoint(x: -2, y: -7)))
        XCTAssertFalse(r2.contains(CGPoint(x: 7, y: 7)))
        XCTAssertFalse(r2.contains(CGPoint(x: -5, y: -5)))
        XCTAssertTrue(r2.contains(CGPoint(x: -7, y: -7)))
        XCTAssertTrue(r2.contains(CGPoint(x: -10, y: -10)))
        XCTAssertTrue(r2.contains(CGPoint(x: -15, y: -15)))

        XCTAssertTrue(CGRect.infinite.contains(CGPoint()))
    }

    func test_CGRect_ContainsRect() {
        XCTAssertFalse(CGRect.zero.contains(.infinite))
        XCTAssertTrue(CGRect.zero.contains(.null))
        XCTAssertTrue(CGRect.zero.contains(CGRect.zero))
        XCTAssertFalse(CGRect.zero.contains(CGRect(x: -1.2, y: -3.4, width: 5.6, height: 7.8)))

        XCTAssertFalse(CGRect.null.contains(.infinite))
        XCTAssertTrue(CGRect.null.contains(.null))
        XCTAssertFalse(CGRect.null.contains(CGRect.zero))
        XCTAssertFalse(CGRect.null.contains(CGRect(x: -1.2, y: -3.4, width: 5.6, height: 7.8)))

        XCTAssertTrue(CGRect.infinite.contains(.infinite))
        XCTAssertTrue(CGRect.infinite.contains(.null))
        XCTAssertTrue(CGRect.infinite.contains(CGRect.zero))
        XCTAssertTrue(CGRect.infinite.contains(CGRect(x: -1.2, y: -3.4, width: 5.6, height: 7.8)))

        let r1 = CGRect(x: 10, y: 20, width: 30, height: 40)
        XCTAssertTrue(r1.contains(r1))

        let r2 = CGRect(x: -10, y: -20, width: -30, height: -40)
        XCTAssertTrue(r2.contains(r2))

        let r3 = CGRect(x: -10, y: -20, width: 30, height: 40)
        let r4 = CGRect(x: 20, y: 20, width: -30, height: -40)
        XCTAssertTrue(r3.contains(r4))

        let r5 = CGRect(x: -10, y: -10, width: 20, height: 20)
        let r6 = CGRect(x: -5, y: -5, width: 10, height: 10)
        XCTAssertTrue(r5.contains(r6))
        XCTAssertFalse(r6.contains(r5))
    }

    func test_CGRect_Union() {
        let r1 = CGRect.null
        let r2 = CGRect.null
        let u1 = r1.union(r2)
        XCTAssertEqual(u1.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(u1.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(u1.size.width, CGRect.null.size.width)
        XCTAssertEqual(u1.size.height, CGRect.null.size.height)

        let r3 = CGRect.null
        var r4 = CGRect.null
        r4.size = CGSize(width: 10, height: 20)
        let u2 = r3.union(r4)
        XCTAssertEqual(u2.origin.x, r4.origin.x)
        XCTAssertEqual(u2.origin.y, r4.origin.y)
        XCTAssertEqual(u2.size.width, r4.size.width)
        XCTAssertEqual(u2.size.height, r4.size.height)

        let u3 = r4.union(r3)
        XCTAssertEqual(u3.origin.x, r3.origin.x)
        XCTAssertEqual(u3.origin.y, r3.origin.y)
        XCTAssertEqual(u3.size.width, r3.size.width)
        XCTAssertEqual(u3.size.height, r3.size.height)

        let r5 = CGRect(x: -1.2, y: -3.4, width: -5.6, height: -7.8)
        let r6 = CGRect(x: 1.2, y: 3.4, width: 5.6, height: 7.8)
        let u4 = r5.union(r6)
        XCTAssertEqual(u4.origin.x, -6.8)
        XCTAssertEqual(u4.origin.y, -11.2)
        XCTAssertEqual(u4.size.width, 13.6)
        XCTAssertEqual(u4.size.height, 22.4)

        let r7 = CGRect(x: 1, y: 2, width: 3, height: 4)
        let r8 = CGRect.infinite
        let u5 = r7.union(r8)
        XCTAssertEqual(u5.origin.x, r8.origin.x)
        XCTAssertEqual(u5.origin.y, r8.origin.y)
        XCTAssertEqual(u5.size.width, r8.size.width)
        XCTAssertEqual(u5.size.height, r8.size.height)
    }

    func test_CGRect_Intersection() {
        let r1 = CGRect(x: 10, y: 10, width: 50, height: 60)
        let r2 = CGRect(x: 25, y: 25, width: 60, height: 70)
        let i1 = r1.intersection(r2)
        XCTAssertEqual(i1.origin.x, 25)
        XCTAssertEqual(i1.origin.y, 25)
        XCTAssertEqual(i1.size.width, 35)
        XCTAssertEqual(i1.size.height, 45)

        let r3 = CGRect(x: 85, y: 95, width: -60, height: -70)
        let i2 = r1.intersection(r3)
        XCTAssertEqual(i2.origin.x, 25)
        XCTAssertEqual(i2.origin.y, 25)
        XCTAssertEqual(i2.size.width, 35)
        XCTAssertEqual(i2.size.height, 45)

        let r4 = CGRect(x: -10, y: -10, width: -30, height: -30)
        let i3 = r1.intersection(r4)
        XCTAssertEqual(i3.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(i3.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(i3.size.width, CGRect.null.size.width)
        XCTAssertEqual(i3.size.height, CGRect.null.size.height)

        let r5 = CGRect.null
        let i4 = r1.intersection(r5)
        XCTAssertEqual(i4.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(i4.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(i4.size.width, CGRect.null.size.width)
        XCTAssertEqual(i4.size.height, CGRect.null.size.height)

        let i5 = r5.intersection(r1)
        XCTAssertEqual(i5.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(i5.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(i5.size.width, CGRect.null.size.width)
        XCTAssertEqual(i5.size.height, CGRect.null.size.height)

        var r6 = CGRect.null
        r6.size = CGSize(width: 10, height: 20)
        r6.origin.x = 30
        let i6 = r5.intersection(r6)
        XCTAssertEqual(i6.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(i6.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(i6.size.width, CGRect.null.size.width)
        XCTAssertEqual(i6.size.height, CGRect.null.size.height)

        let i7 = r1.intersection(.infinite)
        XCTAssertEqual(i7.origin.x, r1.origin.x)
        XCTAssertEqual(i7.origin.y, r1.origin.y)
        XCTAssertEqual(i7.size.width, r1.size.width)
        XCTAssertEqual(i7.size.height, r1.size.height)

        let i8 = CGRect.infinite.intersection(.infinite)
        XCTAssertEqual(i8.origin.x, CGRect.infinite.origin.x)
        XCTAssertEqual(i8.origin.y, CGRect.infinite.origin.y)
        XCTAssertEqual(i8.size.width, CGRect.infinite.size.width)
        XCTAssertEqual(i8.size.height, CGRect.infinite.size.height)

        let r7 = CGRect(x: -10, y: -10, width: 20, height: 20)
        let i9 = r7.intersection(.zero)
        XCTAssertEqual(i9.origin.x, 0)
        XCTAssertEqual(i9.origin.y, 0)
        XCTAssertEqual(i9.size.width, 0)
        XCTAssertEqual(i9.size.height, 0)
    }

    func test_CGRect_Intersects() {
        let r1 = CGRect(x: 10, y: 10, width: 50, height: 60)
        let r2 = CGRect(x: 25, y: 25, width: 60, height: 70)
        XCTAssertTrue(r1.intersects(r2))

        let r3 = CGRect(x: 85, y: 95, width: -60, height: -70)
        XCTAssertTrue(r1.intersects(r3))

        let r4 = CGRect(x: -10, y: -10, width: -30, height: -30)
        XCTAssertFalse(r1.intersects(r4))

        let r5 = CGRect.null
        XCTAssertFalse(r1.intersects(r5))
        XCTAssertFalse(r5.intersects(r1))

        var r6 = CGRect.null
        r6.size = CGSize(width: 10, height: 20)
        r6.origin.x = 30
        XCTAssertFalse(r5.intersects(r6))

        XCTAssertTrue(r1.intersects(.infinite))

        XCTAssertTrue(CGRect.infinite.intersects(.infinite))

        let r7 = CGRect(x: -10, y: -10, width: 20, height: 20)
        XCTAssertTrue(r7.intersects(.zero))
    }

    func test_CGRect_OffsetBy() {
        var r1 = CGRect.null
        r1.size = CGSize(width: 10, height: 20)
        r1.origin.x = 30
        let o1 = r1.offsetBy(dx: 40, dy: 50)
        XCTAssertEqual(o1.origin.x, r1.origin.x)
        XCTAssertEqual(o1.origin.y, r1.origin.y)
        XCTAssertEqual(o1.size.width, r1.size.width)
        XCTAssertEqual(o1.size.height, r1.size.height)

        var r2 = CGRect.null
        r2.size = CGSize(width: 10, height: 20)
        r2.origin.y = 30
        let o2 = r2.offsetBy(dx: 40, dy: 50)
        XCTAssertEqual(o2.origin.x, r2.origin.x)
        XCTAssertEqual(o2.origin.y, r2.origin.y)
        XCTAssertEqual(o2.size.width, r2.size.width)
        XCTAssertEqual(o2.size.height, r2.size.height)

        let o3 = CGRect(x: 1.2, y: 3.4, width: 5.6, height: 7.8).offsetBy(dx: 10.5, dy: 20.5)
        XCTAssertEqual(o3.origin.x, 11.7)
        XCTAssertEqual(o3.origin.y, 23.9)
        XCTAssertEqual(o3.size.width, 5.6)
        XCTAssertEqual(o3.size.height, 7.8)

        let o4 = CGRect(x: -1.2, y: -3.4, width: -5.6, height: -7.8).offsetBy(dx: -10.5, dy: -20.5)
        XCTAssertEqual(o4.origin.x, -17.3)
        XCTAssertEqual(o4.origin.y, -31.7)
        XCTAssertEqual(o4.size.width, 5.6)
        XCTAssertEqual(o4.size.height, 7.8)
    }

    func test_CGRect_Divide() {
        let r1 = CGRect(x: 10, y: 20, width: 30, height: 40)
        let d1 = r1.divided(atDistance: 10, from: .minXEdge)
        XCTAssertEqual(d1.slice.origin.x, 10)
        XCTAssertEqual(d1.slice.origin.y, 20)
        XCTAssertEqual(d1.slice.size.width, 10)
        XCTAssertEqual(d1.slice.size.height, 40)
        XCTAssertEqual(d1.remainder.origin.x, 20)
        XCTAssertEqual(d1.remainder.origin.y, 20)
        XCTAssertEqual(d1.remainder.size.width, 20)
        XCTAssertEqual(d1.remainder.size.height, 40)

        let d2 = r1.divided(atDistance: 10, from: .maxXEdge)
        XCTAssertEqual(d2.slice.origin.x, 30)
        XCTAssertEqual(d2.slice.origin.y, 20)
        XCTAssertEqual(d2.slice.size.width, 10)
        XCTAssertEqual(d2.slice.size.height, 40)
        XCTAssertEqual(d2.remainder.origin.x, 10)
        XCTAssertEqual(d2.remainder.origin.y, 20)
        XCTAssertEqual(d2.remainder.size.width, 20)
        XCTAssertEqual(d2.remainder.size.height, 40)

        let d3 = r1.divided(atDistance: 10, from: .minYEdge)
        XCTAssertEqual(d3.slice.origin.x, 10)
        XCTAssertEqual(d3.slice.origin.y, 20)
        XCTAssertEqual(d3.slice.size.width, 30)
        XCTAssertEqual(d3.slice.size.height, 10)
        XCTAssertEqual(d3.remainder.origin.x, 10)
        XCTAssertEqual(d3.remainder.origin.y, 30)
        XCTAssertEqual(d3.remainder.size.width, 30)
        XCTAssertEqual(d3.remainder.size.height, 30)

        let d4 = r1.divided(atDistance: 10, from: .maxYEdge)
        XCTAssertEqual(d4.slice.origin.x, 10)
        XCTAssertEqual(d4.slice.origin.y, 50)
        XCTAssertEqual(d4.slice.size.width, 30)
        XCTAssertEqual(d4.slice.size.height, 10)
        XCTAssertEqual(d4.remainder.origin.x, 10)
        XCTAssertEqual(d4.remainder.origin.y, 20)
        XCTAssertEqual(d4.remainder.size.width, 30)
        XCTAssertEqual(d4.remainder.size.height, 30)

        let d5 = r1.divided(atDistance: 31, from: .minXEdge)
        XCTAssertEqual(d5.slice.origin.x, 10)
        XCTAssertEqual(d5.slice.origin.y, 20)
        XCTAssertEqual(d5.slice.size.width, 30)
        XCTAssertEqual(d5.slice.size.height, 40)
        XCTAssertEqual(d5.remainder.origin.x, 40)
        XCTAssertEqual(d5.remainder.origin.y, 20)
        XCTAssertEqual(d5.remainder.size.width, 0)
        XCTAssertEqual(d5.remainder.size.height, 40)

        let d6 = r1.divided(atDistance: 31, from: .maxXEdge)
        XCTAssertEqual(d6.slice.origin.x, 10)
        XCTAssertEqual(d6.slice.origin.y, 20)
        XCTAssertEqual(d6.slice.size.width, 30)
        XCTAssertEqual(d6.slice.size.height, 40)
        XCTAssertEqual(d6.remainder.origin.x, 10)
        XCTAssertEqual(d6.remainder.origin.y, 20)
        XCTAssertEqual(d6.remainder.size.width, 0)
        XCTAssertEqual(d6.remainder.size.height, 40)

        let d7 = r1.divided(atDistance: 41, from: .minYEdge)
        XCTAssertEqual(d7.slice.origin.x, 10)
        XCTAssertEqual(d7.slice.origin.y, 20)
        XCTAssertEqual(d7.slice.size.width, 30)
        XCTAssertEqual(d7.slice.size.height, 40)
        XCTAssertEqual(d7.remainder.origin.x, 10)
        XCTAssertEqual(d7.remainder.origin.y, 60)
        XCTAssertEqual(d7.remainder.size.width, 30)
        XCTAssertEqual(d7.remainder.size.height, 0)

        let d8 = r1.divided(atDistance: 41, from: .maxYEdge)
        XCTAssertEqual(d8.slice.origin.x, 10)
        XCTAssertEqual(d8.slice.origin.y, 20)
        XCTAssertEqual(d8.slice.size.width, 30)
        XCTAssertEqual(d8.slice.size.height, 40)
        XCTAssertEqual(d8.remainder.origin.x, 10)
        XCTAssertEqual(d8.remainder.origin.y, 20)
        XCTAssertEqual(d8.remainder.size.width, 30)
        XCTAssertEqual(d8.remainder.size.height, 0)

        let d9 = CGRect(x: -10, y: -20, width: -30, height: -40).divided(atDistance: 10, from: .minXEdge)
        XCTAssertEqual(d9.slice.origin.x, -40)
        XCTAssertEqual(d9.slice.origin.y, -60)
        XCTAssertEqual(d9.slice.size.width, 10)
        XCTAssertEqual(d9.slice.size.height, 40)
        XCTAssertEqual(d9.remainder.origin.x, -30)
        XCTAssertEqual(d9.remainder.origin.y, -60)
        XCTAssertEqual(d9.remainder.size.width, 20)
        XCTAssertEqual(d9.remainder.size.height, 40)

        var r2 = CGRect.null
        r2.size = CGSize(width: 10, height: 20)
        r2.origin.x = 30
        let d10 = r2.divided(atDistance: 10, from: .minXEdge)
        XCTAssertEqual(d10.slice.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(d10.slice.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(d10.slice.size.width, CGRect.null.size.width)
        XCTAssertEqual(d10.slice.size.height, CGRect.null.size.height)
        XCTAssertEqual(d10.remainder.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(d10.remainder.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(d10.remainder.size.width, CGRect.null.size.width)
        XCTAssertEqual(d10.remainder.size.height, CGRect.null.size.height)

        var r3 = CGRect.null
        r3.size = CGSize(width: 10, height: 20)
        r3.origin.y = 30
        let d11 = r3.divided(atDistance: 10, from: .minXEdge)
        XCTAssertEqual(d11.slice.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(d11.slice.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(d11.slice.size.width, CGRect.null.size.width)
        XCTAssertEqual(d11.slice.size.height, CGRect.null.size.height)
        XCTAssertEqual(d11.remainder.origin.x, CGRect.null.origin.x)
        XCTAssertEqual(d11.remainder.origin.y, CGRect.null.origin.y)
        XCTAssertEqual(d11.remainder.size.width, CGRect.null.size.width)
        XCTAssertEqual(d11.remainder.size.height, CGRect.null.size.height)
    }

    func test_CGRect_InsetBy() {
        let ε = CGFloat(0.00001)
        let nullX = CGRect.null.origin.x
        let nullY = CGRect.null.origin.y
        let nullWidth = CGRect.null.size.width
        let nullHeight = CGRect.null.size.height

        let r1 = CGRect(x: 1.2, y: 3.4, width: 5.6, height: 7.8)
        assertEqual(r1.insetBy(dx: 2.8, dy: 0), x: 4, y: 3.4, width: 0, height: 7.8, accuracy: ε)
        assertEqual(r1.insetBy(dx: 0, dy: 3.9), x: 1.2, y: 7.3, width: 5.6, height: 0, accuracy: ε)
        assertEqual(r1.insetBy(dx: 10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r1.insetBy(dx: 10, dy: -10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r1.insetBy(dx: -10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r1.insetBy(dx: -10, dy: -10), x: -8.8, y: -6.6, width: 25.6, height: 27.8, accuracy: ε)

        let r2 = CGRect(x: 1.2, y: 3.4, width: -5.6, height: -7.8)
        assertEqual(r2.insetBy(dx: 2.8, dy: 0), x: -1.6, y: -4.4, width: 0, height: 7.8, accuracy: ε)
        assertEqual(r2.insetBy(dx: 0, dy: 3.9), x: -4.4, y: -0.5, width: 5.6, height: 0, accuracy: ε)
        assertEqual(r2.insetBy(dx: 10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r2.insetBy(dx: 10, dy: -10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r2.insetBy(dx: -10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r2.insetBy(dx: -10, dy: -10), x: -14.4, y: -14.4, width: 25.6, height: 27.8, accuracy: ε)

        let r3 = CGRect(x: -1.2, y: -3.4, width: 5.6, height: 7.8)
        assertEqual(r3.insetBy(dx: 2.8, dy: 0), x: 1.6, y: -3.4, width: 0, height: 7.8, accuracy: ε)
        assertEqual(r3.insetBy(dx: 0, dy: 3.9), x: -1.2, y: 0.5, width: 5.6, height: 0, accuracy: ε)
        assertEqual(r3.insetBy(dx: 10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r3.insetBy(dx: 10, dy: -10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r3.insetBy(dx: -10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r3.insetBy(dx: -10, dy: -10), x: -11.2, y: -13.4, width: 25.6, height: 27.8, accuracy: ε)

        let r4 = CGRect(x: -1.2, y: -3.4, width: -5.6, height: -7.8)
        assertEqual(r4.insetBy(dx: 2.8, dy: 0), x: -4, y: -11.2, width: 0, height: 7.8, accuracy: ε)
        assertEqual(r4.insetBy(dx: 0, dy: 3.9), x: -6.8, y: -7.3, width: 5.6, height: 0, accuracy: ε)
        assertEqual(r4.insetBy(dx: 10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r4.insetBy(dx: 10, dy: -10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r4.insetBy(dx: -10, dy: 10), x: nullX, y: nullY, width: nullWidth, height: nullHeight)
        assertEqual(r4.insetBy(dx: -10, dy: -10), x: -16.8, y: -21.2, width: 25.6, height: 27.8, accuracy: ε)

        var r5 = CGRect.null
        r5.size = CGSize(width: 10, height: 20)
        r5.origin.x = 30
        let i1 = r5.insetBy(dx: 50, dy: 60)
        XCTAssertEqual(i1.origin.x, 30)
        XCTAssertEqual(i1.origin.y, r5.origin.y)
        XCTAssertEqual(i1.size.width, 10)
        XCTAssertEqual(i1.size.height, 20)

        var r6 = CGRect.null
        r6.size = CGSize(width: 10, height: 20)
        r6.origin.y = 30
        let i2 = r6.insetBy(dx: 50, dy: 60)
        XCTAssertEqual(i2.origin.x, r6.origin.x)
        XCTAssertEqual(i2.origin.y, 30)
        XCTAssertEqual(i2.size.width, 10)
        XCTAssertEqual(i2.size.height, 20)
    }
    
    func test_CGRect_SpecialValues() {
        let r1 = CGRect.null
        XCTAssertEqual(r1.origin.x, CGFloat.infinity)
        XCTAssertEqual(r1.origin.y, CGFloat.infinity)
        XCTAssertEqual(r1.size.width, CGFloat(0.0))
        XCTAssertEqual(r1.size.height, CGFloat(0.0))
        
        let r2 = CGRect.infinite
        XCTAssertEqual(r2.origin.x, -CGFloat.greatestFiniteMagnitude / 2)
        XCTAssertEqual(r2.origin.y, -CGFloat.greatestFiniteMagnitude / 2)
        XCTAssertEqual(r2.size.width, CGFloat.greatestFiniteMagnitude)
        XCTAssertEqual(r2.size.height, CGFloat.greatestFiniteMagnitude)
    }

    func test_NSEdgeInsets_BasicConstruction() {
        let i1 = NSEdgeInsets()
        XCTAssertEqual(i1.top, CGFloat(0.0))
        XCTAssertEqual(i1.left, CGFloat(0.0))
        XCTAssertEqual(i1.bottom, CGFloat(0.0))
        XCTAssertEqual(i1.right, CGFloat(0.0))

        let i2 = NSEdgeInsets(top: CGFloat(3.6), left: CGFloat(4.5), bottom: CGFloat(5.0), right: CGFloat(-1.0))
        XCTAssertEqual(i2.top, CGFloat(3.6))
        XCTAssertEqual(i2.left, CGFloat(4.5))
        XCTAssertEqual(i2.bottom, CGFloat(5.0))
        XCTAssertEqual(i2.right, CGFloat(-1.0))
    }

    func test_NSEdgeInsetsEqual() {
        let variant1 = NSEdgeInsets(top: CGFloat(3.6), left: CGFloat(4.5), bottom: CGFloat(5.0), right: CGFloat(-1.0))
        let variant1Copy = NSEdgeInsets(top: CGFloat(3.6), left: CGFloat(4.5), bottom: CGFloat(5.0), right: CGFloat(-1.0))
        let variant2 = NSEdgeInsets(top: CGFloat(3.1), left: CGFloat(4.5), bottom: CGFloat(5.0), right: CGFloat(-1.0))
        XCTAssertTrue(NSEdgeInsetsEqual(variant1, variant1Copy))
        XCTAssertFalse(NSEdgeInsetsEqual(variant1, variant2))
    }

    func test_NSMakePoint() {
        let p2 = NSMakePoint(CGFloat(3.6), CGFloat(4.5))
        XCTAssertEqual(p2.x, CGFloat(3.6))
        XCTAssertEqual(p2.y, CGFloat(4.5))
    }

    func test_NSMakeSize() {
        let s2 = NSMakeSize(CGFloat(3.6), CGFloat(4.5))
        XCTAssertEqual(s2.width, CGFloat(3.6))
        XCTAssertEqual(s2.height, CGFloat(4.5))
    }

    func test_NSMakeRect() {
        let r2 = NSMakeRect(CGFloat(2.2), CGFloat(3.0), CGFloat(5.0), CGFloat(5.0))
        XCTAssertEqual(r2.origin.x, CGFloat(2.2))
        XCTAssertEqual(r2.origin.y, CGFloat(3.0))
        XCTAssertEqual(r2.size.width, CGFloat(5.0))
        XCTAssertEqual(r2.size.height, CGFloat(5.0))
    }

    func test_NSEdgeInsetsMake() {
        let i2 = NSEdgeInsetsMake(CGFloat(2.2), CGFloat(3.0), CGFloat(5.0), CGFloat(5.0))
        XCTAssertEqual(i2.top, CGFloat(2.2))
        XCTAssertEqual(i2.left, CGFloat(3.0))
        XCTAssertEqual(i2.bottom, CGFloat(5.0))
        XCTAssertEqual(i2.right, CGFloat(5.0))
    }

    func test_NSUnionRect() {
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSMakeRect(CGFloat(10.2), CGFloat(2.5), CGFloat(5.0), CGFloat(5.0))

        XCTAssertTrue(NSIsEmptyRect(NSUnionRect(NSZeroRect, NSZeroRect)))
        XCTAssertTrue(NSEqualRects(r1, NSUnionRect(r1, NSZeroRect)))
        XCTAssertTrue(NSEqualRects(r2, NSUnionRect(NSZeroRect, r2)))

        let r3 = NSUnionRect(r1, r2)
        XCTAssertEqual(r3.origin.x, CGFloat(1.2))
        XCTAssertEqual(r3.origin.y, CGFloat(2.5))
        XCTAssertEqual(r3.size.width, CGFloat(14.0))
        XCTAssertEqual(r3.size.height, CGFloat(10.6))
    }

    func test_NSIntersectionRect() {
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSMakeRect(CGFloat(-2.3), CGFloat(-1.5), CGFloat(1.0), CGFloat(1.0))
        let r3 = NSMakeRect(CGFloat(10.2), CGFloat(2.5), CGFloat(5.0), CGFloat(5.0))

        XCTAssertTrue(NSIsEmptyRect(NSIntersectionRect(r1, r2)))

        let r4 = NSIntersectionRect(r1, r3)
        XCTAssertEqual(r4.origin.x, CGFloat(10.2))
        XCTAssertEqual(r4.origin.y, CGFloat(3.1))
        XCTAssertEqual(r4.size.width, CGFloat(1.0))
        XCTAssertEqual(r4.size.height, CGFloat(4.4))
    }

    func test_NSOffsetRect() {
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSOffsetRect(r1, CGFloat(2.0), CGFloat(-5.0))
        let expectedRect = NSMakeRect(CGFloat(3.2), CGFloat(-1.9), CGFloat(10.0), CGFloat(10.0))
        
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: r2))
    }

    func test_NSPointInRect() {
        let p1 = NSMakePoint(CGFloat(2.2), CGFloat(5.3))
        let p2 = NSMakePoint(CGFloat(1.2), CGFloat(3.1))
        let p3 = NSMakePoint(CGFloat(1.2), CGFloat(5.3))
        let p4 = NSMakePoint(CGFloat(5.2), CGFloat(3.1))
        let p5 = NSMakePoint(CGFloat(11.2), CGFloat(13.1))
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSMakeRect(CGFloat(-2.3), CGFloat(-1.5), CGFloat(1.0), CGFloat(1.0))

        XCTAssertFalse(NSPointInRect(NSZeroPoint, NSZeroRect))
        XCTAssertFalse(NSPointInRect(p1, r2))
        XCTAssertTrue(NSPointInRect(p1, r1))
        XCTAssertTrue(NSPointInRect(p2, r1))
        XCTAssertTrue(NSPointInRect(p3, r1))
        XCTAssertTrue(NSPointInRect(p4, r1))
        XCTAssertFalse(NSPointInRect(p5, r1))
    }

    func test_NSMouseInRect() {
        let p1 = NSMakePoint(CGFloat(2.2), CGFloat(5.3))
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSMakeRect(CGFloat(-2.3), CGFloat(-1.5), CGFloat(1.0), CGFloat(1.0))

        XCTAssertFalse(NSMouseInRect(NSZeroPoint, NSZeroRect, true))
        XCTAssertFalse(NSMouseInRect(p1, r2, true))
        XCTAssertTrue(NSMouseInRect(p1, r1, true))

        let p2 = NSMakePoint(NSMinX(r1), NSMaxY(r1))
        XCTAssertFalse(NSMouseInRect(p2, r1, true))
        XCTAssertTrue(NSMouseInRect(p2, r1, false))

        let p3 = NSMakePoint(NSMinX(r1), NSMinY(r1))
        XCTAssertFalse(NSMouseInRect(p3, r1, false))
        XCTAssertTrue(NSMouseInRect(p3, r1, true))
    }

    func test_NSContainsRect() {
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSMakeRect(CGFloat(-2.3), CGFloat(-1.5), CGFloat(1.0), CGFloat(1.0))
        let r3 = NSMakeRect(CGFloat(10.2), CGFloat(5.5), CGFloat(0.5), CGFloat(5.0))

        XCTAssertFalse(NSContainsRect(r1, NSZeroRect))
        XCTAssertFalse(NSContainsRect(r1, r2))
        XCTAssertFalse(NSContainsRect(r2, r1))
        XCTAssertTrue(NSContainsRect(r1, r3))
    }

    func test_NSIntersectsRect() {
        let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
        let r2 = NSMakeRect(CGFloat(-2.3), CGFloat(-1.5), CGFloat(1.0), CGFloat(1.0))
        let r3 = NSMakeRect(CGFloat(10.2), CGFloat(2.5), CGFloat(5.0), CGFloat(5.0))

        XCTAssertFalse(NSIntersectsRect(NSZeroRect, NSZeroRect))
        XCTAssertFalse(NSIntersectsRect(r1, NSZeroRect))
        XCTAssertFalse(NSIntersectsRect(NSZeroRect, r2))
        XCTAssertFalse(NSIntersectsRect(r1, r2))
        XCTAssertTrue(NSIntersectsRect(r1, r3))
    }

    func test_NSIntegralRect() {
        let referenceNegativeRect = NSMakeRect(CGFloat(-0.6), CGFloat(-5.4), CGFloat(-105.7), CGFloat(-24.3))
        XCTAssertEqual(NSIntegralRect(referenceNegativeRect), NSZeroRect)

        
        let referenceRect = NSMakeRect(CGFloat(0.6), CGFloat(5.4), CGFloat(105.7), CGFloat(24.3))
        let referenceNegativeOriginRect = NSMakeRect(CGFloat(-0.6), CGFloat(-5.4), CGFloat(105.7), CGFloat(24.3))
        
        var expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(5.0), CGFloat(107.0), CGFloat(25.0))
        var result = NSIntegralRect(referenceRect)
        XCTAssertEqual(result, expectedResult)

        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-6.0), CGFloat(107.0), CGFloat(25.0))
        result = NSIntegralRect(referenceNegativeOriginRect)
        XCTAssertEqual(result, expectedResult)
    
    }
    
    func test_NSIntegralRectWithOptions() {
        let referenceRect = NSMakeRect(CGFloat(0.6), CGFloat(5.4), CGFloat(105.7), CGFloat(24.3))
        let referenceNegativeRect = NSMakeRect(CGFloat(-0.6), CGFloat(-5.4), CGFloat(-105.7), CGFloat(-24.3))
        let referenceNegativeOriginRect = NSMakeRect(CGFloat(-0.6), CGFloat(-5.4), CGFloat(105.7), CGFloat(24.3))

        var options: AlignmentOptions = [.alignMinXInward, .alignMinYInward, .alignHeightInward, .alignWidthInward]
        var expectedResult = NSMakeRect(CGFloat(1.0), CGFloat(6.0), CGFloat(105.0), CGFloat(24.0))
        var result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXOutward, .alignMinYOutward, .alignHeightOutward, .alignWidthOutward]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(5.0), CGFloat(106.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXInward, .alignMinYInward, .alignHeightInward, .alignWidthInward]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(0.0), CGFloat(0.0))
        result = NSIntegralRectWithOptions(referenceNegativeRect, options)
        XCTAssertEqual(result, expectedResult)
        
        options = [.alignMinXInward, .alignMinYInward, .alignHeightInward, .alignWidthInward]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(105.0), CGFloat(24.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXOutward, .alignMinYOutward, .alignHeightOutward, .alignWidthOutward]
        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-6.0), CGFloat(106.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMaxXOutward, .alignMaxYOutward, .alignHeightOutward, .alignWidthOutward]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(-6.0), CGFloat(106.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXOutward, .alignMaxXOutward, .alignMinYOutward, .alignMaxYOutward]
        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-6.0), CGFloat(107.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMaxXOutward, .alignMaxYOutward, .alignHeightOutward, .alignWidthOutward]
        expectedResult = NSMakeRect(CGFloat(1.0), CGFloat(5.0), CGFloat(106.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMaxXInward, .alignMaxYInward, .alignHeightOutward, .alignWidthOutward]
        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-7.0), CGFloat(106.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMaxXInward, .alignMaxYInward, .alignHeightOutward, .alignWidthOutward]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(4.0), CGFloat(106.0), CGFloat(25.0))
        result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXNearest, .alignMinYNearest, .alignHeightNearest, .alignWidthNearest]
        expectedResult = NSMakeRect(CGFloat(1.0), CGFloat(5.0), CGFloat(106.0), CGFloat(24.0))
        result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)
        
        options = [.alignMinXNearest, .alignMinYNearest, .alignHeightNearest, .alignWidthNearest]
        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-5.0), CGFloat(106.0), CGFloat(24.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMaxXNearest, .alignMaxYNearest, .alignHeightNearest, .alignWidthNearest]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(6.0), CGFloat(106.0), CGFloat(24.0))
        result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)
        
        options = [.alignMaxXNearest, .alignMaxYNearest, .alignHeightNearest, .alignWidthNearest]
        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-5.0), CGFloat(106.0), CGFloat(24.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXInward, .alignMaxXInward, .alignMinYInward, .alignMaxYInward]
        expectedResult = NSMakeRect(CGFloat(1.0), CGFloat(6.0), CGFloat(105.0), CGFloat(23.0))
        result = NSIntegralRectWithOptions(referenceRect, options)
        XCTAssertEqual(result, expectedResult)
        
        options = [.alignMinXInward, .alignMaxXInward, .alignMinYInward, .alignMaxYInward]
        expectedResult = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(105.0), CGFloat(23.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)

        options = [.alignMinXNearest, .alignMaxXInward, .alignMinYInward, .alignMaxYNearest]
        expectedResult = NSMakeRect(CGFloat(-1.0), CGFloat(-5.0), CGFloat(106.0), CGFloat(24.0))
        result = NSIntegralRectWithOptions(referenceNegativeOriginRect, options)
        XCTAssertEqual(result, expectedResult)
    }

    func test_NSDivideRect() {

        // divide empty rect
        var inRect = NSZeroRect
        var slice = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        var remainder = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        NSDivideRect(inRect, &slice, &remainder, CGFloat(0.0), .maxX)
        var expectedSlice = NSZeroRect
        var expectedRemainder = NSZeroRect
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MinX edge
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, CGFloat(10.0), .minX)
        expectedSlice = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(10.0), CGFloat(35.0))
        expectedRemainder = NSMakeRect(CGFloat(10.0), CGFloat(-5.0), CGFloat(15.0), CGFloat(35.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MinX edge with amount > width
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, NSWidth(inRect) + CGFloat(1.0), .minX)
        expectedSlice = inRect
        expectedRemainder = NSMakeRect(CGFloat(25.0), CGFloat(-5.0), CGFloat(0.0), CGFloat(35.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MinY edge
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, CGFloat(10.0), .minY)
        expectedSlice = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(10.0))
        expectedRemainder = NSMakeRect(CGFloat(0.0), CGFloat(5.0), CGFloat(25.0), CGFloat(25.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MinY edge with amount > height
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, NSHeight(inRect) + CGFloat(1.0), .minY)
        expectedSlice = inRect
        expectedRemainder = NSMakeRect(CGFloat(0.0), CGFloat(30.0), CGFloat(25.0), CGFloat(0.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MaxX edge
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, CGFloat(10.0), .maxX)
        expectedSlice = NSMakeRect(CGFloat(15.0), CGFloat(-5.0), CGFloat(10.0), CGFloat(35.0))
        expectedRemainder = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(15.0), CGFloat(35.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MaxX edge with amount > width
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, NSWidth(inRect) + CGFloat(1.0), .maxX)
        expectedSlice = inRect
        expectedRemainder = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(0.0), CGFloat(35.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MaxY edge
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, CGFloat(10.0), .maxY)
        expectedSlice = NSMakeRect(CGFloat(0.0), CGFloat(20.0), CGFloat(25.0), CGFloat(10.0))
        expectedRemainder = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(25.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)

        // divide rect by MaxY edge with amount > height
        inRect = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(35.0))
        slice = NSZeroRect
        remainder = NSZeroRect
        NSDivideRect(inRect, &slice, &remainder, NSHeight(inRect) + CGFloat(1.0), .maxY)
        expectedSlice = inRect
        expectedRemainder = NSMakeRect(CGFloat(0.0), CGFloat(-5.0), CGFloat(25.0), CGFloat(0.0))
        XCTAssertEqual(slice, expectedSlice)
        XCTAssertEqual(remainder, expectedRemainder)
    }
    
    func test_EncodeToNSString() {
        let referenceRect = NSMakeRect(CGFloat(0.6), CGFloat(5.4), CGFloat(105.7), CGFloat(24.3))
        
        var expectedString = "{0.6, 5.4}"
        var string = NSStringFromPoint(referenceRect.origin)
        XCTAssertEqual(expectedString, string,
                       "\(string) is not equal to expected \(expectedString)")
        
        expectedString = "{105.7, 24.3}"
        string = NSStringFromSize(referenceRect.size)
        XCTAssertEqual(expectedString, string,
                       "\(string) is not equal to expected \(expectedString)")
        
        expectedString = "{{0.6, 5.4}, {105.7, 24.3}}"
        string = NSStringFromRect(referenceRect)
        XCTAssertEqual(expectedString, string,
                       "\(string) is not equal to expected \(expectedString)")
    }
    
    func test_EncodeNegativeToNSString() {
        let referenceNegativeRect = NSMakeRect(CGFloat(-0.6), CGFloat(-5.4), CGFloat(-105.7), CGFloat(-24.3))
        
        var expectedString = "{-0.6, -5.4}"
        var string = NSStringFromPoint(referenceNegativeRect.origin)
        XCTAssertEqual(expectedString, string,
                       "\(string) is not equal to expected \(expectedString)")
        
        expectedString = "{-105.7, -24.3}"
        string = NSStringFromSize(referenceNegativeRect.size)
        XCTAssertEqual(expectedString, string,
                       "\(string) is not equal to expected \(expectedString)")
        
        expectedString = "{{-0.6, -5.4}, {-105.7, -24.3}}"
        string = NSStringFromRect(referenceNegativeRect)
        XCTAssertEqual(expectedString, string,
                       "\(string) is not equal to expected \(expectedString)")
    }
    
    func test_DecodeFromNSString() {
        var stringPoint = "{0.6, 5.4}"
        var stringSize = "{105.7, 24.3}"
        var stringRect = "{{0.6, 5.4}, {105.7, 24.3}}"
        
        let expectedPoint = NSMakePoint(CGFloat(0.6), CGFloat(5.4))
        var point = NSPointFromString(stringPoint)
        XCTAssertTrue(_NSPoint(expectedPoint, equalsToPoint: point),
                       "\(NSStringFromPoint(point)) is not equal to expected \(NSStringFromPoint(expectedPoint))")
        
        let expectedSize = NSMakeSize(CGFloat(105.7), CGFloat(24.3))
        var size = NSSizeFromString(stringSize)
        XCTAssertTrue(_NSSize(expectedSize, equalsToSize: size),
                       "\(NSStringFromSize(size)) is not equal to expected \(NSStringFromSize(expectedSize))")
        
        let expectedRect = NSMakeRect(CGFloat(0.6), CGFloat(5.4), CGFloat(105.7), CGFloat(24.3))
        var rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")
        
        // No spaces
        stringPoint = "{0.6,5.4}"
        stringSize = "{105.7,24.3}"
        stringRect = "{{0.6,5.4},{105.7,24.3}}"
        
        point = NSPointFromString(stringPoint)
        XCTAssertTrue(_NSPoint(expectedPoint, equalsToPoint: point),
                       "\(NSStringFromPoint(point)) is not equal to expected \(NSStringFromPoint(expectedPoint))")
        
        size = NSSizeFromString(stringSize)
        XCTAssertTrue(_NSSize(expectedSize, equalsToSize: size),
                       "\(NSStringFromSize(size)) is not equal to expected \(NSStringFromSize(expectedSize))")
        
        rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")
        
        // Random spaces
        stringPoint = "{  0.6   , 5.4   }"
        stringSize = "{ 105.7, 24.3       }"
        stringRect = "{{0.6 , 5.4}   ,{105.7 ,24.3}}"
        
        point = NSPointFromString(stringPoint)
        XCTAssertTrue(_NSPoint(expectedPoint, equalsToPoint: point),
                       "\(NSStringFromPoint(point)) is not equal to expected \(NSStringFromPoint(expectedPoint))")
        
        size = NSSizeFromString(stringSize)
        XCTAssertTrue(_NSSize(expectedSize, equalsToSize: size),
                       "\(NSStringFromSize(size)) is not equal to expected \(NSStringFromSize(expectedSize))")
        
        rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")
    
    }
    
    func test_DecodeEmptyStrings() {
        let stringPoint = ""
        let stringSize = ""
        let stringRect = ""
        
        let expectedPoint = NSZeroPoint
        let point = NSPointFromString(stringPoint)
        XCTAssertTrue(_NSPoint(expectedPoint, equalsToPoint: point),
                       "\(NSStringFromPoint(point)) is not equal to expected \(NSStringFromPoint(expectedPoint))")

        let expectedSize = NSZeroSize
        let size = NSSizeFromString(stringSize)
        XCTAssertTrue(_NSSize(expectedSize, equalsToSize: size),
                       "\(NSStringFromSize(size)) is not equal to expected \(NSStringFromSize(expectedSize))")
        
        let expectedRect = NSZeroRect
        let rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")
    }
    
    func test_DecodeNegativeFromNSString() {
        let stringPoint = "{-0.6, -5.4}"
        let stringSize = "{-105.7, -24.3}"
        let stringRect = "{{-0.6, -5.4}, {-105.7, -24.3}}"
        
        let expectedPoint = NSMakePoint(CGFloat(-0.6), CGFloat(-5.4))
        let point = NSPointFromString(stringPoint)
        XCTAssertTrue(_NSPoint(expectedPoint, equalsToPoint: point),
            "\(NSStringFromPoint(point)) is not equal to expected \(NSStringFromPoint(expectedPoint))")
        
        let expectedSize = NSMakeSize(CGFloat(-105.7), CGFloat(-24.3))
        let size = NSSizeFromString(stringSize)
        XCTAssertTrue(_NSSize(expectedSize, equalsToSize: size),
                       "\(NSStringFromSize(size)) is not equal to expected \(NSStringFromSize(expectedSize))")
        
        let expectedRect = NSMakeRect(CGFloat(-0.6), CGFloat(-5.4), CGFloat(-105.7), CGFloat(-24.3))
        let rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")
        
    }
    
    func test_DecodeGarbageFromNSString() {
        var stringRect = "-0.6a5.4das-105.7bfh24.3dfas;hk312}}"
        var expectedRect = NSMakeRect(CGFloat(-0.6), CGFloat(5.4), CGFloat(-105.7), CGFloat(24.3))
        var rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")

        stringRect = "-0.6a5.4da}}"
        expectedRect = NSMakeRect(CGFloat(-0.6), CGFloat(5.4), CGFloat(0.0), CGFloat(0.0))
        rect = NSRectFromString(stringRect)
        XCTAssertTrue(_NSRect(expectedRect, equalsToRect: rect),
                       "\(NSStringFromRect(rect)) is not equal to expected \(NSStringFromRect(expectedRect))")

    }
    
    // MARK: Private
    
    func _NSRect(_ rect: NSRect, equalsToRect rect2: NSRect, withPrecision precision: CGFloat.NativeType = .ulpOfOne) -> Bool {
        return _NSPoint(rect.origin, equalsToPoint: rect2.origin, withPrecision: precision)
            && _NSSize(rect.size, equalsToSize: rect2.size, withPrecision: precision)
    }

    func _NSSize(_ size: NSSize, equalsToSize size2: NSSize, withPrecision precision: CGFloat.NativeType = .ulpOfOne) -> Bool {
        return _CGFloat(size.width, equalsToCGFloat: size2.width, withPrecision: precision)
            && _CGFloat(size.height, equalsToCGFloat: size2.height, withPrecision: precision)
    }

    func _NSPoint(_ point: NSPoint, equalsToPoint point2: NSPoint, withPrecision precision: CGFloat.NativeType = .ulpOfOne) -> Bool {
        return _CGFloat(point.x, equalsToCGFloat: point2.x, withPrecision: precision)
            && _CGFloat(point.y, equalsToCGFloat: point2.y, withPrecision: precision)
    }

    func _CGFloat(_ float: CGFloat, equalsToCGFloat float2: CGFloat, withPrecision precision: CGFloat.NativeType = .ulpOfOne) -> Bool {
        return fabs(float.native - float2.native) <= precision
    }

}
