[iagno] Add perfs tests.
- From: Arnaud B. <arnaudb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [iagno] Add perfs tests.
- Date: Wed, 22 May 2019 12:59:06 +0000 (UTC)
commit c55f2ad5ff50a91f630ffc50066fda56514331e2
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Fri Apr 19 15:28:12 2019 +0200
Add perfs tests.
meson_options.txt | 1 +
src/computer-player.vala | 17 +++
src/game.vala | 11 +-
src/meson.build | 5 +-
src/test-iagno.vala | 331 ++++++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 360 insertions(+), 5 deletions(-)
---
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..dc15050
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1 @@
+option('perfs_tests', type : 'boolean', value : false, description : 'Build complete games AI perfs and
regression tests')
diff --git a/src/computer-player.vala b/src/computer-player.vala
index 2425067..3e70c16 100644
--- a/src/computer-player.vala
+++ b/src/computer-player.vala
@@ -118,6 +118,23 @@ private class ComputerPlayer : Object
complete_move (x, y);
}
+ internal bool force_moving (uint8 force_x, uint8 force_y)
+ {
+ 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);
+ }
+
+ /* real game */
+
internal async void move_async (double delay_seconds = 0.0)
{
Timer timer = new Timer ();
diff --git a/src/game.vala b/src/game.vala
index 115c751..f5f5573 100644
--- a/src/game.vala
+++ b/src/game.vala
@@ -147,14 +147,23 @@ private class Game : Object
{
Object (size: _size);
+ initial_number_of_tiles = (size % 2 == 0) ? 4 : 7;
init_undo_stack (_size, out undo_stack);
+ _n_dark_tiles = 0;
+ _n_light_tiles = 0;
+
for (uint8 y = 0; y < _size; y++)
{
if (setup [y].length != _size * 2)
warn_if_reached ();
for (uint8 x = 0; x < _size; x++)
- tiles [x, y] = Player.from_char (setup [y][x * 2 + 1]);
+ {
+ Player player = Player.from_char (setup [y][x * 2 + 1]);
+ if (player == Player.DARK) _n_dark_tiles++;
+ else if (player == Player.LIGHT) _n_light_tiles++;
+ tiles [x, y] = player;
+ }
}
current_color = to_move;
diff --git a/src/meson.build b/src/meson.build
index 3632757..9e9e8ae 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -10,7 +10,10 @@ iagno_tests = executable('iagno_tests',
gio_dependency
]
)
-test('iagno-tests', iagno_tests)
+test('iagno-short-tests', iagno_tests, timeout : 1)
+if get_option('perfs_tests')
+ test('iagno-perfs-tests', iagno_tests, args : ['-m', 'perf'], timeout : 120)
+endif
executable(meson.project_name(),
[
diff --git a/src/test-iagno.vala b/src/test-iagno.vala
index db8dffa..bc2859b 100644
--- a/src/test-iagno.vala
+++ b/src/test-iagno.vala
@@ -21,10 +21,25 @@
private class TestIagno : Object
{
- private static int main (string [] args) {
+ private static int main (string [] args)
+ {
Test.init (ref args);
+
Test.add_func ("/Iagno/test tests",
test_tests);
+
+ // if meson is configured with -Dperfs_tests=true,
+ // both tests are performed, else only short_tests
+ if (Test.perf ())
+ perfs_tests ();
+ else
+ short_tests ();
+
+ return Test.run ();
+ }
+
+ private static void short_tests ()
+ {
Test.add_func ("/Iagno/Pass then Undo",
test_undo_after_pass);
Test.add_func ("/Iagno/Undo at Start",
@@ -41,7 +56,18 @@ private class TestIagno : Object
test_ai_search_4);
Test.add_func ("/Iagno/AI Search 5",
test_ai_search_5);
- return Test.run ();
+ }
+
+ private static void perfs_tests ()
+ {
+ Test.add_func ("/Iagno/Complete game 1",
+ test_complete_game_1);
+ Test.add_func ("/Iagno/Complete game 2",
+ test_complete_game_2);
+ Test.add_func ("/Iagno/Complete game 3",
+ test_complete_game_3);
+ Test.add_func ("/Iagno/Complete game 4",
+ test_complete_game_4);
}
private static void test_tests ()
@@ -50,7 +76,7 @@ private class TestIagno : Object
}
/*\
- * * tests
+ * * short tests
\*/
private static void test_undo_after_pass ()
@@ -189,4 +215,303 @@ private class TestIagno : Object
ai.move ();
/* didn't crash */
}
+
+ /*\
+ * * perfs tests
+ \*/
+
+ private static void test_complete_game_1 ()
+ {
+ /* human starts 0 1 2 3 4 5 6 7 */
+ string [] board = {/* 0 */ " . . . . . . . .",
+ /* 1 */ " . . . L . . . .",
+ /* 2 */ " . . . . L . . .",
+ /* 3 */ " . . . L D L . .",
+ /* 4 */ " . . . D D D . .",
+ /* 5 */ " . . . . . . . .",
+ /* 6 */ " . . . . . . . .",
+ /* 7 */ " . . . . . . . ." };
+
+ Game game = new Game.from_strings (board, Player.DARK);
+ ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 3);
+
+ assert_true (game.place_tile (4, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 5));
+ assert_true (game.place_tile (4, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 5));
+ assert_true (game.place_tile (2, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 4));
+ assert_true (game.place_tile (4, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 6));
+ assert_true (game.place_tile (1, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 4));
+ assert_true (game.place_tile (2, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 3));
+ assert_true (game.place_tile (1, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 2));
+ assert_true (game.place_tile (3, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 2));
+ assert_true (game.place_tile (6, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 6));
+ assert_true (game.place_tile (3, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 5));
+ assert_true (game.place_tile (3, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 7));
+ assert_true (game.place_tile (0, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 2));
+ assert_true (game.place_tile (6, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 2));
+ assert_true (game.place_tile (3, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 7));
+ assert_true (game.place_tile (4, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 6));
+ assert_true (game.place_tile (2, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 0));
+ assert_true (game.place_tile (1, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 1));
+ assert_true (game.place_tile (6, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (4, 0));
+ assert_true (game.place_tile (5, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 3));
+ assert_true (game.place_tile (6, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 2));
+ assert_true (game.place_tile (5, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 1));
+ assert_true (game.place_tile (7, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 5));
+ assert_true (game.place_tile (7, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 0));
+ assert_true (game.place_tile (7, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 7));
+ assert_true (game.place_tile (7, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 0));
+ assert_true (game.place_tile (0, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 1));
+ assert_true (game.place_tile (0, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 6));
+ assert_true (game.place_tile (1, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 7));
+ }
+
+ private static void test_complete_game_2 ()
+ {
+ /* human starts 0 1 2 3 4 5 6 7 */
+ string [] board = {/* 0 */ " . . . . . . . .",
+ /* 1 */ " . . . . . . . .",
+ /* 2 */ " . . . D . . . .",
+ /* 3 */ " . . L L L L . .",
+ /* 4 */ " . . . D D D . .",
+ /* 5 */ " . . . . . . . .",
+ /* 6 */ " . . . . . . . .",
+ /* 7 */ " . . . . . . . ." };
+
+ Game game = new Game.from_strings (board, Player.DARK);
+ ComputerPlayer ai = new ComputerPlayer (game, /* AI level */ 3);
+
+ assert_true (game.place_tile (4, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 5));
+ assert_true (game.place_tile (6, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 2));
+ assert_true (game.place_tile (6, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 2));
+ assert_true (game.place_tile (3, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (4, 5));
+ assert_true (game.place_tile (3, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 3));
+ assert_true (game.place_tile (2, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 6));
+ assert_true (game.place_tile (7, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 5));
+ assert_true (game.place_tile (3, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 5));
+ assert_true (game.place_tile (5, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 7));
+ assert_true (game.place_tile (6, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (4, 6));
+ assert_true (game.place_tile (4, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 7));
+ assert_true (game.place_tile (1, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 2));
+ assert_true (game.place_tile (0, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 1));
+ assert_true (game.place_tile (2, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 1));
+ assert_true (game.place_tile (2, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 7));
+ assert_true (game.place_tile (4, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 4));
+ assert_true (game.place_tile (7, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 4));
+ assert_true (game.place_tile (0, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 1));
+ assert_true (game.place_tile (1, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 6));
+ assert_true (game.place_tile (1, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (4, 0));
+ assert_true (game.place_tile (3, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 0));
+ assert_true (game.place_tile (5, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 2));
+ assert_true (game.place_tile (7, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 0));
+ assert_true (game.place_tile (6, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 7));
+ assert_true (game.place_tile (0, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 0));
+ assert_true (game.place_tile (0, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 6));
+ assert_true (game.place_tile (0, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 5));
+ assert_true (game.place_tile (7, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 1));
+ }
+
+ private static void test_complete_game_3 ()
+ {
+ /* AI starts 0 1 2 3 4 5 6 7 */
+ string [] board = {/* 0 */ " . . . . . . . .",
+ /* 1 */ " . . . . . . . .",
+ /* 2 */ " . . . . . D . .",
+ /* 3 */ " . . . L D D . .",
+ /* 4 */ " . . . D L D . .",
+ /* 5 */ " . . . . . L . .",
+ /* 6 */ " . . . . . . . .",
+ /* 7 */ " . . . . . . . ." };
+
+ 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 (game.place_tile (6, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 2));
+ assert_true (game.place_tile (2, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 4));
+ assert_true (game.place_tile (4, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 5));
+ assert_true (game.place_tile (2, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 5));
+ assert_true (game.place_tile (3, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 2));
+ assert_true (game.place_tile (0, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 2));
+ assert_true (game.place_tile (1, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 5));
+ assert_true (game.place_tile (4, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 1));
+ assert_true (game.place_tile (6, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 5));
+ assert_true (game.place_tile (5, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 3));
+ assert_true (game.place_tile (2, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 0));
+ assert_true (game.place_tile (4, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 1));
+ assert_true (game.place_tile (0, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 2));
+ assert_true (game.place_tile (1, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (4, 7));
+ assert_true (game.place_tile (2, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 6));
+ assert_true (game.place_tile (4, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 7));
+ assert_true (game.place_tile (5, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 1));
+ assert_true (game.place_tile (2, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 0));
+ assert_true (game.place_tile (7, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 7));
+ assert_true (game.place_tile (7, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 6));
+ assert_true (game.place_tile (7, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 7));
+ assert_true (game.place_tile (7, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 1));
+ assert_true (game.place_tile (6, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 1));
+ assert_true (game.place_tile (0, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 7));
+ assert_true (game.place_tile (4, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 0));
+ assert_true (game.place_tile (0, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 1));
+ assert_true (game.place_tile (1, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 1));
+ assert_true (game.place_tile (7, 0, /* apply */ true) != 0);
+ }
+
+ private static void test_complete_game_4 ()
+ {
+ /* AI starts 0 1 2 3 4 5 6 7 */
+ string [] board = {/* 0 */ " . . . . . . . .",
+ /* 1 */ " . . . . . . . .",
+ /* 2 */ " . . . D . L . .",
+ /* 3 */ " . . . D L . . .",
+ /* 4 */ " . . L L D . . .",
+ /* 5 */ " . . . . D . . .",
+ /* 6 */ " . . . . . . . .",
+ /* 7 */ " . . . . . . . ." };
+
+ 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 (game.place_tile (6, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 5));
+ assert_true (game.place_tile (2, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 5));
+ assert_true (game.place_tile (1, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 3));
+ assert_true (game.place_tile (4, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (4, 1));
+ assert_true (game.place_tile (5, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 3));
+ assert_true (game.place_tile (4, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 6));
+ assert_true (game.place_tile (2, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 5));
+ assert_true (game.place_tile (0, 4, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 6));
+ assert_true (game.place_tile (1, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 1));
+ assert_true (game.place_tile (6, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 6));
+ assert_true (game.place_tile (3, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 0));
+ assert_true (game.place_tile (6, 5, /* apply */ true) != 0);
+ assert_true (ai.force_moving (3, 0));
+ assert_true (game.place_tile (3, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 2));
+ assert_true (game.place_tile (5, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 4));
+ assert_true (game.place_tile (7, 2, /* apply */ true) != 0);
+ assert_true (ai.force_moving (7, 5));
+ assert_true (game.place_tile (4, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 2));
+ assert_true (game.place_tile (7, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 2));
+ assert_true (game.place_tile (7, 6, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 7));
+ assert_true (game.place_tile (1, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (2, 0));
+ assert_true (game.place_tile (7, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 6));
+ assert_true (game.place_tile (0, 3, /* apply */ true) != 0);
+ assert_true (ai.force_moving (0, 5));
+ assert_true (game.place_tile (7, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 1));
+ assert_true (game.place_tile (7, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (6, 0));
+ assert_true (game.place_tile (1, 0, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 6));
+ assert_true (game.place_tile (2, 1, /* apply */ true) != 0);
+ game.pass ();
+ assert_true (game.place_tile (0, 7, /* apply */ true) != 0);
+ game.pass ();
+ assert_true (game.place_tile (0, 1, /* apply */ true) != 0);
+ assert_true (ai.force_moving (1, 1));
+ assert_true (game.place_tile (0, 0, /* apply */ true) != 0);
+ game.pass ();
+ assert_true (game.place_tile (4, 7, /* apply */ true) != 0);
+ assert_true (ai.force_moving (5, 7));
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]