summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-07-22 15:14:01 -0700
committerGitHub <noreply@github.com>2020-07-22 15:14:01 -0700
commit3ac849384aa861382d2ca9636a89556e237e55d6 (patch)
tree2ed179d80c70bb53771a84bd014483d7b91cae53 /test
parentd406654f7cd6249277a2eef542c883603b4b3b53 (diff)
downloadbinaryen-3ac849384aa861382d2ca9636a89556e237e55d6.tar.gz
binaryen-3ac849384aa861382d2ca9636a89556e237e55d6.tar.bz2
binaryen-3ac849384aa861382d2ca9636a89556e237e55d6.zip
Fix i32.trunc_f64_u of values that round down to UINT32_MAX (#2976)
Diffstat (limited to 'test')
-rw-r--r--test/spec/conversions.wast19
1 files changed, 16 insertions, 3 deletions
diff --git a/test/spec/conversions.wast b/test/spec/conversions.wast
index 4e779aa8e..439d5cfd6 100644
--- a/test/spec/conversions.wast
+++ b/test/spec/conversions.wast
@@ -112,9 +112,6 @@
(assert_return (invoke "i32.trunc_f64_s" (f64.const -2.0)) (i32.const -2))
(assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647))
(assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648))
-(assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9999995)) (i32.const -2147483648))
-(assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9999998)) (i32.const 2147483647))
-(assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483647.9999999)) "integer overflow")
(assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483648.0)) "integer overflow")
(assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483649.0)) "integer overflow")
(assert_trap (invoke "i32.trunc_f64_s" (f64.const inf)) "integer overflow")
@@ -124,6 +121,22 @@
(assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer")
(assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer")
+;; f64 -> i32 rounding to the exact i32 limit
+(assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9)) (i32.const -2147483648))
+(assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9)) (i32.const 2147483647))
+(assert_return (invoke "i32.trunc_f64_u" (f64.const -0.9)) (i32.const 0))
+(assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9)) (i32.const 4294967295))
+
+;; f64 -> i32 rounding at the exact boundary + float parsing
+(assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9999997)) (i32.const -2147483648))
+(assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483648.9999998)) "integer overflow")
+(assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9999998)) (i32.const 2147483647))
+(assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483647.9999999)) "integer overflow")
+(assert_return (invoke "i32.trunc_f64_u" (f64.const -0.99999999999999994)) (i32.const 0))
+(assert_trap (invoke "i32.trunc_f64_u" (f64.const -0.99999999999999995)) "integer overflow")
+(assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9999997)) (i32.const 4294967295))
+(assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967295.9999998)) "integer overflow")
+
(assert_return (invoke "i32.trunc_f64_u" (f64.const 0.0)) (i32.const 0))
(assert_return (invoke "i32.trunc_f64_u" (f64.const -0.0)) (i32.const 0))
(assert_return (invoke "i32.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0))