Skip to content

Commit 27b528b

Browse files
committed
#172 Add test for v2 typing module
1 parent ec55480 commit 27b528b

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed

tests/test_v2_typing.py

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
# standard library
2+
from dataclasses import dataclass
3+
from typing import Any, Tuple, Union
4+
5+
6+
# dependencies
7+
import numpy as np
8+
from xarray_dataclasses.v2.typing import (
9+
Attr,
10+
Coord,
11+
Coordof,
12+
Data,
13+
Dataof,
14+
Role,
15+
get_dims,
16+
get_dtype,
17+
get_name,
18+
get_role,
19+
)
20+
from pytest import mark
21+
from typing_extensions import Annotated as Ann, Literal as L
22+
23+
24+
# test data
25+
@dataclass
26+
class DataClass:
27+
data: Any
28+
29+
30+
testdata_dims = [
31+
(Coord[Tuple[()], Any], ()),
32+
(Coord[L["x"], Any], ("x",)),
33+
(Coord[Tuple[L["x"]], Any], ("x",)),
34+
(Coord[Tuple[L["x"], L["y"]], Any], ("x", "y")),
35+
(Coordof[DataClass], None),
36+
(Data[Tuple[()], Any], ()),
37+
(Data[L["x"], Any], ("x",)),
38+
(Data[Tuple[L["x"]], Any], ("x",)),
39+
(Data[Tuple[L["x"], L["y"]], Any], ("x", "y")),
40+
(Dataof[DataClass], None),
41+
(Ann[Coord[L["x"], Any], "coord"], ("x",)),
42+
(Ann[Coordof[DataClass], "coord"], None),
43+
(Ann[Data[L["x"], Any], "data"], ("x",)),
44+
(Ann[Dataof[DataClass], "data"], None),
45+
(Union[Ann[Coord[L["x"], Any], "coord"], Ann[Any, "any"]], ("x",)),
46+
(Union[Ann[Coordof[DataClass], "coord"], Ann[Any, "any"]], None),
47+
(Union[Ann[Data[L["x"], Any], "data"], Ann[Any, "any"]], ("x",)),
48+
(Union[Ann[Dataof[DataClass], "data"], Ann[Any, "any"]], None),
49+
]
50+
51+
testdata_dtype = [
52+
(Coord[Any, Any], None),
53+
(Coord[Any, None], None),
54+
(Coord[Any, int], np.dtype("i8")),
55+
(Coord[Any, L["i8"]], np.dtype("i8")),
56+
(Coordof[DataClass], None),
57+
(Data[Any, Any], None),
58+
(Data[Any, None], None),
59+
(Data[Any, int], np.dtype("i8")),
60+
(Data[Any, L["i8"]], np.dtype("i8")),
61+
(Dataof[DataClass], None),
62+
(Ann[Coord[Any, float], "coord"], np.dtype("f8")),
63+
(Ann[Coordof[DataClass], "coord"], None),
64+
(Ann[Data[Any, float], "data"], np.dtype("f8")),
65+
(Ann[Dataof[DataClass], "data"], None),
66+
(Union[Ann[Coord[Any, float], "coord"], Ann[Any, "any"]], np.dtype("f8")),
67+
(Union[Ann[Coordof[DataClass], "coord"], Ann[Any, "any"]], None),
68+
(Union[Ann[Data[Any, float], "data"], Ann[Any, "any"]], np.dtype("f8")),
69+
(Union[Ann[Dataof[DataClass], "data"], Ann[Any, "any"]], None),
70+
]
71+
72+
testdata_name = [
73+
(Attr[Any], None),
74+
(Coord[Any, Any], None),
75+
(Coordof[DataClass], None),
76+
(Data[Any, Any], None),
77+
(Dataof[DataClass], None),
78+
(Any, None),
79+
(Ann[Attr[Any], "attr"], "attr"),
80+
(Ann[Coord[Any, Any], "coord"], "coord"),
81+
(Ann[Coordof[DataClass], "coord"], "coord"),
82+
(Ann[Data[Any, Any], "data"], "data"),
83+
(Ann[Dataof[DataClass], "data"], "data"),
84+
(Ann[Any, "other"], None),
85+
(Ann[Attr[Any], ..., "attr"], None),
86+
(Ann[Coord[Any, Any], ..., "coord"], None),
87+
(Ann[Coordof[DataClass], ..., "coord"], None),
88+
(Ann[Data[Any, Any], ..., "data"], None),
89+
(Ann[Dataof[DataClass], ..., "data"], None),
90+
(Ann[Any, ..., "other"], None),
91+
(Union[Ann[Attr[Any], "attr"], Ann[Any, "any"]], "attr"),
92+
(Union[Ann[Coord[Any, Any], "coord"], Ann[Any, "any"]], "coord"),
93+
(Union[Ann[Coordof[DataClass], "coord"], Ann[Any, "any"]], "coord"),
94+
(Union[Ann[Data[Any, Any], "data"], Ann[Any, "any"]], "data"),
95+
(Union[Ann[Dataof[DataClass], "data"], Ann[Any, "any"]], "data"),
96+
(Union[Ann[Any, "other"], Ann[Any, "any"]], None),
97+
]
98+
99+
testdata_role = [
100+
(Attr[Any], Role.ATTR),
101+
(Coord[Any, Any], Role.COORD),
102+
(Coordof[DataClass], Role.COORD),
103+
(Data[Any, Any], Role.DATA),
104+
(Dataof[DataClass], Role.DATA),
105+
(Any, Role.OTHER),
106+
(Ann[Attr[Any], "attr"], Role.ATTR),
107+
(Ann[Coord[Any, Any], "coord"], Role.COORD),
108+
(Ann[Coordof[DataClass], "coord"], Role.COORD),
109+
(Ann[Data[Any, Any], "data"], Role.DATA),
110+
(Ann[Dataof[DataClass], "data"], Role.DATA),
111+
(Ann[Any, "other"], Role.OTHER),
112+
(Union[Ann[Attr[Any], "attr"], Ann[Any, "any"]], Role.ATTR),
113+
(Union[Ann[Coord[Any, Any], "coord"], Ann[Any, "any"]], Role.COORD),
114+
(Union[Ann[Coordof[DataClass], "coord"], Ann[Any, "any"]], Role.COORD),
115+
(Union[Ann[Data[Any, Any], "data"], Ann[Any, "any"]], Role.DATA),
116+
(Union[Ann[Dataof[DataClass], "data"], Ann[Any, "any"]], Role.DATA),
117+
(Union[Ann[Any, "other"], Ann[Any, "any"]], Role.OTHER),
118+
]
119+
120+
121+
# test functions
122+
@mark.parametrize("tp, dims", testdata_dims)
123+
def test_get_dims(tp: Any, dims: Any) -> None:
124+
assert get_dims(tp) == dims
125+
126+
127+
@mark.parametrize("tp, dtype", testdata_dtype)
128+
def test_get_dtype(tp: Any, dtype: Any) -> None:
129+
assert get_dtype(tp) == dtype
130+
131+
132+
@mark.parametrize("tp, name", testdata_name)
133+
def test_get_name(tp: Any, name: Any) -> None:
134+
assert get_name(tp) == name
135+
136+
137+
@mark.parametrize("tp, role", testdata_role)
138+
def test_get_role(tp: Any, role: Any) -> None:
139+
assert get_role(tp) is role

0 commit comments

Comments
 (0)