From 12d4d14388c23c17709eac3e0b83d1636dc24469 Mon Sep 17 00:00:00 2001 From: mvandervoord Date: Sun, 18 Apr 2010 23:25:32 +0000 Subject: [PATCH] - fixed floating point comparison git-svn-id: http://unity.svn.sourceforge.net/svnroot/unity/trunk@69 e7d17a6e-8845-0410-bbbc-c8efb4fdad7e --- src/unity.c | 7 ++-- test/testunity.c | 87 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 88 insertions(+), 6 deletions(-) diff --git a/src/unity.c b/src/unity.c index ef0b109..a8c8545 100644 --- a/src/unity.c +++ b/src/unity.c @@ -334,7 +334,7 @@ void UnityAssertEqualFloatArray(const _UF* expected, _UU32 elements = num_elements; const _UF* ptr_expected = expected; const _UF* ptr_actual = actual; - _UF diff; + _UF diff, tol; if (elements == 0) { @@ -349,7 +349,10 @@ void UnityAssertEqualFloatArray(const _UF* expected, diff = *ptr_expected - *ptr_actual; if (diff < 0.0) diff = 0.0 - diff; - if (diff > (UNITY_FLOAT_PRECISION * *ptr_expected)) + tol = UNITY_FLOAT_PRECISION * *ptr_expected; + if (tol < 0.0) + tol = 0.0 - tol; + if (diff > tol) { UnityTestResultsFailBegin(lineNumber); UnityPrint(UnityStrElement); diff --git a/test/testunity.c b/test/testunity.c index 5afe07f..d340346 100644 --- a/test/testunity.c +++ b/test/testunity.c @@ -623,6 +623,34 @@ void testFloatsNotEqual(void) VERIFY_FAILURE_WAS_CAUGHT } +void testFloatsNotEqualNegative1(void) +{ + int failed; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(-9273.9649f, -9273.0049f); + EXPECT_ABORT_END + + failed = Unity.CurrentTestFailed; + Unity.CurrentTestFailed = 0; + + VERIFY_FAILURE_WAS_CAUGHT +} + +void testFloatsNotEqualNegative2(void) +{ + int failed; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(-9273.0049f, -9273.9649f); + EXPECT_ABORT_END + + failed = Unity.CurrentTestFailed; + Unity.CurrentTestFailed = 0; + + VERIFY_FAILURE_WAS_CAUGHT +} + void testIntsWithinDelta(void) { TEST_ASSERT_INT_WITHIN(1, 5000, 5001); @@ -1252,10 +1280,10 @@ void testNotEqualHEX8Arrays3(void) void testEqualFloatArrays(void) { - float p0[] = {1.0, 8.0, 25.4, 0.123}; - float p1[] = {1.0, 8.0, 25.4, 0.123}; - float p2[] = {1.0, 8.0, 25.4, 0.2}; - float p3[] = {1.0, 23.0, 25.0, 0.26}; + float p0[] = {1.0, -8.0, 25.4, -0.123}; + float p1[] = {1.0, -8.0, 25.4, -0.123}; + float p2[] = {1.0, -8.0, 25.4, -0.2}; + float p3[] = {1.0, -23.0, 25.0, -0.26}; TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p0, 1); TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p0, 4); @@ -1315,6 +1343,57 @@ void testNotEqualFloatArrays3(void) VERIFY_FAILURE_WAS_CAUGHT } +void testNotEqualFloatArraysNegative1(void) +{ + float p0[] = {-1.0, -8.0, -25.4, -0.253}; + float p1[] = {-1.0, -8.0, -25.4, -0.252}; + + int failed; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + EXPECT_ABORT_END + + failed = Unity.CurrentTestFailed; + Unity.CurrentTestFailed = 0; + + VERIFY_FAILURE_WAS_CAUGHT +} + +void testNotEqualFloatArraysNegative2(void) +{ + float p0[] = {-1.0, -8.0, -25.4, -0.253}; + float p1[] = {-2.0, -8.0, -25.4, -0.253}; + + int failed; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + EXPECT_ABORT_END + + failed = Unity.CurrentTestFailed; + Unity.CurrentTestFailed = 0; + + VERIFY_FAILURE_WAS_CAUGHT +} + +void testNotEqualFloatArraysNegative3(void) +{ + float p0[] = {-1.0, -8.0, -25.4, -0.253}; + float p1[] = {-1.0, -8.0, -25.5, -0.253}; + + int failed; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + EXPECT_ABORT_END + + failed = Unity.CurrentTestFailed; + Unity.CurrentTestFailed = 0; + + VERIFY_FAILURE_WAS_CAUGHT +} + void testEqualMemoryArrays(void) { int p0[] = {1, 8, 987, -2};