Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Unity
提交
a8bd7b5a
T
Third Party Unity
项目概览
OpenHarmony
/
Third Party Unity
大约 1 年 前同步成功
通知
34
Star
144
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Unity
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a8bd7b5a
编写于
7月 21, 2014
作者:
M
Mark VanderVoord
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
continue to streamline floating point support
上级
96155881
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
59 addition
and
79 deletion
+59
-79
src/unity.c
src/unity.c
+30
-73
src/unity_internals.h
src/unity_internals.h
+29
-6
未找到文件。
src/unity.c
浏览文件 @
a8bd7b5a
...
@@ -614,95 +614,52 @@ void UnityAssertFloatsWithin(const _UF delta,
...
@@ -614,95 +614,52 @@ void UnityAssertFloatsWithin(const _UF delta,
}
}
//-----------------------------------------------
//-----------------------------------------------
void
UnityAssertFloat
IsInf
(
const
_UF
actual
,
void
UnityAssertFloat
Special
(
const
_UF
actual
,
const
_U_SINT
should_be
,
const
char
*
msg
,
const
char
*
msg
,
const
UNITY_LINE_TYPE
lineNumber
,
const
UNITY_LINE_TYPE
lineNumber
)
const
UNITY_FLOAT_STYLE_T
style
)
{
{
UNITY_SKIP_EXECUTION
;
UNITY_SKIP_EXECUTION
;
// In Microsoft Visual C++ Express Edition 2008,
const
char
*
trait_names
[]
=
{
UnityStrInf
,
UnityStrNegInf
,
UnityStrNaN
};
// if ((1.0f / f_zero) != actual)
_U_SINT
should_be_trait
=
((
_U_SINT
)
style
&
1
);
// produces
_U_SINT
is_trait
=
!
should_be_trait
;
// error C2124: divide or mod by zero
_U_SINT
trait_index
=
style
>>
1
;
// As a workaround, place 0 into a variable.
_U_SINT
is_inf
=
((
1
.
0
f
/
f_zero
)
==
actual
)
?
1
:
0
;
if
(
is_inf
!=
should_be
)
{
UnityTestResultsFailBegin
(
lineNumber
);
UnityPrint
(
UnityStrExpected
);
if
(
!
should_be
)
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrInf
);
UnityPrint
(
UnityStrWas
);
#ifdef UNITY_FLOAT_VERBOSE
UnityPrintFloat
(
actual
);
#else
if
(
should_be
)
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrInf
);
#endif
UnityAddMsgIfSpecified
(
msg
);
UNITY_FAIL_AND_BAIL
;
}
}
//-----------------------------------------------
void
UnityAssertFloatIsNegInf
(
const
_UF
actual
,
const
_U_SINT
should_be
,
const
char
*
msg
,
const
UNITY_LINE_TYPE
lineNumber
)
{
UNITY_SKIP_EXECUTION
;
// The rationale for not using 1.0f/0.0f is given in UnityAssertFloatIsInf's body.
switch
(
style
)
_U_SINT
is_inf
=
((
-
1
.
0
f
/
f_zero
)
==
actual
)
?
1
:
0
;
if
(
is_inf
!=
should_be
)
{
{
UnityTestResultsFailBegin
(
lineNumber
);
//To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly
UnityPrint
(
UnityStrExpected
);
//We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise
if
(
!
should_be
)
case
UNITY_FLOAT_IS_INF
:
UnityPrint
(
UnityStrNot
);
case
UNITY_FLOAT_IS_NOT_INF
:
UnityPrint
(
UnityStrNegInf
);
is_trait
=
((
1
.
0
f
/
f_zero
)
==
actual
)
?
1
:
0
;
UnityPrint
(
UnityStrWas
);
break
;
#ifdef UNITY_FLOAT_VERBOSE
case
UNITY_FLOAT_IS_NEG_INF
:
UnityPrintFloat
(
actual
);
case
UNITY_FLOAT_IS_NOT_NEG_INF
:
#else
is_trait
=
((
-
1
.
0
f
/
f_zero
)
==
actual
)
?
1
:
0
;
if
(
should_be
)
break
;
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrNegInf
);
#endif
UnityAddMsgIfSpecified
(
msg
);
UNITY_FAIL_AND_BAIL
;
}
}
//-----------------------------------------------
//NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN.
void
UnityAssertFloatIsNaN
(
const
_UF
actual
,
case
UNITY_FLOAT_IS_NAN
:
const
_U_SINT
should_be
,
case
UNITY_FLOAT_IS_NOT_NAN
:
const
char
*
msg
,
is_trait
=
(
actual
==
actual
)
?
0
:
1
;
const
UNITY_LINE_TYPE
lineNumber
)
break
;
{
}
UNITY_SKIP_EXECUTION
;
//NaN is the only floating point value that does NOT
if
(
is_trait
!=
should_be_trait
)
//equal itself. Therefore if Actual == Actual, then it
//is NOT NaN.
_U_SINT
is_nan
=
(
actual
==
actual
)
?
0
:
1
;
if
(
is_nan
!=
should_be
)
{
{
UnityTestResultsFailBegin
(
lineNumber
);
UnityTestResultsFailBegin
(
lineNumber
);
UnityPrint
(
UnityStrExpected
);
UnityPrint
(
UnityStrExpected
);
if
(
!
should_be
)
if
(
!
should_be
_trait
)
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrNaN
);
UnityPrint
(
trait_names
[
trait_index
]
);
UnityPrint
(
UnityStrWas
);
UnityPrint
(
UnityStrWas
);
#ifdef UNITY_FLOAT_VERBOSE
#ifdef UNITY_FLOAT_VERBOSE
UnityPrintFloat
(
actual
);
UnityPrintFloat
(
actual
);
#else
#else
if
(
should_be
)
if
(
should_be
_trait
)
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrNot
);
UnityPrint
(
UnityStrNaN
);
UnityPrint
(
trait_names
[
trait_index
]
);
#endif
#endif
UnityAddMsgIfSpecified
(
msg
);
UnityAddMsgIfSpecified
(
msg
);
UNITY_FAIL_AND_BAIL
;
UNITY_FAIL_AND_BAIL
;
...
...
src/unity_internals.h
浏览文件 @
a8bd7b5a
...
@@ -329,6 +329,18 @@ typedef enum
...
@@ -329,6 +329,18 @@ typedef enum
UNITY_DISPLAY_STYLE_UNKNOWN
UNITY_DISPLAY_STYLE_UNKNOWN
}
UNITY_DISPLAY_STYLE_T
;
}
UNITY_DISPLAY_STYLE_T
;
#ifndef UNITY_EXCLUDE_FLOAT
typedef
enum
_UNITY_FLOAT_STYLE_T
{
UNITY_FLOAT_IS_NOT_INF
=
0
,
UNITY_FLOAT_IS_INF
,
UNITY_FLOAT_IS_NOT_NEG_INF
,
UNITY_FLOAT_IS_NEG_INF
,
UNITY_FLOAT_IS_NOT_NAN
,
UNITY_FLOAT_IS_NAN
,
}
UNITY_FLOAT_STYLE_T
;
#endif
struct
_Unity
struct
_Unity
{
{
const
char
*
TestFile
;
const
char
*
TestFile
;
...
@@ -437,6 +449,11 @@ void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
...
@@ -437,6 +449,11 @@ void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
const
char
*
msg
,
const
char
*
msg
,
const
UNITY_LINE_TYPE
lineNumber
);
const
UNITY_LINE_TYPE
lineNumber
);
void
UnityAssertFloatSpecial
(
const
_UF
actual
,
const
char
*
msg
,
const
UNITY_LINE_TYPE
lineNumber
,
const
UNITY_FLOAT_STYLE_T
style
);
void
UnityAssertFloatIsInf
(
const
_UF
actual
,
void
UnityAssertFloatIsInf
(
const
_UF
actual
,
const
_U_SINT
should_be
,
const
_U_SINT
should_be
,
const
char
*
msg
,
const
char
*
msg
,
...
@@ -552,16 +569,19 @@ void UnityAssertDoubleIsNaN(const _UD actual,
...
@@ -552,16 +569,19 @@ void UnityAssertDoubleIsNaN(const _UD actual,
#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
#else
#else
#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line)
#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line)
#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((_UF)(expected) * (_UF)UNITY_FLOAT_PRECISION, (_UF)expected, (_UF)actual, (UNITY_LINE_TYPE)line, message)
#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((_UF)(expected) * (_UF)UNITY_FLOAT_PRECISION, (_UF)expected, (_UF)actual, (UNITY_LINE_TYPE)line, message)
#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloat
IsInf((_UF)(actual), 1, (message), (UNITY_LINE_TYPE)line
)
#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloat
Special((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloat
IsNegInf((_UF)(actual), 1, (message), (UNITY_LINE_TYPE)line
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloat
Special((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloat
IsNaN((_UF)(actual), 1, (message), (UNITY_LINE_TYPE)line
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloat
Special((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UnityAssertFloat
IsInf((_UF)(actual), 0, (message), (UNITY_LINE_TYPE)line
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UnityAssertFloat
Special((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UnityAssertFloat
IsNegInf((_UF)(actual), 0, (message), (UNITY_LINE_TYPE)line
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UnityAssertFloat
Special((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NEG_INF
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UnityAssertFloat
IsNaN((_UF)(actual), 0, (message), (UNITY_LINE_TYPE)line
)
#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UnityAssertFloat
Special((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN
)
#endif
#endif
#ifdef UNITY_EXCLUDE_DOUBLE
#ifdef UNITY_EXCLUDE_DOUBLE
...
@@ -571,6 +591,9 @@ void UnityAssertDoubleIsNaN(const _UD actual,
...
@@ -571,6 +591,9 @@ void UnityAssertDoubleIsNaN(const _UD actual,
#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
#else
#else
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UD)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)line, message)
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UD)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)line, message)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录