[iagno] Improve tests.



commit d5f9c290aa5c98a6795d76ec5ce113b1976ade24
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Fri Apr 26 06:55:01 2019 +0200

    Improve tests.

 src/computer-player.vala |  27 ++---
 src/iagno.vala           |   6 +-
 src/test-iagno.vala      | 261 +++++++++++++++++++++++++----------------------
 3 files changed, 149 insertions(+), 145 deletions(-)
---
diff --git a/src/computer-player.vala b/src/computer-player.vala
index 69bc0d5..f8c23e8 100644
--- a/src/computer-player.vala
+++ b/src/computer-player.vala
@@ -108,34 +108,19 @@ private class ComputerPlayer : Object
         }
     }
 
-    /* For tests only. */
-    internal void move ()
+    internal void move_sync (out uint8 x, out uint8 y)      // for tests
     {
-        uint8 x;
-        uint8 y;
-
+        move_pending = true;
         run_search (out x, out y);
+        move_pending = false;
         complete_move (x, y);
     }
 
-    internal bool force_moving (uint8 force_x, uint8 force_y)
+    internal void move (double delay_seconds = 0.0)
     {
-        uint8 x;
-        uint8 y;
-
-        move_pending = true;
-        run_search (out x, out y);
-        complete_move (force_x, force_y);
-
-        print (@"\nx: $x, y: $y");
-
-        return (x == force_x)
-            && (y == force_y);
+        move_async.begin (delay_seconds);
     }
-
-    /* real game */
-
-    internal async void move_async (double delay_seconds = 0.0)
+    private async void move_async (double delay_seconds)
     {
         Timer timer = new Timer ();
         uint8 x = 0; // garbage, should not be needed
diff --git a/src/iagno.vala b/src/iagno.vala
index 844dccd..cddfc7f 100644
--- a/src/iagno.vala
+++ b/src/iagno.vala
@@ -347,7 +347,7 @@ private class Iagno : Gtk.Application
         requires (game_is_set)
     {
         if (game.current_color != player_one && computer != null && !game.is_complete)
-            ((!) computer).move_async.begin (SLOW_MOVE_DELAY);
+            ((!) computer).move (SLOW_MOVE_DELAY);
         else if (game.is_complete)
             game_complete (/* play sound */ false);
     }
@@ -385,7 +385,7 @@ private class Iagno : Gtk.Application
         update_ui ();
 
         if (player_one != Player.DARK && computer != null)
-            ((!) computer).move_async.begin (MODERATE_MOVE_DELAY);     // TODO MODERATE_MOVE_DELAY = 1.0, 
but after the sliding animation…
+            ((!) computer).move (MODERATE_MOVE_DELAY);     // TODO MODERATE_MOVE_DELAY = 1.0, but after the 
sliding animation…
     }
 
     private bool first_player_is_human = false;
@@ -463,7 +463,7 @@ private class Iagno : Gtk.Application
          * but not so long as to become boring.
          */
         if (game.current_color != player_one && computer != null)
-            ((!) computer).move_async.begin (fast_mode ? QUICK_MOVE_DELAY : SLOW_MOVE_DELAY);
+            ((!) computer).move (fast_mode ? QUICK_MOVE_DELAY : SLOW_MOVE_DELAY);
     }
 
     private void pass ()
diff --git a/src/test-iagno.vala b/src/test-iagno.vala
index 8daa160..c6a10d4 100644
--- a/src/test-iagno.vala
+++ b/src/test-iagno.vala
@@ -75,6 +75,25 @@ private class TestIagno : Object
         assert_true (1 + 1 == 2);
     }
 
+    /*\
+    * * utilities
+    \*/
+
+    private static bool ai_move (ComputerPlayer ai, uint8 force_x, uint8 force_y)
+    {
+        uint8 x;
+        uint8 y;
+        ai.move_sync (out x, out y);
+
+        bool success = (x == force_x)
+                    && (y == force_y);
+
+        if (!success)
+            print (@"\nwanted: ($force_x, $force_y), result: ($x, $y)");
+
+        return success;
+    }
+
     /*\
     * * short tests
     \*/
@@ -145,8 +164,8 @@ private class TestIagno : Object
                             " L L L L L L L L",
                             " L L L L L L L L" };
         Game game = new Game.from_strings (board, Player.LIGHT);
-        ComputerPlayer ai = new ComputerPlayer (game);
-        ai.move ();
+        ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 1);
+        assert_true (ai_move (ai, 2, 0));
         /* didn't crash */
     }
 
@@ -161,8 +180,8 @@ private class TestIagno : Object
                             " . . . D . . . .",
                             " . . D . . . . ." };
         Game game = new Game.from_strings (board, Player.LIGHT);
-        ComputerPlayer ai = new ComputerPlayer (game);
-        ai.move ();
+        ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 1);
+        assert_true (ai_move (ai, 4, 6));
         /* didn't crash */
     }
 
@@ -177,8 +196,8 @@ private class TestIagno : Object
                             " L L L L L D D D",
                             " D D D D D D D D" };
         Game game = new Game.from_strings (board, Player.LIGHT);
-        ComputerPlayer ai = new ComputerPlayer (game);
-        ai.move ();
+        ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 1);
+        assert_true (ai_move (ai, 2, 0));
         assert_true (game.get_owner (2, 0) == Player.LIGHT);
     }
 
@@ -193,8 +212,8 @@ private class TestIagno : Object
                             " D D D L L D D D",
                             " D D D L D D D D" };
         Game game = new Game.from_strings (board, Player.LIGHT);
-        ComputerPlayer ai = new ComputerPlayer (game);
-        ai.move ();
+        ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 1);
+        assert_true (ai_move (ai, 1, 0));
         assert_true (game.get_owner (1, 0) == Player.LIGHT);
     }
 
@@ -209,8 +228,8 @@ private class TestIagno : Object
                             " . L L L D L L L",
                             " . . L L L L L L" };
         Game game = new Game.from_strings (board, Player.LIGHT);
-        ComputerPlayer ai = new ComputerPlayer (game);
-        ai.move ();
+        ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 1);
+        assert_true (ai_move (ai, 0, 5));
         /* didn't crash */
     }
 
@@ -234,61 +253,61 @@ private class TestIagno : Object
         ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 3);
 
         assert_true (game.place_tile (4, 1));
-        assert_true (ai.force_moving (5, 5));
+        assert_true (ai_move (ai, 5, 5));
         assert_true (game.place_tile (4, 5));
-        assert_true (ai.force_moving (3, 5));
+        assert_true (ai_move (ai, 3, 5));
         assert_true (game.place_tile (2, 5));
-        assert_true (ai.force_moving (2, 4));
+        assert_true (ai_move (ai, 2, 4));
         assert_true (game.place_tile (4, 6));
-        assert_true (ai.force_moving (2, 6));
+        assert_true (ai_move (ai, 2, 6));
         assert_true (game.place_tile (1, 4));
-        assert_true (ai.force_moving (0, 4));
+        assert_true (ai_move (ai, 0, 4));
         assert_true (game.place_tile (2, 3));
-        assert_true (ai.force_moving (1, 3));
+        assert_true (ai_move (ai, 1, 3));
         assert_true (game.place_tile (1, 5));
-        assert_true (ai.force_moving (2, 2));
+        assert_true (ai_move (ai, 2, 2));
         assert_true (game.place_tile (3, 2));
-        assert_true (ai.force_moving (5, 2));
+        assert_true (ai_move (ai, 5, 2));
         assert_true (game.place_tile (6, 4));
-        assert_true (ai.force_moving (5, 6));
+        assert_true (ai_move (ai, 5, 6));
         assert_true (game.place_tile (3, 0));
-        assert_true (ai.force_moving (0, 5));
+        assert_true (ai_move (ai, 0, 5));
         assert_true (game.place_tile (3, 6));
-        assert_true (ai.force_moving (5, 7));
+        assert_true (ai_move (ai, 5, 7));
         assert_true (game.place_tile (0, 3));
-        assert_true (ai.force_moving (0, 2));
+        assert_true (ai_move (ai, 0, 2));
         assert_true (game.place_tile (6, 5));
-        assert_true (ai.force_moving (1, 2));
+        assert_true (ai_move (ai, 1, 2));
         assert_true (game.place_tile (3, 7));
-        assert_true (ai.force_moving (2, 7));
+        assert_true (ai_move (ai, 2, 7));
         assert_true (game.place_tile (4, 7));
-        assert_true (ai.force_moving (6, 6));
+        assert_true (ai_move (ai, 6, 6));
         assert_true (game.place_tile (2, 1));
-        assert_true (ai.force_moving (2, 0));
+        assert_true (ai_move (ai, 2, 0));
         assert_true (game.place_tile (1, 0));
-        assert_true (ai.force_moving (1, 1));
+        assert_true (ai_move (ai, 1, 1));
         assert_true (game.place_tile (6, 2));
-        assert_true (ai.force_moving (4, 0));
+        assert_true (ai_move (ai, 4, 0));
         assert_true (game.place_tile (5, 0));
-        assert_true (ai.force_moving (7, 3));
+        assert_true (ai_move (ai, 7, 3));
         assert_true (game.place_tile (6, 3));
-        assert_true (ai.force_moving (7, 2));
+        assert_true (ai_move (ai, 7, 2));
         assert_true (game.place_tile (5, 1));
-        assert_true (ai.force_moving (6, 1));
+        assert_true (ai_move (ai, 6, 1));
         assert_true (game.place_tile (7, 4));
-        assert_true (ai.force_moving (7, 5));
+        assert_true (ai_move (ai, 7, 5));
         assert_true (game.place_tile (7, 1));
-        assert_true (ai.force_moving (7, 0));
+        assert_true (ai_move (ai, 7, 0));
         assert_true (game.place_tile (7, 7));
-        assert_true (ai.force_moving (6, 7));
+        assert_true (ai_move (ai, 6, 7));
         assert_true (game.place_tile (7, 6));
-        assert_true (ai.force_moving (6, 0));
+        assert_true (ai_move (ai, 6, 0));
         assert_true (game.place_tile (0, 0));
-        assert_true (ai.force_moving (0, 1));
+        assert_true (ai_move (ai, 0, 1));
         assert_true (game.place_tile (0, 6));
-        assert_true (ai.force_moving (1, 6));
+        assert_true (ai_move (ai, 1, 6));
         assert_true (game.place_tile (1, 7));
-        assert_true (ai.force_moving (0, 7));
+        assert_true (ai_move (ai, 0, 7));
     }
 
     private static void test_complete_game_2 ()
@@ -307,61 +326,61 @@ private class TestIagno : Object
         ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 3);
 
         assert_true (game.place_tile (4, 2));
-        assert_true (ai.force_moving (5, 5));
+        assert_true (ai_move (ai, 5, 5));
         assert_true (game.place_tile (6, 4));
-        assert_true (ai.force_moving (5, 2));
+        assert_true (ai_move (ai, 5, 2));
         assert_true (game.place_tile (6, 5));
-        assert_true (ai.force_moving (2, 2));
+        assert_true (ai_move (ai, 2, 2));
         assert_true (game.place_tile (3, 1));
-        assert_true (ai.force_moving (4, 5));
+        assert_true (ai_move (ai, 4, 5));
         assert_true (game.place_tile (3, 5));
-        assert_true (ai.force_moving (6, 3));
+        assert_true (ai_move (ai, 6, 3));
         assert_true (game.place_tile (2, 4));
-        assert_true (ai.force_moving (3, 6));
+        assert_true (ai_move (ai, 3, 6));
         assert_true (game.place_tile (7, 3));
-        assert_true (ai.force_moving (2, 5));
+        assert_true (ai_move (ai, 2, 5));
         assert_true (game.place_tile (3, 7));
-        assert_true (ai.force_moving (7, 5));
+        assert_true (ai_move (ai, 7, 5));
         assert_true (game.place_tile (5, 6));
-        assert_true (ai.force_moving (5, 7));
+        assert_true (ai_move (ai, 5, 7));
         assert_true (game.place_tile (6, 2));
-        assert_true (ai.force_moving (4, 6));
+        assert_true (ai_move (ai, 4, 6));
         assert_true (game.place_tile (4, 7));
-        assert_true (ai.force_moving (2, 7));
+        assert_true (ai_move (ai, 2, 7));
         assert_true (game.place_tile (1, 3));
-        assert_true (ai.force_moving (1, 2));
+        assert_true (ai_move (ai, 1, 2));
         assert_true (game.place_tile (0, 2));
-        assert_true (ai.force_moving (2, 1));
+        assert_true (ai_move (ai, 2, 1));
         assert_true (game.place_tile (2, 0));
-        assert_true (ai.force_moving (1, 1));
+        assert_true (ai_move (ai, 1, 1));
         assert_true (game.place_tile (2, 6));
-        assert_true (ai.force_moving (1, 7));
+        assert_true (ai_move (ai, 1, 7));
         assert_true (game.place_tile (4, 1));
-        assert_true (ai.force_moving (7, 4));
+        assert_true (ai_move (ai, 7, 4));
         assert_true (game.place_tile (7, 6));
-        assert_true (ai.force_moving (0, 4));
+        assert_true (ai_move (ai, 0, 4));
         assert_true (game.place_tile (0, 3));
-        assert_true (ai.force_moving (0, 1));
+        assert_true (ai_move (ai, 0, 1));
         assert_true (game.place_tile (1, 4));
-        assert_true (ai.force_moving (6, 6));
+        assert_true (ai_move (ai, 6, 6));
         assert_true (game.place_tile (1, 6));
-        assert_true (ai.force_moving (4, 0));
+        assert_true (ai_move (ai, 4, 0));
         assert_true (game.place_tile (3, 0));
-        assert_true (ai.force_moving (1, 0));
+        assert_true (ai_move (ai, 1, 0));
         assert_true (game.place_tile (5, 1));
-        assert_true (ai.force_moving (7, 2));
+        assert_true (ai_move (ai, 7, 2));
         assert_true (game.place_tile (7, 7));
-        assert_true (ai.force_moving (6, 0));
+        assert_true (ai_move (ai, 6, 0));
         assert_true (game.place_tile (6, 1));
-        assert_true (ai.force_moving (6, 7));
+        assert_true (ai_move (ai, 6, 7));
         assert_true (game.place_tile (0, 7));
-        assert_true (ai.force_moving (5, 0));
+        assert_true (ai_move (ai, 5, 0));
         assert_true (game.place_tile (0, 0));
-        assert_true (ai.force_moving (0, 6));
+        assert_true (ai_move (ai, 0, 6));
         assert_true (game.place_tile (0, 5));
-        assert_true (ai.force_moving (1, 5));
+        assert_true (ai_move (ai, 1, 5));
         assert_true (game.place_tile (7, 0));
-        assert_true (ai.force_moving (7, 1));
+        assert_true (ai_move (ai, 7, 1));
     }
 
     private static void test_complete_game_3 ()
@@ -379,61 +398,61 @@ private class TestIagno : Object
         Game game = new Game.from_strings (board, Player.DARK);
         ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 3);
 
-        assert_true (ai.force_moving (3, 5));
+        assert_true (ai_move (ai, 3, 5));
         assert_true (game.place_tile (6, 3));
-        assert_true (ai.force_moving (3, 2));
+        assert_true (ai_move (ai, 3, 2));
         assert_true (game.place_tile (2, 3));
-        assert_true (ai.force_moving (1, 4));
+        assert_true (ai_move (ai, 1, 4));
         assert_true (game.place_tile (4, 5));
-        assert_true (ai.force_moving (6, 5));
+        assert_true (ai_move (ai, 6, 5));
         assert_true (game.place_tile (2, 6));
-        assert_true (ai.force_moving (2, 5));
+        assert_true (ai_move (ai, 2, 5));
         assert_true (game.place_tile (3, 6));
-        assert_true (ai.force_moving (2, 2));
+        assert_true (ai_move (ai, 2, 2));
         assert_true (game.place_tile (0, 3));
-        assert_true (ai.force_moving (6, 2));
+        assert_true (ai_move (ai, 6, 2));
         assert_true (game.place_tile (1, 3));
-        assert_true (ai.force_moving (0, 5));
+        assert_true (ai_move (ai, 0, 5));
         assert_true (game.place_tile (4, 1));
-        assert_true (ai.force_moving (5, 1));
+        assert_true (ai_move (ai, 5, 1));
         assert_true (game.place_tile (6, 4));
-        assert_true (ai.force_moving (1, 5));
+        assert_true (ai_move (ai, 1, 5));
         assert_true (game.place_tile (5, 0));
-        assert_true (ai.force_moving (7, 3));
+        assert_true (ai_move (ai, 7, 3));
         assert_true (game.place_tile (2, 4));
-        assert_true (ai.force_moving (3, 0));
+        assert_true (ai_move (ai, 3, 0));
         assert_true (game.place_tile (4, 2));
-        assert_true (ai.force_moving (3, 1));
+        assert_true (ai_move (ai, 3, 1));
         assert_true (game.place_tile (0, 4));
-        assert_true (ai.force_moving (0, 2));
+        assert_true (ai_move (ai, 0, 2));
         assert_true (game.place_tile (1, 2));
-        assert_true (ai.force_moving (4, 7));
+        assert_true (ai_move (ai, 4, 7));
         assert_true (game.place_tile (2, 7));
-        assert_true (ai.force_moving (0, 6));
+        assert_true (ai_move (ai, 0, 6));
         assert_true (game.place_tile (4, 6));
-        assert_true (ai.force_moving (5, 7));
+        assert_true (ai_move (ai, 5, 7));
         assert_true (game.place_tile (5, 6));
-        assert_true (ai.force_moving (2, 1));
+        assert_true (ai_move (ai, 2, 1));
         assert_true (game.place_tile (2, 0));
-        assert_true (ai.force_moving (1, 0));
+        assert_true (ai_move (ai, 1, 0));
         assert_true (game.place_tile (7, 5));
-        assert_true (ai.force_moving (6, 7));
+        assert_true (ai_move (ai, 6, 7));
         assert_true (game.place_tile (7, 2));
-        assert_true (ai.force_moving (7, 6));
+        assert_true (ai_move (ai, 7, 6));
         assert_true (game.place_tile (7, 7));
-        assert_true (ai.force_moving (3, 7));
+        assert_true (ai_move (ai, 3, 7));
         assert_true (game.place_tile (7, 4));
-        assert_true (ai.force_moving (1, 1));
+        assert_true (ai_move (ai, 1, 1));
         assert_true (game.place_tile (6, 6));
-        assert_true (ai.force_moving (6, 1));
+        assert_true (ai_move (ai, 6, 1));
         assert_true (game.place_tile (0, 0));
-        assert_true (ai.force_moving (1, 7));
+        assert_true (ai_move (ai, 1, 7));
         assert_true (game.place_tile (4, 0));
-        assert_true (ai.force_moving (6, 0));
+        assert_true (ai_move (ai, 6, 0));
         assert_true (game.place_tile (0, 7));
-        assert_true (ai.force_moving (0, 1));
+        assert_true (ai_move (ai, 0, 1));
         assert_true (game.place_tile (1, 6));
-        assert_true (ai.force_moving (7, 1));
+        assert_true (ai_move (ai, 7, 1));
         assert_true (game.place_tile (7, 0));
     }
 
@@ -452,64 +471,64 @@ private class TestIagno : Object
         Game game = new Game.from_strings (board, Player.DARK);
         ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 3);
 
-        assert_true (ai.force_moving (5, 4));
+        assert_true (ai_move (ai, 5, 4));
         assert_true (game.place_tile (6, 4));
-        assert_true (ai.force_moving (1, 5));
+        assert_true (ai_move (ai, 1, 5));
         assert_true (game.place_tile (2, 2));
-        assert_true (ai.force_moving (3, 5));
+        assert_true (ai_move (ai, 3, 5));
         assert_true (game.place_tile (1, 4));
-        assert_true (ai.force_moving (6, 3));
+        assert_true (ai_move (ai, 6, 3));
         assert_true (game.place_tile (4, 2));
-        assert_true (ai.force_moving (4, 1));
+        assert_true (ai_move (ai, 4, 1));
         assert_true (game.place_tile (5, 5));
-        assert_true (ai.force_moving (2, 3));
+        assert_true (ai_move (ai, 2, 3));
         assert_true (game.place_tile (4, 0));
-        assert_true (ai.force_moving (5, 6));
+        assert_true (ai_move (ai, 5, 6));
         assert_true (game.place_tile (2, 6));
-        assert_true (ai.force_moving (2, 5));
+        assert_true (ai_move (ai, 2, 5));
         assert_true (game.place_tile (0, 4));
-        assert_true (ai.force_moving (0, 6));
+        assert_true (ai_move (ai, 0, 6));
         assert_true (game.place_tile (1, 3));
-        assert_true (ai.force_moving (5, 1));
+        assert_true (ai_move (ai, 5, 1));
         assert_true (game.place_tile (6, 7));
-        assert_true (ai.force_moving (3, 6));
+        assert_true (ai_move (ai, 3, 6));
         assert_true (game.place_tile (3, 7));
-        assert_true (ai.force_moving (5, 0));
+        assert_true (ai_move (ai, 5, 0));
         assert_true (game.place_tile (6, 5));
-        assert_true (ai.force_moving (3, 0));
+        assert_true (ai_move (ai, 3, 0));
         assert_true (game.place_tile (3, 1));
-        assert_true (ai.force_moving (0, 2));
+        assert_true (ai_move (ai, 0, 2));
         assert_true (game.place_tile (5, 3));
-        assert_true (ai.force_moving (7, 4));
+        assert_true (ai_move (ai, 7, 4));
         assert_true (game.place_tile (7, 2));
-        assert_true (ai.force_moving (7, 5));
+        assert_true (ai_move (ai, 7, 5));
         assert_true (game.place_tile (4, 6));
-        assert_true (ai.force_moving (1, 2));
+        assert_true (ai_move (ai, 1, 2));
         assert_true (game.place_tile (7, 3));
-        assert_true (ai.force_moving (6, 2));
+        assert_true (ai_move (ai, 6, 2));
         assert_true (game.place_tile (7, 6));
-        assert_true (ai.force_moving (2, 7));
+        assert_true (ai_move (ai, 2, 7));
         assert_true (game.place_tile (1, 7));
-        assert_true (ai.force_moving (2, 0));
+        assert_true (ai_move (ai, 2, 0));
         assert_true (game.place_tile (7, 1));
-        assert_true (ai.force_moving (6, 6));
+        assert_true (ai_move (ai, 6, 6));
         assert_true (game.place_tile (0, 3));
-        assert_true (ai.force_moving (0, 5));
+        assert_true (ai_move (ai, 0, 5));
         assert_true (game.place_tile (7, 7));
-        assert_true (ai.force_moving (6, 1));
+        assert_true (ai_move (ai, 6, 1));
         assert_true (game.place_tile (7, 0));
-        assert_true (ai.force_moving (6, 0));
+        assert_true (ai_move (ai, 6, 0));
         assert_true (game.place_tile (1, 0));
-        assert_true (ai.force_moving (1, 6));
+        assert_true (ai_move (ai, 1, 6));
         assert_true (game.place_tile (2, 1));
         assert_true (game.pass ());
         assert_true (game.place_tile (0, 7));
         assert_true (game.pass ());
         assert_true (game.place_tile (0, 1));
-        assert_true (ai.force_moving (1, 1));
+        assert_true (ai_move (ai, 1, 1));
         assert_true (game.place_tile (0, 0));
         assert_true (game.pass ());
         assert_true (game.place_tile (4, 7));
-        assert_true (ai.force_moving (5, 7));
+        assert_true (ai_move (ai, 5, 7));
     }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]