]> gitweb.michael.orlitzky.com - dunshire.git/blobdiff - test/symmetric_linear_game_test.py
Add the player2_start() method and some tests for it.
[dunshire.git] / test / symmetric_linear_game_test.py
index 887831a44a68aeae7e8b25514154cfbe53f0309c..6327592b1268429e53cc54df757b275b5e894ad5 100644 (file)
@@ -42,12 +42,19 @@ class SymmetricLinearGameTest(TestCase): # pylint: disable=R0904
         self.assertTrue(abs(first - second) < options.ABS_TOL*modifier)
 
 
         self.assertTrue(abs(first - second) < options.ABS_TOL*modifier)
 
 
-    def test_solutions_dont_change(self):
+    def test_solutions_dont_change_orthant(self):
+        G = random_orthant_game()
+        self.assert_solutions_dont_change(G)
+
+    def test_solutions_dont_change_icecream(self):
+        G = random_icecream_game()
+        self.assert_solutions_dont_change(G)
+
+    def assert_solutions_dont_change(self, G):
         """
         If we solve the same problem twice, we should get
         the same answer both times.
         """
         """
         If we solve the same problem twice, we should get
         the same answer both times.
         """
-        G = random_orthant_game()
         soln1 = G.solution()
         soln2 = G.solution()
         p1_diff = norm(soln1.player1_optimal() - soln2.player1_optimal())
         soln1 = G.solution()
         soln2 = G.solution()
         p1_diff = norm(soln1.player1_optimal() - soln2.player1_optimal())
@@ -61,6 +68,54 @@ class SymmetricLinearGameTest(TestCase): # pylint: disable=R0904
         self.assertTrue(p1_close and p2_close and gv_close)
 
 
         self.assertTrue(p1_close and p2_close and gv_close)
 
 
+    def assert_player1_start_valid(self, G):
+        x = G.player1_start()['x']
+        s = G.player1_start()['s']
+        s1 = s[0:G.dimension()]
+        s2 = s[G.dimension():]
+        self.assert_within_tol(norm(G.A()*x - G.b()), 0)
+        self.assertTrue((s1,s2) in G.C())
+
+
+    def test_player1_start_valid_orthant(self):
+        """
+        Ensure that player one's starting point is in the orthant.
+        """
+        G = random_orthant_game()
+        self.assert_player1_start_valid(G)
+
+
+    def test_player1_start_valid_icecream(self):
+        """
+        Ensure that player one's starting point is in the ice-cream cone.
+        """
+        G = random_icecream_game()
+        self.assert_player1_start_valid(G)
+
+
+    def assert_player2_start_valid(self, G):
+        z = G.player2_start()['z']
+        z1 = z[0:G.dimension()]
+        z2 = z[G.dimension():]
+        self.assertTrue((z1,z2) in G.C())
+
+
+    def test_player2_start_valid_orthant(self):
+        """
+        Ensure that player two's starting point is in the orthant.
+        """
+        G = random_orthant_game()
+        self.assert_player2_start_valid(G)
+
+
+    def test_player2_start_valid_icecream(self):
+        """
+        Ensure that player two's starting point is in the ice-cream cone.
+        """
+        G = random_icecream_game()
+        self.assert_player2_start_valid(G)
+
+
     def test_condition_lower_bound(self):
         """
         Ensure that the condition number of a game is greater than or
     def test_condition_lower_bound(self):
         """
         Ensure that the condition number of a game is greater than or