Skip to content

Commit 57f9cc0

Browse files
authored
test: ensure expected data has every column of theresult data (#2296)
1 parent 9da549e commit 57f9cc0

File tree

8 files changed

+45
-48
lines changed

8 files changed

+45
-48
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ If you want to run PySpark-related tests, you'll need to have Java installed. Re
109109
110110
2. Install Narwhals: `uv pip install -e . --group local-dev"`. This will include fast-ish core libraries and dev dependencies.
111111
If you also want to test other libraries like Dask , PySpark, and Modin, you can install them too with
112-
`uv pip install -e ".[dask, pyspark, modin]" --group local-dev"`.
112+
`uv pip install -e ".[dask, pyspark, modin]" --group local-dev`.
113113
114114
You should also install pre-commit:
115115

tests/expr_and_series/cum_count_test.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,19 @@ def test_lazy_cum_count_grouped(
7575
constructor(
7676
{
7777
"arg entina": [None, 2, 3],
78-
"ban gkock": [1, 0, 2],
78+
"ban gkok": [1, 0, 2],
7979
"i ran": [0, 1, 2],
8080
"g": [1, 1, 1],
8181
}
8282
)
8383
)
8484
result = df.with_columns(
85-
nw.col("arg entina").cum_count(reverse=reverse).over("g", order_by="ban gkock")
85+
nw.col("arg entina").cum_count(reverse=reverse).over("g", order_by="ban gkok")
8686
).sort("i ran")
87-
expected = {"arg entina": expected_a, "ban gkock": [1, 0, 2], "i ran": [0, 1, 2]}
87+
expected = {
88+
"arg entina": expected_a,
89+
"ban gkok": [1, 0, 2],
90+
"i ran": [0, 1, 2],
91+
"g": [1, 1, 1],
92+
}
8893
assert_equal_data(result, expected)

tests/expr_and_series/cum_max_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def test_lazy_cum_max_grouped(
8383
result = df.with_columns(
8484
nw.col("a").cum_max(reverse=reverse).over("g", order_by="b")
8585
).sort("i")
86-
expected = {"a": expected_a, "b": [1, 0, 2], "i": [0, 1, 2]}
86+
expected = {"a": expected_a, "b": [1, 0, 2], "i": [0, 1, 2], "g": [1, 1, 1]}
8787
assert_equal_data(result, expected)
8888

8989

@@ -134,6 +134,7 @@ def test_lazy_cum_max_ordered_by_nulls(
134134
"a": expected_a,
135135
"b": [1, -1, 3, 2, 5, 0, None],
136136
"i": [0, 1, 2, 3, 4, 5, 6],
137+
"g": [1, 1, 1, 1, 1, 1, 1],
137138
}
138139
assert_equal_data(result, expected)
139140

tests/expr_and_series/cum_min_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def test_lazy_cum_min_grouped(
8383
result = df.with_columns(
8484
nw.col("a").cum_min(reverse=reverse).over("g", order_by="b")
8585
).sort("i")
86-
expected = {"a": expected_a, "b": [1, 0, 2], "i": [0, 1, 2]}
86+
expected = {"a": expected_a, "b": [1, 0, 2], "i": [0, 1, 2], "g": [1, 1, 1]}
8787
assert_equal_data(result, expected)
8888

8989

@@ -134,6 +134,7 @@ def test_lazy_cum_min_ordered_by_nulls(
134134
"a": expected_a,
135135
"b": [1, -1, 3, 2, 5, 0, None],
136136
"i": [0, 1, 2, 3, 4, 5, 6],
137+
"g": [1, 1, 1, 1, 1, 1, 1],
137138
}
138139
assert_equal_data(result, expected)
139140

tests/expr_and_series/cum_prod_test.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,24 @@ def test_lazy_cum_prod_grouped(
8888
if "cudf" in str(constructor):
8989
# https://github.com/rapidsai/cudf/issues/18159
9090
request.applymarker(pytest.mark.xfail)
91-
if "sqlframe" in str(constructor):
92-
# https://github.com/eakmanrq/sqlframe/issues/348
93-
request.applymarker(pytest.mark.xfail)
9491

9592
df = nw.from_native(
9693
constructor(
9794
{
9895
"arg entina": [1, 2, 3],
99-
"ban gkock": [1, 0, 2],
96+
"ban gkok": [1, 0, 2],
10097
"i ran": [0, 1, 2],
10198
"g": [1, 1, 1],
10299
}
103100
)
104101
)
105102
result = df.with_columns(
106-
nw.col("arg entina").cum_prod(reverse=reverse).over("g", order_by="ban gkock")
103+
nw.col("arg entina").cum_prod(reverse=reverse).over("g", order_by="ban gkok")
107104
).sort("i ran")
108-
expected = {"arg entina": expected_a, "ban gkock": [1, 0, 2], "i ran": [0, 1, 2]}
105+
expected = {
106+
"arg entina": expected_a,
107+
"ban gkok": [1, 0, 2],
108+
"i ran": [0, 1, 2],
109+
"g": [1, 1, 1],
110+
}
109111
assert_equal_data(result, expected)

tests/expr_and_series/cum_sum_test.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,21 @@ def test_lazy_cum_sum_grouped(
6262
constructor(
6363
{
6464
"arg entina": [1, 2, 3],
65-
"ban gkock": [1, 0, 2],
65+
"ban gkok": [1, 0, 2],
6666
"i ran": [0, 1, 2],
6767
"g": [1, 1, 1],
6868
}
6969
)
7070
)
7171
result = df.with_columns(
72-
nw.col("arg entina").cum_sum(reverse=reverse).over("g", order_by="ban gkock")
72+
nw.col("arg entina").cum_sum(reverse=reverse).over("g", order_by="ban gkok")
7373
).sort("i ran")
74-
expected = {"arg entina": expected_a, "ban gkock": [1, 0, 2], "i ran": [0, 1, 2]}
74+
expected = {
75+
"arg entina": expected_a,
76+
"ban gkok": [1, 0, 2],
77+
"i ran": [0, 1, 2],
78+
"g": [1, 1, 1],
79+
}
7580
assert_equal_data(result, expected)
7681

7782

@@ -110,19 +115,20 @@ def test_lazy_cum_sum_ordered_by_nulls(
110115
constructor(
111116
{
112117
"arg entina": [1, 2, 3, 1, 2, 3, 4],
113-
"ban gkock": [1, -1, 3, 2, 5, 0, None],
118+
"ban gkok": [1, -1, 3, 2, 5, 0, None],
114119
"i ran": [0, 1, 2, 3, 4, 5, 6],
115120
"g": [1, 1, 1, 1, 1, 1, 1],
116121
}
117122
)
118123
)
119124
result = df.with_columns(
120-
nw.col("arg entina").cum_sum(reverse=reverse).over("g", order_by="ban gkock")
125+
nw.col("arg entina").cum_sum(reverse=reverse).over("g", order_by="ban gkok")
121126
).sort("i ran")
122127
expected = {
123128
"arg entina": expected_a,
124-
"ban gkock": [1, -1, 3, 2, 5, 0, None],
129+
"ban gkok": [1, -1, 3, 2, 5, 0, None],
125130
"i ran": [0, 1, 2, 3, 4, 5, 6],
131+
"g": [1, 1, 1, 1, 1, 1, 1],
126132
}
127133
assert_equal_data(result, expected)
128134

@@ -156,15 +162,15 @@ def test_lazy_cum_sum_ungrouped(
156162
constructor(
157163
{
158164
"arg entina": [2, 3, 1],
159-
"ban gkock": [0, 2, 1],
165+
"ban gkok": [0, 2, 1],
160166
"i ran": [1, 2, 0],
161167
}
162168
)
163169
).sort("i ran")
164170
result = df.with_columns(
165-
nw.col("arg entina").cum_sum(reverse=reverse).over(order_by="ban gkock")
171+
nw.col("arg entina").cum_sum(reverse=reverse).over(order_by="ban gkok")
166172
).sort("i ran")
167-
expected = {"arg entina": expected_a, "ban gkock": [1, 0, 2], "i ran": [0, 1, 2]}
173+
expected = {"arg entina": expected_a, "ban gkok": [1, 0, 2], "i ran": [0, 1, 2]}
168174
assert_equal_data(result, expected)
169175

170176

@@ -197,17 +203,17 @@ def test_lazy_cum_sum_ungrouped_ordered_by_nulls(
197203
constructor(
198204
{
199205
"arg entina": [1, 2, 3, 1, 2, 3, 4],
200-
"ban gkock": [1, -1, 3, 2, 5, 0, None],
206+
"ban gkok": [1, -1, 3, 2, 5, 0, None],
201207
"i ran": [0, 1, 2, 3, 4, 5, 6],
202208
}
203209
)
204210
).sort("i ran")
205211
result = df.with_columns(
206-
nw.col("arg entina").cum_sum(reverse=reverse).over(order_by="ban gkock")
212+
nw.col("arg entina").cum_sum(reverse=reverse).over(order_by="ban gkok")
207213
).sort("i ran")
208214
expected = {
209215
"arg entina": expected_a,
210-
"ban gkock": [1, -1, 3, 2, 5, 0, None],
216+
"ban gkok": [1, -1, 3, 2, 5, 0, None],
211217
"i ran": [0, 1, 2, 3, 4, 5, 6],
212218
}
213219
assert_equal_data(result, expected)

tests/expr_and_series/over_test.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,12 @@ def test_over_multiple(constructor: Constructor) -> None:
8888
if "duckdb" in str(constructor) and DUCKDB_VERSION < (1, 3):
8989
pytest.skip()
9090
df = nw.from_native(constructor(data))
91-
expected = {
92-
"a": ["a", "a", "b", "b", "b"],
93-
"b": [1, 2, 3, 3, 5],
94-
"c": [5, 4, 3, 1, 2],
95-
"i": list(range(5)),
96-
"c_min": [5, 4, 1, 1, 2],
97-
}
9891
expected = {
9992
"a": ["a", "a", "b", "b", "b"],
10093
"b": [1, 2, 3, 5, 3],
10194
"c": [5, 4, 3, 2, 1],
95+
"i": list(range(5)),
96+
"c_min": [5, 4, 1, 2, 1],
10297
}
10398

10499
result = df.with_columns(c_min=nw.col("c").min().over("a", "b")).sort("i")

tests/utils.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def get_module_version_as_tuple(module_name: str) -> tuple[int, ...]:
4848

4949
def zip_strict(left: Sequence[Any], right: Sequence[Any]) -> Iterator[Any]:
5050
if len(left) != len(right):
51-
msg = f"left {len(left)=} != right {len(right)=}" # pragma: no cover
51+
msg = f"{len(left)=} != {len(right)=}\nLeft: {left}\nRight: {right}" # pragma: no cover
5252
raise ValueError(msg) # pragma: no cover
5353
return zip(left, right)
5454

@@ -70,21 +70,6 @@ def _to_comparable_list(column_values: Any) -> Any:
7070
return list(column_values)
7171

7272

73-
def _sort_dict_by_key(
74-
data_dict: Mapping[str, list[Any]], key: str
75-
) -> dict[str, list[Any]]: # pragma: no cover
76-
sort_list = data_dict[key]
77-
sorted_indices = sorted(
78-
range(len(sort_list)),
79-
key=lambda i: (
80-
(sort_list[i] is None)
81-
or (isinstance(sort_list[i], float) and math.isnan(sort_list[i])),
82-
sort_list[i],
83-
),
84-
)
85-
return {key: [value[i] for i in sorted_indices] for key, value in data_dict.items()}
86-
87-
8873
def assert_equal_data(result: Any, expected: Mapping[str, Any]) -> None:
8974
is_duckdb = (
9075
hasattr(result, "_compliant_frame")
@@ -103,7 +88,9 @@ def assert_equal_data(result: Any, expected: Mapping[str, Any]) -> None:
10388
result = result.collect(**kwargs.get(result.implementation, {}))
10489

10590
if hasattr(result, "columns"):
106-
for idx, (col, key) in enumerate(zip(result.columns, expected.keys())):
91+
for idx, (col, key) in enumerate(
92+
zip_strict(result.columns, list(expected.keys()))
93+
):
10794
assert col == key, f"Expected column name {key} at index {idx}, found {col}"
10895
result = {key: _to_comparable_list(result[key]) for key in expected}
10996
assert list(result.keys()) == list(expected.keys()), (

0 commit comments

Comments
 (0)