Skip to content

Commit 361dccb

Browse files
committed
Fix CIEEE754 rounding mode test isolation
The CIEEE754 integration tests were calling ieee754_set_rounding_mode() directly via the C API but not restoring the original mode, causing test pollution and failures in subsequent tests. Issue: - setRoundingModeDownward() left FPU in DOWNWARD mode - setRoundingModeUpward() left FPU in UPWARD mode - setRoundingModeTowardZero() left FPU in TOWARDZERO mode - roundingModeAffectsOperations() left FPU in UPWARD mode - roundingModeAndExceptions() left FPU in TOWARDZERO mode - These caused ALL subsequent rounding tests to fail Fix: - Added defer blocks to ALL tests that change rounding mode - Save original mode before test - Restore in defer block (always runs, even on failure) - Removed manual restoration calls (defer handles it) Result: All 707 tests now pass reliably.
1 parent 59ccbdc commit 361dccb

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

Tests/IEEE 754 Tests/CIEEE754 Integration Tests.swift

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ struct CIEEERoundingModeTests {
2020
}
2121

2222
@Test func setRoundingModeToNearest() {
23+
let originalMode = ieee754_get_rounding_mode()
24+
defer { ieee754_set_rounding_mode(originalMode) }
25+
2326
let result = ieee754_set_rounding_mode(IEEE754_ROUND_TONEAREST)
2427
#expect(result == 0, "Setting rounding mode should succeed")
2528

@@ -28,6 +31,9 @@ struct CIEEERoundingModeTests {
2831
}
2932

3033
@Test func setRoundingModeDownward() {
34+
let originalMode = ieee754_get_rounding_mode()
35+
defer { ieee754_set_rounding_mode(originalMode) }
36+
3137
let result = ieee754_set_rounding_mode(IEEE754_ROUND_DOWNWARD)
3238
#expect(result == 0)
3339

@@ -36,6 +42,9 @@ struct CIEEERoundingModeTests {
3642
}
3743

3844
@Test func setRoundingModeUpward() {
45+
let originalMode = ieee754_get_rounding_mode()
46+
defer { ieee754_set_rounding_mode(originalMode) }
47+
3948
let result = ieee754_set_rounding_mode(IEEE754_ROUND_UPWARD)
4049
#expect(result == 0)
4150

@@ -44,6 +53,9 @@ struct CIEEERoundingModeTests {
4453
}
4554

4655
@Test func setRoundingModeTowardZero() {
56+
let originalMode = ieee754_get_rounding_mode()
57+
defer { ieee754_set_rounding_mode(originalMode) }
58+
4759
let result = ieee754_set_rounding_mode(IEEE754_ROUND_TOWARDZERO)
4860
#expect(result == 0)
4961

@@ -52,6 +64,9 @@ struct CIEEERoundingModeTests {
5264
}
5365

5466
@Test func roundingModeAffectsOperations() {
67+
let originalMode = ieee754_get_rounding_mode()
68+
defer { ieee754_set_rounding_mode(originalMode) }
69+
5570
// Set to round toward zero
5671
ieee754_set_rounding_mode(IEEE754_ROUND_TOWARDZERO)
5772

@@ -66,9 +81,6 @@ struct CIEEERoundingModeTests {
6681
// At minimum, verify operations complete
6782
#expect(result1 > 0)
6883
#expect(result2 > 0)
69-
70-
// Restore default
71-
ieee754_set_rounding_mode(IEEE754_ROUND_TONEAREST)
7284
}
7385
}
7486

@@ -341,6 +353,9 @@ struct CIEEESignalingCompareFloatTests {
341353
@Suite("CIEEE754 - Integration Scenarios")
342354
struct CIEEEIntegrationTests {
343355
@Test func roundingModeAndExceptions() {
356+
let originalMode = ieee754_get_rounding_mode()
357+
defer { ieee754_set_rounding_mode(originalMode) }
358+
344359
// Set rounding mode and perform operation
345360
ieee754_set_rounding_mode(IEEE754_ROUND_TOWARDZERO)
346361
ieee754_clear_all_exceptions()
@@ -352,9 +367,6 @@ struct CIEEEIntegrationTests {
352367

353368
// Verify result is reasonable
354369
#expect(result > 3.0 && result < 4.0)
355-
356-
// Restore default
357-
ieee754_set_rounding_mode(IEEE754_ROUND_TONEAREST)
358370
}
359371

360372
@Test func exceptionPersistenceAcrossCalls() {

0 commit comments

Comments
 (0)