diff options
author | Bruce Mitchener <bruce.mitchener@gmail.com> | 2013-12-11 20:36:06 +0700 |
---|---|---|
committer | Bruce Mitchener <bruce.mitchener@gmail.com> | 2014-01-13 17:59:15 +0700 |
commit | 369b8330ed5e115be82b616414892aaf1e3c7b2c (patch) | |
tree | 0cd4fed3933a2b14f768b5c765264b9cb1009b3d /tests | |
parent | 4353f5df1e4bae2a3d579a5c205b800bcc2d8d39 (diff) |
Handle negative zero values correctly.
This handles the situation when they're part of a global variable
whether it just be a float/double or embedded within a struct.
Fixes #1898.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/core/test_literal_negative_zero.in | 27 | ||||
-rw-r--r-- | tests/core/test_literal_negative_zero.out | 6 | ||||
-rw-r--r-- | tests/test_core.py | 8 |
3 files changed, 41 insertions, 0 deletions
diff --git a/tests/core/test_literal_negative_zero.in b/tests/core/test_literal_negative_zero.in new file mode 100644 index 00000000..1554fbf5 --- /dev/null +++ b/tests/core/test_literal_negative_zero.in @@ -0,0 +1,27 @@ +#include <stdio.h> +#include <math.h> + +static float XXXf = -0.0f; +static double XXXd = -0.0; + +struct x { + float f; + double d; +}; + +static struct x xx[] = { + -0x0p+0, + -0x0p+0, +}; + +int main(int argc, char ** argv) { + float YYYf = -0.0f; + float YYYd = -0.0; + + printf("%.2f\n", XXXf); + printf("%.2f\n", XXXd); + printf("%.2f\n", YYYf); + printf("%.2f\n", YYYd); + printf("%.2f\n", xx->f); + printf("%.2f\n", xx->d); +} diff --git a/tests/core/test_literal_negative_zero.out b/tests/core/test_literal_negative_zero.out new file mode 100644 index 00000000..d1b863b8 --- /dev/null +++ b/tests/core/test_literal_negative_zero.out @@ -0,0 +1,6 @@ +-0.00 +-0.00 +-0.00 +-0.00 +-0.00 +-0.00 diff --git a/tests/test_core.py b/tests/test_core.py index 799e47f0..7fe48977 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -477,6 +477,14 @@ class T(RunnerCore): # Short name, to make it more fun to use manually on the co self.do_run_from_file(src, output) + def test_literal_negative_zero(self): + if self.emcc_args == None: return self.skip('needs emcc') + + test_path = path_from_root('tests', 'core', 'test_literal_negative_zero') + src, output = (test_path + s for s in ('.in', '.out')) + + self.do_run_from_file(src, output) + def test_llvm_intrinsics(self): if self.emcc_args == None: return self.skip('needs ta2') |