Skip to content

Commit

Permalink
added test for beCloseTo matcher. beCloseToWithin now uses inclusive …
Browse files Browse the repository at this point in the history
…range.
  • Loading branch information
petejkim committed Jun 2, 2012
1 parent 70b8076 commit a886297
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 13 deletions.
6 changes: 6 additions & 0 deletions Expecta.xcodeproj/project.pbxproj
Expand Up @@ -183,6 +183,8 @@
E9D3DF13157A7EA30054978E /* EXPMatchers+raise.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D3DF11157A7EA30054978E /* EXPMatchers+raise.m */; };
E9D3DF15157A7EB40054978E /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = E9D3DF14157A7EB40054978E /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Public, ); }; };
E9D3DF16157A7EB40054978E /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = E9D3DF14157A7EB40054978E /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Public, ); }; };
E9D3DF1B157A8AC30054978E /* EXPMatchers+beCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D3DF1A157A8AC10054978E /* EXPMatchers+beCloseToTest.m */; };
E9D3DF1C157A8AC30054978E /* EXPMatchers+beCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D3DF1A157A8AC10054978E /* EXPMatchers+beCloseToTest.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -304,6 +306,7 @@
E9D3DF0D157A7B7E0054978E /* EXPMatchers+raiseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EXPMatchers+raiseTest.m"; sourceTree = "<group>"; };
E9D3DF11157A7EA30054978E /* EXPMatchers+raise.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EXPMatchers+raise.m"; sourceTree = "<group>"; };
E9D3DF14157A7EB40054978E /* EXPMatchers+raise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EXPMatchers+raise.h"; sourceTree = "<group>"; };
E9D3DF1A157A8AC10054978E /* EXPMatchers+beCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EXPMatchers+beCloseToTest.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -491,6 +494,7 @@
4913B4D01411E2DA00040ECB /* EXPMatchers+beGreaterThanOrEqualToTest.m */,
AE0E76FB13FF37D6009AF5D8 /* EXPMatchers+beLessThanTest.m */,
AEBA779414055CA2001690B6 /* EXPMatchers+beLessThanOrEqualToTest.m */,
E9D3DF1A157A8AC10054978E /* EXPMatchers+beCloseToTest.m */,
);
path = matchers;
sourceTree = "<group>";
Expand Down Expand Up @@ -827,6 +831,7 @@
A305756F1520C5B400DA19BD /* CustomMatcherImplementationsTest.m in Sources */,
A30575AB1520F61500DA19BD /* DynamicPredicateMatcherTest.m in Sources */,
E9D3DF0F157A7B7E0054978E /* EXPMatchers+raiseTest.m in Sources */,
E9D3DF1C157A8AC30054978E /* EXPMatchers+beCloseToTest.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -894,6 +899,7 @@
A305756E1520C5B200DA19BD /* CustomMatcherImplementationsTest.m in Sources */,
A30575A91520F5FE00DA19BD /* DynamicPredicateMatcherTest.m in Sources */,
E9D3DF0E157A7B7E0054978E /* EXPMatchers+raiseTest.m in Sources */,
E9D3DF1B157A8AC30054978E /* EXPMatchers+beCloseToTest.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
32 changes: 19 additions & 13 deletions src/matchers/EXPMatchers+beCloseTo.m
Expand Up @@ -2,36 +2,42 @@
#import "EXPMatcherHelpers.h"

EXPMatcherImplementationBegin(_beCloseToWithin, (id expected, id within)) {
prerequisite(^BOOL{
return [actual isKindOfClass:[NSNumber class]] &&
prerequisite(^BOOL{
return [actual isKindOfClass:[NSNumber class]] &&
[expected isKindOfClass:[NSNumber class]] &&
([within isKindOfClass:[NSNumber class]] || (within == nil));
});
});

match(^BOOL{
match(^BOOL{
double actualValue = [actual doubleValue];
double expectedValue = [expected doubleValue];

if (within != nil) {
double withinValue = [within doubleValue];
double lowerBound = expectedValue - withinValue;
double upperBound = expectedValue + withinValue;
return (actualValue > lowerBound) && (actualValue < upperBound);
return (actualValue >= lowerBound) && (actualValue <= upperBound);
} else {
double diff = fabs(actualValue - expectedValue);
actualValue = fabs(actualValue);
expectedValue = fabs(expectedValue);
double largest = (expectedValue > actualValue) ? expectedValue : actualValue;
return (diff <= largest * FLT_EPSILON);
}
});
});

failureMessageForTo(^NSString *{
return [NSString stringWithFormat:@"expected: %@ to be close to %@ within %@", EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
});
failureMessageForTo(^NSString *{
return [NSString stringWithFormat:
(within ? @"expected %@ to be close to %@ within %@"
: @"expected %@ to be close to %@"),
EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
});

failureMessageForNotTo(^NSString *{
return [NSString stringWithFormat:@"expected: %@ to be close to %@ within %@", EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
});
failureMessageForNotTo(^NSString *{
return [NSString stringWithFormat:
(within ? @"expected %@ not to be close to %@ within %@"
: @"expected %@ not to be close to %@"),
EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
});
}
EXPMatcherImplementationEnd
30 changes: 30 additions & 0 deletions test/matchers/EXPMatchers+beCloseToTest.m
@@ -0,0 +1,30 @@
#import "TestHelper.h"

@interface EXPMatchers_beCloseToTest : SenTestCase
@end

@implementation EXPMatchers_beCloseToTest

- (void)test_beCloseTo {
assertPass(test_expect(67329.234).to.beCloseTo(67329.242));
assertPass(test_expect(0.05).to.beCloseToWithin(0.04, 0.01));
assertPass(test_expect(0.04).to.beCloseToWithin(0.04, 0.01));
assertPass(test_expect(0.03).to.beCloseToWithin(0.04, 0.01));

assertFail(test_expect(0.1f).to.beCloseTo(0.2f), @"expected 0.1 to be close to 0.2");
assertFail(test_expect(0.061).to.beCloseToWithin(0.05, 0.01), @"expected 0.061 to be close to 0.05 within 0.01");
assertFail(test_expect(0.039).to.beCloseToWithin(0.05, 0.01), @"expected 0.039 to be close to 0.05 within 0.01");
}

- (void)test_notTo_beCloseTo {
assertFail(test_expect(67329.234).notTo.beCloseTo(67329.242), @"expected 67329.234 not to be close to 67329.242");
assertFail(test_expect(0.05).notTo.beCloseToWithin(0.04, 0.01), @"expected 0.05 not to be close to 0.04 within 0.01");
assertFail(test_expect(0.04).notTo.beCloseToWithin(0.04, 0.01), @"expected 0.04 not to be close to 0.04 within 0.01");
assertFail(test_expect(0.03).notTo.beCloseToWithin(0.04, 0.01), @"expected 0.03 not to be close to 0.04 within 0.01");

assertPass(test_expect(0.1f).notTo.beCloseTo(0.2f));
assertPass(test_expect(0.061).notTo.beCloseToWithin(0.05, 0.01));
assertPass(test_expect(0.039).notTo.beCloseToWithin(0.05, 0.01));
}

@end

0 comments on commit a886297

Please sign in to comment.