aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/src
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/SpecTestsuites/SpecTestsuiteBase.php13
1 files changed, 11 insertions, 2 deletions
diff --git a/tests/src/SpecTestsuites/SpecTestsuiteBase.php b/tests/src/SpecTestsuites/SpecTestsuiteBase.php
index 05b7846..9939196 100644
--- a/tests/src/SpecTestsuites/SpecTestsuiteBase.php
+++ b/tests/src/SpecTestsuites/SpecTestsuiteBase.php
@@ -210,7 +210,7 @@ abstract class SpecTestsuiteBase extends TestCase
"result $i mismatch" . $message,
);
} elseif ($expectedResult['type'] === 'i64') {
- $expectedValue = unpack('q', pack('q', (int)$expectedResult['value']))[1];
+ $expectedValue = unpack('q', self::convertInt64ToBinary($expectedResult['value']))[1];
$this->assertSame(
$expectedValue,
$actualResult,
@@ -232,7 +232,7 @@ abstract class SpecTestsuiteBase extends TestCase
);
}
} elseif ($expectedResult['type'] === 'f64') {
- $expectedValue = unpack('e', pack('q', (int)$expectedResult['value']))[1];
+ $expectedValue = unpack('e', self::convertInt64ToBinary($expectedResult['value']))[1];
if (is_nan($expectedValue)) {
// @todo check NaN bit pattern.
$this->assertTrue(
@@ -286,4 +286,13 @@ abstract class SpecTestsuiteBase extends TestCase
'trap kind mismatch' . $message,
);
}
+
+ static private function convertInt64ToBinary(string $value): string
+ {
+ // 2^63-1 < $value
+ if (bccomp(bcsub(bcpow('2', '63'), '1'), $value) < 0) {
+ $value = bcsub($value, bcpow('2', '64'));
+ }
+ return pack('q', (int)$value);
+ }
}