Skip to content

Commit df8d5ed

Browse files
committed
fbc-tests: modify tests for -fpu sse -fpmode fast (less precision)
1 parent 214e02f commit df8d5ed

File tree

2 files changed

+39
-12
lines changed

2 files changed

+39
-12
lines changed

tests/optimizations/consteval.bas

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,28 @@ SUITE( fbc_tests.optimizations.consteval )
77

88
const EPSILON_SNG as single = 1.19290929e-7
99

10+
'' fast floating point is NOT precise, the compiler should have been
11+
'' built with -fpmode precise, so we may have differences when
12+
'' comparing const evaulation and runtime evaluation
13+
14+
#if __FB_FPMODE__ = "fast"
15+
const EPSILON_SNG_FPU as single = EPSILON_SNG * 1000
16+
#else
17+
const EPSILON_SNG_FPU as single = EPSILON_SNG
18+
#endif
19+
1020
#macro checkUop( func, value )
1121
f = value
1222
CU_ASSERT_DOUBLE_EQUAL( func( value ), func( f ), EPSILON_SNG )
1323
CU_ASSERT_DOUBLE_EQUAL( func( f ), func( value ), EPSILON_SNG )
1424
#endmacro
1525

26+
#macro checkUopFPU( func, value )
27+
f = value
28+
CU_ASSERT_DOUBLE_EQUAL( func( value ), func( f ), EPSILON_SNG_FPU )
29+
CU_ASSERT_DOUBLE_EQUAL( func( f ), func( value ), EPSILON_SNG_FPU )
30+
#endmacro
31+
1632
'' -
1733
f = 1.0f : CU_ASSERT_DOUBLE_EQUAL( (- 1.0f), (- f) , EPSILON_SNG )
1834
f = -1.0f : CU_ASSERT_DOUBLE_EQUAL( (- 1.0f), f , EPSILON_SNG )
@@ -26,20 +42,20 @@ SUITE( fbc_tests.optimizations.consteval )
2642
CU_ASSERT_EQUAL( sgn( 0.0f ), 0 )
2743
CU_ASSERT_EQUAL( sgn( -1.0f ), -1 )
2844
'' sin
29-
checkUop( sin, 1.0f )
30-
checkUop( sin, 0.5f )
31-
checkUop( sin, -0.5f )
32-
checkUop( sin, -1.0f )
45+
checkUopFPU( sin, 1.0f )
46+
checkUopFPU( sin, 0.5f )
47+
checkUopFPU( sin, -0.5f )
48+
checkUopFPU( sin, -1.0f )
3349
'' asin
3450
checkUop( asin, 1.0f )
3551
checkUop( asin, 0.5f )
3652
checkUop( asin, -0.5f )
3753
checkUop( asin, -1.0f )
3854
'' cos
39-
checkUop( cos, 1.0f )
40-
checkUop( cos, 0.5f )
41-
checkUop( cos, -0.5f )
42-
checkUop( cos, -1.0f )
55+
checkUopFPU( cos, 1.0f )
56+
checkUopFPU( cos, 0.5f )
57+
checkUopFPU( cos, -0.5f )
58+
checkUopFPU( cos, -1.0f )
4359
'' acos
4460
checkUop( acos, 1.0f )
4561
checkUop( acos, 0.5f )

tests/optimizations/inline-ops.bas

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ SUITE( fbc_tests.optimizations.inline_ops )
77
const EPSILON_SNG as single = 1.19290929e-7
88
const EPSILON_DBL as double = 2.2204460492503131e-016
99

10+
'' fast floating point is NOT precise
11+
#if __FB_FPMODE__ = "fast"
12+
'' good to about 3 decimal places for
13+
'' cos/sin on -gen gas -fpu sse -fpmode fast
14+
const EPSILON_SNG_FPU as single = EPSILON_SNG * 2000
15+
const EPSILON_DBL_FPU as double = EPSILON_DBL * 2000
16+
#else
17+
const EPSILON_SNG_FPU as single = EPSILON_SNG
18+
const EPSILON_DBL_FPU as double = EPSILON_DBL
19+
#endif
20+
1021
#define hFixF( x ) (floorf( abs( x ) ) * sgn( x ))
1122
#define hFixD( x ) ( floor( abs( x ) ) * sgn( x ))
1223

@@ -165,9 +176,9 @@ SUITE( fbc_tests.optimizations.inline_ops )
165176
for v as single = -1 to 1 step .01
166177
CU_ASSERT_DOUBLE_EQUAL( frac( v ), (v - hFixF( v )) , EPSILON_SNG )
167178
CU_ASSERT_DOUBLE_EQUAL( fix( v ), hFixF( v ), EPSILON_SNG )
168-
CU_ASSERT_DOUBLE_EQUAL( sin( v ), sinf( v ), EPSILON_SNG )
179+
CU_ASSERT_DOUBLE_EQUAL( sin( v ), sinf( v ), EPSILON_SNG_FPU )
169180
CU_ASSERT_DOUBLE_EQUAL( asin( v ), alt_asin( v ), EPSILON_SNG )
170-
CU_ASSERT_DOUBLE_EQUAL( cos( v ), cosf( v ), EPSILON_SNG )
181+
CU_ASSERT_DOUBLE_EQUAL( cos( v ), cosf( v ), EPSILON_SNG_FPU )
171182
CU_ASSERT_DOUBLE_EQUAL( acos( v ), acosf( v ), EPSILON_SNG )
172183
CU_ASSERT_DOUBLE_EQUAL( tan( v ), tanf( v ), EPSILON_SNG )
173184
CU_ASSERT_DOUBLE_EQUAL( atn( v ), atanf( v ), EPSILON_SNG )
@@ -244,7 +255,7 @@ SUITE( fbc_tests.optimizations.inline_ops )
244255
dim x as single = 5
245256
dim r as single
246257
r = 1! / x
247-
CU_ASSERT_DOUBLE_EQUAL( r, 0.2, EPSILON_SNG )
258+
CU_ASSERT_DOUBLE_EQUAL( r, 0.2, EPSILON_SNG_FPU )
248259
end scope
249260

250261
scope
@@ -287,7 +298,7 @@ SUITE( fbc_tests.optimizations.inline_ops )
287298
dim x as TSQR
288299
dim r as single
289300
r = 1! / sqr(x)
290-
CU_ASSERT_DOUBLE_EQUAL( r, 0.0625, EPSILON_SNG )
301+
CU_ASSERT_DOUBLE_EQUAL( r, 0.0625, EPSILON_SNG_FPU )
291302
end scope
292303

293304
END_TEST

0 commit comments

Comments
 (0)