|
1 | | -from ._array_module import (e, inf, nan, pi, equal, isnan, abs, full, |
2 | | - float64, less, isinf, greater, all) |
3 | | -from .array_helpers import one |
| 1 | +import math |
4 | 2 |
|
5 | | -def test_e(): |
6 | | - # Check that e acts as a scalar |
7 | | - E = full((1,), e, dtype=float64) |
| 3 | +import pytest |
8 | 4 |
|
9 | | - # We don't require any accuracy. This is just a smoke test to check that |
10 | | - # 'e' is actually the constant e. |
11 | | - assert all(less(abs(E - 2.71), one((1,), dtype=float64))), "e is not the constant e" |
| 5 | +from . import dtype_helpers as dh |
| 6 | +from ._array_module import mod as xp |
| 7 | +from .typing import Array |
12 | 8 |
|
13 | | -def test_pi(): |
14 | | - # Check that pi acts as a scalar |
15 | | - PI = full((1,), pi, dtype=float64) |
16 | 9 |
|
17 | | - # We don't require any accuracy. This is just a smoke test to check that |
18 | | - # 'pi' is actually the constant π. |
19 | | - assert all(less(abs(PI - 3.14), one((1,), dtype=float64))), "pi is not the constant π" |
| 10 | +def assert_0d_float(name: str, x: Array): |
| 11 | + assert dh.is_float_dtype( |
| 12 | + x.dtype |
| 13 | + ), f"xp.asarray(xp.{name})={x!r}, but should have float dtype" |
| 14 | + |
| 15 | + |
| 16 | +@pytest.mark.parametrize("name, n", [("e", math.e), ("pi", math.pi)]) |
| 17 | +def test_irrational(name, n): |
| 18 | + assert hasattr(xp, name) |
| 19 | + c = getattr(xp, name) |
| 20 | + floor = math.floor(n) |
| 21 | + assert c > floor, f"xp.{name}={c} <= {floor}" |
| 22 | + ceil = math.ceil(n) |
| 23 | + assert c < ceil, f"xp.{name}={c} >= {ceil}" |
| 24 | + x = xp.asarray(c) |
| 25 | + assert_0d_float("name", x) |
| 26 | + |
20 | 27 |
|
21 | 28 | def test_inf(): |
22 | | - # Check that inf acts as a scalar |
23 | | - INF = full((1,), inf, dtype=float64) |
24 | | - zero = full((1,), 0.0, dtype=float64) |
| 29 | + assert hasattr(xp, "inf") |
| 30 | + assert math.isinf(xp.inf) |
| 31 | + assert xp.inf > 0, "xp.inf not greater than 0" |
| 32 | + x = xp.asarray(xp.inf) |
| 33 | + assert_0d_float("inf", x) |
| 34 | + assert xp.isinf(x), "xp.isinf(xp.asarray(xp.inf))=False" |
25 | 35 |
|
26 | | - assert all(isinf(INF)), "inf is not infinity" |
27 | | - assert all(greater(INF, zero)), "inf is not positive" |
28 | 36 |
|
29 | 37 | def test_nan(): |
30 | | - # Check that nan acts as a scalar |
31 | | - NAN = full((1,), nan, dtype=float64) |
32 | | - |
33 | | - assert all(isnan(NAN)), "nan is not Not a Number" |
34 | | - assert not all(equal(NAN, NAN)), "nan should be unequal to itself" |
| 38 | + assert hasattr(xp, "nan") |
| 39 | + assert math.isnan(xp.nan) |
| 40 | + assert xp.nan != xp.nan, "xp.nan should not have equality with itself" |
| 41 | + x = xp.asarray(xp.nan) |
| 42 | + assert_0d_float("nan", x) |
| 43 | + assert xp.isnan(x), "xp.isnan(xp.asarray(xp.nan))=False" |
0 commit comments