Skip to content

Commit f745b3b

Browse files
Enhance test coverage
1 parent b53423c commit f745b3b

File tree

2 files changed

+97
-53
lines changed

2 files changed

+97
-53
lines changed

bluecast/tests/conftest.py

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
Session-scoped fixtures avoid redundant model training across test files.
44
"""
55

6-
import numpy as np
7-
import pandas as pd
86
import pytest
97

108
from bluecast.blueprints.cast import BlueCast
@@ -27,12 +25,6 @@
2725
)
2826

2927

30-
@pytest.fixture(scope="session")
31-
def fast_training_config():
32-
"""TrainingConfig tuned for speed in tests."""
33-
return TrainingConfig(**_FAST_TRAINING_CONFIG_KWARGS)
34-
35-
3628
@pytest.fixture(scope="session")
3729
def synthetic_binary_data():
3830
"""200-row synthetic binary classification dataset."""
@@ -63,48 +55,3 @@ def trained_bluecast_regression(synthetic_regression_data):
6355
df = synthetic_regression_data.copy()
6456
automl.fit(df, target_col="target")
6557
return automl
66-
67-
68-
@pytest.fixture(scope="session")
69-
def small_inline_data():
70-
"""Standard 6-feature, 20-row DataFrame used across many tests."""
71-
x_train = pd.DataFrame(
72-
{
73-
"feature1": [i for i in range(20)],
74-
"feature2": [i for i in range(20)],
75-
"feature3": [i for i in range(20)],
76-
"feature4": [i for i in range(20)],
77-
"feature5": [i for i in range(20)],
78-
"feature6": [i for i in range(20)],
79-
}
80-
)
81-
x_test = pd.DataFrame(
82-
{
83-
"feature1": [i for i in range(20)],
84-
"feature2": [i for i in range(20)],
85-
"feature3": [i for i in range(20)],
86-
"feature4": [i for i in range(20)],
87-
"feature5": [i for i in range(20)],
88-
"feature6": [i for i in range(20)],
89-
}
90-
)
91-
y_train = pd.Series([0] * 10 + [1] * 10)
92-
y_test = pd.Series([0] * 10 + [1] * 10)
93-
return x_train, x_test, y_train, y_test
94-
95-
96-
@pytest.fixture(scope="session")
97-
def small_regression_data():
98-
"""Standard 6-feature, 20-row DataFrame for regression tests."""
99-
x = pd.DataFrame(
100-
{
101-
"feature1": list(range(20)),
102-
"feature2": list(range(20)),
103-
"feature3": list(range(20)),
104-
"feature4": list(range(20)),
105-
"feature5": list(range(20)),
106-
"feature6": list(range(20)),
107-
}
108-
)
109-
y = pd.Series(np.random.default_rng(42).standard_normal(20))
110-
return x.copy(), x.copy(), y.copy(), y.copy()
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
"""Targeted tests to cover previously uncovered code paths."""
2+
3+
import pandas as pd
4+
5+
from bluecast.config.training_config import (
6+
CatboostFinalParamConfig,
7+
CatboostRegressionFinalParamConfig,
8+
CatboostTuneParamsConfig,
9+
CatboostTuneParamsRegressionConfig,
10+
TrainingConfig,
11+
XgboostFinalParamConfig,
12+
XgboostRegressionFinalParamConfig,
13+
XgboostTuneParamsConfig,
14+
XgboostTuneParamsRegressionConfig,
15+
)
16+
from bluecast.preprocessing.train_test_split import train_test_split_time
17+
18+
19+
class TestConfigRepr:
20+
def test_training_config_repr(self):
21+
tc = TrainingConfig()
22+
r = repr(tc)
23+
assert "TrainingConfig(" in r
24+
assert "global_random_state=33" in r
25+
26+
def test_xgboost_tune_params_repr(self):
27+
cfg = XgboostTuneParamsConfig()
28+
r = repr(cfg)
29+
assert "XgboostTuneParamsConfig(" in r
30+
assert "max_depth_min" in r
31+
32+
def test_xgboost_tune_params_regression_repr(self):
33+
cfg = XgboostTuneParamsRegressionConfig()
34+
r = repr(cfg)
35+
assert "XgboostTuneParamsRegressionConfig(" in r
36+
37+
def test_xgboost_final_param_repr(self):
38+
cfg = XgboostFinalParamConfig()
39+
r = repr(cfg)
40+
assert "XgboostFinalParamConfig(" in r
41+
assert "params=" in r
42+
43+
def test_xgboost_regression_final_param_repr(self):
44+
cfg = XgboostRegressionFinalParamConfig()
45+
r = repr(cfg)
46+
assert "XgboostRegressionFinalParamConfig(" in r
47+
48+
def test_catboost_tune_params_repr(self):
49+
cfg = CatboostTuneParamsConfig()
50+
r = repr(cfg)
51+
assert "CatboostTuneParamsConfig(" in r
52+
53+
def test_catboost_tune_params_regression_repr(self):
54+
cfg = CatboostTuneParamsRegressionConfig()
55+
r = repr(cfg)
56+
assert "CatboostTuneParamsRegressionConfig(" in r
57+
58+
def test_catboost_final_param_repr(self):
59+
cfg = CatboostFinalParamConfig()
60+
r = repr(cfg)
61+
assert "CatboostFinalParamConfig(" in r
62+
assert "params=" in r
63+
64+
def test_catboost_regression_final_param_repr(self):
65+
cfg = CatboostRegressionFinalParamConfig()
66+
r = repr(cfg)
67+
assert "CatboostRegressionFinalParamConfig(" in r
68+
69+
70+
class TestShapWaterfallIndicesElseBranch:
71+
def test_shap_waterfall_indices_with_value(self):
72+
tc = TrainingConfig(shap_waterfall_indices=[0, 5, 99])
73+
assert tc.shap_waterfall_indices == [0, 5, 99]
74+
75+
def test_shap_waterfall_indices_default(self):
76+
tc = TrainingConfig()
77+
assert tc.shap_waterfall_indices == []
78+
79+
80+
class TestTrainTestSplitTimeFString:
81+
def test_time_split_with_column(self):
82+
df = pd.DataFrame(
83+
{"a": range(50), "b": range(50), "order": range(50), "target": range(50)}
84+
)
85+
x_train, x_test, y_train, y_test = train_test_split_time(
86+
df, "target", "order", 0.8
87+
)
88+
assert len(x_train) == 40
89+
assert len(x_test) == 10
90+
91+
def test_time_split_without_column(self):
92+
df = pd.DataFrame({"a": range(50), "b": range(50), "target": range(50)})
93+
x_train, x_test, y_train, y_test = train_test_split_time(
94+
df, "target", "", 0.8
95+
)
96+
assert len(x_train) == 40
97+
assert len(x_test) == 10

0 commit comments

Comments
 (0)