@@ -38,12 +38,101 @@ def test_catalog_load_family_game():
3838
3939def 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