Skip to content

Commit f39f34c

Browse files
Add tests for games filtering
1 parent 379461f commit f39f34c

File tree

1 file changed

+92
-3
lines changed

1 file changed

+92
-3
lines changed

tests/test_catalog.py

Lines changed: 92 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,101 @@ def test_catalog_load_family_game():
3838

3939
def test_catalog_games(all_games):
4040
"""Test games() function returns df of game slugs and titles"""
41-
all_games = gbt.catalog.games()
4241
slugs = list(all_games.Game)
4342
assert isinstance(all_games, pd.DataFrame)
4443
assert len(all_games) > 0
4544
# Check slug of game in subdir
46-
assert "myerson/fig_4_2" in slugs
47-
assert "myerson_fig_4_2" not in slugs
45+
assert "myerson1991/fig4_2" in slugs
4846
# Check family game present
4947
assert "one_shot_trust" in slugs
48+
# Check a known game title is present
49+
assert "Myerson (1991) Figure 4.2" in list(all_games.Title)
50+
51+
52+
def test_catalog_games_filter_n_actions(all_games):
53+
"""Test games() function can filter on length of gbt.Game attribute 'actions'"""
54+
filtered_games = gbt.catalog.games(n_actions=2)
55+
assert isinstance(filtered_games, pd.DataFrame)
56+
assert len(filtered_games) < len(all_games)
57+
assert all(len(g.actions) == 2 for g in list(filtered_games.Game))
58+
59+
60+
def test_catalog_games_filter_n_contingencies(all_games):
61+
"""Test games() function can filter on length of gbt.Game attribute 'contingencies'"""
62+
filtered_games = gbt.catalog.games(n_contingencies=2)
63+
assert isinstance(filtered_games, pd.DataFrame)
64+
assert len(filtered_games) < len(all_games)
65+
assert all(len(g.contingencies) == 2 for g in list(filtered_games.Game))
66+
67+
68+
def test_catalog_games_filter_n_infosets(all_games):
69+
"""Test games() function can filter on length of gbt.Game attribute 'infosets'"""
70+
filtered_games = gbt.catalog.games(n_infosets=2)
71+
assert isinstance(filtered_games, pd.DataFrame)
72+
assert len(filtered_games) < len(all_games)
73+
assert all(len(g.infosets) == 2 for g in list(filtered_games.Game))
74+
75+
76+
def test_catalog_games_filter_is_const_sum(all_games):
77+
"""Test games() function can filter on boolean gbt.Game attribute 'is_const_sum'"""
78+
filtered_games = gbt.catalog.games(is_const_sum=True)
79+
assert isinstance(filtered_games, pd.DataFrame)
80+
assert len(filtered_games) < len(all_games)
81+
assert all(g.is_const_sum for g in list(filtered_games.Game))
82+
83+
84+
# TODO: Re-introduce this test when there are examples in the catalog without perfect recall
85+
# def test_catalog_games_filter_is_perfect_recall(all_games):
86+
# """Test games() function can filter on boolean gbt.Game attribute 'is_perfect_recall'"""
87+
# filtered_games = gbt.catalog.games(is_perfect_recall=True)
88+
# assert isinstance(filtered_games, pd.DataFrame)
89+
# assert len(filtered_games) < len(all_games)
90+
# assert all(g.is_perfect_recall for g in list(filtered_games.Game))
91+
92+
93+
def test_catalog_games_filter_is_tree(all_games):
94+
"""Test games() function can filter on boolean gbt.Game attribute 'is_tree'"""
95+
filtered_games = gbt.catalog.games(is_tree=True)
96+
assert isinstance(filtered_games, pd.DataFrame)
97+
assert len(filtered_games) < len(all_games)
98+
assert all(g.is_tree for g in list(filtered_games.Game))
99+
100+
101+
def test_catalog_games_filter_min_payoff_and_max_payoff(all_games):
102+
"""Test games() function can filter on min and max payoff values"""
103+
filtered_games = gbt.catalog.games(min_payoff=0, max_payoff=10)
104+
assert isinstance(filtered_games, pd.DataFrame)
105+
assert len(filtered_games) < len(all_games)
106+
assert all(g.min_payoff >= 0 and g.max_payoff <= 10 for g in list(filtered_games.Game))
107+
108+
109+
def test_catalog_games_filter_n_nodes(all_games):
110+
"""Test games() function can filter on length of gbt.Game attribute 'nodes'"""
111+
filtered_games = gbt.catalog.games(n_nodes=5)
112+
assert isinstance(filtered_games, pd.DataFrame)
113+
assert len(filtered_games) < len(all_games)
114+
assert all(len(g.nodes) == 5 for g in list(filtered_games.Game))
115+
116+
117+
def test_catalog_games_filter_n_outcomes(all_games):
118+
"""Test games() function can filter on length of gbt.Game attribute 'outcomes'"""
119+
filtered_games = gbt.catalog.games(n_outcomes=3)
120+
assert isinstance(filtered_games, pd.DataFrame)
121+
assert len(filtered_games) < len(all_games)
122+
assert all(len(g.outcomes) == 3 for g in list(filtered_games.Game))
123+
124+
125+
def test_catalog_games_filter_n_players(all_games):
126+
"""Test games() function can filter on length of gbt.Game attribute 'players'"""
127+
filtered_games = gbt.catalog.games(n_players=2)
128+
assert isinstance(filtered_games, pd.DataFrame)
129+
assert len(filtered_games) < len(all_games)
130+
assert all(len(g.players) == 2 for g in list(filtered_games.Game))
131+
132+
133+
def test_catalog_games_filter_n_strategies(all_games):
134+
"""Test games() function can filter on length of gbt.Game attribute 'strategies'"""
135+
filtered_games = gbt.catalog.games(n_strategies=4)
136+
assert isinstance(filtered_games, pd.DataFrame)
137+
assert len(filtered_games) < len(all_games)
138+
assert all(len(g.strategies) == 4 for g in list(filtered_games.Game))

0 commit comments

Comments
 (0)