| // |
| // GTMGeometryUtilsTest.m |
| // |
| // Copyright 2006-2008 Google Inc. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| // use this file except in compliance with the License. You may obtain a copy |
| // of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| // License for the specific language governing permissions and limitations under |
| // the License. |
| // |
| |
| #import "GTMSenTestCase.h" |
| #import "GTMGeometryUtils.h" |
| |
| @interface GTMGeometryUtilsTest : GTMTestCase |
| @end |
| |
| @implementation GTMGeometryUtilsTest |
| |
| #if !GTM_IPHONE_SDK |
| - (void)testGTMNSRectToCGRect { |
| NSRect nsRect = NSMakeRect(4.6,3.2,22.1,45.0); |
| CGRect cgRect = GTMNSRectToCGRect(nsRect); |
| XCTAssertTrue(CGRectEqualToRect(cgRect, *(CGRect*)&nsRect)); |
| } |
| |
| - (void)testGTMNSSizeToCGSize { |
| NSSize nsSize = {22,15}; |
| CGSize cgSize = GTMNSSizeToCGSize(nsSize); |
| XCTAssertTrue(CGSizeEqualToSize(cgSize, *(CGSize*)&nsSize)); |
| } |
| |
| - (void)testGTMNSPointsOnRect { |
| NSRect rect = NSMakeRect(0, 0, 2, 2); |
| |
| NSPoint point = GTMNSMidMinX(rect); |
| XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 0.0, 0.01); |
| |
| point = GTMNSMidMaxX(rect); |
| XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 2.0, 0.01); |
| |
| point = GTMNSMidMaxY(rect); |
| XCTAssertEqualWithAccuracy(point.y, 2.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); |
| |
| point = GTMNSMidMinY(rect); |
| XCTAssertEqualWithAccuracy(point.y, 0.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); |
| |
| point = GTMNSCenter(rect); |
| XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); |
| } |
| |
| - (void)testGTMNSRectSize { |
| NSSize nsSize = GTMNSRectSize(NSMakeRect(1, 1, 10, 5)); |
| XCTAssertEqualWithAccuracy(nsSize.width, 10.0, 0.01); |
| XCTAssertEqualWithAccuracy(nsSize.height, 5.0, 0.01); |
| } |
| |
| - (void)testGTMNSRectOfSize { |
| NSRect outRect = GTMNSRectOfSize(NSMakeSize(10, 5)); |
| NSRect expectedRect = NSMakeRect(0, 0, 10, 5); |
| XCTAssertTrue(NSEqualRects(outRect, expectedRect)); |
| } |
| |
| - (void)testGTMNSAlignRectangles { |
| typedef struct { |
| NSPoint expectedOrigin; |
| GTMRectAlignment alignment; |
| } TestData; |
| |
| TestData data[] = { |
| { {1,2}, GTMRectAlignTop }, |
| { {0,2}, GTMRectAlignTopLeft }, |
| { {2,2}, GTMRectAlignTopRight }, |
| { {0,1}, GTMRectAlignLeft }, |
| { {1,0}, GTMRectAlignBottom }, |
| { {0,0}, GTMRectAlignBottomLeft }, |
| { {2,0}, GTMRectAlignBottomRight }, |
| { {2,1}, GTMRectAlignRight }, |
| { {1,1}, GTMRectAlignCenter }, |
| }; |
| |
| NSRect rect1 = NSMakeRect(0, 0, 4, 4); |
| NSRect rect2 = NSMakeRect(0, 0, 2, 2); |
| |
| NSRect expectedRect; |
| expectedRect.size = NSMakeSize(2, 2); |
| |
| for (size_t i = 0; i < sizeof(data) / sizeof(TestData); i++) { |
| expectedRect.origin = data[i].expectedOrigin; |
| NSRect outRect = GTMNSAlignRectangles(rect2, rect1, data[i].alignment); |
| XCTAssertTrue(NSEqualRects(outRect, expectedRect)); |
| } |
| } |
| |
| - (void)testGTMNSScaleRectangleToSize { |
| NSRect rect = NSMakeRect(0.0f, 0.0f, 10.0f, 10.0f); |
| typedef struct { |
| NSSize size_; |
| NSSize newSize_; |
| } Test; |
| Test tests[] = { |
| { { 5.0, 10.0 }, { 5.0, 5.0 } }, |
| { { 10.0, 5.0 }, { 5.0, 5.0 } }, |
| { { 10.0, 10.0 }, { 10.0, 10.0 } }, |
| { { 11.0, 11.0, }, { 10.0, 10.0 } }, |
| { { 5.0, 2.0 }, { 2.0, 2.0 } }, |
| { { 2.0, 5.0 }, { 2.0, 2.0 } }, |
| { { 2.0, 2.0 }, { 2.0, 2.0 } }, |
| { { 0.0, 10.0 }, { 0.0, 0.0 } } |
| }; |
| |
| for (size_t i = 0; i < sizeof(tests) / sizeof(Test); ++i) { |
| NSRect result = GTMNSScaleRectangleToSize(rect, tests[i].size_, |
| GTMScaleProportionally); |
| XCTAssertTrue(NSEqualRects(result, GTMNSRectOfSize(tests[i].newSize_)), |
| @"failed on test %zu", i); |
| } |
| |
| NSRect result = GTMNSScaleRectangleToSize(NSZeroRect, tests[0].size_, |
| GTMScaleProportionally); |
| XCTAssertTrue(NSEqualRects(result, NSZeroRect)); |
| |
| result = GTMNSScaleRectangleToSize(rect, tests[0].size_, |
| GTMScaleToFit); |
| XCTAssertTrue(NSEqualRects(result, GTMNSRectOfSize(tests[0].size_))); |
| |
| result = GTMNSScaleRectangleToSize(rect, tests[0].size_, |
| GTMScaleNone); |
| XCTAssertTrue(NSEqualRects(result, rect)); |
| } |
| |
| |
| - (void)testGTMNSScaleRectToRect { |
| typedef struct { |
| NSRect expectedRect; |
| GTMScaling scaling; |
| GTMRectAlignment alignment; |
| } TestData; |
| |
| NSRect rect1 = NSMakeRect(0, 0, 4, 4); |
| NSRect rect2 = NSMakeRect(0, 0, 2, 1); |
| |
| TestData data[] = { |
| { NSMakeRect(2, 3, 2, 1), GTMScaleToFillProportionally, GTMRectAlignTopRight }, |
| { NSMakeRect(0, 0, 4, 4), GTMScaleToFit, GTMRectAlignCenter }, |
| { NSMakeRect(1, 1.5, 2, 1), GTMScaleNone, GTMRectAlignCenter }, |
| { NSMakeRect(1, 0, 2, 1), GTMScaleProportionally, GTMRectAlignBottom }, |
| }; |
| |
| for (size_t i = 0; i < sizeof(data) / sizeof(TestData); i++) { |
| NSRect outRect = GTMNSScaleRectToRect(rect2, rect1, data[i].scaling, data[i].alignment); |
| XCTAssertTrue(NSEqualRects(outRect, data[i].expectedRect)); |
| } |
| } |
| |
| |
| - (void)testGTMNSDistanceBetweenPoints { |
| NSPoint pt1 = NSMakePoint(0, 0); |
| NSPoint pt2 = NSMakePoint(3, 4); |
| XCTAssertEqualWithAccuracy(GTMNSDistanceBetweenPoints(pt1, pt2), 5.0, 0.01); |
| XCTAssertEqualWithAccuracy(GTMNSDistanceBetweenPoints(pt2, pt1), 5.0, 0.01); |
| pt1 = NSMakePoint(1, 1); |
| pt2 = NSMakePoint(1, 1); |
| XCTAssertEqualWithAccuracy(GTMNSDistanceBetweenPoints(pt1, pt2), 0.0, 0.01); |
| } |
| |
| - (void)testGTMNSRectScaling { |
| NSRect rect = NSMakeRect(1.0f, 2.0f, 5.0f, 10.0f); |
| NSRect rect2 = NSMakeRect(1.0, 2.0, 1.0, 12.0); |
| XCTAssertTrue(NSEqualRects(GTMNSRectScale(rect, 0.2, 1.2), rect2)); |
| } |
| |
| #endif // !GTM_IPHONE_SDK |
| |
| - (void)testGTMCGDistanceBetweenPoints { |
| CGPoint pt1 = CGPointMake(0, 0); |
| CGPoint pt2 = CGPointMake(3, 4); |
| XCTAssertEqualWithAccuracy(GTMCGDistanceBetweenPoints(pt1, pt2), 5.0, 0.01); |
| XCTAssertEqualWithAccuracy(GTMCGDistanceBetweenPoints(pt2, pt1), 5.0, 0.01); |
| pt1 = CGPointMake(1, 1); |
| pt2 = CGPointMake(1, 1); |
| XCTAssertEqualWithAccuracy(GTMCGDistanceBetweenPoints(pt1, pt2), 0.0, 0.01); |
| } |
| |
| - (void)testGTMCGAlignRectangles { |
| typedef struct { |
| CGPoint expectedOrigin; |
| GTMRectAlignment alignment; |
| } TestData; |
| |
| TestData data[] = { |
| { {1,2}, GTMRectAlignTop }, |
| { {0,2}, GTMRectAlignTopLeft }, |
| { {2,2}, GTMRectAlignTopRight }, |
| { {0,1}, GTMRectAlignLeft }, |
| { {1,0}, GTMRectAlignBottom }, |
| { {0,0}, GTMRectAlignBottomLeft }, |
| { {2,0}, GTMRectAlignBottomRight }, |
| { {2,1}, GTMRectAlignRight }, |
| { {1,1}, GTMRectAlignCenter }, |
| }; |
| |
| CGRect rect1 = CGRectMake(0, 0, 4, 4); |
| CGRect rect2 = CGRectMake(0, 0, 2, 2); |
| |
| CGRect expectedRect; |
| expectedRect.size = CGSizeMake(2, 2); |
| |
| for (size_t i = 0; i < sizeof(data) / sizeof(TestData); i++) { |
| expectedRect.origin = data[i].expectedOrigin; |
| CGRect outRect = GTMCGAlignRectangles(rect2, rect1, data[i].alignment); |
| XCTAssertTrue(CGRectEqualToRect(outRect, expectedRect)); |
| } |
| } |
| |
| - (void)testGTMCGPointsOnRect { |
| CGRect rect = CGRectMake(0, 0, 2, 2); |
| |
| CGPoint point = GTMCGMidMinX(rect); |
| XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 0.0, 0.01); |
| |
| point = GTMCGMidMaxX(rect); |
| XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 2.0, 0.01); |
| |
| point = GTMCGMidMaxY(rect); |
| XCTAssertEqualWithAccuracy(point.y, 2.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); |
| |
| point = GTMCGMidMinY(rect); |
| XCTAssertEqualWithAccuracy(point.y, 0.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); |
| |
| point = GTMCGCenter(rect); |
| XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); |
| XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); |
| } |
| |
| - (void)testGTMCGRectSize { |
| CGSize cgSize = GTMCGRectSize(CGRectMake(1, 1, 10, 5)); |
| XCTAssertEqualWithAccuracy(cgSize.width, 10.0, 0.01); |
| XCTAssertEqualWithAccuracy(cgSize.height, 5.0, 0.01); |
| } |
| |
| - (void)testGTMCGRectOfSize { |
| CGRect outRect = GTMCGRectOfSize(CGSizeMake(10, 5)); |
| CGRect expectedRect = CGRectMake(0, 0, 10, 5); |
| XCTAssertTrue(CGRectEqualToRect(outRect, expectedRect)); |
| } |
| |
| - (void)testGTMCGRectScaling { |
| CGRect rect = CGRectMake(1.0f, 2.0f, 5.0f, 10.0f); |
| CGRect rect2 = CGRectMake(1.0, 2.0, 1.0, 12.0); |
| XCTAssertTrue(CGRectEqualToRect(GTMCGRectScale(rect, 0.2, 1.2), rect2)); |
| } |
| |
| - (void)testGTMCGScaleRectangleToSize { |
| CGRect rect = CGRectMake(0.0f, 0.0f, 10.0f, 10.0f); |
| typedef struct { |
| CGSize size_; |
| CGSize newSize_; |
| } Test; |
| Test tests[] = { |
| { { 5.0, 10.0 }, { 5.0, 5.0 } }, |
| { { 10.0, 5.0 }, { 5.0, 5.0 } }, |
| { { 10.0, 10.0 }, { 10.0, 10.0 } }, |
| { { 11.0, 11.0, }, { 10.0, 10.0 } }, |
| { { 5.0, 2.0 }, { 2.0, 2.0 } }, |
| { { 2.0, 5.0 }, { 2.0, 2.0 } }, |
| { { 2.0, 2.0 }, { 2.0, 2.0 } }, |
| { { 0.0, 10.0 }, { 0.0, 0.0 } } |
| }; |
| |
| for (size_t i = 0; i < sizeof(tests) / sizeof(Test); ++i) { |
| CGRect result = GTMCGScaleRectangleToSize(rect, tests[i].size_, |
| GTMScaleProportionally); |
| XCTAssertTrue(CGRectEqualToRect(result, GTMCGRectOfSize(tests[i].newSize_)), |
| @"failed on test %zu", i); |
| } |
| |
| CGRect result = GTMCGScaleRectangleToSize(CGRectZero, tests[0].size_, |
| GTMScaleProportionally); |
| XCTAssertTrue(CGRectEqualToRect(result, CGRectZero)); |
| |
| result = GTMCGScaleRectangleToSize(rect, tests[0].size_, |
| GTMScaleToFit); |
| XCTAssertTrue(CGRectEqualToRect(result, GTMCGRectOfSize(tests[0].size_))); |
| |
| result = GTMCGScaleRectangleToSize(rect, tests[0].size_, |
| GTMScaleNone); |
| XCTAssertTrue(CGRectEqualToRect(result, rect)); |
| } |
| |
| @end |