|
2 | 2 | """Test the Quantity class Array API compatibility."""
|
3 | 3 |
|
4 | 4 | import astropy.units as u
|
5 |
| -import numpy as np |
6 | 5 |
|
7 | 6 | from quantity import Quantity, api
|
8 | 7 |
|
| 8 | +from .conftest import ARRAY_NAMESPACES |
| 9 | + |
9 | 10 |
|
10 | 11 | def test_issubclass_api():
|
11 | 12 | """Test that Quantity is a subclass of api.Quantity and api.QuantityArray."""
|
12 | 13 | assert issubclass(Quantity, api.Quantity)
|
13 | 14 | assert issubclass(Quantity, api.QuantityArray)
|
14 | 15 |
|
15 | 16 |
|
16 |
| -def test_isintsance_api(): |
17 |
| - """Test that Quantity is an instance of api.Quantity and api.QuantityArray.""" |
18 |
| - q = Quantity(value=np.array([1, 2, 3]), unit=u.m) |
19 |
| - assert isinstance(q, api.Quantity) |
20 |
| - assert isinstance(q, api.QuantityArray) |
| 17 | +def test_astropy_quantity(): |
| 18 | + assert issubclass(u.Quantity, api.Quantity) |
| 19 | + assert issubclass(u.Quantity, api.QuantityArray) |
| 20 | + aq = u.Quantity(1.0, u.m) |
| 21 | + assert isinstance(aq, api.Quantity) |
| 22 | + assert isinstance(aq, api.QuantityArray) |
| 23 | + |
| 24 | + |
| 25 | +class IsinstanceAPITests: |
| 26 | + """Check Quantities are properly recognized independent of the array type.""" |
| 27 | + |
| 28 | + # Note: the actual test classes are created at the end |
| 29 | + |
| 30 | + @classmethod |
| 31 | + def setup_class(cls): |
| 32 | + super().setup_class() |
| 33 | + cls.a = cls.xp.asarray([1.0, 2.0, 3.0]) |
| 34 | + cls.q = Quantity(cls.a, u.m) |
| 35 | + |
| 36 | + def test_issubclass_api(self): |
| 37 | + assert not issubclass(type(self.a), api.Quantity) |
| 38 | + assert not issubclass(type(self.a), api.QuantityArray) |
| 39 | + # The two below Duplicate test_issubclass_api above, but OK to have |
| 40 | + # it more and less explicit. |
| 41 | + assert issubclass(type(self.q), api.Quantity) |
| 42 | + assert issubclass(type(self.q), api.QuantityArray) |
| 43 | + |
| 44 | + def test_isinstance_api(self): |
| 45 | + assert not isinstance(self.a, api.Quantity) |
| 46 | + assert not isinstance(self.a, api.QuantityArray) |
| 47 | + assert isinstance(self.q, api.Quantity) |
| 48 | + assert isinstance(self.q, api.QuantityArray) |
| 49 | + |
| 50 | + |
| 51 | +# Create the test classes for the different array types. |
| 52 | +for base_setup in ARRAY_NAMESPACES: |
| 53 | + for tests in (IsinstanceAPITests,): |
| 54 | + name = f"Test{tests.__name__}{base_setup.__name__}" |
| 55 | + globals()[name] = type(name, (tests, base_setup), {}) |
0 commit comments