Skip to content

Commit 9d52d4e

Browse files
committed
remove requirement that types be totally ordered in order to evaluate equality on them
1 parent 1dbb6fb commit 9d52d4e

File tree

4 files changed

+34
-22
lines changed

4 files changed

+34
-22
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
99
### Added
1010
- Environment variable to run a custom initiialization script during CI testing: `CUSTOM_INIT_SCRIPT`
1111
- Environment variable to run from a subdirectory during CI testing: `USE_SUBDIR`
12+
- `assertComparativeEqual()` and `assertComparativeNotEqual()` to evaluate equality on an `a - b == 0` basis (and/or `!(a > b) && !(a < b)`)
1213

1314
### Changed
1415
- Rubocop expected syntax downgraded from ruby 2.6 to 2.5
16+
- `assertEqual()` and `assertNotEqual()` use actual `==` and `!=` -- they no longer require a type to be totally ordered just to do equality tests
1517

1618
### Deprecated
1719

Diff for: REFERENCE.md

+13-9
Original file line numberDiff line numberDiff line change
@@ -208,15 +208,19 @@ This test defines one `unittest` (a macro provided by `ArduinoUnitTests.h`), cal
208208

209209
The following assertion functions are available in unit tests.
210210

211-
* `assertEqual(expected, actual)`
212-
* `assertNotEqual(expected, actual)`
213-
* `assertLess(expected, actual)`
214-
* `assertMore(expected, actual)`
215-
* `assertLessOrEqual(expected, actual)`
216-
* `assertMoreOrEqual(expected, actual)`
217-
* `assertTrue(actual)`
218-
* `assertFalse(actual)`
219-
* `assertNull(actual)`
211+
```c++
212+
assertEqual(expected, actual); // a == b
213+
assertNotEqual(unwanted, actual); // a != b
214+
assertComparativeEqual(expected, actual); // abs(a - b) == 0 or (!(a > b) && !(a < b))
215+
assertComparativeNotEqual(unwanted, actual); // abs(a - b) > 0 or ((a > b) || (a < b))
216+
assertLess(upperBound, actual); // a < b
217+
assertMore(lowerBound, actual); // a > b
218+
assertLessOrEqual(upperBound, actual); // a <= b
219+
assertMoreOrEqual(lowerBound, actual); // a >= b
220+
assertTrue(actual);
221+
assertFalse(actual);
222+
assertNull(actual);
223+
```
220224

221225
These functions will report the result of the test to the console, and the testing will continue if they fail.
222226

Diff for: cpp/unittest/Assertion.h

+16-13
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,29 @@
3030

3131

3232
/** macro generates optional output and calls fail() but does not return if false. */
33-
#define assertEqual(arg1,arg2) assertOp("assertEqual","expected",arg1,compareEqual,"==","actual",arg2)
34-
#define assertNotEqual(arg1,arg2) assertOp("assertNotEqual","unwanted",arg1,compareNotEqual,"!=","actual",arg2)
35-
#define assertLess(arg1,arg2) assertOp("assertLess","lowerBound",arg1,compareLess,"<","upperBound",arg2)
36-
#define assertMore(arg1,arg2) assertOp("assertMore","upperBound",arg1,compareMore,">","lowerBound",arg2)
37-
#define assertLessOrEqual(arg1,arg2) assertOp("assertLessOrEqual","lowerBound",arg1,compareLessOrEqual,"<=","upperBound",arg2)
38-
#define assertMoreOrEqual(arg1,arg2) assertOp("assertMoreOrEqual","upperBound",arg1,compareMoreOrEqual,">=","lowerBound",arg2)
33+
#define assertEqual(arg1,arg2) assertOp("assertEqual","expected",arg1,evaluateDoubleEqual,"==","actual",arg2)
34+
#define assertNotEqual(arg1,arg2) assertOp("assertNotEqual","unwanted",arg1,evaluateNotEqual,"!=","actual",arg2)
35+
#define assertComparativeEqual(arg1,arg2) assertOp("assertEqual","expected",arg1,compareEqual,"!<>","actual",arg2)
36+
#define assertComparativeNotEqual(arg1,arg2) assertOp("assertEqual","unwanted",arg1,compareNotEqual,"<>","actual",arg2)
37+
#define assertLess(arg1,arg2) assertOp("assertLess","lowerBound",arg1,compareLess,"<","upperBound",arg2)
38+
#define assertMore(arg1,arg2) assertOp("assertMore","upperBound",arg1,compareMore,">","lowerBound",arg2)
39+
#define assertLessOrEqual(arg1,arg2) assertOp("assertLessOrEqual","lowerBound",arg1,compareLessOrEqual,"<=","upperBound",arg2)
40+
#define assertMoreOrEqual(arg1,arg2) assertOp("assertMoreOrEqual","upperBound",arg1,compareMoreOrEqual,">=","lowerBound",arg2)
3941
#define assertTrue(arg) assertEqual(true, arg)
4042
#define assertFalse(arg) assertEqual(false, arg)
4143
#define assertNull(arg) assertEqual((void*)NULL, (void*)arg)
4244
#define assertNotNull(arg) assertNotEqual((void*)NULL, (void*)arg)
4345

4446
/** macro generates optional output and calls fail() followed by a return if false. */
45-
#define assureEqual(arg1,arg2) assureOp("assureEqual","expected",arg1,compareEqual,"==","actual",arg2)
46-
#define assureNotEqual(arg1,arg2) assureOp("assureNotEqual","unwanted",arg1,compareNotEqual,"!=","actual",arg2)
47-
#define assureLess(arg1,arg2) assureOp("assureLess","lowerBound",arg1,compareLess,"<","upperBound",arg2)
48-
#define assureMore(arg1,arg2) assureOp("assureMore","upperBound",arg1,compareMore,">","lowerBound",arg2)
49-
#define assureLessOrEqual(arg1,arg2) assureOp("assureLessOrEqual","lowerBound",arg1,compareLessOrEqual,"<=","upperBound",arg2)
50-
#define assureMoreOrEqual(arg1,arg2) assureOp("assureMoreOrEqual","upperBound",arg1,compareMoreOrEqual,">=","lowerBound",arg2)
47+
#define assureEqual(arg1,arg2) assureOp("assureEqual","expected",arg1,evaluateDoubleEqual,"==","actual",arg2)
48+
#define assureNotEqual(arg1,arg2) assureOp("assureNotEqual","unwanted",arg1,evaluateNotEqual,"!=","actual",arg2)
49+
#define assureComparativeEqual(arg1,arg2) assertOp("assureEqual","expected",arg1,compareEqual,"!<>","actual",arg2)
50+
#define assureComparativeNotEqual(arg1,arg2) assertOp("assertEqual","unwanted",arg1,compareNotEqual,"<>","actual",arg2)
51+
#define assureLess(arg1,arg2) assureOp("assureLess","lowerBound",arg1,compareLess,"<","upperBound",arg2)
52+
#define assureMore(arg1,arg2) assureOp("assureMore","upperBound",arg1,compareMore,">","lowerBound",arg2)
53+
#define assureLessOrEqual(arg1,arg2) assureOp("assureLessOrEqual","lowerBound",arg1,compareLessOrEqual,"<=","upperBound",arg2)
54+
#define assureMoreOrEqual(arg1,arg2) assureOp("assureMoreOrEqual","upperBound",arg1,compareMoreOrEqual,">=","lowerBound",arg2)
5155
#define assureTrue(arg) assureEqual(true, arg)
5256
#define assureFalse(arg) assureEqual(false, arg)
5357
#define assureNull(arg) assureEqual((void*)NULL, (void*)arg)
5458
#define assureNotNull(arg) assureNotEqual((void*)NULL, (void*)arg)
55-

Diff for: cpp/unittest/Compare.h

+3
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,6 @@ template <typename A, typename B> bool compareLess( const A &a, const B &b
110110
template <typename A, typename B> bool compareMore( const A &a, const B &b) { return Compare<A, B>::more( a, b); }
111111
template <typename A, typename B> bool compareLessOrEqual(const A &a, const B &b) { return Compare<A, B>::lessOrEqual(a, b); }
112112
template <typename A, typename B> bool compareMoreOrEqual(const A &a, const B &b) { return Compare<A, B>::moreOrEqual(a, b); }
113+
114+
template <typename A, typename B> bool evaluateDoubleEqual(const A &a, const B &b) { return a == b; }
115+
template <typename A, typename B> bool evaluateNotEqual( const A &a, const B &b) { return a != b; }

0 commit comments

Comments
 (0)