// 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
#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
    }

}
