[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnugo-devel] view.pike: new testcase
From: |
Arend Bayer |
Subject: |
[gnugo-devel] view.pike: new testcase |
Date: |
Fri, 27 Aug 2004 23:18:50 +0200 (CEST) |
- view.pike: allow to directly switch to new testcase
Very useful when having a 2nd engine started.
Arend
Index: regression/view.pike
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/view.pike,v
retrieving revision 1.12
diff -u -p -r1.12 view.pike
--- regression/view.pike 24 Aug 2004 14:39:53 -0000 1.12
+++ regression/view.pike 27 Aug 2004 21:17:49 -0000
@@ -508,7 +508,6 @@ class RegressionViewer
GTK.Widget data_widget;
GTK.ScrolledWindow scrolled_data_window;
- array(GTK.Window) all_windows = ({});
GTK.Image gtk_image;
GDK.Image gdk_image;
GTK.Clist clist;
@@ -517,6 +516,8 @@ class RegressionViewer
mapping(string:array(string)) worms = ([]);
mapping(string:array(string)) dragons = ([]);
+ int worms_initialized = 0;
+ int dragons_initialized = 0;
string name;
string result;
@@ -541,13 +542,26 @@ class RegressionViewer
int boardsize = (int) send_command("query_boardsize");
on_board_click_callback = callback;
- foreach (send_command("worm_stones") / "\n", string worm)
- worms[(worm / " ")[0]] = worm / " " - ({""});
+ setup_board(boardsize);
+
+ scrolled_data_window = GTK.ScrolledWindow();
+ scrolled_data_window->set_policy(GTK.POLICY_AUTOMATIC,
+ GTK.POLICY_AUTOMATIC);
+
+ clist = GTK.Clist(3);
+ scrolled_data_window->add(clist);
+// thread_create(handle_testcase);
+ handle_testcase();
+ }
+
+ static void setup_board(int boardsize)
+ {
goban = Goban(boardsize, 600);
goban->add_stones("WHITE", send_command("list_stones white") / " ");
goban->add_stones("BLACK", send_command("list_stones black") / " ");
Image.Image im = goban->draw_board();
+
gdk_image = GDK.Image(0)->set(im);
gtk_image = GTK.Image(gdk_image);
goban_widget = GTK.EventBox()->add(gtk_image);
@@ -557,20 +571,33 @@ class RegressionViewer
button_pressed_on_board);
goban_widget->signal_connect_new("key_press_event",
key_pressed_on_board);
+ }
- scrolled_data_window = GTK.ScrolledWindow();
- scrolled_data_window->set_policy(GTK.POLICY_AUTOMATIC,
- GTK.POLICY_AUTOMATIC);
- all_windows = ({});
-
- clist = GTK.Clist(3);
- scrolled_data_window->add(clist);
-
-// thread_create(handle_testcase);
- handle_testcase();
+ void new_testcase(array(string) fulltest_, string testcase_command_)
+ {
+ werror("Loading new testcase.\n");
+ worms_initialized = 0;
+ dragons_initialized = 0;
+ result = "";
+ worms = ([]);
+ dragons = ([]);
+
+ fulltest = fulltest_;
+ testcase_command = testcase_command_;
+
+ load_testcase();
+ werror("%s\n", send_command("showboard"));
+ int boardsize = (int) send_command("query_boardsize");
+
+ werror("Loaded new testcase.\n");
+ goban = Goban(boardsize, 600);
+ goban->add_stones("WHITE", send_command("list_stones white") / " ");
+ goban->add_stones("BLACK", send_command("list_stones black") / " ");
+ redraw_board();
}
+
static void load_testcase()
{
foreach(fulltest, string testline) {
@@ -580,7 +607,7 @@ class RegressionViewer
}
}
- static void handle_testcase()
+ void handle_testcase()
{
traces = ({});
engine->trace_callback = collect_traces;
@@ -600,6 +627,21 @@ class RegressionViewer
traces += ({s});
}
+ void get_dragons()
+ {
+ foreach (send_command("dragon_stones") / "\n", string dragon)
+ dragons[(dragon / " ")[0]] = dragon / " " - ({""});
+ dragons_initialized = 1;
+ }
+
+ static void get_worms()
+ {
+ foreach (send_command("worm_stones") / "\n", string worm)
+ worms[(worm / " ")[0]] = worm / " " - ({""});
+ worms_initialized = 1;
+ }
+
+
void add_markup(int mode)
{
goban->clear_markup();
@@ -631,6 +673,8 @@ class RegressionViewer
if (parent->dragon_status_button->get_active())
{
+ if (!dragons_initialized)
+ get_dragons();
foreach (dragons; string dragon; array(string) stones)
{
string status = get_worm_or_dragon_data("dragon", "status",
@@ -642,6 +686,8 @@ class RegressionViewer
}
else if (parent->dragon_safety_button->get_active())
{
+ if (!dragons_initialized)
+ get_dragons();
foreach (dragons; string dragon; array(string) stones)
{
string safety = get_worm_or_dragon_data("dragon", "safety",
@@ -653,6 +699,8 @@ class RegressionViewer
}
else if (parent->worm_status_button->get_active())
{
+ if (!worms_initialized)
+ get_worms();
foreach (worms; string worm; array(string) stones)
{
string attack = get_worm_or_dragon_data("worm", "attack_code",
@@ -1097,9 +1145,7 @@ class RegressionViewer
string send_command(string command)
{
string result;
- //all_windows->set_cursor(GDK.Watch);
result = engine->send_command(command)->text;
- //all_windows->set_cursor(GDK.TopLeftArrow);
return result;
}
@@ -1216,9 +1262,8 @@ class Controller
GTK.CheckButton sgf_traces_button, sgf_viewer_button;
GTK.Entry sgf_filename_entry, sgf_viewer_entry;
GTK.Table sgf_stuff;
- GTK.Button new_engine_button;
- GTK.Entry engine_path_entry;
- GTK.Entry engine_name_entry;
+ GTK.Button new_testcase_button, new_engine_button;
+ GTK.Entry new_testcase_entry, engine_path_entry, engine_name_entry;
string delta_territory_move = "PASS";
string move_influence_move = "PASS";
@@ -1423,7 +1468,11 @@ class Controller
->attach_defaults(sgf_viewer_button, 0, 1, 1, 2)
->attach_defaults(sgf_viewer_entry, 1, 2, 1, 2);
-
+ new_testcase_entry = GTK.Entry();
+ new_testcase_entry->set_text("owl:1");
+ new_testcase_entry->set_editable(1);
+ new_testcase_button = GTK.Button("Load new testcase");
+ new_testcase_button->signal_connect_new("clicked", new_testcase);
engine_path_entry = GTK.Entry();
engine_path_entry->set_text("../interface/gnugo");
engine_path_entry->set_editable(1);
@@ -1508,7 +1557,9 @@ class Controller
if (single_window_mode)
engines_page->pack_start(engine_name_entry, 0, 0, 0);
engines_page->pack_start(GTK.Alignment(1.0, 0.0, 0.0, 0.0)
- ->add(new_engine_button), 0, 0, 0);
+ ->add(new_engine_button), 0, 0, 0)
+ ->pack_start(new_testcase_entry, 0, 0, 0)
+ ->pack_start(new_testcase_button, 0, 0, 0);
controller_notebook->append_page(engines_page->set_border_width(12),
GTK.Label("engines"));
@@ -1758,8 +1809,7 @@ class Controller
else
{
c1 = sprintf("analyze_semeai %s %s",
- first_vertex,
- vertex);
+ first_vertex, vertex);
c2 = sprintf("analyze_semeai %s %s", vertex,
first_vertex);
// FIXME: We should use a semeai node counter rather
@@ -1777,6 +1827,22 @@ class Controller
}
}
+
+ static void new_testcase()
+ {
+ string new_testcase = new_testcase_entry->get_text();
+ werror("Trying to load new testcase %s.", new_testcase);
+ if (!excerpt_testcase(new_testcase, viewers[0]->engine))
+ {
+ werror("Failed to load testcase.\n");
+ return;
+ }
+ testcase_name = new_testcase;
+ viewers->new_testcase(full_testcase, testcase_command);
+ viewers->handle_testcase();
+ }
+
+
// The engine parameter is only needed to find out the color to
// move when an sgf file is given. Since there can be multiple
// viewers we shouldn't use this engine object for anything else
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnugo-devel] view.pike: new testcase,
Arend Bayer <=