From 1d54a938f6cdba4ea24e32e5eba93ebde8e58e1f Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Mon, 5 Aug 2019 15:38:03 -0700 Subject: [PATCH] Fix a couple bugs testing NaNs. Add an exclusion list for LLVM min/max. --- lib/spectests/tests/excludes.txt | 550 ++++++++++++++++++++++++++++++- lib/spectests/tests/spectest.rs | 28 +- 2 files changed, 562 insertions(+), 16 deletions(-) diff --git a/lib/spectests/tests/excludes.txt b/lib/spectests/tests/excludes.txt index 4af8d45de..c5fadd80d 100644 --- a/lib/spectests/tests/excludes.txt +++ b/lib/spectests/tests/excludes.txt @@ -19,6 +19,554 @@ clif:skip:simd_binaryen.wast:* # SIMD not implemented # clif:skip:skip-stack-guard-page.wast:2 # Slow test +# LLVM bug with min/max over NaNs +llvm:skip:f32.wast:1651 +llvm:skip:f32.wast:1652 +llvm:skip:f32.wast:1653 +llvm:skip:f32.wast:1654 +llvm:skip:f32.wast:1655 +llvm:skip:f32.wast:1656 +llvm:skip:f32.wast:1657 +llvm:skip:f32.wast:1658 +llvm:skip:f32.wast:1691 +llvm:skip:f32.wast:1692 +llvm:skip:f32.wast:1693 +llvm:skip:f32.wast:1694 +llvm:skip:f32.wast:1695 +llvm:skip:f32.wast:1696 +llvm:skip:f32.wast:1697 +llvm:skip:f32.wast:1698 +llvm:skip:f32.wast:1731 +llvm:skip:f32.wast:1732 +llvm:skip:f32.wast:1733 +llvm:skip:f32.wast:1734 +llvm:skip:f32.wast:1735 +llvm:skip:f32.wast:1736 +llvm:skip:f32.wast:1737 +llvm:skip:f32.wast:1738 +llvm:skip:f32.wast:1771 +llvm:skip:f32.wast:1772 +llvm:skip:f32.wast:1773 +llvm:skip:f32.wast:1774 +llvm:skip:f32.wast:1775 +llvm:skip:f32.wast:1776 +llvm:skip:f32.wast:1777 +llvm:skip:f32.wast:1778 +llvm:skip:f32.wast:1811 +llvm:skip:f32.wast:1812 +llvm:skip:f32.wast:1813 +llvm:skip:f32.wast:1814 +llvm:skip:f32.wast:1815 +llvm:skip:f32.wast:1816 +llvm:skip:f32.wast:1817 +llvm:skip:f32.wast:1818 +llvm:skip:f32.wast:1851 +llvm:skip:f32.wast:1852 +llvm:skip:f32.wast:1853 +llvm:skip:f32.wast:1854 +llvm:skip:f32.wast:1855 +llvm:skip:f32.wast:1856 +llvm:skip:f32.wast:1857 +llvm:skip:f32.wast:1858 +llvm:skip:f32.wast:1891 +llvm:skip:f32.wast:1892 +llvm:skip:f32.wast:1893 +llvm:skip:f32.wast:1894 +llvm:skip:f32.wast:1895 +llvm:skip:f32.wast:1896 +llvm:skip:f32.wast:1897 +llvm:skip:f32.wast:1898 +llvm:skip:f32.wast:1931 +llvm:skip:f32.wast:1932 +llvm:skip:f32.wast:1933 +llvm:skip:f32.wast:1934 +llvm:skip:f32.wast:1935 +llvm:skip:f32.wast:1936 +llvm:skip:f32.wast:1937 +llvm:skip:f32.wast:1938 +llvm:skip:f32.wast:1939 +llvm:skip:f32.wast:1940 +llvm:skip:f32.wast:1941 +llvm:skip:f32.wast:1942 +llvm:skip:f32.wast:1943 +llvm:skip:f32.wast:1944 +llvm:skip:f32.wast:1945 +llvm:skip:f32.wast:1946 +llvm:skip:f32.wast:1947 +llvm:skip:f32.wast:1948 +llvm:skip:f32.wast:1949 +llvm:skip:f32.wast:1950 +llvm:skip:f32.wast:1951 +llvm:skip:f32.wast:1952 +llvm:skip:f32.wast:1953 +llvm:skip:f32.wast:1954 +llvm:skip:f32.wast:1955 +llvm:skip:f32.wast:1956 +llvm:skip:f32.wast:1957 +llvm:skip:f32.wast:1958 +llvm:skip:f32.wast:1959 +llvm:skip:f32.wast:1960 +llvm:skip:f32.wast:1961 +llvm:skip:f32.wast:1962 +llvm:skip:f32.wast:1963 +llvm:skip:f32.wast:1964 +llvm:skip:f32.wast:1965 +llvm:skip:f32.wast:1966 +llvm:skip:f32.wast:1967 +llvm:skip:f32.wast:1968 +llvm:skip:f32.wast:1969 +llvm:skip:f32.wast:1970 +llvm:skip:f32.wast:1971 +llvm:skip:f32.wast:1972 +llvm:skip:f32.wast:1973 +llvm:skip:f32.wast:1974 +llvm:skip:f32.wast:1975 +llvm:skip:f32.wast:1976 +llvm:skip:f32.wast:1977 +llvm:skip:f32.wast:1978 +llvm:skip:f32.wast:1979 +llvm:skip:f32.wast:1980 +llvm:skip:f32.wast:1981 +llvm:skip:f32.wast:1982 +llvm:skip:f32.wast:1983 +llvm:skip:f32.wast:1984 +llvm:skip:f32.wast:1985 +llvm:skip:f32.wast:1986 +llvm:skip:f32.wast:1987 +llvm:skip:f32.wast:1988 +llvm:skip:f32.wast:1989 +llvm:skip:f32.wast:1990 +llvm:skip:f32.wast:1991 +llvm:skip:f32.wast:1992 +llvm:skip:f32.wast:1993 +llvm:skip:f32.wast:1994 +llvm:skip:f32.wast:1995 +llvm:skip:f32.wast:1996 +llvm:skip:f32.wast:1997 +llvm:skip:f32.wast:1998 +llvm:skip:f32.wast:1999 +llvm:skip:f32.wast:2000 +llvm:skip:f32.wast:2001 +llvm:skip:f32.wast:2002 +llvm:skip:f32.wast:2005 +llvm:skip:f32.wast:2006 +llvm:skip:f32.wast:2009 +llvm:skip:f32.wast:2010 +llvm:skip:f32.wast:2013 +llvm:skip:f32.wast:2014 +llvm:skip:f32.wast:2017 +llvm:skip:f32.wast:2018 +llvm:skip:f32.wast:2051 +llvm:skip:f32.wast:2052 +llvm:skip:f32.wast:2053 +llvm:skip:f32.wast:2054 +llvm:skip:f32.wast:2055 +llvm:skip:f32.wast:2056 +llvm:skip:f32.wast:2057 +llvm:skip:f32.wast:2058 +llvm:skip:f32.wast:2091 +llvm:skip:f32.wast:2092 +llvm:skip:f32.wast:2093 +llvm:skip:f32.wast:2094 +llvm:skip:f32.wast:2095 +llvm:skip:f32.wast:2096 +llvm:skip:f32.wast:2097 +llvm:skip:f32.wast:2098 +llvm:skip:f32.wast:2131 +llvm:skip:f32.wast:2132 +llvm:skip:f32.wast:2133 +llvm:skip:f32.wast:2134 +llvm:skip:f32.wast:2135 +llvm:skip:f32.wast:2136 +llvm:skip:f32.wast:2137 +llvm:skip:f32.wast:2138 +llvm:skip:f32.wast:2171 +llvm:skip:f32.wast:2172 +llvm:skip:f32.wast:2173 +llvm:skip:f32.wast:2174 +llvm:skip:f32.wast:2175 +llvm:skip:f32.wast:2176 +llvm:skip:f32.wast:2177 +llvm:skip:f32.wast:2178 +llvm:skip:f32.wast:2211 +llvm:skip:f32.wast:2212 +llvm:skip:f32.wast:2213 +llvm:skip:f32.wast:2214 +llvm:skip:f32.wast:2215 +llvm:skip:f32.wast:2216 +llvm:skip:f32.wast:2217 +llvm:skip:f32.wast:2218 +llvm:skip:f32.wast:2251 +llvm:skip:f32.wast:2252 +llvm:skip:f32.wast:2253 +llvm:skip:f32.wast:2254 +llvm:skip:f32.wast:2255 +llvm:skip:f32.wast:2256 +llvm:skip:f32.wast:2257 +llvm:skip:f32.wast:2258 +llvm:skip:f32.wast:2291 +llvm:skip:f32.wast:2292 +llvm:skip:f32.wast:2293 +llvm:skip:f32.wast:2294 +llvm:skip:f32.wast:2295 +llvm:skip:f32.wast:2296 +llvm:skip:f32.wast:2297 +llvm:skip:f32.wast:2298 +llvm:skip:f32.wast:2331 +llvm:skip:f32.wast:2332 +llvm:skip:f32.wast:2333 +llvm:skip:f32.wast:2334 +llvm:skip:f32.wast:2335 +llvm:skip:f32.wast:2336 +llvm:skip:f32.wast:2337 +llvm:skip:f32.wast:2338 +llvm:skip:f32.wast:2339 +llvm:skip:f32.wast:2340 +llvm:skip:f32.wast:2341 +llvm:skip:f32.wast:2342 +llvm:skip:f32.wast:2343 +llvm:skip:f32.wast:2344 +llvm:skip:f32.wast:2345 +llvm:skip:f32.wast:2346 +llvm:skip:f32.wast:2347 +llvm:skip:f32.wast:2348 +llvm:skip:f32.wast:2349 +llvm:skip:f32.wast:2350 +llvm:skip:f32.wast:2351 +llvm:skip:f32.wast:2352 +llvm:skip:f32.wast:2353 +llvm:skip:f32.wast:2354 +llvm:skip:f32.wast:2355 +llvm:skip:f32.wast:2356 +llvm:skip:f32.wast:2357 +llvm:skip:f32.wast:2358 +llvm:skip:f32.wast:2359 +llvm:skip:f32.wast:2360 +llvm:skip:f32.wast:2361 +llvm:skip:f32.wast:2362 +llvm:skip:f32.wast:2363 +llvm:skip:f32.wast:2364 +llvm:skip:f32.wast:2365 +llvm:skip:f32.wast:2366 +llvm:skip:f32.wast:2367 +llvm:skip:f32.wast:2368 +llvm:skip:f32.wast:2369 +llvm:skip:f32.wast:2370 +llvm:skip:f32.wast:2371 +llvm:skip:f32.wast:2372 +llvm:skip:f32.wast:2373 +llvm:skip:f32.wast:2374 +llvm:skip:f32.wast:2375 +llvm:skip:f32.wast:2376 +llvm:skip:f32.wast:2377 +llvm:skip:f32.wast:2378 +llvm:skip:f32.wast:2379 +llvm:skip:f32.wast:2380 +llvm:skip:f32.wast:2381 +llvm:skip:f32.wast:2382 +llvm:skip:f32.wast:2383 +llvm:skip:f32.wast:2384 +llvm:skip:f32.wast:2385 +llvm:skip:f32.wast:2386 +llvm:skip:f32.wast:2387 +llvm:skip:f32.wast:2388 +llvm:skip:f32.wast:2389 +llvm:skip:f32.wast:2390 +llvm:skip:f32.wast:2391 +llvm:skip:f32.wast:2392 +llvm:skip:f32.wast:2393 +llvm:skip:f32.wast:2394 +llvm:skip:f32.wast:2395 +llvm:skip:f32.wast:2396 +llvm:skip:f32.wast:2397 +llvm:skip:f32.wast:2398 +llvm:skip:f32.wast:2399 +llvm:skip:f32.wast:2400 +llvm:skip:f32.wast:2401 +llvm:skip:f32.wast:2402 +llvm:skip:f32.wast:2403 +llvm:skip:f32.wast:2404 +llvm:skip:f32.wast:2405 +llvm:skip:f32.wast:2406 +llvm:skip:f32.wast:2409 +llvm:skip:f32.wast:2410 +llvm:skip:f32.wast:2413 +llvm:skip:f32.wast:2414 +llvm:skip:f32.wast:2417 +llvm:skip:f32.wast:2418 +llvm:skip:f64.wast:1651 +llvm:skip:f64.wast:1652 +llvm:skip:f64.wast:1653 +llvm:skip:f64.wast:1654 +llvm:skip:f64.wast:1655 +llvm:skip:f64.wast:1656 +llvm:skip:f64.wast:1657 +llvm:skip:f64.wast:1658 +llvm:skip:f64.wast:1691 +llvm:skip:f64.wast:1692 +llvm:skip:f64.wast:1693 +llvm:skip:f64.wast:1694 +llvm:skip:f64.wast:1695 +llvm:skip:f64.wast:1696 +llvm:skip:f64.wast:1697 +llvm:skip:f64.wast:1698 +llvm:skip:f64.wast:1731 +llvm:skip:f64.wast:1732 +llvm:skip:f64.wast:1733 +llvm:skip:f64.wast:1734 +llvm:skip:f64.wast:1735 +llvm:skip:f64.wast:1736 +llvm:skip:f64.wast:1737 +llvm:skip:f64.wast:1738 +llvm:skip:f64.wast:1771 +llvm:skip:f64.wast:1772 +llvm:skip:f64.wast:1773 +llvm:skip:f64.wast:1774 +llvm:skip:f64.wast:1775 +llvm:skip:f64.wast:1776 +llvm:skip:f64.wast:1777 +llvm:skip:f64.wast:1778 +llvm:skip:f64.wast:1811 +llvm:skip:f64.wast:1812 +llvm:skip:f64.wast:1813 +llvm:skip:f64.wast:1814 +llvm:skip:f64.wast:1815 +llvm:skip:f64.wast:1816 +llvm:skip:f64.wast:1817 +llvm:skip:f64.wast:1818 +llvm:skip:f64.wast:1851 +llvm:skip:f64.wast:1852 +llvm:skip:f64.wast:1853 +llvm:skip:f64.wast:1854 +llvm:skip:f64.wast:1855 +llvm:skip:f64.wast:1856 +llvm:skip:f64.wast:1857 +llvm:skip:f64.wast:1858 +llvm:skip:f64.wast:1891 +llvm:skip:f64.wast:1892 +llvm:skip:f64.wast:1893 +llvm:skip:f64.wast:1894 +llvm:skip:f64.wast:1895 +llvm:skip:f64.wast:1896 +llvm:skip:f64.wast:1897 +llvm:skip:f64.wast:1898 +llvm:skip:f64.wast:1931 +llvm:skip:f64.wast:1932 +llvm:skip:f64.wast:1933 +llvm:skip:f64.wast:1934 +llvm:skip:f64.wast:1935 +llvm:skip:f64.wast:1936 +llvm:skip:f64.wast:1937 +llvm:skip:f64.wast:1938 +llvm:skip:f64.wast:1939 +llvm:skip:f64.wast:1940 +llvm:skip:f64.wast:1941 +llvm:skip:f64.wast:1942 +llvm:skip:f64.wast:1943 +llvm:skip:f64.wast:1944 +llvm:skip:f64.wast:1945 +llvm:skip:f64.wast:1946 +llvm:skip:f64.wast:1947 +llvm:skip:f64.wast:1948 +llvm:skip:f64.wast:1949 +llvm:skip:f64.wast:1950 +llvm:skip:f64.wast:1951 +llvm:skip:f64.wast:1952 +llvm:skip:f64.wast:1953 +llvm:skip:f64.wast:1954 +llvm:skip:f64.wast:1955 +llvm:skip:f64.wast:1956 +llvm:skip:f64.wast:1957 +llvm:skip:f64.wast:1958 +llvm:skip:f64.wast:1959 +llvm:skip:f64.wast:1960 +llvm:skip:f64.wast:1961 +llvm:skip:f64.wast:1962 +llvm:skip:f64.wast:1963 +llvm:skip:f64.wast:1964 +llvm:skip:f64.wast:1965 +llvm:skip:f64.wast:1966 +llvm:skip:f64.wast:1967 +llvm:skip:f64.wast:1968 +llvm:skip:f64.wast:1969 +llvm:skip:f64.wast:1970 +llvm:skip:f64.wast:1971 +llvm:skip:f64.wast:1972 +llvm:skip:f64.wast:1973 +llvm:skip:f64.wast:1974 +llvm:skip:f64.wast:1975 +llvm:skip:f64.wast:1976 +llvm:skip:f64.wast:1977 +llvm:skip:f64.wast:1978 +llvm:skip:f64.wast:1979 +llvm:skip:f64.wast:1980 +llvm:skip:f64.wast:1981 +llvm:skip:f64.wast:1982 +llvm:skip:f64.wast:1983 +llvm:skip:f64.wast:1984 +llvm:skip:f64.wast:1985 +llvm:skip:f64.wast:1986 +llvm:skip:f64.wast:1987 +llvm:skip:f64.wast:1988 +llvm:skip:f64.wast:1989 +llvm:skip:f64.wast:1990 +llvm:skip:f64.wast:1991 +llvm:skip:f64.wast:1992 +llvm:skip:f64.wast:1993 +llvm:skip:f64.wast:1994 +llvm:skip:f64.wast:1995 +llvm:skip:f64.wast:1996 +llvm:skip:f64.wast:1997 +llvm:skip:f64.wast:1998 +llvm:skip:f64.wast:1999 +llvm:skip:f64.wast:2000 +llvm:skip:f64.wast:2001 +llvm:skip:f64.wast:2002 +llvm:skip:f64.wast:2005 +llvm:skip:f64.wast:2006 +llvm:skip:f64.wast:2009 +llvm:skip:f64.wast:2010 +llvm:skip:f64.wast:2013 +llvm:skip:f64.wast:2014 +llvm:skip:f64.wast:2017 +llvm:skip:f64.wast:2018 +llvm:skip:f64.wast:2051 +llvm:skip:f64.wast:2052 +llvm:skip:f64.wast:2053 +llvm:skip:f64.wast:2054 +llvm:skip:f64.wast:2055 +llvm:skip:f64.wast:2056 +llvm:skip:f64.wast:2057 +llvm:skip:f64.wast:2058 +llvm:skip:f64.wast:2091 +llvm:skip:f64.wast:2092 +llvm:skip:f64.wast:2093 +llvm:skip:f64.wast:2094 +llvm:skip:f64.wast:2095 +llvm:skip:f64.wast:2096 +llvm:skip:f64.wast:2097 +llvm:skip:f64.wast:2098 +llvm:skip:f64.wast:2131 +llvm:skip:f64.wast:2132 +llvm:skip:f64.wast:2133 +llvm:skip:f64.wast:2134 +llvm:skip:f64.wast:2135 +llvm:skip:f64.wast:2136 +llvm:skip:f64.wast:2137 +llvm:skip:f64.wast:2138 +llvm:skip:f64.wast:2171 +llvm:skip:f64.wast:2172 +llvm:skip:f64.wast:2173 +llvm:skip:f64.wast:2174 +llvm:skip:f64.wast:2175 +llvm:skip:f64.wast:2176 +llvm:skip:f64.wast:2177 +llvm:skip:f64.wast:2178 +llvm:skip:f64.wast:2211 +llvm:skip:f64.wast:2212 +llvm:skip:f64.wast:2213 +llvm:skip:f64.wast:2214 +llvm:skip:f64.wast:2215 +llvm:skip:f64.wast:2216 +llvm:skip:f64.wast:2217 +llvm:skip:f64.wast:2218 +llvm:skip:f64.wast:2251 +llvm:skip:f64.wast:2252 +llvm:skip:f64.wast:2253 +llvm:skip:f64.wast:2254 +llvm:skip:f64.wast:2255 +llvm:skip:f64.wast:2256 +llvm:skip:f64.wast:2257 +llvm:skip:f64.wast:2258 +llvm:skip:f64.wast:2291 +llvm:skip:f64.wast:2292 +llvm:skip:f64.wast:2293 +llvm:skip:f64.wast:2294 +llvm:skip:f64.wast:2295 +llvm:skip:f64.wast:2296 +llvm:skip:f64.wast:2297 +llvm:skip:f64.wast:2298 +llvm:skip:f64.wast:2331 +llvm:skip:f64.wast:2332 +llvm:skip:f64.wast:2333 +llvm:skip:f64.wast:2334 +llvm:skip:f64.wast:2335 +llvm:skip:f64.wast:2336 +llvm:skip:f64.wast:2337 +llvm:skip:f64.wast:2338 +llvm:skip:f64.wast:2339 +llvm:skip:f64.wast:2340 +llvm:skip:f64.wast:2341 +llvm:skip:f64.wast:2342 +llvm:skip:f64.wast:2343 +llvm:skip:f64.wast:2344 +llvm:skip:f64.wast:2345 +llvm:skip:f64.wast:2346 +llvm:skip:f64.wast:2347 +llvm:skip:f64.wast:2348 +llvm:skip:f64.wast:2349 +llvm:skip:f64.wast:2350 +llvm:skip:f64.wast:2351 +llvm:skip:f64.wast:2352 +llvm:skip:f64.wast:2353 +llvm:skip:f64.wast:2354 +llvm:skip:f64.wast:2355 +llvm:skip:f64.wast:2356 +llvm:skip:f64.wast:2357 +llvm:skip:f64.wast:2358 +llvm:skip:f64.wast:2359 +llvm:skip:f64.wast:2360 +llvm:skip:f64.wast:2361 +llvm:skip:f64.wast:2362 +llvm:skip:f64.wast:2363 +llvm:skip:f64.wast:2364 +llvm:skip:f64.wast:2365 +llvm:skip:f64.wast:2366 +llvm:skip:f64.wast:2367 +llvm:skip:f64.wast:2368 +llvm:skip:f64.wast:2369 +llvm:skip:f64.wast:2370 +llvm:skip:f64.wast:2371 +llvm:skip:f64.wast:2372 +llvm:skip:f64.wast:2373 +llvm:skip:f64.wast:2374 +llvm:skip:f64.wast:2375 +llvm:skip:f64.wast:2376 +llvm:skip:f64.wast:2377 +llvm:skip:f64.wast:2378 +llvm:skip:f64.wast:2379 +llvm:skip:f64.wast:2380 +llvm:skip:f64.wast:2381 +llvm:skip:f64.wast:2382 +llvm:skip:f64.wast:2383 +llvm:skip:f64.wast:2384 +llvm:skip:f64.wast:2385 +llvm:skip:f64.wast:2386 +llvm:skip:f64.wast:2387 +llvm:skip:f64.wast:2388 +llvm:skip:f64.wast:2389 +llvm:skip:f64.wast:2390 +llvm:skip:f64.wast:2391 +llvm:skip:f64.wast:2392 +llvm:skip:f64.wast:2393 +llvm:skip:f64.wast:2394 +llvm:skip:f64.wast:2395 +llvm:skip:f64.wast:2396 +llvm:skip:f64.wast:2397 +llvm:skip:f64.wast:2398 +llvm:skip:f64.wast:2399 +llvm:skip:f64.wast:2400 +llvm:skip:f64.wast:2401 +llvm:skip:f64.wast:2402 +llvm:skip:f64.wast:2405 +llvm:skip:f64.wast:2406 +llvm:skip:f64.wast:2409 +llvm:skip:f64.wast:2410 +llvm:skip:f64.wast:2413 +llvm:skip:f64.wast:2414 +llvm:skip:f64.wast:2417 +llvm:skip:f64.wast:2418 + # LLVM llvm:skip:br_table.wast:1255 llvm:skip:elem.wast:229 # Spec running forever @@ -37,4 +585,4 @@ llvm:skip:skip-stack-guard-page.wast:* # Spec running forever or (signal: 4, SIG singlepass:skip:elem.wast:229 # Spec running forever singlepass:skip:names.wast:* # Names file has parsing error? singlepass:skip:simd.wast:* # SIMD not implemented -singlepass:skip:simd_binaryen.wast:* # SIMD not implemented \ No newline at end of file +singlepass:skip:simd_binaryen.wast:* # SIMD not implemented diff --git a/lib/spectests/tests/spectest.rs b/lib/spectests/tests/spectest.rs index cdc87a6db..32f1927da 100644 --- a/lib/spectests/tests/spectest.rs +++ b/lib/spectests/tests/spectest.rs @@ -10,7 +10,6 @@ #[cfg(test)] mod tests { - // TODO fix NaN checking // TODO fix spec failures // TODO fix panics and remove panic handlers // TODO do something with messages _message, message: _, msg: _ @@ -272,7 +271,9 @@ mod tests { for (i, v) in values.iter().enumerate() { let expected_value = convert_value(*expected.get(i).unwrap()); - if *v != expected_value { + if *v != expected_value + && !(*v != *v && expected_value != expected_value) + { test_report.add_failure(SpecFailure { file: filename.to_string(), line, @@ -1147,31 +1148,28 @@ mod tests { impl NaNCheck for f32 { /// The MSB of the mantissa must be set for a NaN to be a quiet NaN. fn is_quiet_nan(&self) -> bool { - let bit_mask = 0b1 << 22; // Used to check if 23rd bit is set, which is MSB of the mantissa - self.is_nan() && (self.to_bits() & bit_mask) == bit_mask + let mantissa_msb = 0b1 << 22; + self.is_nan() && (self.to_bits() & mantissa_msb) != 0 } - /// For a NaN to be canonical, its mantissa bits must all be unset + /// For a NaN to be canonical, the MSB of the mantissa must be set and + /// all other mantissa bits must be unset. fn is_canonical_nan(&self) -> bool { - let bit_mask: u32 = 0b1____0000_0000____011_1111_1111_1111_1111_1111; - let masked_value = self.to_bits() ^ bit_mask; - masked_value == 0xFFFF_FFFF || masked_value == 0x7FFF_FFFF + return self.to_bits() == 0xFFC0_0000 || self.to_bits() == 0x7FC0_0000; } } impl NaNCheck for f64 { /// The MSB of the mantissa must be set for a NaN to be a quiet NaN. fn is_quiet_nan(&self) -> bool { - let bit_mask = 0b1 << 51; // Used to check if 52st bit is set, which is MSB of the mantissa - self.is_nan() && (self.to_bits() & bit_mask) == bit_mask + let mantissa_msb = 0b1 << 51; + self.is_nan() && (self.to_bits() & mantissa_msb) != 0 } - /// For a NaN to be canonical, its mantissa bits must all be unset + /// For a NaN to be canonical, the MSB of the mantissa must be set and + /// all other mantissa bits must be unset. fn is_canonical_nan(&self) -> bool { - let bit_mask: u64 = - 0b1____000_0000_0000____0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111; - let masked_value = self.to_bits() ^ bit_mask; - masked_value == 0x7FFF_FFFF_FFFF_FFFF || masked_value == 0xFFF_FFFF_FFFF_FFFF + self.to_bits() == 0x7FF8_0000_0000_0000 || self.to_bits() == 0xFFF8_0000_0000_0000 } }