1/* -*- Mode: vala; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
3   This file is part of GNOME Reversi, also known as Iagno.
4
5   Copyright 2019 — Arnaud Bonatti
6   File updated by `ninja update-perfs-tests`
7
8   GNOME Reversi is free software: you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation, either version 3 of the License, or
11   (at your option) any later version.
12
13   GNOME Reversi is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with GNOME Reversi.  If not, see <https://www.gnu.org/licenses/>.
20*/
21
22namespace GeneratedTests
23{
24    private static void perfs_tests_reversi ()
25    {
26        /* crossing start position */
27        Test.add_func ("/Reversi/reversi/Complete game 1",
28                            test_complete_reversi_game_1);
29
30        Test.add_func ("/Reversi/reversi/Complete game 2",
31                            test_complete_reversi_game_2);
32
33        Test.add_func ("/Reversi/reversi/Complete game 3",
34                            test_complete_reversi_game_3);
35
36        Test.add_func ("/Reversi/reversi/Complete game 4",
37                            test_complete_reversi_game_4);
38
39        Test.add_func ("/Reversi/reversi/Complete game 5",
40                            test_complete_reversi_game_5);
41
42        Test.add_func ("/Reversi/reversi/Complete game 6",
43                            test_complete_reversi_game_6);
44
45        Test.add_func ("/Reversi/reversi/Complete game 7",
46                            test_complete_reversi_game_7);
47
48        Test.add_func ("/Reversi/reversi/Complete game 8",
49                            test_complete_reversi_game_8);
50
51        Test.add_func ("/Reversi/reversi/Complete game 9",
52                            test_complete_reversi_game_9);
53
54        Test.add_func ("/Reversi/reversi/Complete game 10",
55                            test_complete_reversi_game_10);
56
57        Test.add_func ("/Reversi/reversi/Complete game 11",
58                            test_complete_reversi_game_11);
59
60        Test.add_func ("/Reversi/reversi/Complete game 12",
61                            test_complete_reversi_game_12);
62
63        Test.add_func ("/Reversi/reversi/Complete game 13",
64                            test_complete_reversi_game_13);
65
66        Test.add_func ("/Reversi/reversi/Complete game 14",
67                            test_complete_reversi_game_14);
68
69        Test.add_func ("/Reversi/reversi/Complete game 15",
70                            test_complete_reversi_game_15);
71
72        Test.add_func ("/Reversi/reversi/Complete game 16",
73                            test_complete_reversi_game_16);
74
75        Test.add_func ("/Reversi/reversi/Complete game 17",
76                            test_complete_reversi_game_17);
77
78        Test.add_func ("/Reversi/reversi/Complete game 18",
79                            test_complete_reversi_game_18);
80
81        Test.add_func ("/Reversi/reversi/Complete game 19",
82                            test_complete_reversi_game_19);
83
84        Test.add_func ("/Reversi/reversi/Complete game 20",
85                            test_complete_reversi_game_20);
86
87        Test.add_func ("/Reversi/reversi/Complete game 21",
88                            test_complete_reversi_game_21);
89
90        Test.add_func ("/Reversi/reversi/Complete game 22",
91                            test_complete_reversi_game_22);
92
93        Test.add_func ("/Reversi/reversi/Complete game 23",
94                            test_complete_reversi_game_23);
95
96        Test.add_func ("/Reversi/reversi/Complete game 24",
97                            test_complete_reversi_game_24);
98
99        Test.add_func ("/Reversi/reversi/Complete game 25",
100                            test_complete_reversi_game_25);
101
102        Test.add_func ("/Reversi/reversi/Complete game 26",
103                            test_complete_reversi_game_26);
104
105        Test.add_func ("/Reversi/reversi/Complete game 27",
106                            test_complete_reversi_game_27);
107
108        Test.add_func ("/Reversi/reversi/Complete game 28",
109                            test_complete_reversi_game_28);
110
111        Test.add_func ("/Reversi/reversi/Complete game 29",
112                            test_complete_reversi_game_29);
113
114        Test.add_func ("/Reversi/reversi/Complete game 30",
115                            test_complete_reversi_game_30);
116
117        Test.add_func ("/Reversi/reversi/Complete game 31",
118                            test_complete_reversi_game_31);
119
120        Test.add_func ("/Reversi/reversi/Complete game 32",
121                            test_complete_reversi_game_32);
122
123        Test.add_func ("/Reversi/reversi/Complete game 33",
124                            test_complete_reversi_game_33);
125
126        Test.add_func ("/Reversi/reversi/Complete game 34",
127                            test_complete_reversi_game_34);
128
129        Test.add_func ("/Reversi/reversi/Complete game 35",
130                            test_complete_reversi_game_35);
131
132        Test.add_func ("/Reversi/reversi/Complete game 36",
133                            test_complete_reversi_game_36);
134
135        Test.add_func ("/Reversi/reversi/Complete game 37",
136                            test_complete_reversi_game_37);
137
138        Test.add_func ("/Reversi/reversi/Complete game 38",
139                            test_complete_reversi_game_38);
140
141        Test.add_func ("/Reversi/reversi/Complete game 39",
142                            test_complete_reversi_game_39);
143
144        Test.add_func ("/Reversi/reversi/Complete game 40",
145                            test_complete_reversi_game_40);
146
147        Test.add_func ("/Reversi/reversi/Complete game 41",
148                            test_complete_reversi_game_41);
149
150        Test.add_func ("/Reversi/reversi/Complete game 42",
151                            test_complete_reversi_game_42);
152
153        Test.add_func ("/Reversi/reversi/Complete game 43",
154                            test_complete_reversi_game_43);
155
156        Test.add_func ("/Reversi/reversi/Complete game 44",
157                            test_complete_reversi_game_44);
158
159        Test.add_func ("/Reversi/reversi/Complete game 45",
160                            test_complete_reversi_game_45);
161
162        Test.add_func ("/Reversi/reversi/Complete game 46",
163                            test_complete_reversi_game_46);
164
165        Test.add_func ("/Reversi/reversi/Complete game 47",
166                            test_complete_reversi_game_47);
167
168        Test.add_func ("/Reversi/reversi/Complete game 48",
169                            test_complete_reversi_game_48);
170
171        Test.add_func ("/Reversi/reversi/Complete game 49",
172                            test_complete_reversi_game_49);
173
174        Test.add_func ("/Reversi/reversi/Complete game 50",
175                            test_complete_reversi_game_50);
176
177        Test.add_func ("/Reversi/reversi/Complete game 51",
178                            test_complete_reversi_game_51);
179
180        Test.add_func ("/Reversi/reversi/Complete game 52",
181                            test_complete_reversi_game_52);
182
183        Test.add_func ("/Reversi/reversi/Complete game 53",
184                            test_complete_reversi_game_53);
185
186        Test.add_func ("/Reversi/reversi/Complete game 54",
187                            test_complete_reversi_game_54);
188
189        Test.add_func ("/Reversi/reversi/Complete game 55",
190                            test_complete_reversi_game_55);
191
192        Test.add_func ("/Reversi/reversi/Complete game 56",
193                            test_complete_reversi_game_56);
194
195        Test.add_func ("/Reversi/reversi/Complete game 57",
196                            test_complete_reversi_game_57);
197
198        Test.add_func ("/Reversi/reversi/Complete game 58",
199                            test_complete_reversi_game_58);
200
201        Test.add_func ("/Reversi/reversi/Complete game 59",
202                            test_complete_reversi_game_59);
203
204        Test.add_func ("/Reversi/reversi/Complete game 60",
205                            test_complete_reversi_game_60);
206
207        Test.add_func ("/Reversi/reversi/Complete game 61",
208                            test_complete_reversi_game_61);
209
210        Test.add_func ("/Reversi/reversi/Complete game 62",
211                            test_complete_reversi_game_62);
212
213        Test.add_func ("/Reversi/reversi/Complete game 63",
214                            test_complete_reversi_game_63);
215
216        Test.add_func ("/Reversi/reversi/Complete game 64",
217                            test_complete_reversi_game_64);
218
219        Test.add_func ("/Reversi/reversi/Complete game 65",
220                            test_complete_reversi_game_65);
221
222        Test.add_func ("/Reversi/reversi/Complete game 66",
223                            test_complete_reversi_game_66);
224
225        Test.add_func ("/Reversi/reversi/Complete game 67",
226                            test_complete_reversi_game_67);
227
228        Test.add_func ("/Reversi/reversi/Complete game 68",
229                            test_complete_reversi_game_68);
230
231        Test.add_func ("/Reversi/reversi/Complete game 69",
232                            test_complete_reversi_game_69);
233
234        Test.add_func ("/Reversi/reversi/Complete game 70",
235                            test_complete_reversi_game_70);
236
237        Test.add_func ("/Reversi/reversi/Complete game 71",
238                            test_complete_reversi_game_71);
239
240        Test.add_func ("/Reversi/reversi/Complete game 72",
241                            test_complete_reversi_game_72);
242
243        Test.add_func ("/Reversi/reversi/Complete game 73",
244                            test_complete_reversi_game_73);
245
246        Test.add_func ("/Reversi/reversi/Complete game 74",
247                            test_complete_reversi_game_74);
248
249        Test.add_func ("/Reversi/reversi/Complete game 75",
250                            test_complete_reversi_game_75);
251
252        Test.add_func ("/Reversi/reversi/Complete game 76",
253                            test_complete_reversi_game_76);
254
255        Test.add_func ("/Reversi/reversi/Complete game 77",
256                            test_complete_reversi_game_77);
257
258        Test.add_func ("/Reversi/reversi/Complete game 78",
259                            test_complete_reversi_game_78);
260
261        Test.add_func ("/Reversi/reversi/Complete game 79",
262                            test_complete_reversi_game_79);
263
264        Test.add_func ("/Reversi/reversi/Complete game 80",
265                            test_complete_reversi_game_80);
266
267        Test.add_func ("/Reversi/reversi/Complete game 81",
268                            test_complete_reversi_game_81);
269
270        Test.add_func ("/Reversi/reversi/Complete game 82",
271                            test_complete_reversi_game_82);
272
273        Test.add_func ("/Reversi/reversi/Complete game 83",
274                            test_complete_reversi_game_83);
275
276        Test.add_func ("/Reversi/reversi/Complete game 84",
277                            test_complete_reversi_game_84);
278
279        Test.add_func ("/Reversi/reversi/Complete game 85",
280                            test_complete_reversi_game_85);
281
282        Test.add_func ("/Reversi/reversi/Complete game 86",
283                            test_complete_reversi_game_86);
284
285        Test.add_func ("/Reversi/reversi/Complete game 87",
286                            test_complete_reversi_game_87);
287
288        Test.add_func ("/Reversi/reversi/Complete game 88",
289                            test_complete_reversi_game_88);
290
291        Test.add_func ("/Reversi/reversi/Complete game 89",
292                            test_complete_reversi_game_89);
293
294        Test.add_func ("/Reversi/reversi/Complete game 90",
295                            test_complete_reversi_game_90);
296
297        Test.add_func ("/Reversi/reversi/Complete game 91",
298                            test_complete_reversi_game_91);
299
300        Test.add_func ("/Reversi/reversi/Complete game 92",
301                            test_complete_reversi_game_92);
302
303        Test.add_func ("/Reversi/reversi/Complete game 93",
304                            test_complete_reversi_game_93);
305
306        Test.add_func ("/Reversi/reversi/Complete game 94",
307                            test_complete_reversi_game_94);
308
309        Test.add_func ("/Reversi/reversi/Complete game 95",
310                            test_complete_reversi_game_95);
311
312        Test.add_func ("/Reversi/reversi/Complete game 96",
313                            test_complete_reversi_game_96);
314
315        Test.add_func ("/Reversi/reversi/Complete game 97",
316                            test_complete_reversi_game_97);
317
318        Test.add_func ("/Reversi/reversi/Complete game 98",
319                            test_complete_reversi_game_98);
320
321        Test.add_func ("/Reversi/reversi/Complete game 99",
322                            test_complete_reversi_game_99);
323
324        Test.add_func ("/Reversi/reversi/Complete game 100",
325                            test_complete_reversi_game_100);
326
327        Test.add_func ("/Reversi/reversi/Complete game 101",
328                            test_complete_reversi_game_101);
329
330        Test.add_func ("/Reversi/reversi/Complete game 102",
331                            test_complete_reversi_game_102);
332
333        Test.add_func ("/Reversi/reversi/Complete game 103",
334                            test_complete_reversi_game_103);
335
336        Test.add_func ("/Reversi/reversi/Complete game 104",
337                            test_complete_reversi_game_104);
338
339        Test.add_func ("/Reversi/reversi/Complete game 105",
340                            test_complete_reversi_game_105);
341
342        Test.add_func ("/Reversi/reversi/Complete game 106",
343                            test_complete_reversi_game_106);
344
345        Test.add_func ("/Reversi/reversi/Complete game 107",
346                            test_complete_reversi_game_107);
347
348        Test.add_func ("/Reversi/reversi/Complete game 108",
349                            test_complete_reversi_game_108);
350
351        Test.add_func ("/Reversi/reversi/Complete game 109",
352                            test_complete_reversi_game_109);
353
354        Test.add_func ("/Reversi/reversi/Complete game 110",
355                            test_complete_reversi_game_110);
356
357        Test.add_func ("/Reversi/reversi/Complete game 111",
358                            test_complete_reversi_game_111);
359
360        Test.add_func ("/Reversi/reversi/Complete game 112",
361                            test_complete_reversi_game_112);
362
363        Test.add_func ("/Reversi/reversi/Complete game 113",
364                            test_complete_reversi_game_113);
365
366        Test.add_func ("/Reversi/reversi/Complete game 114",
367                            test_complete_reversi_game_114);
368
369        Test.add_func ("/Reversi/reversi/Complete game 115",
370                            test_complete_reversi_game_115);
371
372        Test.add_func ("/Reversi/reversi/Complete game 116",
373                            test_complete_reversi_game_116);
374
375        Test.add_func ("/Reversi/reversi/Complete game 117",
376                            test_complete_reversi_game_117);
377
378        Test.add_func ("/Reversi/reversi/Complete game 118",
379                            test_complete_reversi_game_118);
380
381        Test.add_func ("/Reversi/reversi/Complete game 119",
382                            test_complete_reversi_game_119);
383
384        Test.add_func ("/Reversi/reversi/Complete game 120",
385                            test_complete_reversi_game_120);
386
387        Test.add_func ("/Reversi/reversi/Complete game 121",
388                            test_complete_reversi_game_121);
389
390        Test.add_func ("/Reversi/reversi/Complete game 122",
391                            test_complete_reversi_game_122);
392
393        Test.add_func ("/Reversi/reversi/Complete game 123",
394                            test_complete_reversi_game_123);
395
396        Test.add_func ("/Reversi/reversi/Complete game 124",
397                            test_complete_reversi_game_124);
398
399        Test.add_func ("/Reversi/reversi/Complete game 125",
400                            test_complete_reversi_game_125);
401
402        Test.add_func ("/Reversi/reversi/Complete game 126",
403                            test_complete_reversi_game_126);
404
405        Test.add_func ("/Reversi/reversi/Complete game 127",
406                            test_complete_reversi_game_127);
407
408        Test.add_func ("/Reversi/reversi/Complete game 128",
409                            test_complete_reversi_game_128);
410
411        Test.add_func ("/Reversi/reversi/Complete game 129",
412                            test_complete_reversi_game_129);
413
414        Test.add_func ("/Reversi/reversi/Complete game 130",
415                            test_complete_reversi_game_130);
416
417        Test.add_func ("/Reversi/reversi/Complete game 131",
418                            test_complete_reversi_game_131);
419
420        Test.add_func ("/Reversi/reversi/Complete game 132",
421                            test_complete_reversi_game_132);
422
423        Test.add_func ("/Reversi/reversi/Complete game 133",
424                            test_complete_reversi_game_133);
425
426        Test.add_func ("/Reversi/reversi/Complete game 134",
427                            test_complete_reversi_game_134);
428
429        Test.add_func ("/Reversi/reversi/Complete game 135",
430                            test_complete_reversi_game_135);
431
432        Test.add_func ("/Reversi/reversi/Complete game 136",
433                            test_complete_reversi_game_136);
434
435        Test.add_func ("/Reversi/reversi/Complete game 137",
436                            test_complete_reversi_game_137);
437
438        Test.add_func ("/Reversi/reversi/Complete game 138",
439                            test_complete_reversi_game_138);
440
441        Test.add_func ("/Reversi/reversi/Complete game 139",
442                            test_complete_reversi_game_139);
443
444        Test.add_func ("/Reversi/reversi/Complete game 140",
445                            test_complete_reversi_game_140);
446
447        Test.add_func ("/Reversi/reversi/Complete game 141",
448                            test_complete_reversi_game_141);
449
450        Test.add_func ("/Reversi/reversi/Complete game 142",
451                            test_complete_reversi_game_142);
452
453        Test.add_func ("/Reversi/reversi/Complete game 143",
454                            test_complete_reversi_game_143);
455
456        Test.add_func ("/Reversi/reversi/Complete game 144",
457                            test_complete_reversi_game_144);
458
459        Test.add_func ("/Reversi/reversi/Complete game 145",
460                            test_complete_reversi_game_145);
461
462        Test.add_func ("/Reversi/reversi/Complete game 146",
463                            test_complete_reversi_game_146);
464
465        Test.add_func ("/Reversi/reversi/Complete game 147",
466                            test_complete_reversi_game_147);
467
468        Test.add_func ("/Reversi/reversi/Complete game 148",
469                            test_complete_reversi_game_148);
470
471        Test.add_func ("/Reversi/reversi/Complete game 149",
472                            test_complete_reversi_game_149);
473
474        Test.add_func ("/Reversi/reversi/Complete game 150",
475                            test_complete_reversi_game_150);
476
477        Test.add_func ("/Reversi/reversi/Complete game 151",
478                            test_complete_reversi_game_151);
479
480        Test.add_func ("/Reversi/reversi/Complete game 152",
481                            test_complete_reversi_game_152);
482
483        Test.add_func ("/Reversi/reversi/Complete game 153",
484                            test_complete_reversi_game_153);
485
486        Test.add_func ("/Reversi/reversi/Complete game 154",
487                            test_complete_reversi_game_154);
488
489        Test.add_func ("/Reversi/reversi/Complete game 155",
490                            test_complete_reversi_game_155);
491
492        Test.add_func ("/Reversi/reversi/Complete game 156",
493                            test_complete_reversi_game_156);
494
495        Test.add_func ("/Reversi/reversi/Complete game 157",
496                            test_complete_reversi_game_157);
497
498        Test.add_func ("/Reversi/reversi/Complete game 158",
499                            test_complete_reversi_game_158);
500
501        Test.add_func ("/Reversi/reversi/Complete game 159",
502                            test_complete_reversi_game_159);
503
504        Test.add_func ("/Reversi/reversi/Complete game 160",
505                            test_complete_reversi_game_160);
506
507        Test.add_func ("/Reversi/reversi/Complete game 161",
508                            test_complete_reversi_game_161);
509
510        Test.add_func ("/Reversi/reversi/Complete game 162",
511                            test_complete_reversi_game_162);
512
513        Test.add_func ("/Reversi/reversi/Complete game 163",
514                            test_complete_reversi_game_163);
515
516        Test.add_func ("/Reversi/reversi/Complete game 164",
517                            test_complete_reversi_game_164);
518
519        Test.add_func ("/Reversi/reversi/Complete game 165",
520                            test_complete_reversi_game_165);
521
522        Test.add_func ("/Reversi/reversi/Complete game 166",
523                            test_complete_reversi_game_166);
524
525        Test.add_func ("/Reversi/reversi/Complete game 167",
526                            test_complete_reversi_game_167);
527
528        Test.add_func ("/Reversi/reversi/Complete game 168",
529                            test_complete_reversi_game_168);
530
531        Test.add_func ("/Reversi/reversi/Complete game 169",
532                            test_complete_reversi_game_169);
533
534        Test.add_func ("/Reversi/reversi/Complete game 170",
535                            test_complete_reversi_game_170);
536
537        Test.add_func ("/Reversi/reversi/Complete game 171",
538                            test_complete_reversi_game_171);
539
540        Test.add_func ("/Reversi/reversi/Complete game 172",
541                            test_complete_reversi_game_172);
542
543        Test.add_func ("/Reversi/reversi/Complete game 173",
544                            test_complete_reversi_game_173);
545
546        Test.add_func ("/Reversi/reversi/Complete game 174",
547                            test_complete_reversi_game_174);
548
549        Test.add_func ("/Reversi/reversi/Complete game 175",
550                            test_complete_reversi_game_175);
551
552        Test.add_func ("/Reversi/reversi/Complete game 176",
553                            test_complete_reversi_game_176);
554
555        Test.add_func ("/Reversi/reversi/Complete game 177",
556                            test_complete_reversi_game_177);
557
558        Test.add_func ("/Reversi/reversi/Complete game 178",
559                            test_complete_reversi_game_178);
560
561        Test.add_func ("/Reversi/reversi/Complete game 179",
562                            test_complete_reversi_game_179);
563
564        Test.add_func ("/Reversi/reversi/Complete game 180",
565                            test_complete_reversi_game_180);
566
567        Test.add_func ("/Reversi/reversi/Complete game 181",
568                            test_complete_reversi_game_181);
569
570        Test.add_func ("/Reversi/reversi/Complete game 182",
571                            test_complete_reversi_game_182);
572
573        Test.add_func ("/Reversi/reversi/Complete game 183",
574                            test_complete_reversi_game_183);
575
576        Test.add_func ("/Reversi/reversi/Complete game 184",
577                            test_complete_reversi_game_184);
578
579        Test.add_func ("/Reversi/reversi/Complete game 185",
580                            test_complete_reversi_game_185);
581
582        Test.add_func ("/Reversi/reversi/Complete game 186",
583                            test_complete_reversi_game_186);
584
585        Test.add_func ("/Reversi/reversi/Complete game 187",
586                            test_complete_reversi_game_187);
587
588        Test.add_func ("/Reversi/reversi/Complete game 188",
589                            test_complete_reversi_game_188);
590
591        Test.add_func ("/Reversi/reversi/Complete game 189",
592                            test_complete_reversi_game_189);
593
594        Test.add_func ("/Reversi/reversi/Complete game 190",
595                            test_complete_reversi_game_190);
596
597        Test.add_func ("/Reversi/reversi/Complete game 191",
598                            test_complete_reversi_game_191);
599
600        Test.add_func ("/Reversi/reversi/Complete game 192",
601                            test_complete_reversi_game_192);
602
603        Test.add_func ("/Reversi/reversi/Complete game 193",
604                            test_complete_reversi_game_193);
605
606        Test.add_func ("/Reversi/reversi/Complete game 194",
607                            test_complete_reversi_game_194);
608
609        Test.add_func ("/Reversi/reversi/Complete game 195",
610                            test_complete_reversi_game_195);
611
612        Test.add_func ("/Reversi/reversi/Complete game 196",
613                            test_complete_reversi_game_196);
614
615        Test.add_func ("/Reversi/reversi/Complete game 197",
616                            test_complete_reversi_game_197);
617
618        Test.add_func ("/Reversi/reversi/Complete game 198",
619                            test_complete_reversi_game_198);
620
621        Test.add_func ("/Reversi/reversi/Complete game 199",
622                            test_complete_reversi_game_199);
623
624        Test.add_func ("/Reversi/reversi/Complete game 200",
625                            test_complete_reversi_game_200);
626
627        Test.add_func ("/Reversi/reversi/Complete game 201",
628                            test_complete_reversi_game_201);
629
630        Test.add_func ("/Reversi/reversi/Complete game 202",
631                            test_complete_reversi_game_202);
632
633        Test.add_func ("/Reversi/reversi/Complete game 203",
634                            test_complete_reversi_game_203);
635
636        Test.add_func ("/Reversi/reversi/Complete game 204",
637                            test_complete_reversi_game_204);
638
639        Test.add_func ("/Reversi/reversi/Complete game 205",
640                            test_complete_reversi_game_205);
641
642        Test.add_func ("/Reversi/reversi/Complete game 206",
643                            test_complete_reversi_game_206);
644
645        Test.add_func ("/Reversi/reversi/Complete game 207",
646                            test_complete_reversi_game_207);
647
648        Test.add_func ("/Reversi/reversi/Complete game 208",
649                            test_complete_reversi_game_208);
650
651        Test.add_func ("/Reversi/reversi/Complete game 209",
652                            test_complete_reversi_game_209);
653
654        Test.add_func ("/Reversi/reversi/Complete game 210",
655                            test_complete_reversi_game_210);
656
657        Test.add_func ("/Reversi/reversi/Complete game 211",
658                            test_complete_reversi_game_211);
659
660        Test.add_func ("/Reversi/reversi/Complete game 212",
661                            test_complete_reversi_game_212);
662
663        Test.add_func ("/Reversi/reversi/Complete game 213",
664                            test_complete_reversi_game_213);
665
666        Test.add_func ("/Reversi/reversi/Complete game 214",
667                            test_complete_reversi_game_214);
668
669        Test.add_func ("/Reversi/reversi/Complete game 215",
670                            test_complete_reversi_game_215);
671
672        Test.add_func ("/Reversi/reversi/Complete game 216",
673                            test_complete_reversi_game_216);
674
675        Test.add_func ("/Reversi/reversi/Complete game 217",
676                            test_complete_reversi_game_217);
677
678        Test.add_func ("/Reversi/reversi/Complete game 218",
679                            test_complete_reversi_game_218);
680
681        Test.add_func ("/Reversi/reversi/Complete game 219",
682                            test_complete_reversi_game_219);
683
684        Test.add_func ("/Reversi/reversi/Complete game 220",
685                            test_complete_reversi_game_220);
686
687        Test.add_func ("/Reversi/reversi/Complete game 221",
688                            test_complete_reversi_game_221);
689
690        Test.add_func ("/Reversi/reversi/Complete game 222",
691                            test_complete_reversi_game_222);
692
693        Test.add_func ("/Reversi/reversi/Complete game 223",
694                            test_complete_reversi_game_223);
695
696        Test.add_func ("/Reversi/reversi/Complete game 224",
697                            test_complete_reversi_game_224);
698
699        Test.add_func ("/Reversi/reversi/Complete game 225",
700                            test_complete_reversi_game_225);
701
702        Test.add_func ("/Reversi/reversi/Complete game 226",
703                            test_complete_reversi_game_226);
704
705        Test.add_func ("/Reversi/reversi/Complete game 227",
706                            test_complete_reversi_game_227);
707
708        Test.add_func ("/Reversi/reversi/Complete game 228",
709                            test_complete_reversi_game_228);
710
711        Test.add_func ("/Reversi/reversi/Complete game 229",
712                            test_complete_reversi_game_229);
713
714        Test.add_func ("/Reversi/reversi/Complete game 230",
715                            test_complete_reversi_game_230);
716
717        Test.add_func ("/Reversi/reversi/Complete game 231",
718                            test_complete_reversi_game_231);
719
720        Test.add_func ("/Reversi/reversi/Complete game 232",
721                            test_complete_reversi_game_232);
722
723        /* parallel start position */
724        Test.add_func ("/Reversi/reversi/Complete game 233",
725                            test_complete_reversi_game_233);
726
727        Test.add_func ("/Reversi/reversi/Complete game 234",
728                            test_complete_reversi_game_234);
729
730        Test.add_func ("/Reversi/reversi/Complete game 235",
731                            test_complete_reversi_game_235);
732
733        Test.add_func ("/Reversi/reversi/Complete game 236",
734                            test_complete_reversi_game_236);
735
736        Test.add_func ("/Reversi/reversi/Complete game 237",
737                            test_complete_reversi_game_237);
738
739        Test.add_func ("/Reversi/reversi/Complete game 238",
740                            test_complete_reversi_game_238);
741
742        Test.add_func ("/Reversi/reversi/Complete game 239",
743                            test_complete_reversi_game_239);
744
745        Test.add_func ("/Reversi/reversi/Complete game 240",
746                            test_complete_reversi_game_240);
747
748        Test.add_func ("/Reversi/reversi/Complete game 241",
749                            test_complete_reversi_game_241);
750
751        Test.add_func ("/Reversi/reversi/Complete game 242",
752                            test_complete_reversi_game_242);
753
754        Test.add_func ("/Reversi/reversi/Complete game 243",
755                            test_complete_reversi_game_243);
756
757        Test.add_func ("/Reversi/reversi/Complete game 244",
758                            test_complete_reversi_game_244);
759
760        Test.add_func ("/Reversi/reversi/Complete game 245",
761                            test_complete_reversi_game_245);
762
763        Test.add_func ("/Reversi/reversi/Complete game 246",
764                            test_complete_reversi_game_246);
765
766        Test.add_func ("/Reversi/reversi/Complete game 247",
767                            test_complete_reversi_game_247);
768
769        Test.add_func ("/Reversi/reversi/Complete game 248",
770                            test_complete_reversi_game_248);
771
772        Test.add_func ("/Reversi/reversi/Complete game 249",
773                            test_complete_reversi_game_249);
774
775        Test.add_func ("/Reversi/reversi/Complete game 250",
776                            test_complete_reversi_game_250);
777
778        Test.add_func ("/Reversi/reversi/Complete game 251",
779                            test_complete_reversi_game_251);
780
781        Test.add_func ("/Reversi/reversi/Complete game 252",
782                            test_complete_reversi_game_252);
783
784        Test.add_func ("/Reversi/reversi/Complete game 253",
785                            test_complete_reversi_game_253);
786
787        Test.add_func ("/Reversi/reversi/Complete game 254",
788                            test_complete_reversi_game_254);
789
790        Test.add_func ("/Reversi/reversi/Complete game 255",
791                            test_complete_reversi_game_255);
792
793        Test.add_func ("/Reversi/reversi/Complete game 256",
794                            test_complete_reversi_game_256);
795
796        Test.add_func ("/Reversi/reversi/Complete game 257",
797                            test_complete_reversi_game_257);
798
799        Test.add_func ("/Reversi/reversi/Complete game 258",
800                            test_complete_reversi_game_258);
801
802        Test.add_func ("/Reversi/reversi/Complete game 259",
803                            test_complete_reversi_game_259);
804
805        Test.add_func ("/Reversi/reversi/Complete game 260",
806                            test_complete_reversi_game_260);
807
808        Test.add_func ("/Reversi/reversi/Complete game 261",
809                            test_complete_reversi_game_261);
810
811        Test.add_func ("/Reversi/reversi/Complete game 262",
812                            test_complete_reversi_game_262);
813
814        Test.add_func ("/Reversi/reversi/Complete game 263",
815                            test_complete_reversi_game_263);
816
817        Test.add_func ("/Reversi/reversi/Complete game 264",
818                            test_complete_reversi_game_264);
819
820        Test.add_func ("/Reversi/reversi/Complete game 265",
821                            test_complete_reversi_game_265);
822
823        Test.add_func ("/Reversi/reversi/Complete game 266",
824                            test_complete_reversi_game_266);
825
826        Test.add_func ("/Reversi/reversi/Complete game 267",
827                            test_complete_reversi_game_267);
828
829        Test.add_func ("/Reversi/reversi/Complete game 268",
830                            test_complete_reversi_game_268);
831
832        Test.add_func ("/Reversi/reversi/Complete game 269",
833                            test_complete_reversi_game_269);
834
835        Test.add_func ("/Reversi/reversi/Complete game 270",
836                            test_complete_reversi_game_270);
837
838        Test.add_func ("/Reversi/reversi/Complete game 271",
839                            test_complete_reversi_game_271);
840
841        Test.add_func ("/Reversi/reversi/Complete game 272",
842                            test_complete_reversi_game_272);
843
844        Test.add_func ("/Reversi/reversi/Complete game 273",
845                            test_complete_reversi_game_273);
846
847        Test.add_func ("/Reversi/reversi/Complete game 274",
848                            test_complete_reversi_game_274);
849
850        Test.add_func ("/Reversi/reversi/Complete game 275",
851                            test_complete_reversi_game_275);
852
853        Test.add_func ("/Reversi/reversi/Complete game 276",
854                            test_complete_reversi_game_276);
855
856        Test.add_func ("/Reversi/reversi/Complete game 277",
857                            test_complete_reversi_game_277);
858
859        Test.add_func ("/Reversi/reversi/Complete game 278",
860                            test_complete_reversi_game_278);
861
862        Test.add_func ("/Reversi/reversi/Complete game 279",
863                            test_complete_reversi_game_279);
864
865        Test.add_func ("/Reversi/reversi/Complete game 280",
866                            test_complete_reversi_game_280);
867
868        Test.add_func ("/Reversi/reversi/Complete game 281",
869                            test_complete_reversi_game_281);
870
871        Test.add_func ("/Reversi/reversi/Complete game 282",
872                            test_complete_reversi_game_282);
873
874        Test.add_func ("/Reversi/reversi/Complete game 283",
875                            test_complete_reversi_game_283);
876
877        Test.add_func ("/Reversi/reversi/Complete game 284",
878                            test_complete_reversi_game_284);
879
880        Test.add_func ("/Reversi/reversi/Complete game 285",
881                            test_complete_reversi_game_285);
882
883        Test.add_func ("/Reversi/reversi/Complete game 286",
884                            test_complete_reversi_game_286);
885
886        Test.add_func ("/Reversi/reversi/Complete game 287",
887                            test_complete_reversi_game_287);
888
889        Test.add_func ("/Reversi/reversi/Complete game 288",
890                            test_complete_reversi_game_288);
891
892        Test.add_func ("/Reversi/reversi/Complete game 289",
893                            test_complete_reversi_game_289);
894
895        Test.add_func ("/Reversi/reversi/Complete game 290",
896                            test_complete_reversi_game_290);
897
898        Test.add_func ("/Reversi/reversi/Complete game 291",
899                            test_complete_reversi_game_291);
900
901        Test.add_func ("/Reversi/reversi/Complete game 292",
902                            test_complete_reversi_game_292);
903
904        Test.add_func ("/Reversi/reversi/Complete game 293",
905                            test_complete_reversi_game_293);
906
907        Test.add_func ("/Reversi/reversi/Complete game 294",
908                            test_complete_reversi_game_294);
909
910        Test.add_func ("/Reversi/reversi/Complete game 295",
911                            test_complete_reversi_game_295);
912
913        Test.add_func ("/Reversi/reversi/Complete game 296",
914                            test_complete_reversi_game_296);
915
916        Test.add_func ("/Reversi/reversi/Complete game 297",
917                            test_complete_reversi_game_297);
918
919        Test.add_func ("/Reversi/reversi/Complete game 298",
920                            test_complete_reversi_game_298);
921
922        Test.add_func ("/Reversi/reversi/Complete game 299",
923                            test_complete_reversi_game_299);
924
925        Test.add_func ("/Reversi/reversi/Complete game 300",
926                            test_complete_reversi_game_300);
927
928        Test.add_func ("/Reversi/reversi/Complete game 301",
929                            test_complete_reversi_game_301);
930
931        Test.add_func ("/Reversi/reversi/Complete game 302",
932                            test_complete_reversi_game_302);
933
934        Test.add_func ("/Reversi/reversi/Complete game 303",
935                            test_complete_reversi_game_303);
936
937        Test.add_func ("/Reversi/reversi/Complete game 304",
938                            test_complete_reversi_game_304);
939
940        Test.add_func ("/Reversi/reversi/Complete game 305",
941                            test_complete_reversi_game_305);
942
943        Test.add_func ("/Reversi/reversi/Complete game 306",
944                            test_complete_reversi_game_306);
945
946        Test.add_func ("/Reversi/reversi/Complete game 307",
947                            test_complete_reversi_game_307);
948
949        Test.add_func ("/Reversi/reversi/Complete game 308",
950                            test_complete_reversi_game_308);
951
952        Test.add_func ("/Reversi/reversi/Complete game 309",
953                            test_complete_reversi_game_309);
954
955        Test.add_func ("/Reversi/reversi/Complete game 310",
956                            test_complete_reversi_game_310);
957
958        Test.add_func ("/Reversi/reversi/Complete game 311",
959                            test_complete_reversi_game_311);
960
961        Test.add_func ("/Reversi/reversi/Complete game 312",
962                            test_complete_reversi_game_312);
963
964        Test.add_func ("/Reversi/reversi/Complete game 313",
965                            test_complete_reversi_game_313);
966
967        Test.add_func ("/Reversi/reversi/Complete game 314",
968                            test_complete_reversi_game_314);
969
970        Test.add_func ("/Reversi/reversi/Complete game 315",
971                            test_complete_reversi_game_315);
972
973        Test.add_func ("/Reversi/reversi/Complete game 316",
974                            test_complete_reversi_game_316);
975
976        Test.add_func ("/Reversi/reversi/Complete game 317",
977                            test_complete_reversi_game_317);
978
979        Test.add_func ("/Reversi/reversi/Complete game 318",
980                            test_complete_reversi_game_318);
981
982        Test.add_func ("/Reversi/reversi/Complete game 319",
983                            test_complete_reversi_game_319);
984
985        Test.add_func ("/Reversi/reversi/Complete game 320",
986                            test_complete_reversi_game_320);
987
988        Test.add_func ("/Reversi/reversi/Complete game 321",
989                            test_complete_reversi_game_321);
990
991        Test.add_func ("/Reversi/reversi/Complete game 322",
992                            test_complete_reversi_game_322);
993
994        Test.add_func ("/Reversi/reversi/Complete game 323",
995                            test_complete_reversi_game_323);
996
997        Test.add_func ("/Reversi/reversi/Complete game 324",
998                            test_complete_reversi_game_324);
999
1000        Test.add_func ("/Reversi/reversi/Complete game 325",
1001                            test_complete_reversi_game_325);
1002
1003        Test.add_func ("/Reversi/reversi/Complete game 326",
1004                            test_complete_reversi_game_326);
1005
1006        Test.add_func ("/Reversi/reversi/Complete game 327",
1007                            test_complete_reversi_game_327);
1008
1009        Test.add_func ("/Reversi/reversi/Complete game 328",
1010                            test_complete_reversi_game_328);
1011
1012        Test.add_func ("/Reversi/reversi/Complete game 329",
1013                            test_complete_reversi_game_329);
1014
1015        Test.add_func ("/Reversi/reversi/Complete game 330",
1016                            test_complete_reversi_game_330);
1017
1018        Test.add_func ("/Reversi/reversi/Complete game 331",
1019                            test_complete_reversi_game_331);
1020
1021        Test.add_func ("/Reversi/reversi/Complete game 332",
1022                            test_complete_reversi_game_332);
1023
1024        Test.add_func ("/Reversi/reversi/Complete game 333",
1025                            test_complete_reversi_game_333);
1026
1027        Test.add_func ("/Reversi/reversi/Complete game 334",
1028                            test_complete_reversi_game_334);
1029
1030        Test.add_func ("/Reversi/reversi/Complete game 335",
1031                            test_complete_reversi_game_335);
1032
1033        Test.add_func ("/Reversi/reversi/Complete game 336",
1034                            test_complete_reversi_game_336);
1035
1036        Test.add_func ("/Reversi/reversi/Complete game 337",
1037                            test_complete_reversi_game_337);
1038
1039        Test.add_func ("/Reversi/reversi/Complete game 338",
1040                            test_complete_reversi_game_338);
1041
1042        Test.add_func ("/Reversi/reversi/Complete game 339",
1043                            test_complete_reversi_game_339);
1044
1045        Test.add_func ("/Reversi/reversi/Complete game 340",
1046                            test_complete_reversi_game_340);
1047
1048        Test.add_func ("/Reversi/reversi/Complete game 341",
1049                            test_complete_reversi_game_341);
1050
1051        Test.add_func ("/Reversi/reversi/Complete game 342",
1052                            test_complete_reversi_game_342);
1053
1054        Test.add_func ("/Reversi/reversi/Complete game 343",
1055                            test_complete_reversi_game_343);
1056
1057        Test.add_func ("/Reversi/reversi/Complete game 344",
1058                            test_complete_reversi_game_344);
1059
1060        Test.add_func ("/Reversi/reversi/Complete game 345",
1061                            test_complete_reversi_game_345);
1062
1063        Test.add_func ("/Reversi/reversi/Complete game 346",
1064                            test_complete_reversi_game_346);
1065
1066        Test.add_func ("/Reversi/reversi/Complete game 347",
1067                            test_complete_reversi_game_347);
1068
1069        Test.add_func ("/Reversi/reversi/Complete game 348",
1070                            test_complete_reversi_game_348);
1071
1072        Test.add_func ("/Reversi/reversi/Complete game 349",
1073                            test_complete_reversi_game_349);
1074
1075        Test.add_func ("/Reversi/reversi/Complete game 350",
1076                            test_complete_reversi_game_350);
1077
1078        Test.add_func ("/Reversi/reversi/Complete game 351",
1079                            test_complete_reversi_game_351);
1080
1081        Test.add_func ("/Reversi/reversi/Complete game 352",
1082                            test_complete_reversi_game_352);
1083
1084        Test.add_func ("/Reversi/reversi/Complete game 353",
1085                            test_complete_reversi_game_353);
1086
1087        Test.add_func ("/Reversi/reversi/Complete game 354",
1088                            test_complete_reversi_game_354);
1089
1090        Test.add_func ("/Reversi/reversi/Complete game 355",
1091                            test_complete_reversi_game_355);
1092
1093        Test.add_func ("/Reversi/reversi/Complete game 356",
1094                            test_complete_reversi_game_356);
1095
1096        Test.add_func ("/Reversi/reversi/Complete game 357",
1097                            test_complete_reversi_game_357);
1098
1099        Test.add_func ("/Reversi/reversi/Complete game 358",
1100                            test_complete_reversi_game_358);
1101
1102        Test.add_func ("/Reversi/reversi/Complete game 359",
1103                            test_complete_reversi_game_359);
1104
1105        Test.add_func ("/Reversi/reversi/Complete game 360",
1106                            test_complete_reversi_game_360);
1107
1108        Test.add_func ("/Reversi/reversi/Complete game 361",
1109                            test_complete_reversi_game_361);
1110
1111        Test.add_func ("/Reversi/reversi/Complete game 362",
1112                            test_complete_reversi_game_362);
1113
1114        Test.add_func ("/Reversi/reversi/Complete game 363",
1115                            test_complete_reversi_game_363);
1116
1117        Test.add_func ("/Reversi/reversi/Complete game 364",
1118                            test_complete_reversi_game_364);
1119
1120        Test.add_func ("/Reversi/reversi/Complete game 365",
1121                            test_complete_reversi_game_365);
1122
1123        Test.add_func ("/Reversi/reversi/Complete game 366",
1124                            test_complete_reversi_game_366);
1125
1126        Test.add_func ("/Reversi/reversi/Complete game 367",
1127                            test_complete_reversi_game_367);
1128
1129        Test.add_func ("/Reversi/reversi/Complete game 368",
1130                            test_complete_reversi_game_368);
1131
1132        Test.add_func ("/Reversi/reversi/Complete game 369",
1133                            test_complete_reversi_game_369);
1134
1135        Test.add_func ("/Reversi/reversi/Complete game 370",
1136                            test_complete_reversi_game_370);
1137
1138        Test.add_func ("/Reversi/reversi/Complete game 371",
1139                            test_complete_reversi_game_371);
1140
1141        Test.add_func ("/Reversi/reversi/Complete game 372",
1142                            test_complete_reversi_game_372);
1143
1144        Test.add_func ("/Reversi/reversi/Complete game 373",
1145                            test_complete_reversi_game_373);
1146
1147        Test.add_func ("/Reversi/reversi/Complete game 374",
1148                            test_complete_reversi_game_374);
1149
1150        Test.add_func ("/Reversi/reversi/Complete game 375",
1151                            test_complete_reversi_game_375);
1152
1153        Test.add_func ("/Reversi/reversi/Complete game 376",
1154                            test_complete_reversi_game_376);
1155
1156        Test.add_func ("/Reversi/reversi/Complete game 377",
1157                            test_complete_reversi_game_377);
1158
1159        Test.add_func ("/Reversi/reversi/Complete game 378",
1160                            test_complete_reversi_game_378);
1161
1162        Test.add_func ("/Reversi/reversi/Complete game 379",
1163                            test_complete_reversi_game_379);
1164
1165        Test.add_func ("/Reversi/reversi/Complete game 380",
1166                            test_complete_reversi_game_380);
1167
1168        Test.add_func ("/Reversi/reversi/Complete game 381",
1169                            test_complete_reversi_game_381);
1170
1171        Test.add_func ("/Reversi/reversi/Complete game 382",
1172                            test_complete_reversi_game_382);
1173
1174        Test.add_func ("/Reversi/reversi/Complete game 383",
1175                            test_complete_reversi_game_383);
1176
1177        Test.add_func ("/Reversi/reversi/Complete game 384",
1178                            test_complete_reversi_game_384);
1179
1180        Test.add_func ("/Reversi/reversi/Complete game 385",
1181                            test_complete_reversi_game_385);
1182
1183        Test.add_func ("/Reversi/reversi/Complete game 386",
1184                            test_complete_reversi_game_386);
1185
1186        Test.add_func ("/Reversi/reversi/Complete game 387",
1187                            test_complete_reversi_game_387);
1188
1189        Test.add_func ("/Reversi/reversi/Complete game 388",
1190                            test_complete_reversi_game_388);
1191
1192        Test.add_func ("/Reversi/reversi/Complete game 389",
1193                            test_complete_reversi_game_389);
1194
1195        Test.add_func ("/Reversi/reversi/Complete game 390",
1196                            test_complete_reversi_game_390);
1197
1198        Test.add_func ("/Reversi/reversi/Complete game 391",
1199                            test_complete_reversi_game_391);
1200
1201        Test.add_func ("/Reversi/reversi/Complete game 392",
1202                            test_complete_reversi_game_392);
1203
1204        Test.add_func ("/Reversi/reversi/Complete game 393",
1205                            test_complete_reversi_game_393);
1206
1207        Test.add_func ("/Reversi/reversi/Complete game 394",
1208                            test_complete_reversi_game_394);
1209
1210        Test.add_func ("/Reversi/reversi/Complete game 395",
1211                            test_complete_reversi_game_395);
1212
1213        Test.add_func ("/Reversi/reversi/Complete game 396",
1214                            test_complete_reversi_game_396);
1215
1216        Test.add_func ("/Reversi/reversi/Complete game 397",
1217                            test_complete_reversi_game_397);
1218
1219        Test.add_func ("/Reversi/reversi/Complete game 398",
1220                            test_complete_reversi_game_398);
1221
1222        Test.add_func ("/Reversi/reversi/Complete game 399",
1223                            test_complete_reversi_game_399);
1224
1225        Test.add_func ("/Reversi/reversi/Complete game 400",
1226                            test_complete_reversi_game_400);
1227
1228        Test.add_func ("/Reversi/reversi/Complete game 401",
1229                            test_complete_reversi_game_401);
1230
1231        Test.add_func ("/Reversi/reversi/Complete game 402",
1232                            test_complete_reversi_game_402);
1233
1234        Test.add_func ("/Reversi/reversi/Complete game 403",
1235                            test_complete_reversi_game_403);
1236
1237        Test.add_func ("/Reversi/reversi/Complete game 404",
1238                            test_complete_reversi_game_404);
1239
1240        Test.add_func ("/Reversi/reversi/Complete game 405",
1241                            test_complete_reversi_game_405);
1242
1243        Test.add_func ("/Reversi/reversi/Complete game 406",
1244                            test_complete_reversi_game_406);
1245
1246        Test.add_func ("/Reversi/reversi/Complete game 407",
1247                            test_complete_reversi_game_407);
1248
1249        Test.add_func ("/Reversi/reversi/Complete game 408",
1250                            test_complete_reversi_game_408);
1251
1252        Test.add_func ("/Reversi/reversi/Complete game 409",
1253                            test_complete_reversi_game_409);
1254
1255        Test.add_func ("/Reversi/reversi/Complete game 410",
1256                            test_complete_reversi_game_410);
1257
1258        Test.add_func ("/Reversi/reversi/Complete game 411",
1259                            test_complete_reversi_game_411);
1260
1261        Test.add_func ("/Reversi/reversi/Complete game 412",
1262                            test_complete_reversi_game_412);
1263
1264        Test.add_func ("/Reversi/reversi/Complete game 413",
1265                            test_complete_reversi_game_413);
1266
1267        Test.add_func ("/Reversi/reversi/Complete game 414",
1268                            test_complete_reversi_game_414);
1269
1270        Test.add_func ("/Reversi/reversi/Complete game 415",
1271                            test_complete_reversi_game_415);
1272
1273        Test.add_func ("/Reversi/reversi/Complete game 416",
1274                            test_complete_reversi_game_416);
1275
1276        Test.add_func ("/Reversi/reversi/Complete game 417",
1277                            test_complete_reversi_game_417);
1278
1279        Test.add_func ("/Reversi/reversi/Complete game 418",
1280                            test_complete_reversi_game_418);
1281
1282        Test.add_func ("/Reversi/reversi/Complete game 419",
1283                            test_complete_reversi_game_419);
1284
1285        Test.add_func ("/Reversi/reversi/Complete game 420",
1286                            test_complete_reversi_game_420);
1287
1288        Test.add_func ("/Reversi/reversi/Complete game 421",
1289                            test_complete_reversi_game_421);
1290
1291        Test.add_func ("/Reversi/reversi/Complete game 422",
1292                            test_complete_reversi_game_422);
1293
1294        Test.add_func ("/Reversi/reversi/Complete game 423",
1295                            test_complete_reversi_game_423);
1296
1297        Test.add_func ("/Reversi/reversi/Complete game 424",
1298                            test_complete_reversi_game_424);
1299
1300        Test.add_func ("/Reversi/reversi/Complete game 425",
1301                            test_complete_reversi_game_425);
1302
1303        Test.add_func ("/Reversi/reversi/Complete game 426",
1304                            test_complete_reversi_game_426);
1305
1306        Test.add_func ("/Reversi/reversi/Complete game 427",
1307                            test_complete_reversi_game_427);
1308
1309        Test.add_func ("/Reversi/reversi/Complete game 428",
1310                            test_complete_reversi_game_428);
1311
1312        Test.add_func ("/Reversi/reversi/Complete game 429",
1313                            test_complete_reversi_game_429);
1314
1315        Test.add_func ("/Reversi/reversi/Complete game 430",
1316                            test_complete_reversi_game_430);
1317
1318        Test.add_func ("/Reversi/reversi/Complete game 431",
1319                            test_complete_reversi_game_431);
1320
1321        Test.add_func ("/Reversi/reversi/Complete game 432",
1322                            test_complete_reversi_game_432);
1323
1324        Test.add_func ("/Reversi/reversi/Complete game 433",
1325                            test_complete_reversi_game_433);
1326
1327        Test.add_func ("/Reversi/reversi/Complete game 434",
1328                            test_complete_reversi_game_434);
1329
1330        Test.add_func ("/Reversi/reversi/Complete game 435",
1331                            test_complete_reversi_game_435);
1332
1333        Test.add_func ("/Reversi/reversi/Complete game 436",
1334                            test_complete_reversi_game_436);
1335
1336        Test.add_func ("/Reversi/reversi/Complete game 437",
1337                            test_complete_reversi_game_437);
1338
1339        Test.add_func ("/Reversi/reversi/Complete game 438",
1340                            test_complete_reversi_game_438);
1341
1342        Test.add_func ("/Reversi/reversi/Complete game 439",
1343                            test_complete_reversi_game_439);
1344
1345        Test.add_func ("/Reversi/reversi/Complete game 440",
1346                            test_complete_reversi_game_440);
1347
1348        Test.add_func ("/Reversi/reversi/Complete game 441",
1349                            test_complete_reversi_game_441);
1350
1351        Test.add_func ("/Reversi/reversi/Complete game 442",
1352                            test_complete_reversi_game_442);
1353
1354        Test.add_func ("/Reversi/reversi/Complete game 443",
1355                            test_complete_reversi_game_443);
1356
1357        Test.add_func ("/Reversi/reversi/Complete game 444",
1358                            test_complete_reversi_game_444);
1359
1360        Test.add_func ("/Reversi/reversi/Complete game 445",
1361                            test_complete_reversi_game_445);
1362
1363        Test.add_func ("/Reversi/reversi/Complete game 446",
1364                            test_complete_reversi_game_446);
1365
1366        Test.add_func ("/Reversi/reversi/Complete game 447",
1367                            test_complete_reversi_game_447);
1368
1369        Test.add_func ("/Reversi/reversi/Complete game 448",
1370                            test_complete_reversi_game_448);
1371
1372        Test.add_func ("/Reversi/reversi/Complete game 449",
1373                            test_complete_reversi_game_449);
1374
1375        Test.add_func ("/Reversi/reversi/Complete game 450",
1376                            test_complete_reversi_game_450);
1377
1378        Test.add_func ("/Reversi/reversi/Complete game 451",
1379                            test_complete_reversi_game_451);
1380
1381        Test.add_func ("/Reversi/reversi/Complete game 452",
1382                            test_complete_reversi_game_452);
1383
1384        Test.add_func ("/Reversi/reversi/Complete game 453",
1385                            test_complete_reversi_game_453);
1386
1387        Test.add_func ("/Reversi/reversi/Complete game 454",
1388                            test_complete_reversi_game_454);
1389
1390        Test.add_func ("/Reversi/reversi/Complete game 455",
1391                            test_complete_reversi_game_455);
1392
1393        Test.add_func ("/Reversi/reversi/Complete game 456",
1394                            test_complete_reversi_game_456);
1395
1396        Test.add_func ("/Reversi/reversi/Complete game 457",
1397                            test_complete_reversi_game_457);
1398
1399        Test.add_func ("/Reversi/reversi/Complete game 458",
1400                            test_complete_reversi_game_458);
1401
1402        Test.add_func ("/Reversi/reversi/Complete game 459",
1403                            test_complete_reversi_game_459);
1404
1405        Test.add_func ("/Reversi/reversi/Complete game 460",
1406                            test_complete_reversi_game_460);
1407
1408        Test.add_func ("/Reversi/reversi/Complete game 461",
1409                            test_complete_reversi_game_461);
1410
1411        Test.add_func ("/Reversi/reversi/Complete game 462",
1412                            test_complete_reversi_game_462);
1413
1414        Test.add_func ("/Reversi/reversi/Complete game 463",
1415                            test_complete_reversi_game_463);
1416
1417        Test.add_func ("/Reversi/reversi/Complete game 464",
1418                            test_complete_reversi_game_464);
1419
1420        Test.add_func ("/Reversi/reversi/Complete game 465",
1421                            test_complete_reversi_game_465);
1422
1423        Test.add_func ("/Reversi/reversi/Complete game 466",
1424                            test_complete_reversi_game_466);
1425
1426        Test.add_func ("/Reversi/reversi/Complete game 467",
1427                            test_complete_reversi_game_467);
1428
1429        Test.add_func ("/Reversi/reversi/Complete game 468",
1430                            test_complete_reversi_game_468);
1431
1432        Test.add_func ("/Reversi/reversi/Complete game 469",
1433                            test_complete_reversi_game_469);
1434
1435        Test.add_func ("/Reversi/reversi/Complete game 470",
1436                            test_complete_reversi_game_470);
1437
1438        Test.add_func ("/Reversi/reversi/Complete game 471",
1439                            test_complete_reversi_game_471);
1440
1441        Test.add_func ("/Reversi/reversi/Complete game 472",
1442                            test_complete_reversi_game_472);
1443
1444        Test.add_func ("/Reversi/reversi/Complete game 473",
1445                            test_complete_reversi_game_473);
1446
1447        Test.add_func ("/Reversi/reversi/Complete game 474",
1448                            test_complete_reversi_game_474);
1449
1450        Test.add_func ("/Reversi/reversi/Complete game 475",
1451                            test_complete_reversi_game_475);
1452
1453        Test.add_func ("/Reversi/reversi/Complete game 476",
1454                            test_complete_reversi_game_476);
1455
1456        Test.add_func ("/Reversi/reversi/Complete game 477",
1457                            test_complete_reversi_game_477);
1458
1459        Test.add_func ("/Reversi/reversi/Complete game 478",
1460                            test_complete_reversi_game_478);
1461
1462        Test.add_func ("/Reversi/reversi/Complete game 479",
1463                            test_complete_reversi_game_479);
1464
1465        Test.add_func ("/Reversi/reversi/Complete game 480",
1466                            test_complete_reversi_game_480);
1467
1468        Test.add_func ("/Reversi/reversi/Complete game 481",
1469                            test_complete_reversi_game_481);
1470
1471        Test.add_func ("/Reversi/reversi/Complete game 482",
1472                            test_complete_reversi_game_482);
1473
1474        Test.add_func ("/Reversi/reversi/Complete game 483",
1475                            test_complete_reversi_game_483);
1476
1477        Test.add_func ("/Reversi/reversi/Complete game 484",
1478                            test_complete_reversi_game_484);
1479
1480        Test.add_func ("/Reversi/reversi/Complete game 485",
1481                            test_complete_reversi_game_485);
1482
1483        Test.add_func ("/Reversi/reversi/Complete game 486",
1484                            test_complete_reversi_game_486);
1485
1486        Test.add_func ("/Reversi/reversi/Complete game 487",
1487                            test_complete_reversi_game_487);
1488
1489        Test.add_func ("/Reversi/reversi/Complete game 488",
1490                            test_complete_reversi_game_488);
1491
1492        Test.add_func ("/Reversi/reversi/Complete game 489",
1493                            test_complete_reversi_game_489);
1494
1495        Test.add_func ("/Reversi/reversi/Complete game 490",
1496                            test_complete_reversi_game_490);
1497
1498        Test.add_func ("/Reversi/reversi/Complete game 491",
1499                            test_complete_reversi_game_491);
1500
1501        Test.add_func ("/Reversi/reversi/Complete game 492",
1502                            test_complete_reversi_game_492);
1503
1504        Test.add_func ("/Reversi/reversi/Complete game 493",
1505                            test_complete_reversi_game_493);
1506
1507        Test.add_func ("/Reversi/reversi/Complete game 494",
1508                            test_complete_reversi_game_494);
1509
1510        Test.add_func ("/Reversi/reversi/Complete game 495",
1511                            test_complete_reversi_game_495);
1512    }
1513
1514    /*\
1515    * * perfs tests
1516    \*/
1517
1518    private static inline void test_complete_reversi_game_1 ()
1519    {
1520                                  /* 0 1 2 3 4 5 6 7 */
1521        string [] board = {/* 0 */ " . . . . . . . .",
1522                           /* 1 */ " . . . . . . . .",
1523                           /* 2 */ " . . . . . . . .",
1524                           /* 3 */ " . . . L D . . .",
1525                           /* 4 */ " . . . D L D . .",
1526                           /* 5 */ " . . . . . L . .",
1527                           /* 6 */ " . . . . . D L .",
1528                           /* 7 */ " . . . . . . . ."};
1529
1530        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1531        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1532
1533        assert_true (ai_move (ai, 4, 5));
1534        assert_true (ai_move (ai, 5, 7));
1535        assert_true (ai_move (ai, 6, 5));
1536        assert_true (ai_move (ai, 7, 4));
1537        assert_true (ai_move (ai, 7, 5));
1538        assert_true (ai_move (ai, 7, 6));
1539        assert_true (ai_move (ai, 4, 7));
1540        assert_true (ai_move (ai, 6, 4));
1541        assert_true (ai_move (ai, 6, 7));
1542        assert_true (ai_move (ai, 4, 6));
1543        assert_true (ai_move (ai, 7, 7));
1544        assert_true (ai_move (ai, 5, 3));
1545        assert_true (ai_move (ai, 7, 3));
1546        assert_true (ai_move (ai, 3, 6));
1547        assert_true (ai_move (ai, 5, 2));
1548        assert_true (ai_move (ai, 3, 2));
1549        assert_true (ai_move (ai, 6, 3));
1550        assert_true (ai_move (ai, 5, 1));
1551        assert_true (ai_move (ai, 2, 7));
1552        assert_true (ai_move (ai, 2, 6));
1553        assert_true (ai_move (ai, 2, 5));
1554        assert_true (ai_move (ai, 3, 5));
1555        assert_true (ai_move (ai, 3, 7));
1556        assert_true (ai_move (ai, 1, 5));
1557        assert_true (ai_move (ai, 4, 1));
1558        assert_true (ai_move (ai, 5, 0));
1559        assert_true (ai_move (ai, 1, 4));
1560        assert_true (ai_move (ai, 1, 3));
1561        assert_true (ai_move (ai, 6, 2));
1562        assert_true (ai_move (ai, 6, 1));
1563        assert_true (ai_move (ai, 3, 0));
1564        assert_true (ai_move (ai, 3, 1));
1565        assert_true (ai_move (ai, 0, 5));
1566        assert_true (ai_move (ai, 1, 6));
1567        assert_true (ai_move (ai, 0, 3));
1568        assert_true (game.pass ());
1569        assert_true (ai_move (ai, 1, 2));
1570        assert_true (ai_move (ai, 1, 1));
1571        assert_true (ai_move (ai, 2, 2));
1572        assert_true (ai_move (ai, 2, 3));
1573        assert_true (ai_move (ai, 2, 4));
1574        assert_true (game.pass ());
1575        assert_true (ai_move (ai, 0, 7));
1576        assert_true (ai_move (ai, 1, 7));
1577        assert_true (ai_move (ai, 0, 6));
1578        assert_true (ai_move (ai, 7, 1));
1579        assert_true (ai_move (ai, 7, 2));
1580        assert_true (ai_move (ai, 0, 4));
1581        assert_true (ai_move (ai, 4, 0));
1582        assert_true (ai_move (ai, 2, 0));
1583        assert_true (ai_move (ai, 2, 1));
1584        assert_true (ai_move (ai, 0, 2));
1585        assert_true (ai_move (ai, 4, 2));
1586        assert_true (ai_move (ai, 6, 0));
1587        assert_true (ai_move (ai, 0, 0));
1588        assert_true (ai_move (ai, 0, 1));
1589        assert_true (ai_move (ai, 1, 0));
1590        assert_true (game.pass ());
1591        assert_true (ai_move (ai, 7, 0));
1592    }
1593
1594    private static inline void test_complete_reversi_game_2 ()
1595    {
1596                                  /* 0 1 2 3 4 5 6 7 */
1597        string [] board = {/* 0 */ " . . . . . . . .",
1598                           /* 1 */ " . . . . . . . .",
1599                           /* 2 */ " . . . . . . . .",
1600                           /* 3 */ " . . . L D . . .",
1601                           /* 4 */ " . . . D L L L .",
1602                           /* 5 */ " . . . . . D . .",
1603                           /* 6 */ " . . . . . D . .",
1604                           /* 7 */ " . . . . . . . ."};
1605
1606        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1607        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1608
1609        assert_true (ai_move (ai, 5, 3));
1610        assert_true (ai_move (ai, 4, 6));
1611        assert_true (ai_move (ai, 7, 5));
1612        assert_true (ai_move (ai, 5, 7));
1613        assert_true (ai_move (ai, 3, 7));
1614        assert_true (ai_move (ai, 5, 2));
1615        assert_true (ai_move (ai, 6, 5));
1616        assert_true (ai_move (ai, 7, 3));
1617        assert_true (ai_move (ai, 7, 4));
1618        assert_true (ai_move (ai, 7, 6));
1619        assert_true (ai_move (ai, 4, 5));
1620        assert_true (ai_move (ai, 3, 6));
1621        assert_true (ai_move (ai, 3, 5));
1622        assert_true (ai_move (ai, 4, 2));
1623        assert_true (ai_move (ai, 5, 1));
1624        assert_true (ai_move (ai, 6, 2));
1625        assert_true (ai_move (ai, 3, 1));
1626        assert_true (ai_move (ai, 3, 2));
1627        assert_true (ai_move (ai, 2, 1));
1628        assert_true (ai_move (ai, 2, 2));
1629        assert_true (ai_move (ai, 1, 3));
1630        assert_true (ai_move (ai, 1, 2));
1631        assert_true (ai_move (ai, 4, 1));
1632        assert_true (ai_move (ai, 6, 3));
1633        assert_true (ai_move (ai, 2, 3));
1634        assert_true (ai_move (ai, 2, 7));
1635        assert_true (ai_move (ai, 4, 7));
1636        assert_true (ai_move (ai, 2, 5));
1637        assert_true (ai_move (ai, 0, 2));
1638        assert_true (ai_move (ai, 5, 0));
1639        assert_true (ai_move (ai, 1, 4));
1640        assert_true (ai_move (ai, 1, 5));
1641        assert_true (ai_move (ai, 7, 2));
1642        assert_true (ai_move (ai, 7, 1));
1643        assert_true (ai_move (ai, 2, 6));
1644        assert_true (ai_move (ai, 2, 4));
1645        assert_true (ai_move (ai, 0, 5));
1646        assert_true (ai_move (ai, 2, 0));
1647        assert_true (ai_move (ai, 3, 0));
1648        assert_true (ai_move (ai, 4, 0));
1649        assert_true (ai_move (ai, 1, 1));
1650        assert_true (ai_move (ai, 1, 0));
1651        assert_true (ai_move (ai, 6, 6));
1652        assert_true (ai_move (ai, 0, 4));
1653        assert_true (ai_move (ai, 0, 3));
1654        assert_true (ai_move (ai, 6, 1));
1655        assert_true (ai_move (ai, 7, 0));
1656        assert_true (ai_move (ai, 7, 7));
1657        assert_true (ai_move (ai, 6, 0));
1658        assert_true (ai_move (ai, 0, 0));
1659        assert_true (ai_move (ai, 6, 7));
1660        assert_true (ai_move (ai, 1, 7));
1661        assert_true (ai_move (ai, 1, 6));
1662        assert_true (ai_move (ai, 0, 6));
1663        assert_true (ai_move (ai, 0, 1));
1664        assert_true (game.pass ());
1665        assert_true (ai_move (ai, 0, 7));
1666    }
1667
1668    private static inline void test_complete_reversi_game_3 ()
1669    {
1670                                  /* 0 1 2 3 4 5 6 7 */
1671        string [] board = {/* 0 */ " . . . . . . . .",
1672                           /* 1 */ " . . . . . . . .",
1673                           /* 2 */ " . . . . . . . .",
1674                           /* 3 */ " . . . L L L . .",
1675                           /* 4 */ " . . . D L D . .",
1676                           /* 5 */ " . . . . . D . .",
1677                           /* 6 */ " . . . . . D . .",
1678                           /* 7 */ " . . . . . . . ."};
1679
1680        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1681        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1682
1683        assert_true (ai_move (ai, 5, 2));
1684        assert_true (ai_move (ai, 6, 2));
1685        assert_true (ai_move (ai, 6, 3));
1686        assert_true (ai_move (ai, 4, 2));
1687        assert_true (ai_move (ai, 5, 1));
1688        assert_true (ai_move (ai, 7, 3));
1689        assert_true (ai_move (ai, 7, 4));
1690        assert_true (ai_move (ai, 7, 5));
1691        assert_true (ai_move (ai, 7, 2));
1692        assert_true (ai_move (ai, 7, 1));
1693        assert_true (ai_move (ai, 2, 4));
1694        assert_true (ai_move (ai, 6, 4));
1695        assert_true (ai_move (ai, 4, 5));
1696        assert_true (ai_move (ai, 4, 1));
1697        assert_true (ai_move (ai, 4, 0));
1698        assert_true (ai_move (ai, 4, 6));
1699        assert_true (ai_move (ai, 4, 7));
1700        assert_true (ai_move (ai, 3, 6));
1701        assert_true (ai_move (ai, 6, 5));
1702        assert_true (ai_move (ai, 3, 5));
1703        assert_true (ai_move (ai, 2, 7));
1704        assert_true (ai_move (ai, 3, 1));
1705        assert_true (ai_move (ai, 2, 5));
1706        assert_true (ai_move (ai, 2, 6));
1707        assert_true (ai_move (ai, 2, 2));
1708        assert_true (ai_move (ai, 5, 0));
1709        assert_true (ai_move (ai, 6, 0));
1710        assert_true (ai_move (ai, 1, 5));
1711        assert_true (ai_move (ai, 1, 4));
1712        assert_true (ai_move (ai, 2, 0));
1713        assert_true (ai_move (ai, 0, 5));
1714        assert_true (ai_move (ai, 1, 3));
1715        assert_true (ai_move (ai, 2, 3));
1716        assert_true (ai_move (ai, 0, 4));
1717        assert_true (ai_move (ai, 0, 2));
1718        assert_true (ai_move (ai, 0, 6));
1719        assert_true (ai_move (ai, 2, 1));
1720        assert_true (ai_move (ai, 5, 7));
1721        assert_true (ai_move (ai, 0, 3));
1722        assert_true (ai_move (ai, 0, 1));
1723        assert_true (ai_move (ai, 6, 1));
1724        assert_true (ai_move (ai, 3, 7));
1725        assert_true (ai_move (ai, 6, 7));
1726        assert_true (ai_move (ai, 1, 2));
1727        assert_true (ai_move (ai, 3, 2));
1728        assert_true (ai_move (ai, 3, 0));
1729        assert_true (ai_move (ai, 1, 0));
1730        assert_true (ai_move (ai, 1, 1));
1731        assert_true (ai_move (ai, 1, 7));
1732        assert_true (ai_move (ai, 7, 6));
1733        assert_true (ai_move (ai, 0, 0));
1734        assert_true (ai_move (ai, 7, 0));
1735        assert_true (ai_move (ai, 0, 7));
1736        assert_true (ai_move (ai, 6, 6));
1737        assert_true (ai_move (ai, 7, 7));
1738        assert_true (ai_move (ai, 1, 6));
1739    }
1740
1741    private static inline void test_complete_reversi_game_4 ()
1742    {
1743                                  /* 0 1 2 3 4 5 6 7 */
1744        string [] board = {/* 0 */ " . . . . . . . .",
1745                           /* 1 */ " . . . . . . . .",
1746                           /* 2 */ " . . . . L . . .",
1747                           /* 3 */ " . . . L L . . .",
1748                           /* 4 */ " . . . D L D . .",
1749                           /* 5 */ " . . . . . D . .",
1750                           /* 6 */ " . . . . . D . .",
1751                           /* 7 */ " . . . . . . . ."};
1752
1753        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1754        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1755
1756        assert_true (ai_move (ai, 5, 2));
1757        assert_true (ai_move (ai, 5, 3));
1758        assert_true (ai_move (ai, 3, 2));
1759        assert_true (ai_move (ai, 5, 1));
1760        assert_true (ai_move (ai, 6, 2));
1761        assert_true (ai_move (ai, 3, 1));
1762        assert_true (ai_move (ai, 4, 1));
1763        assert_true (ai_move (ai, 4, 0));
1764        assert_true (ai_move (ai, 6, 3));
1765        assert_true (ai_move (ai, 6, 4));
1766        assert_true (ai_move (ai, 7, 3));
1767        assert_true (ai_move (ai, 7, 5));
1768        assert_true (ai_move (ai, 3, 5));
1769        assert_true (ai_move (ai, 7, 4));
1770        assert_true (ai_move (ai, 2, 0));
1771        assert_true (ai_move (ai, 7, 2));
1772        assert_true (ai_move (ai, 6, 5));
1773        assert_true (ai_move (ai, 4, 5));
1774        assert_true (ai_move (ai, 6, 0));
1775        assert_true (ai_move (ai, 2, 6));
1776        assert_true (ai_move (ai, 3, 6));
1777        assert_true (ai_move (ai, 5, 7));
1778        assert_true (ai_move (ai, 4, 6));
1779        assert_true (ai_move (ai, 2, 7));
1780        assert_true (ai_move (ai, 6, 1));
1781        assert_true (ai_move (ai, 2, 2));
1782        assert_true (ai_move (ai, 2, 4));
1783        assert_true (ai_move (ai, 4, 7));
1784        assert_true (ai_move (ai, 3, 0));
1785        assert_true (ai_move (ai, 1, 0));
1786        assert_true (ai_move (ai, 1, 2));
1787        assert_true (ai_move (ai, 0, 2));
1788        assert_true (ai_move (ai, 2, 1));
1789        assert_true (ai_move (ai, 1, 3));
1790        assert_true (ai_move (ai, 1, 4));
1791        assert_true (ai_move (ai, 1, 1));
1792        assert_true (ai_move (ai, 5, 0));
1793        assert_true (ai_move (ai, 7, 0));
1794        assert_true (ai_move (ai, 0, 0));
1795        assert_true (ai_move (ai, 2, 5));
1796        assert_true (ai_move (ai, 0, 4));
1797        assert_true (ai_move (ai, 2, 3));
1798        assert_true (ai_move (ai, 6, 6));
1799        assert_true (ai_move (ai, 0, 5));
1800        assert_true (ai_move (ai, 1, 5));
1801        assert_true (ai_move (ai, 0, 3));
1802        assert_true (ai_move (ai, 0, 1));
1803        assert_true (ai_move (ai, 0, 6));
1804        assert_true (ai_move (ai, 0, 7));
1805        assert_true (ai_move (ai, 7, 7));
1806        assert_true (ai_move (ai, 1, 6));
1807        assert_true (ai_move (ai, 1, 7));
1808        assert_true (ai_move (ai, 3, 7));
1809        assert_true (game.pass ());
1810        assert_true (ai_move (ai, 6, 7));
1811        assert_true (game.pass ());
1812        assert_true (ai_move (ai, 7, 6));
1813        assert_true (game.pass ());
1814        assert_true (ai_move (ai, 7, 1));
1815    }
1816
1817    private static inline void test_complete_reversi_game_5 ()
1818    {
1819                                  /* 0 1 2 3 4 5 6 7 */
1820        string [] board = {/* 0 */ " . . . . . . . .",
1821                           /* 1 */ " . . . . . . . .",
1822                           /* 2 */ " . . . . . . . .",
1823                           /* 3 */ " . . . L D . . .",
1824                           /* 4 */ " . . . L L D . .",
1825                           /* 5 */ " . . . L . D . .",
1826                           /* 6 */ " . . . . . D . .",
1827                           /* 7 */ " . . . . . . . ."};
1828
1829        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1830        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1831
1832        assert_true (ai_move (ai, 2, 3));
1833        assert_true (ai_move (ai, 1, 2));
1834        assert_true (ai_move (ai, 1, 3));
1835        assert_true (ai_move (ai, 5, 2));
1836        assert_true (ai_move (ai, 3, 2));
1837        assert_true (ai_move (ai, 6, 4));
1838        assert_true (ai_move (ai, 5, 3));
1839        assert_true (ai_move (ai, 4, 6));
1840        assert_true (ai_move (ai, 5, 1));
1841        assert_true (ai_move (ai, 5, 7));
1842        assert_true (ai_move (ai, 7, 5));
1843        assert_true (ai_move (ai, 7, 3));
1844        assert_true (ai_move (ai, 7, 4));
1845        assert_true (ai_move (ai, 7, 6));
1846        assert_true (ai_move (ai, 3, 7));
1847        assert_true (ai_move (ai, 3, 6));
1848        assert_true (ai_move (ai, 2, 5));
1849        assert_true (ai_move (ai, 1, 5));
1850        assert_true (ai_move (ai, 2, 6));
1851        assert_true (ai_move (ai, 2, 7));
1852        assert_true (ai_move (ai, 1, 7));
1853        assert_true (ai_move (ai, 5, 0));
1854        assert_true (ai_move (ai, 4, 2));
1855        assert_true (ai_move (ai, 2, 1));
1856        assert_true (ai_move (ai, 2, 4));
1857        assert_true (ai_move (ai, 4, 1));
1858        assert_true (ai_move (ai, 4, 5));
1859        assert_true (ai_move (ai, 6, 3));
1860        assert_true (ai_move (ai, 6, 5));
1861        assert_true (ai_move (ai, 0, 2));
1862        assert_true (ai_move (ai, 1, 4));
1863        assert_true (ai_move (ai, 0, 4));
1864        assert_true (ai_move (ai, 3, 1));
1865        assert_true (ai_move (ai, 6, 2));
1866        assert_true (ai_move (ai, 7, 2));
1867        assert_true (ai_move (ai, 7, 1));
1868        assert_true (ai_move (ai, 0, 6));
1869        assert_true (ai_move (ai, 2, 2));
1870        assert_true (ai_move (ai, 2, 0));
1871        assert_true (ai_move (ai, 0, 5));
1872        assert_true (ai_move (ai, 3, 0));
1873        assert_true (ai_move (ai, 6, 1));
1874        assert_true (ai_move (ai, 0, 3));
1875        assert_true (ai_move (ai, 0, 7));
1876        assert_true (ai_move (ai, 4, 7));
1877        assert_true (ai_move (ai, 1, 6));
1878        assert_true (ai_move (ai, 6, 0));
1879        assert_true (ai_move (ai, 4, 0));
1880        assert_true (ai_move (ai, 1, 1));
1881        assert_true (ai_move (ai, 7, 0));
1882        assert_true (ai_move (ai, 6, 7));
1883        assert_true (ai_move (ai, 7, 7));
1884        assert_true (game.pass ());
1885        assert_true (ai_move (ai, 6, 6));
1886        assert_true (game.pass ());
1887        assert_true (ai_move (ai, 0, 0));
1888        assert_true (ai_move (ai, 1, 0));
1889        assert_true (ai_move (ai, 0, 1));
1890    }
1891
1892    private static inline void test_complete_reversi_game_6 ()
1893    {
1894                                  /* 0 1 2 3 4 5 6 7 */
1895        string [] board = {/* 0 */ " . . . . . . . .",
1896                           /* 1 */ " . . . . . . . .",
1897                           /* 2 */ " . . . . . . . .",
1898                           /* 3 */ " . . . L D . . .",
1899                           /* 4 */ " . . L L L D . .",
1900                           /* 5 */ " . . . . . D . .",
1901                           /* 6 */ " . . . . . D . .",
1902                           /* 7 */ " . . . . . . . ."};
1903
1904        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1905        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1906
1907        assert_true (ai_move (ai, 4, 5));
1908        assert_true (ai_move (ai, 5, 2));
1909        assert_true (ai_move (ai, 3, 2));
1910        assert_true (ai_move (ai, 3, 1));
1911        assert_true (ai_move (ai, 2, 1));
1912        assert_true (ai_move (ai, 5, 3));
1913        assert_true (ai_move (ai, 6, 2));
1914        assert_true (ai_move (ai, 6, 3));
1915        assert_true (ai_move (ai, 5, 1));
1916        assert_true (ai_move (ai, 6, 5));
1917        assert_true (ai_move (ai, 7, 5));
1918        assert_true (ai_move (ai, 3, 6));
1919        assert_true (ai_move (ai, 4, 6));
1920        assert_true (ai_move (ai, 5, 7));
1921        assert_true (ai_move (ai, 7, 4));
1922        assert_true (ai_move (ai, 7, 2));
1923        assert_true (ai_move (ai, 6, 4));
1924        assert_true (ai_move (ai, 5, 0));
1925        assert_true (ai_move (ai, 4, 2));
1926        assert_true (ai_move (ai, 2, 2));
1927        assert_true (ai_move (ai, 4, 7));
1928        assert_true (ai_move (ai, 3, 7));
1929        assert_true (ai_move (ai, 2, 7));
1930        assert_true (ai_move (ai, 1, 7));
1931        assert_true (ai_move (ai, 4, 1));
1932        assert_true (ai_move (ai, 6, 7));
1933        assert_true (ai_move (ai, 1, 3));
1934        assert_true (ai_move (ai, 1, 2));
1935        assert_true (ai_move (ai, 2, 3));
1936        assert_true (ai_move (ai, 2, 6));
1937        assert_true (ai_move (ai, 3, 5));
1938        assert_true (ai_move (ai, 4, 0));
1939        assert_true (ai_move (ai, 0, 2));
1940        assert_true (ai_move (ai, 1, 4));
1941        assert_true (ai_move (ai, 2, 5));
1942        assert_true (ai_move (ai, 1, 5));
1943        assert_true (ai_move (ai, 0, 5));
1944        assert_true (ai_move (ai, 2, 0));
1945        assert_true (ai_move (ai, 3, 0));
1946        assert_true (ai_move (ai, 7, 3));
1947        assert_true (ai_move (ai, 7, 1));
1948        assert_true (ai_move (ai, 0, 4));
1949        assert_true (ai_move (ai, 0, 3));
1950        assert_true (ai_move (ai, 6, 6));
1951        assert_true (ai_move (ai, 7, 6));
1952        assert_true (ai_move (ai, 0, 1));
1953        assert_true (ai_move (ai, 0, 0));
1954        assert_true (ai_move (ai, 1, 6));
1955        assert_true (ai_move (ai, 1, 1));
1956        assert_true (ai_move (ai, 6, 1));
1957        assert_true (ai_move (ai, 1, 0));
1958        assert_true (game.pass ());
1959        assert_true (ai_move (ai, 7, 7));
1960        assert_true (game.pass ());
1961        assert_true (ai_move (ai, 0, 7));
1962        assert_true (game.pass ());
1963        assert_true (ai_move (ai, 0, 6));
1964        assert_true (game.pass ());
1965        assert_true (ai_move (ai, 6, 0));
1966        assert_true (ai_move (ai, 7, 0));
1967    }
1968
1969    private static inline void test_complete_reversi_game_7 ()
1970    {
1971                                  /* 0 1 2 3 4 5 6 7 */
1972        string [] board = {/* 0 */ " . . . . . . . .",
1973                           /* 1 */ " . . . . . . . .",
1974                           /* 2 */ " . . . . . . . .",
1975                           /* 3 */ " . . . L L L . .",
1976                           /* 4 */ " . . . D D L . .",
1977                           /* 5 */ " . . . . D L . .",
1978                           /* 6 */ " . . . . . . . .",
1979                           /* 7 */ " . . . . . . . ."};
1980
1981        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
1982        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
1983
1984        assert_true (ai_move (ai, 6, 5));
1985        assert_true (ai_move (ai, 5, 6));
1986        assert_true (ai_move (ai, 6, 3));
1987        assert_true (ai_move (ai, 7, 5));
1988        assert_true (ai_move (ai, 5, 7));
1989        assert_true (ai_move (ai, 4, 7));
1990        assert_true (ai_move (ai, 3, 7));
1991        assert_true (ai_move (ai, 7, 3));
1992        assert_true (ai_move (ai, 7, 2));
1993        assert_true (ai_move (ai, 2, 5));
1994        assert_true (ai_move (ai, 5, 2));
1995        assert_true (ai_move (ai, 5, 1));
1996        assert_true (ai_move (ai, 6, 4));
1997        assert_true (ai_move (ai, 6, 2));
1998        assert_true (ai_move (ai, 3, 2));
1999        assert_true (ai_move (ai, 3, 6));
2000        assert_true (ai_move (ai, 4, 6));
2001        assert_true (ai_move (ai, 3, 5));
2002        assert_true (ai_move (ai, 4, 2));
2003        assert_true (ai_move (ai, 4, 1));
2004        assert_true (ai_move (ai, 5, 0));
2005        assert_true (ai_move (ai, 2, 2));
2006        assert_true (ai_move (ai, 1, 5));
2007        assert_true (ai_move (ai, 1, 4));
2008        assert_true (ai_move (ai, 1, 2));
2009        assert_true (ai_move (ai, 3, 1));
2010        assert_true (ai_move (ai, 2, 7));
2011        assert_true (ai_move (ai, 1, 3));
2012        assert_true (ai_move (ai, 0, 3));
2013        assert_true (ai_move (ai, 6, 6));
2014        assert_true (ai_move (ai, 2, 4));
2015        assert_true (ai_move (ai, 0, 5));
2016        assert_true (ai_move (ai, 2, 6));
2017        assert_true (ai_move (ai, 3, 0));
2018        assert_true (ai_move (ai, 4, 0));
2019        assert_true (ai_move (ai, 6, 7));
2020        assert_true (ai_move (ai, 7, 7));
2021        assert_true (ai_move (ai, 0, 2));
2022        assert_true (ai_move (ai, 2, 0));
2023        assert_true (ai_move (ai, 0, 4));
2024        assert_true (ai_move (ai, 2, 3));
2025        assert_true (ai_move (ai, 2, 1));
2026        assert_true (ai_move (ai, 6, 1));
2027        assert_true (ai_move (ai, 1, 7));
2028        assert_true (ai_move (ai, 7, 6));
2029        assert_true (ai_move (ai, 6, 0));
2030        assert_true (ai_move (ai, 7, 0));
2031        assert_true (ai_move (ai, 7, 1));
2032        assert_true (ai_move (ai, 7, 4));
2033        assert_true (ai_move (ai, 1, 6));
2034        assert_true (ai_move (ai, 1, 0));
2035        assert_true (ai_move (ai, 1, 1));
2036        assert_true (ai_move (ai, 0, 0));
2037        assert_true (ai_move (ai, 0, 1));
2038        assert_true (ai_move (ai, 0, 6));
2039        assert_true (ai_move (ai, 0, 7));
2040    }
2041
2042    private static inline void test_complete_reversi_game_8 ()
2043    {
2044                                  /* 0 1 2 3 4 5 6 7 */
2045        string [] board = {/* 0 */ " . . . . . . . .",
2046                           /* 1 */ " . . . . . . . .",
2047                           /* 2 */ " . . . . . . . .",
2048                           /* 3 */ " . . . L D . . .",
2049                           /* 4 */ " . . . L D D . .",
2050                           /* 5 */ " . . . L L L . .",
2051                           /* 6 */ " . . . . . . . .",
2052                           /* 7 */ " . . . . . . . ."};
2053
2054        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2055        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2056
2057        assert_true (ai_move (ai, 5, 6));
2058        assert_true (ai_move (ai, 6, 5));
2059        assert_true (ai_move (ai, 3, 6));
2060        assert_true (ai_move (ai, 5, 7));
2061        assert_true (ai_move (ai, 7, 5));
2062        assert_true (ai_move (ai, 7, 4));
2063        assert_true (ai_move (ai, 7, 3));
2064        assert_true (ai_move (ai, 3, 7));
2065        assert_true (ai_move (ai, 2, 7));
2066        assert_true (ai_move (ai, 5, 2));
2067        assert_true (ai_move (ai, 2, 5));
2068        assert_true (ai_move (ai, 1, 5));
2069        assert_true (ai_move (ai, 4, 6));
2070        assert_true (ai_move (ai, 2, 6));
2071        assert_true (ai_move (ai, 2, 3));
2072        assert_true (ai_move (ai, 6, 3));
2073        assert_true (ai_move (ai, 6, 4));
2074        assert_true (ai_move (ai, 5, 3));
2075        assert_true (ai_move (ai, 2, 4));
2076        assert_true (ai_move (ai, 1, 4));
2077        assert_true (ai_move (ai, 0, 5));
2078        assert_true (ai_move (ai, 2, 2));
2079        assert_true (ai_move (ai, 5, 1));
2080        assert_true (ai_move (ai, 4, 1));
2081        assert_true (ai_move (ai, 2, 1));
2082        assert_true (ai_move (ai, 1, 3));
2083        assert_true (ai_move (ai, 7, 2));
2084        assert_true (ai_move (ai, 3, 1));
2085        assert_true (ai_move (ai, 3, 0));
2086        assert_true (ai_move (ai, 6, 6));
2087        assert_true (ai_move (ai, 4, 2));
2088        assert_true (ai_move (ai, 5, 0));
2089        assert_true (ai_move (ai, 6, 2));
2090        assert_true (ai_move (ai, 0, 3));
2091        assert_true (ai_move (ai, 0, 4));
2092        assert_true (ai_move (ai, 7, 6));
2093        assert_true (ai_move (ai, 7, 7));
2094        assert_true (ai_move (ai, 2, 0));
2095        assert_true (ai_move (ai, 0, 2));
2096        assert_true (ai_move (ai, 4, 0));
2097        assert_true (ai_move (ai, 3, 2));
2098        assert_true (ai_move (ai, 1, 2));
2099        assert_true (ai_move (ai, 1, 6));
2100        assert_true (ai_move (ai, 7, 1));
2101        assert_true (ai_move (ai, 6, 7));
2102        assert_true (ai_move (ai, 0, 6));
2103        assert_true (ai_move (ai, 0, 7));
2104        assert_true (ai_move (ai, 1, 7));
2105        assert_true (ai_move (ai, 4, 7));
2106        assert_true (ai_move (ai, 6, 1));
2107        assert_true (ai_move (ai, 0, 1));
2108        assert_true (ai_move (ai, 1, 1));
2109        assert_true (ai_move (ai, 0, 0));
2110        assert_true (ai_move (ai, 1, 0));
2111        assert_true (ai_move (ai, 6, 0));
2112        assert_true (ai_move (ai, 7, 0));
2113    }
2114
2115    private static inline void test_complete_reversi_game_9 ()
2116    {
2117                                  /* 0 1 2 3 4 5 6 7 */
2118        string [] board = {/* 0 */ " . . . . . . . .",
2119                           /* 1 */ " . . . . . . . .",
2120                           /* 2 */ " . . . D . . . .",
2121                           /* 3 */ " . . . D D . . .",
2122                           /* 4 */ " . . . D L L L .",
2123                           /* 5 */ " . . . . . L . .",
2124                           /* 6 */ " . . . . . . . .",
2125                           /* 7 */ " . . . . . . . ."};
2126
2127        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2128        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2129
2130        assert_true (ai_move (ai, 6, 5));
2131        assert_true (ai_move (ai, 5, 3));
2132        assert_true (ai_move (ai, 4, 5));
2133        assert_true (ai_move (ai, 4, 6));
2134        assert_true (ai_move (ai, 7, 4));
2135        assert_true (ai_move (ai, 7, 3));
2136        assert_true (ai_move (ai, 7, 2));
2137        assert_true (ai_move (ai, 7, 5));
2138        assert_true (ai_move (ai, 7, 6));
2139        assert_true (ai_move (ai, 3, 5));
2140        assert_true (ai_move (ai, 5, 6));
2141        assert_true (ai_move (ai, 5, 7));
2142        assert_true (ai_move (ai, 2, 5));
2143        assert_true (ai_move (ai, 3, 6));
2144        assert_true (ai_move (ai, 4, 2));
2145        assert_true (ai_move (ai, 2, 6));
2146        assert_true (ai_move (ai, 2, 7));
2147        assert_true (ai_move (ai, 1, 5));
2148        assert_true (ai_move (ai, 6, 3));
2149        assert_true (ai_move (ai, 4, 7));
2150        assert_true (ai_move (ai, 0, 4));
2151        assert_true (ai_move (ai, 2, 3));
2152        assert_true (ai_move (ai, 1, 4));
2153        assert_true (ai_move (ai, 1, 2));
2154        assert_true (ai_move (ai, 1, 3));
2155        assert_true (ai_move (ai, 0, 5));
2156        assert_true (ai_move (ai, 3, 7));
2157        assert_true (ai_move (ai, 1, 7));
2158        assert_true (ai_move (ai, 2, 4));
2159        assert_true (ai_move (ai, 0, 3));
2160        assert_true (ai_move (ai, 0, 1));
2161        assert_true (ai_move (ai, 2, 1));
2162        assert_true (ai_move (ai, 1, 0));
2163        assert_true (ai_move (ai, 3, 0));
2164        assert_true (ai_move (ai, 6, 6));
2165        assert_true (ai_move (ai, 6, 7));
2166        assert_true (ai_move (ai, 1, 6));
2167        assert_true (ai_move (ai, 7, 7));
2168        assert_true (ai_move (ai, 1, 1));
2169        assert_true (ai_move (ai, 7, 1));
2170        assert_true (ai_move (ai, 3, 1));
2171        assert_true (ai_move (ai, 2, 2));
2172        assert_true (ai_move (ai, 0, 2));
2173        assert_true (ai_move (ai, 0, 0));
2174        assert_true (game.pass ());
2175        assert_true (ai_move (ai, 2, 0));
2176        assert_true (ai_move (ai, 4, 0));
2177        assert_true (ai_move (ai, 5, 0));
2178        assert_true (ai_move (ai, 4, 1));
2179        assert_true (ai_move (ai, 6, 2));
2180        assert_true (ai_move (ai, 5, 2));
2181        assert_true (ai_move (ai, 5, 1));
2182        assert_true (ai_move (ai, 6, 1));
2183        assert_true (ai_move (ai, 0, 7));
2184        assert_true (ai_move (ai, 0, 6));
2185        assert_true (ai_move (ai, 6, 0));
2186        assert_true (ai_move (ai, 7, 0));
2187    }
2188
2189    private static inline void test_complete_reversi_game_10 ()
2190    {
2191                                  /* 0 1 2 3 4 5 6 7 */
2192        string [] board = {/* 0 */ " . . . . . . . .",
2193                           /* 1 */ " . . . . . . . .",
2194                           /* 2 */ " . . . D . . . .",
2195                           /* 3 */ " . . . D D L . .",
2196                           /* 4 */ " . . . D L L . .",
2197                           /* 5 */ " . . . . . L . .",
2198                           /* 6 */ " . . . . . . . .",
2199                           /* 7 */ " . . . . . . . ."};
2200
2201        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2202        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2203
2204        assert_true (ai_move (ai, 6, 5));
2205        assert_true (ai_move (ai, 6, 4));
2206        assert_true (ai_move (ai, 4, 5));
2207        assert_true (ai_move (ai, 4, 6));
2208        assert_true (ai_move (ai, 7, 4));
2209        assert_true (ai_move (ai, 7, 3));
2210        assert_true (ai_move (ai, 7, 2));
2211        assert_true (ai_move (ai, 7, 5));
2212        assert_true (ai_move (ai, 7, 6));
2213        assert_true (ai_move (ai, 3, 5));
2214        assert_true (ai_move (ai, 5, 6));
2215        assert_true (ai_move (ai, 5, 7));
2216        assert_true (ai_move (ai, 2, 5));
2217        assert_true (ai_move (ai, 3, 6));
2218        assert_true (ai_move (ai, 4, 2));
2219        assert_true (ai_move (ai, 2, 6));
2220        assert_true (ai_move (ai, 2, 7));
2221        assert_true (ai_move (ai, 1, 5));
2222        assert_true (ai_move (ai, 6, 3));
2223        assert_true (ai_move (ai, 4, 7));
2224        assert_true (ai_move (ai, 0, 4));
2225        assert_true (ai_move (ai, 2, 3));
2226        assert_true (ai_move (ai, 1, 4));
2227        assert_true (ai_move (ai, 1, 2));
2228        assert_true (ai_move (ai, 1, 3));
2229        assert_true (ai_move (ai, 0, 5));
2230        assert_true (ai_move (ai, 3, 7));
2231        assert_true (ai_move (ai, 1, 7));
2232        assert_true (ai_move (ai, 2, 4));
2233        assert_true (ai_move (ai, 0, 3));
2234        assert_true (ai_move (ai, 0, 1));
2235        assert_true (ai_move (ai, 2, 1));
2236        assert_true (ai_move (ai, 1, 0));
2237        assert_true (ai_move (ai, 3, 0));
2238        assert_true (ai_move (ai, 6, 6));
2239        assert_true (ai_move (ai, 6, 7));
2240        assert_true (ai_move (ai, 1, 6));
2241        assert_true (ai_move (ai, 7, 7));
2242        assert_true (ai_move (ai, 1, 1));
2243        assert_true (ai_move (ai, 7, 1));
2244        assert_true (ai_move (ai, 3, 1));
2245        assert_true (ai_move (ai, 2, 2));
2246        assert_true (ai_move (ai, 0, 2));
2247        assert_true (ai_move (ai, 0, 0));
2248        assert_true (game.pass ());
2249        assert_true (ai_move (ai, 2, 0));
2250        assert_true (ai_move (ai, 4, 0));
2251        assert_true (ai_move (ai, 5, 0));
2252        assert_true (ai_move (ai, 4, 1));
2253        assert_true (ai_move (ai, 6, 2));
2254        assert_true (ai_move (ai, 5, 2));
2255        assert_true (ai_move (ai, 5, 1));
2256        assert_true (ai_move (ai, 6, 1));
2257        assert_true (ai_move (ai, 0, 7));
2258        assert_true (ai_move (ai, 0, 6));
2259        assert_true (ai_move (ai, 6, 0));
2260        assert_true (ai_move (ai, 7, 0));
2261    }
2262
2263    private static inline void test_complete_reversi_game_11 ()
2264    {
2265                                  /* 0 1 2 3 4 5 6 7 */
2266        string [] board = {/* 0 */ " . . . . . . . .",
2267                           /* 1 */ " . . . . . . . .",
2268                           /* 2 */ " . . . D L . . .",
2269                           /* 3 */ " . . . D L . . .",
2270                           /* 4 */ " . . . D L D . .",
2271                           /* 5 */ " . . . . . L . .",
2272                           /* 6 */ " . . . . . . . .",
2273                           /* 7 */ " . . . . . . . ."};
2274
2275        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2276        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2277
2278        assert_true (ai_move (ai, 5, 6));
2279        assert_true (ai_move (ai, 2, 1));
2280        assert_true (ai_move (ai, 3, 1));
2281        assert_true (ai_move (ai, 6, 4));
2282        assert_true (ai_move (ai, 5, 1));
2283        assert_true (ai_move (ai, 4, 6));
2284        assert_true (ai_move (ai, 5, 2));
2285        assert_true (ai_move (ai, 5, 7));
2286        assert_true (ai_move (ai, 6, 5));
2287        assert_true (ai_move (ai, 7, 4));
2288        assert_true (ai_move (ai, 4, 5));
2289        assert_true (ai_move (ai, 3, 5));
2290        assert_true (ai_move (ai, 2, 6));
2291        assert_true (ai_move (ai, 6, 3));
2292        assert_true (ai_move (ai, 7, 5));
2293        assert_true (ai_move (ai, 3, 6));
2294        assert_true (ai_move (ai, 5, 3));
2295        assert_true (ai_move (ai, 5, 0));
2296        assert_true (ai_move (ai, 7, 3));
2297        assert_true (ai_move (ai, 7, 2));
2298        assert_true (ai_move (ai, 7, 1));
2299        assert_true (ai_move (ai, 2, 2));
2300        assert_true (ai_move (ai, 6, 2));
2301        assert_true (ai_move (ai, 4, 1));
2302        assert_true (ai_move (ai, 1, 2));
2303        assert_true (ai_move (ai, 1, 3));
2304        assert_true (ai_move (ai, 2, 7));
2305        assert_true (ai_move (ai, 2, 5));
2306        assert_true (ai_move (ai, 1, 5));
2307        assert_true (ai_move (ai, 2, 3));
2308        assert_true (ai_move (ai, 3, 7));
2309        assert_true (ai_move (ai, 2, 4));
2310        assert_true (ai_move (ai, 4, 7));
2311        assert_true (ai_move (ai, 1, 7));
2312        assert_true (ai_move (ai, 0, 2));
2313        assert_true (ai_move (ai, 1, 4));
2314        assert_true (ai_move (ai, 0, 4));
2315        assert_true (ai_move (ai, 6, 7));
2316        assert_true (ai_move (ai, 2, 0));
2317        assert_true (ai_move (ai, 0, 3));
2318        assert_true (ai_move (ai, 3, 0));
2319        assert_true (ai_move (ai, 0, 5));
2320        assert_true (ai_move (ai, 0, 6));
2321        assert_true (ai_move (ai, 4, 0));
2322        assert_true (ai_move (ai, 6, 0));
2323        assert_true (ai_move (ai, 6, 1));
2324        assert_true (ai_move (ai, 1, 1));
2325        assert_true (ai_move (ai, 1, 6));
2326        assert_true (ai_move (ai, 6, 6));
2327        assert_true (ai_move (ai, 7, 7));
2328        assert_true (ai_move (ai, 7, 6));
2329        assert_true (ai_move (ai, 7, 0));
2330        assert_true (game.pass ());
2331        assert_true (ai_move (ai, 0, 0));
2332        assert_true (ai_move (ai, 1, 0));
2333        assert_true (ai_move (ai, 0, 1));
2334        assert_true (game.pass ());
2335        assert_true (ai_move (ai, 0, 7));
2336    }
2337
2338    private static inline void test_complete_reversi_game_12 ()
2339    {
2340                                  /* 0 1 2 3 4 5 6 7 */
2341        string [] board = {/* 0 */ " . . . . . . . .",
2342                           /* 1 */ " . . . . . . . .",
2343                           /* 2 */ " . . . D . . . .",
2344                           /* 3 */ " . . . D D . . .",
2345                           /* 4 */ " . . L L L D . .",
2346                           /* 5 */ " . . . . . L . .",
2347                           /* 6 */ " . . . . . . . .",
2348                           /* 7 */ " . . . . . . . ."};
2349
2350        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2351        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2352
2353        assert_true (ai_move (ai, 5, 6));
2354        assert_true (ai_move (ai, 5, 2));
2355        assert_true (ai_move (ai, 1, 5));
2356        assert_true (ai_move (ai, 1, 4));
2357        assert_true (ai_move (ai, 1, 3));
2358        assert_true (ai_move (ai, 2, 1));
2359        assert_true (ai_move (ai, 3, 1));
2360        assert_true (ai_move (ai, 6, 4));
2361        assert_true (ai_move (ai, 7, 3));
2362        assert_true (ai_move (ai, 0, 2));
2363        assert_true (ai_move (ai, 6, 5));
2364        assert_true (ai_move (ai, 0, 4));
2365        assert_true (ai_move (ai, 4, 5));
2366        assert_true (ai_move (ai, 2, 6));
2367        assert_true (ai_move (ai, 3, 5));
2368        assert_true (ai_move (ai, 4, 1));
2369        assert_true (ai_move (ai, 5, 0));
2370        assert_true (ai_move (ai, 3, 0));
2371        assert_true (ai_move (ai, 0, 6));
2372        assert_true (ai_move (ai, 1, 6));
2373        assert_true (ai_move (ai, 1, 7));
2374        assert_true (ai_move (ai, 3, 7));
2375        assert_true (ai_move (ai, 1, 0));
2376        assert_true (ai_move (ai, 1, 2));
2377        assert_true (ai_move (ai, 6, 1));
2378        assert_true (ai_move (ai, 6, 3));
2379        assert_true (ai_move (ai, 5, 3));
2380        assert_true (ai_move (ai, 5, 7));
2381        assert_true (ai_move (ai, 4, 2));
2382        assert_true (ai_move (ai, 2, 2));
2383        assert_true (ai_move (ai, 4, 6));
2384        assert_true (ai_move (ai, 4, 7));
2385        assert_true (ai_move (ai, 4, 0));
2386        assert_true (ai_move (ai, 6, 6));
2387        assert_true (ai_move (ai, 5, 1));
2388        assert_true (ai_move (ai, 6, 0));
2389        assert_true (ai_move (ai, 2, 3));
2390        assert_true (ai_move (ai, 7, 5));
2391        assert_true (ai_move (ai, 0, 3));
2392        assert_true (ai_move (ai, 7, 4));
2393        assert_true (ai_move (ai, 6, 2));
2394        assert_true (ai_move (ai, 7, 2));
2395        assert_true (ai_move (ai, 2, 5));
2396        assert_true (ai_move (ai, 0, 5));
2397        assert_true (ai_move (ai, 0, 7));
2398        assert_true (ai_move (ai, 3, 6));
2399        assert_true (ai_move (ai, 2, 7));
2400        assert_true (game.pass ());
2401        assert_true (ai_move (ai, 6, 7));
2402        assert_true (game.pass ());
2403        assert_true (ai_move (ai, 7, 7));
2404        assert_true (ai_move (ai, 7, 6));
2405        assert_true (ai_move (ai, 7, 1));
2406        assert_true (game.pass ());
2407        assert_true (ai_move (ai, 7, 0));
2408        assert_true (game.pass ());
2409        assert_true (ai_move (ai, 2, 0));
2410        assert_true (ai_move (ai, 1, 1));
2411        assert_true (ai_move (ai, 0, 1));
2412        assert_true (ai_move (ai, 0, 0));
2413    }
2414
2415    private static inline void test_complete_reversi_game_13 ()
2416    {
2417                                  /* 0 1 2 3 4 5 6 7 */
2418        string [] board = {/* 0 */ " . . . . . . . .",
2419                           /* 1 */ " . . . . . . . .",
2420                           /* 2 */ " . . L D . . . .",
2421                           /* 3 */ " . . . L D . . .",
2422                           /* 4 */ " . . . D L D . .",
2423                           /* 5 */ " . . . . . L . .",
2424                           /* 6 */ " . . . . . . . .",
2425                           /* 7 */ " . . . . . . . ."};
2426
2427        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2428        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2429
2430        assert_true (ai_move (ai, 5, 6));
2431        assert_true (ai_move (ai, 3, 1));
2432        assert_true (ai_move (ai, 4, 5));
2433        assert_true (ai_move (ai, 5, 3));
2434        assert_true (ai_move (ai, 5, 2));
2435        assert_true (ai_move (ai, 6, 5));
2436        assert_true (ai_move (ai, 6, 3));
2437        assert_true (ai_move (ai, 4, 7));
2438        assert_true (ai_move (ai, 5, 7));
2439        assert_true (ai_move (ai, 6, 7));
2440        assert_true (ai_move (ai, 7, 4));
2441        assert_true (ai_move (ai, 5, 1));
2442        assert_true (ai_move (ai, 6, 4));
2443        assert_true (ai_move (ai, 7, 5));
2444        assert_true (ai_move (ai, 4, 1));
2445        assert_true (ai_move (ai, 7, 3));
2446        assert_true (ai_move (ai, 5, 0));
2447        assert_true (ai_move (ai, 3, 6));
2448        assert_true (ai_move (ai, 4, 6));
2449        assert_true (ai_move (ai, 3, 7));
2450        assert_true (ai_move (ai, 7, 2));
2451        assert_true (ai_move (ai, 7, 1));
2452        assert_true (ai_move (ai, 6, 2));
2453        assert_true (ai_move (ai, 4, 2));
2454        assert_true (ai_move (ai, 2, 4));
2455        assert_true (ai_move (ai, 4, 0));
2456        assert_true (ai_move (ai, 6, 1));
2457        assert_true (ai_move (ai, 1, 5));
2458        assert_true (ai_move (ai, 1, 4));
2459        assert_true (ai_move (ai, 1, 3));
2460        assert_true (ai_move (ai, 0, 2));
2461        assert_true (ai_move (ai, 1, 2));
2462        assert_true (ai_move (ai, 0, 4));
2463        assert_true (ai_move (ai, 2, 3));
2464        assert_true (ai_move (ai, 2, 5));
2465        assert_true (ai_move (ai, 2, 6));
2466        assert_true (ai_move (ai, 0, 3));
2467        assert_true (ai_move (ai, 3, 5));
2468        assert_true (ai_move (ai, 2, 7));
2469        assert_true (ai_move (ai, 1, 7));
2470        assert_true (ai_move (ai, 0, 5));
2471        assert_true (ai_move (ai, 7, 0));
2472        assert_true (ai_move (ai, 3, 0));
2473        assert_true (ai_move (ai, 2, 1));
2474        assert_true (ai_move (ai, 0, 1));
2475        assert_true (ai_move (ai, 1, 6));
2476        assert_true (ai_move (ai, 2, 0));
2477        assert_true (ai_move (ai, 0, 6));
2478        assert_true (ai_move (ai, 0, 7));
2479        assert_true (ai_move (ai, 1, 1));
2480        assert_true (ai_move (ai, 7, 7));
2481        assert_true (game.pass ());
2482        assert_true (ai_move (ai, 7, 6));
2483        assert_true (ai_move (ai, 6, 6));
2484        assert_true (ai_move (ai, 0, 0));
2485        assert_true (ai_move (ai, 1, 0));
2486        assert_true (ai_move (ai, 6, 0));
2487    }
2488
2489    private static inline void test_complete_reversi_game_14 ()
2490    {
2491                                  /* 0 1 2 3 4 5 6 7 */
2492        string [] board = {/* 0 */ " . . . . . . . .",
2493                           /* 1 */ " . . . . . . . .",
2494                           /* 2 */ " . . . . . . . .",
2495                           /* 3 */ " . . D D D . . .",
2496                           /* 4 */ " . . . D L L L .",
2497                           /* 5 */ " . . . . . L . .",
2498                           /* 6 */ " . . . . . . . .",
2499                           /* 7 */ " . . . . . . . ."};
2500
2501        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2502        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2503
2504        assert_true (ai_move (ai, 6, 5));
2505        assert_true (ai_move (ai, 5, 3));
2506        assert_true (ai_move (ai, 4, 5));
2507        assert_true (ai_move (ai, 4, 6));
2508        assert_true (ai_move (ai, 7, 4));
2509        assert_true (ai_move (ai, 7, 3));
2510        assert_true (ai_move (ai, 7, 2));
2511        assert_true (ai_move (ai, 7, 5));
2512        assert_true (ai_move (ai, 7, 6));
2513        assert_true (ai_move (ai, 3, 5));
2514        assert_true (ai_move (ai, 5, 6));
2515        assert_true (ai_move (ai, 5, 7));
2516        assert_true (ai_move (ai, 2, 5));
2517        assert_true (ai_move (ai, 3, 6));
2518        assert_true (ai_move (ai, 6, 2));
2519        assert_true (ai_move (ai, 1, 4));
2520        assert_true (ai_move (ai, 6, 3));
2521        assert_true (ai_move (ai, 1, 2));
2522        assert_true (ai_move (ai, 2, 7));
2523        assert_true (ai_move (ai, 2, 4));
2524        assert_true (ai_move (ai, 2, 6));
2525        assert_true (ai_move (ai, 3, 7));
2526        assert_true (ai_move (ai, 2, 2));
2527        assert_true (ai_move (ai, 1, 3));
2528        assert_true (ai_move (ai, 1, 5));
2529        assert_true (ai_move (ai, 3, 1));
2530        assert_true (ai_move (ai, 2, 1));
2531        assert_true (ai_move (ai, 0, 5));
2532        assert_true (ai_move (ai, 4, 0));
2533        assert_true (ai_move (ai, 2, 0));
2534        assert_true (ai_move (ai, 0, 3));
2535        assert_true (ai_move (ai, 0, 4));
2536        assert_true (ai_move (ai, 0, 6));
2537        assert_true (ai_move (ai, 3, 2));
2538        assert_true (ai_move (ai, 0, 2));
2539        assert_true (ai_move (ai, 3, 0));
2540        assert_true (ai_move (ai, 0, 1));
2541        assert_true (ai_move (ai, 5, 0));
2542        assert_true (ai_move (ai, 4, 1));
2543        assert_true (ai_move (ai, 5, 1));
2544        assert_true (ai_move (ai, 1, 6));
2545        assert_true (ai_move (ai, 5, 2));
2546        assert_true (ai_move (ai, 4, 2));
2547        assert_true (ai_move (ai, 1, 7));
2548        assert_true (ai_move (ai, 1, 1));
2549        assert_true (ai_move (ai, 0, 0));
2550        assert_true (ai_move (ai, 0, 7));
2551        assert_true (ai_move (ai, 7, 1));
2552        assert_true (ai_move (ai, 7, 0));
2553        assert_true (ai_move (ai, 6, 6));
2554        assert_true (ai_move (ai, 4, 7));
2555        assert_true (game.pass ());
2556        assert_true (ai_move (ai, 6, 0));
2557        assert_true (ai_move (ai, 6, 1));
2558        assert_true (ai_move (ai, 1, 0));
2559        assert_true (game.pass ());
2560        assert_true (ai_move (ai, 7, 7));
2561        assert_true (ai_move (ai, 6, 7));
2562    }
2563
2564    private static inline void test_complete_reversi_game_15 ()
2565    {
2566                                  /* 0 1 2 3 4 5 6 7 */
2567        string [] board = {/* 0 */ " . . . . . . . .",
2568                           /* 1 */ " . . . . . . . .",
2569                           /* 2 */ " . . . . . . . .",
2570                           /* 3 */ " . . D D D L . .",
2571                           /* 4 */ " . . . D L L . .",
2572                           /* 5 */ " . . . . . L . .",
2573                           /* 6 */ " . . . . . . . .",
2574                           /* 7 */ " . . . . . . . ."};
2575
2576        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2577        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2578
2579        assert_true (ai_move (ai, 6, 5));
2580        assert_true (ai_move (ai, 6, 4));
2581        assert_true (ai_move (ai, 4, 5));
2582        assert_true (ai_move (ai, 4, 6));
2583        assert_true (ai_move (ai, 7, 4));
2584        assert_true (ai_move (ai, 7, 3));
2585        assert_true (ai_move (ai, 7, 2));
2586        assert_true (ai_move (ai, 7, 5));
2587        assert_true (ai_move (ai, 7, 6));
2588        assert_true (ai_move (ai, 3, 5));
2589        assert_true (ai_move (ai, 5, 6));
2590        assert_true (ai_move (ai, 5, 7));
2591        assert_true (ai_move (ai, 2, 5));
2592        assert_true (ai_move (ai, 3, 6));
2593        assert_true (ai_move (ai, 6, 2));
2594        assert_true (ai_move (ai, 1, 4));
2595        assert_true (ai_move (ai, 6, 3));
2596        assert_true (ai_move (ai, 1, 2));
2597        assert_true (ai_move (ai, 2, 7));
2598        assert_true (ai_move (ai, 2, 4));
2599        assert_true (ai_move (ai, 2, 6));
2600        assert_true (ai_move (ai, 3, 7));
2601        assert_true (ai_move (ai, 2, 2));
2602        assert_true (ai_move (ai, 1, 3));
2603        assert_true (ai_move (ai, 1, 5));
2604        assert_true (ai_move (ai, 3, 1));
2605        assert_true (ai_move (ai, 2, 1));
2606        assert_true (ai_move (ai, 0, 5));
2607        assert_true (ai_move (ai, 4, 0));
2608        assert_true (ai_move (ai, 2, 0));
2609        assert_true (ai_move (ai, 0, 3));
2610        assert_true (ai_move (ai, 0, 4));
2611        assert_true (ai_move (ai, 0, 6));
2612        assert_true (ai_move (ai, 3, 2));
2613        assert_true (ai_move (ai, 0, 2));
2614        assert_true (ai_move (ai, 3, 0));
2615        assert_true (ai_move (ai, 0, 1));
2616        assert_true (ai_move (ai, 5, 0));
2617        assert_true (ai_move (ai, 4, 1));
2618        assert_true (ai_move (ai, 5, 1));
2619        assert_true (ai_move (ai, 1, 6));
2620        assert_true (ai_move (ai, 5, 2));
2621        assert_true (ai_move (ai, 4, 2));
2622        assert_true (ai_move (ai, 1, 7));
2623        assert_true (ai_move (ai, 1, 1));
2624        assert_true (ai_move (ai, 0, 0));
2625        assert_true (ai_move (ai, 0, 7));
2626        assert_true (ai_move (ai, 7, 1));
2627        assert_true (ai_move (ai, 7, 0));
2628        assert_true (ai_move (ai, 6, 6));
2629        assert_true (ai_move (ai, 4, 7));
2630        assert_true (game.pass ());
2631        assert_true (ai_move (ai, 6, 0));
2632        assert_true (ai_move (ai, 6, 1));
2633        assert_true (ai_move (ai, 1, 0));
2634        assert_true (game.pass ());
2635        assert_true (ai_move (ai, 7, 7));
2636        assert_true (ai_move (ai, 6, 7));
2637    }
2638
2639    private static inline void test_complete_reversi_game_16 ()
2640    {
2641                                  /* 0 1 2 3 4 5 6 7 */
2642        string [] board = {/* 0 */ " . . . . . . . .",
2643                           /* 1 */ " . . . . . . . .",
2644                           /* 2 */ " . . . . L . . .",
2645                           /* 3 */ " . . D D L . . .",
2646                           /* 4 */ " . . . D L D . .",
2647                           /* 5 */ " . . . . . L . .",
2648                           /* 6 */ " . . . . . . . .",
2649                           /* 7 */ " . . . . . . . ."};
2650
2651        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2652        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2653
2654        assert_true (ai_move (ai, 5, 6));
2655        assert_true (ai_move (ai, 6, 4));
2656        assert_true (ai_move (ai, 5, 1));
2657        assert_true (ai_move (ai, 4, 6));
2658        assert_true (ai_move (ai, 5, 2));
2659        assert_true (ai_move (ai, 5, 7));
2660        assert_true (ai_move (ai, 6, 5));
2661        assert_true (ai_move (ai, 7, 4));
2662        assert_true (ai_move (ai, 4, 5));
2663        assert_true (ai_move (ai, 3, 5));
2664        assert_true (ai_move (ai, 2, 6));
2665        assert_true (ai_move (ai, 5, 3));
2666        assert_true (ai_move (ai, 6, 2));
2667        assert_true (ai_move (ai, 5, 0));
2668        assert_true (ai_move (ai, 6, 3));
2669        assert_true (ai_move (ai, 3, 1));
2670        assert_true (ai_move (ai, 3, 6));
2671        assert_true (ai_move (ai, 7, 2));
2672        assert_true (ai_move (ai, 4, 1));
2673        assert_true (ai_move (ai, 2, 5));
2674        assert_true (ai_move (ai, 2, 4));
2675        assert_true (ai_move (ai, 7, 3));
2676        assert_true (ai_move (ai, 7, 5));
2677        assert_true (ai_move (ai, 7, 6));
2678        assert_true (ai_move (ai, 3, 7));
2679        assert_true (ai_move (ai, 1, 5));
2680        assert_true (ai_move (ai, 1, 3));
2681        assert_true (ai_move (ai, 1, 4));
2682        assert_true (ai_move (ai, 0, 4));
2683        assert_true (ai_move (ai, 2, 2));
2684        assert_true (ai_move (ai, 3, 2));
2685        assert_true (ai_move (ai, 0, 2));
2686        assert_true (ai_move (ai, 0, 5));
2687        assert_true (ai_move (ai, 2, 1));
2688        assert_true (ai_move (ai, 1, 2));
2689        assert_true (ai_move (ai, 4, 0));
2690        assert_true (ai_move (ai, 2, 0));
2691        assert_true (ai_move (ai, 1, 1));
2692        assert_true (ai_move (ai, 1, 6));
2693        assert_true (ai_move (ai, 4, 7));
2694        assert_true (ai_move (ai, 6, 7));
2695        assert_true (ai_move (ai, 6, 6));
2696        assert_true (ai_move (ai, 3, 0));
2697        assert_true (ai_move (ai, 1, 0));
2698        assert_true (ai_move (ai, 7, 1));
2699        assert_true (ai_move (ai, 7, 0));
2700        assert_true (ai_move (ai, 6, 0));
2701        assert_true (ai_move (ai, 2, 7));
2702        assert_true (ai_move (ai, 1, 7));
2703        assert_true (ai_move (ai, 6, 1));
2704        assert_true (ai_move (ai, 0, 0));
2705        assert_true (ai_move (ai, 0, 3));
2706        assert_true (ai_move (ai, 0, 1));
2707        assert_true (ai_move (ai, 0, 7));
2708        assert_true (ai_move (ai, 7, 7));
2709        assert_true (ai_move (ai, 0, 6));
2710    }
2711
2712    private static inline void test_complete_reversi_game_17 ()
2713    {
2714                                  /* 0 1 2 3 4 5 6 7 */
2715        string [] board = {/* 0 */ " . . . . . . . .",
2716                           /* 1 */ " . . . . . . . .",
2717                           /* 2 */ " . . . . . . . .",
2718                           /* 3 */ " . . D D D . . .",
2719                           /* 4 */ " . . L L L D . .",
2720                           /* 5 */ " . . . . . L . .",
2721                           /* 6 */ " . . . . . . . .",
2722                           /* 7 */ " . . . . . . . ."};
2723
2724        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2725        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2726
2727        assert_true (ai_move (ai, 5, 6));
2728        assert_true (ai_move (ai, 1, 2));
2729        assert_true (ai_move (ai, 1, 3));
2730        assert_true (ai_move (ai, 0, 2));
2731        assert_true (ai_move (ai, 1, 5));
2732        assert_true (ai_move (ai, 3, 5));
2733        assert_true (ai_move (ai, 2, 5));
2734        assert_true (ai_move (ai, 6, 4));
2735        assert_true (ai_move (ai, 4, 6));
2736        assert_true (ai_move (ai, 2, 6));
2737        assert_true (ai_move (ai, 3, 6));
2738        assert_true (ai_move (ai, 1, 4));
2739        assert_true (ai_move (ai, 0, 5));
2740        assert_true (ai_move (ai, 0, 4));
2741        assert_true (ai_move (ai, 6, 5));
2742        assert_true (ai_move (ai, 4, 5));
2743        assert_true (ai_move (ai, 2, 7));
2744        assert_true (ai_move (ai, 7, 5));
2745        assert_true (ai_move (ai, 7, 3));
2746        assert_true (ai_move (ai, 5, 7));
2747        assert_true (ai_move (ai, 5, 3));
2748        assert_true (ai_move (ai, 4, 7));
2749        assert_true (ai_move (ai, 3, 7));
2750        assert_true (ai_move (ai, 1, 7));
2751        assert_true (ai_move (ai, 0, 3));
2752        assert_true (ai_move (ai, 0, 6));
2753        assert_true (ai_move (ai, 6, 6));
2754        assert_true (ai_move (ai, 6, 7));
2755        assert_true (ai_move (ai, 0, 1));
2756        assert_true (ai_move (ai, 0, 0));
2757        assert_true (ai_move (ai, 1, 6));
2758        assert_true (ai_move (ai, 2, 1));
2759        assert_true (ai_move (ai, 1, 1));
2760        assert_true (ai_move (ai, 0, 7));
2761        assert_true (ai_move (ai, 3, 0));
2762        assert_true (ai_move (ai, 5, 2));
2763        assert_true (ai_move (ai, 6, 2));
2764        assert_true (ai_move (ai, 7, 4));
2765        assert_true (ai_move (ai, 5, 1));
2766        assert_true (ai_move (ai, 7, 2));
2767        assert_true (ai_move (ai, 6, 3));
2768        assert_true (ai_move (ai, 5, 0));
2769        assert_true (ai_move (ai, 4, 1));
2770        assert_true (ai_move (ai, 7, 1));
2771        assert_true (ai_move (ai, 3, 2));
2772        assert_true (ai_move (ai, 2, 0));
2773        assert_true (ai_move (ai, 4, 2));
2774        assert_true (ai_move (ai, 6, 1));
2775        assert_true (ai_move (ai, 1, 0));
2776        assert_true (ai_move (ai, 4, 0));
2777        assert_true (ai_move (ai, 3, 1));
2778        assert_true (ai_move (ai, 2, 2));
2779        assert_true (ai_move (ai, 6, 0));
2780        assert_true (ai_move (ai, 7, 7));
2781        assert_true (ai_move (ai, 7, 6));
2782        assert_true (ai_move (ai, 7, 0));
2783    }
2784
2785    private static inline void test_complete_reversi_game_18 ()
2786    {
2787                                  /* 0 1 2 3 4 5 6 7 */
2788        string [] board = {/* 0 */ " . . . . . . . .",
2789                           /* 1 */ " . . . . . . . .",
2790                           /* 2 */ " . . L . . . . .",
2791                           /* 3 */ " . . D L D . . .",
2792                           /* 4 */ " . . . D L D . .",
2793                           /* 5 */ " . . . . . L . .",
2794                           /* 6 */ " . . . . . . . .",
2795                           /* 7 */ " . . . . . . . ."};
2796
2797        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2798        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2799
2800        assert_true (ai_move (ai, 5, 6));
2801        assert_true (ai_move (ai, 1, 3));
2802        assert_true (ai_move (ai, 4, 5));
2803        assert_true (ai_move (ai, 3, 5));
2804        assert_true (ai_move (ai, 2, 6));
2805        assert_true (ai_move (ai, 3, 6));
2806        assert_true (ai_move (ai, 2, 7));
2807        assert_true (ai_move (ai, 6, 5));
2808        assert_true (ai_move (ai, 4, 6));
2809        assert_true (ai_move (ai, 4, 7));
2810        assert_true (ai_move (ai, 6, 4));
2811        assert_true (ai_move (ai, 2, 5));
2812        assert_true (ai_move (ai, 5, 7));
2813        assert_true (ai_move (ai, 6, 7));
2814        assert_true (ai_move (ai, 1, 5));
2815        assert_true (ai_move (ai, 0, 5));
2816        assert_true (ai_move (ai, 2, 4));
2817        assert_true (ai_move (ai, 1, 4));
2818        assert_true (ai_move (ai, 7, 5));
2819        assert_true (ai_move (ai, 6, 3));
2820        assert_true (ai_move (ai, 5, 3));
2821        assert_true (ai_move (ai, 5, 2));
2822        assert_true (ai_move (ai, 2, 1));
2823        assert_true (ai_move (ai, 3, 1));
2824        assert_true (ai_move (ai, 7, 2));
2825        assert_true (ai_move (ai, 3, 2));
2826        assert_true (ai_move (ai, 1, 2));
2827        assert_true (ai_move (ai, 2, 0));
2828        assert_true (ai_move (ai, 6, 2));
2829        assert_true (ai_move (ai, 0, 3));
2830        assert_true (ai_move (ai, 5, 1));
2831        assert_true (ai_move (ai, 5, 0));
2832        assert_true (ai_move (ai, 4, 2));
2833        assert_true (ai_move (ai, 4, 1));
2834        assert_true (ai_move (ai, 0, 2));
2835        assert_true (ai_move (ai, 0, 4));
2836        assert_true (ai_move (ai, 0, 6));
2837        assert_true (ai_move (ai, 7, 3));
2838        assert_true (ai_move (ai, 7, 4));
2839        assert_true (ai_move (ai, 7, 6));
2840        assert_true (ai_move (ai, 7, 7));
2841        assert_true (ai_move (ai, 3, 7));
2842        assert_true (ai_move (ai, 6, 6));
2843        assert_true (ai_move (ai, 6, 1));
2844        assert_true (ai_move (ai, 7, 1));
2845        assert_true (ai_move (ai, 1, 1));
2846        assert_true (ai_move (ai, 3, 0));
2847        assert_true (ai_move (ai, 4, 0));
2848        assert_true (ai_move (ai, 0, 0));
2849        assert_true (ai_move (ai, 1, 0));
2850        assert_true (ai_move (ai, 1, 6));
2851        assert_true (ai_move (ai, 0, 7));
2852        assert_true (ai_move (ai, 1, 7));
2853        assert_true (ai_move (ai, 0, 1));
2854        assert_true (ai_move (ai, 6, 0));
2855        assert_true (ai_move (ai, 7, 0));
2856    }
2857
2858    private static inline void test_complete_reversi_game_19 ()
2859    {
2860                                  /* 0 1 2 3 4 5 6 7 */
2861        string [] board = {/* 0 */ " . . . . . . . .",
2862                           /* 1 */ " . . . . . . . .",
2863                           /* 2 */ " . . . . . . D .",
2864                           /* 3 */ " . . . L L D . .",
2865                           /* 4 */ " . . . D D L . .",
2866                           /* 5 */ " . . . . . . L .",
2867                           /* 6 */ " . . . . . . . .",
2868                           /* 7 */ " . . . . . . . ."};
2869
2870        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2871        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2872
2873        assert_true (ai_move (ai, 5, 5));
2874        assert_true (ai_move (ai, 6, 3));
2875        assert_true (ai_move (ai, 7, 5));
2876        assert_true (ai_move (ai, 5, 6));
2877        assert_true (ai_move (ai, 4, 5));
2878        assert_true (ai_move (ai, 3, 6));
2879        assert_true (ai_move (ai, 3, 5));
2880        assert_true (ai_move (ai, 4, 6));
2881        assert_true (ai_move (ai, 5, 7));
2882        assert_true (ai_move (ai, 4, 7));
2883        assert_true (ai_move (ai, 3, 7));
2884        assert_true (ai_move (ai, 2, 7));
2885        assert_true (ai_move (ai, 1, 7));
2886        assert_true (ai_move (ai, 2, 6));
2887        assert_true (ai_move (ai, 2, 5));
2888        assert_true (ai_move (ai, 2, 4));
2889        assert_true (ai_move (ai, 1, 3));
2890        assert_true (ai_move (ai, 1, 4));
2891        assert_true (ai_move (ai, 0, 3));
2892        assert_true (ai_move (ai, 0, 2));
2893        assert_true (ai_move (ai, 0, 1));
2894        assert_true (ai_move (ai, 6, 6));
2895        assert_true (ai_move (ai, 5, 2));
2896        assert_true (ai_move (ai, 4, 1));
2897        assert_true (ai_move (ai, 5, 1));
2898        assert_true (ai_move (ai, 6, 4));
2899        assert_true (ai_move (ai, 7, 4));
2900        assert_true (ai_move (ai, 0, 4));
2901        assert_true (ai_move (ai, 0, 5));
2902        assert_true (ai_move (ai, 7, 3));
2903        assert_true (ai_move (ai, 7, 2));
2904        assert_true (ai_move (ai, 7, 6));
2905        assert_true (ai_move (ai, 7, 7));
2906        assert_true (ai_move (ai, 1, 5));
2907        assert_true (ai_move (ai, 3, 0));
2908        assert_true (ai_move (ai, 5, 0));
2909        assert_true (ai_move (ai, 4, 0));
2910        assert_true (ai_move (ai, 2, 0));
2911        assert_true (ai_move (ai, 4, 2));
2912        assert_true (ai_move (ai, 2, 3));
2913        assert_true (ai_move (ai, 3, 2));
2914        assert_true (ai_move (ai, 2, 1));
2915        assert_true (ai_move (ai, 0, 6));
2916        assert_true (ai_move (ai, 2, 2));
2917        assert_true (ai_move (ai, 1, 2));
2918        assert_true (ai_move (ai, 3, 1));
2919        assert_true (ai_move (ai, 1, 6));
2920        assert_true (ai_move (ai, 0, 7));
2921        assert_true (ai_move (ai, 1, 0));
2922        assert_true (ai_move (ai, 0, 0));
2923        assert_true (game.pass ());
2924        assert_true (ai_move (ai, 1, 1));
2925        assert_true (game.pass ());
2926        assert_true (ai_move (ai, 6, 1));
2927        assert_true (ai_move (ai, 6, 0));
2928        assert_true (ai_move (ai, 6, 7));
2929        assert_true (game.pass ());
2930        assert_true (ai_move (ai, 7, 1));
2931        assert_true (ai_move (ai, 7, 0));
2932    }
2933
2934    private static inline void test_complete_reversi_game_20 ()
2935    {
2936                                  /* 0 1 2 3 4 5 6 7 */
2937        string [] board = {/* 0 */ " . . . . . . . .",
2938                           /* 1 */ " . . . . . . . .",
2939                           /* 2 */ " . . . . . . D .",
2940                           /* 3 */ " . . . L L L L .",
2941                           /* 4 */ " . . . D D D . .",
2942                           /* 5 */ " . . . . . . . .",
2943                           /* 6 */ " . . . . . . . .",
2944                           /* 7 */ " . . . . . . . ."};
2945
2946        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
2947        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
2948
2949        assert_true (ai_move (ai, 7, 2));
2950        assert_true (ai_move (ai, 6, 5));
2951        assert_true (ai_move (ai, 4, 5));
2952        assert_true (ai_move (ai, 5, 5));
2953        assert_true (ai_move (ai, 7, 5));
2954        assert_true (ai_move (ai, 5, 6));
2955        assert_true (ai_move (ai, 4, 7));
2956        assert_true (ai_move (ai, 3, 6));
2957        assert_true (ai_move (ai, 2, 5));
2958        assert_true (ai_move (ai, 3, 5));
2959        assert_true (ai_move (ai, 2, 6));
2960        assert_true (ai_move (ai, 1, 5));
2961        assert_true (ai_move (ai, 4, 6));
2962        assert_true (ai_move (ai, 5, 2));
2963        assert_true (ai_move (ai, 5, 1));
2964        assert_true (ai_move (ai, 2, 7));
2965        assert_true (ai_move (ai, 1, 4));
2966        assert_true (ai_move (ai, 3, 7));
2967        assert_true (ai_move (ai, 1, 7));
2968        assert_true (ai_move (ai, 6, 4));
2969        assert_true (ai_move (ai, 7, 3));
2970        assert_true (ai_move (ai, 5, 0));
2971        assert_true (ai_move (ai, 4, 1));
2972        assert_true (ai_move (ai, 3, 2));
2973        assert_true (ai_move (ai, 0, 5));
2974        assert_true (ai_move (ai, 7, 4));
2975        assert_true (ai_move (ai, 4, 2));
2976        assert_true (ai_move (ai, 0, 3));
2977        assert_true (ai_move (ai, 2, 1));
2978        assert_true (ai_move (ai, 2, 3));
2979        assert_true (ai_move (ai, 3, 0));
2980        assert_true (ai_move (ai, 6, 1));
2981        assert_true (ai_move (ai, 1, 2));
2982        assert_true (ai_move (ai, 2, 4));
2983        assert_true (ai_move (ai, 0, 4));
2984        assert_true (ai_move (ai, 2, 2));
2985        assert_true (ai_move (ai, 3, 1));
2986        assert_true (ai_move (ai, 5, 7));
2987        assert_true (ai_move (ai, 6, 7));
2988        assert_true (ai_move (ai, 7, 1));
2989        assert_true (ai_move (ai, 1, 3));
2990        assert_true (ai_move (ai, 7, 6));
2991        assert_true (ai_move (ai, 0, 2));
2992        assert_true (ai_move (ai, 4, 0));
2993        assert_true (ai_move (ai, 6, 6));
2994        assert_true (ai_move (ai, 2, 0));
2995        assert_true (ai_move (ai, 1, 1));
2996        assert_true (ai_move (ai, 1, 6));
2997        assert_true (ai_move (ai, 0, 7));
2998        assert_true (ai_move (ai, 0, 6));
2999        assert_true (ai_move (ai, 7, 0));
3000        assert_true (ai_move (ai, 0, 1));
3001        assert_true (ai_move (ai, 7, 7));
3002        assert_true (ai_move (ai, 6, 0));
3003        assert_true (ai_move (ai, 0, 0));
3004        assert_true (ai_move (ai, 1, 0));
3005    }
3006
3007    private static inline void test_complete_reversi_game_21 ()
3008    {
3009                                  /* 0 1 2 3 4 5 6 7 */
3010        string [] board = {/* 0 */ " . . . . . . . .",
3011                           /* 1 */ " . . . . . . . .",
3012                           /* 2 */ " . . . . . . D .",
3013                           /* 3 */ " . . . L L D . .",
3014                           /* 4 */ " . . . D L D . .",
3015                           /* 5 */ " . . . . . L . .",
3016                           /* 6 */ " . . . . . . . .",
3017                           /* 7 */ " . . . . . . . ."};
3018
3019        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3020        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3021
3022        assert_true (ai_move (ai, 5, 6));
3023        assert_true (ai_move (ai, 6, 4));
3024        assert_true (ai_move (ai, 5, 2));
3025        assert_true (ai_move (ai, 4, 6));
3026        assert_true (ai_move (ai, 6, 5));
3027        assert_true (ai_move (ai, 7, 5));
3028        assert_true (ai_move (ai, 3, 6));
3029        assert_true (ai_move (ai, 3, 7));
3030        assert_true (ai_move (ai, 7, 4));
3031        assert_true (ai_move (ai, 7, 3));
3032        assert_true (ai_move (ai, 4, 5));
3033        assert_true (ai_move (ai, 5, 1));
3034        assert_true (ai_move (ai, 5, 0));
3035        assert_true (ai_move (ai, 4, 7));
3036        assert_true (ai_move (ai, 5, 7));
3037        assert_true (ai_move (ai, 6, 7));
3038        assert_true (ai_move (ai, 7, 2));
3039        assert_true (ai_move (ai, 7, 1));
3040        assert_true (ai_move (ai, 2, 2));
3041        assert_true (ai_move (ai, 2, 6));
3042        assert_true (ai_move (ai, 2, 7));
3043        assert_true (ai_move (ai, 1, 7));
3044        assert_true (ai_move (ai, 1, 6));
3045        assert_true (ai_move (ai, 2, 5));
3046        assert_true (ai_move (ai, 7, 6));
3047        assert_true (ai_move (ai, 7, 7));
3048        assert_true (ai_move (ai, 6, 3));
3049        assert_true (ai_move (ai, 0, 7));
3050        assert_true (ai_move (ai, 0, 6));
3051        assert_true (ai_move (ai, 0, 5));
3052        assert_true (ai_move (ai, 2, 4));
3053        assert_true (ai_move (ai, 1, 5));
3054        assert_true (game.pass ());
3055        assert_true (ai_move (ai, 3, 2));
3056        assert_true (ai_move (ai, 6, 6));
3057        assert_true (ai_move (ai, 4, 1));
3058        assert_true (ai_move (ai, 2, 3));
3059        assert_true (ai_move (ai, 4, 2));
3060        assert_true (ai_move (ai, 1, 4));
3061        assert_true (ai_move (ai, 3, 1));
3062        assert_true (ai_move (ai, 2, 1));
3063        assert_true (ai_move (ai, 3, 5));
3064        assert_true (ai_move (ai, 6, 1));
3065        assert_true (ai_move (ai, 3, 0));
3066        assert_true (ai_move (ai, 4, 0));
3067        assert_true (ai_move (ai, 1, 2));
3068        assert_true (ai_move (ai, 2, 0));
3069        assert_true (ai_move (ai, 0, 4));
3070        assert_true (ai_move (ai, 0, 2));
3071        assert_true (ai_move (ai, 1, 3));
3072        assert_true (ai_move (ai, 0, 3));
3073        assert_true (ai_move (ai, 0, 1));
3074        assert_true (ai_move (ai, 1, 1));
3075        assert_true (ai_move (ai, 0, 0));
3076        assert_true (ai_move (ai, 1, 0));
3077        assert_true (ai_move (ai, 6, 0));
3078        assert_true (ai_move (ai, 7, 0));
3079    }
3080
3081    private static inline void test_complete_reversi_game_22 ()
3082    {
3083                                  /* 0 1 2 3 4 5 6 7 */
3084        string [] board = {/* 0 */ " . . . . . . . .",
3085                           /* 1 */ " . . . . . . . .",
3086                           /* 2 */ " . . . . . . D .",
3087                           /* 3 */ " . . . L L D . .",
3088                           /* 4 */ " . . . D L D . .",
3089                           /* 5 */ " . . . . L . . .",
3090                           /* 6 */ " . . . . . . . .",
3091                           /* 7 */ " . . . . . . . ."};
3092
3093        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3094        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3095
3096        assert_true (ai_move (ai, 5, 6));
3097        assert_true (ai_move (ai, 4, 6));
3098        assert_true (ai_move (ai, 5, 2));
3099        assert_true (ai_move (ai, 3, 5));
3100        assert_true (ai_move (ai, 2, 5));
3101        assert_true (ai_move (ai, 1, 5));
3102        assert_true (ai_move (ai, 3, 2));
3103        assert_true (ai_move (ai, 6, 4));
3104        assert_true (ai_move (ai, 6, 5));
3105        assert_true (ai_move (ai, 6, 3));
3106        assert_true (ai_move (ai, 7, 3));
3107        assert_true (ai_move (ai, 7, 2));
3108        assert_true (ai_move (ai, 7, 1));
3109        assert_true (ai_move (ai, 5, 1));
3110        assert_true (ai_move (ai, 4, 2));
3111        assert_true (ai_move (ai, 4, 1));
3112        assert_true (ai_move (ai, 5, 0));
3113        assert_true (ai_move (ai, 3, 0));
3114        assert_true (ai_move (ai, 4, 0));
3115        assert_true (ai_move (ai, 6, 0));
3116        assert_true (ai_move (ai, 2, 6));
3117        assert_true (ai_move (ai, 2, 2));
3118        assert_true (ai_move (ai, 2, 4));
3119        assert_true (ai_move (ai, 3, 7));
3120        assert_true (ai_move (ai, 2, 7));
3121        assert_true (ai_move (ai, 1, 3));
3122        assert_true (ai_move (ai, 2, 3));
3123        assert_true (ai_move (ai, 5, 5));
3124        assert_true (ai_move (ai, 4, 7));
3125        assert_true (ai_move (ai, 1, 2));
3126        assert_true (ai_move (ai, 3, 6));
3127        assert_true (ai_move (ai, 1, 4));
3128        assert_true (ai_move (ai, 7, 4));
3129        assert_true (ai_move (ai, 7, 5));
3130        assert_true (ai_move (ai, 7, 6));
3131        assert_true (ai_move (ai, 5, 7));
3132        assert_true (ai_move (ai, 6, 7));
3133        assert_true (ai_move (ai, 6, 6));
3134        assert_true (ai_move (ai, 3, 1));
3135        assert_true (ai_move (ai, 2, 1));
3136        assert_true (ai_move (ai, 6, 1));
3137        assert_true (ai_move (ai, 1, 7));
3138        assert_true (ai_move (ai, 0, 7));
3139        assert_true (game.pass ());
3140        assert_true (ai_move (ai, 1, 6));
3141        assert_true (ai_move (ai, 0, 6));
3142        assert_true (ai_move (ai, 0, 5));
3143        assert_true (ai_move (ai, 0, 4));
3144        assert_true (ai_move (ai, 0, 3));
3145        assert_true (ai_move (ai, 0, 2));
3146        assert_true (ai_move (ai, 0, 1));
3147        assert_true (ai_move (ai, 1, 1));
3148        assert_true (ai_move (ai, 0, 0));
3149        assert_true (ai_move (ai, 1, 0));
3150        assert_true (ai_move (ai, 7, 7));
3151        assert_true (game.pass ());
3152        assert_true (ai_move (ai, 2, 0));
3153        assert_true (game.pass ());
3154        assert_true (ai_move (ai, 7, 0));
3155    }
3156
3157    private static inline void test_complete_reversi_game_23 ()
3158    {
3159                                  /* 0 1 2 3 4 5 6 7 */
3160        string [] board = {/* 0 */ " . . . . . . . .",
3161                           /* 1 */ " . . . . . . . .",
3162                           /* 2 */ " . . . . . . D .",
3163                           /* 3 */ " . . . L L D . .",
3164                           /* 4 */ " . . . L D D . .",
3165                           /* 5 */ " . . . L . . . .",
3166                           /* 6 */ " . . . . . . . .",
3167                           /* 7 */ " . . . . . . . ."};
3168
3169        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3170        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3171
3172        assert_true (ai_move (ai, 2, 6));
3173        assert_true (ai_move (ai, 3, 6));
3174        assert_true (ai_move (ai, 3, 2));
3175        assert_true (ai_move (ai, 3, 1));
3176        assert_true (ai_move (ai, 2, 1));
3177        assert_true (ai_move (ai, 5, 5));
3178        assert_true (ai_move (ai, 5, 6));
3179        assert_true (ai_move (ai, 6, 4));
3180        assert_true (ai_move (ai, 6, 5));
3181        assert_true (ai_move (ai, 4, 6));
3182        assert_true (ai_move (ai, 7, 5));
3183        assert_true (ai_move (ai, 5, 7));
3184        assert_true (ai_move (ai, 4, 5));
3185        assert_true (ai_move (ai, 7, 3));
3186        assert_true (ai_move (ai, 7, 4));
3187        assert_true (ai_move (ai, 7, 6));
3188        assert_true (ai_move (ai, 2, 7));
3189        assert_true (ai_move (ai, 5, 1));
3190        assert_true (ai_move (ai, 3, 7));
3191        assert_true (ai_move (ai, 5, 2));
3192        assert_true (ai_move (ai, 2, 5));
3193        assert_true (ai_move (ai, 1, 5));
3194        assert_true (ai_move (ai, 6, 3));
3195        assert_true (ai_move (ai, 4, 7));
3196        assert_true (ai_move (ai, 6, 7));
3197        assert_true (ai_move (ai, 7, 2));
3198        assert_true (ai_move (ai, 1, 4));
3199        assert_true (ai_move (ai, 1, 3));
3200        assert_true (ai_move (ai, 0, 5));
3201        assert_true (ai_move (ai, 1, 0));
3202        assert_true (ai_move (ai, 4, 2));
3203        assert_true (ai_move (ai, 1, 6));
3204        assert_true (ai_move (ai, 1, 7));
3205        assert_true (ai_move (ai, 2, 4));
3206        assert_true (ai_move (ai, 0, 3));
3207        assert_true (ai_move (ai, 4, 1));
3208        assert_true (ai_move (ai, 0, 4));
3209        assert_true (ai_move (ai, 6, 6));
3210        assert_true (ai_move (ai, 4, 0));
3211        assert_true (ai_move (ai, 5, 0));
3212        assert_true (ai_move (ai, 0, 2));
3213        assert_true (ai_move (ai, 3, 0));
3214        assert_true (ai_move (ai, 7, 7));
3215        assert_true (ai_move (ai, 0, 6));
3216        assert_true (ai_move (ai, 0, 7));
3217        assert_true (ai_move (ai, 1, 2));
3218        assert_true (ai_move (ai, 7, 1));
3219        assert_true (ai_move (ai, 6, 1));
3220        assert_true (ai_move (ai, 7, 0));
3221        assert_true (ai_move (ai, 6, 0));
3222        assert_true (ai_move (ai, 2, 0));
3223        assert_true (game.pass ());
3224        assert_true (ai_move (ai, 1, 1));
3225        assert_true (ai_move (ai, 0, 1));
3226        assert_true (ai_move (ai, 2, 2));
3227        assert_true (ai_move (ai, 2, 3));
3228        assert_true (ai_move (ai, 0, 0));
3229    }
3230
3231    private static inline void test_complete_reversi_game_24 ()
3232    {
3233                                  /* 0 1 2 3 4 5 6 7 */
3234        string [] board = {/* 0 */ " . . . . . . . .",
3235                           /* 1 */ " . . . . . . . .",
3236                           /* 2 */ " . . . . . . D .",
3237                           /* 3 */ " . . . L L D . .",
3238                           /* 4 */ " . . . L D D . .",
3239                           /* 5 */ " . . L . . . . .",
3240                           /* 6 */ " . . . . . . . .",
3241                           /* 7 */ " . . . . . . . ."};
3242
3243        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3244        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3245
3246        assert_true (ai_move (ai, 3, 2));
3247        assert_true (ai_move (ai, 3, 1));
3248        assert_true (ai_move (ai, 2, 1));
3249        assert_true (ai_move (ai, 5, 5));
3250        assert_true (ai_move (ai, 5, 6));
3251        assert_true (ai_move (ai, 6, 4));
3252        assert_true (ai_move (ai, 6, 5));
3253        assert_true (ai_move (ai, 4, 6));
3254        assert_true (ai_move (ai, 4, 5));
3255        assert_true (ai_move (ai, 5, 2));
3256        assert_true (ai_move (ai, 4, 2));
3257        assert_true (ai_move (ai, 5, 1));
3258        assert_true (ai_move (ai, 5, 0));
3259        assert_true (ai_move (ai, 2, 2));
3260        assert_true (ai_move (ai, 1, 2));
3261        assert_true (ai_move (ai, 1, 3));
3262        assert_true (ai_move (ai, 2, 3));
3263        assert_true (ai_move (ai, 6, 3));
3264        assert_true (ai_move (ai, 7, 5));
3265        assert_true (ai_move (ai, 4, 1));
3266        assert_true (ai_move (ai, 2, 0));
3267        assert_true (ai_move (ai, 5, 7));
3268        assert_true (ai_move (ai, 7, 2));
3269        assert_true (ai_move (ai, 0, 2));
3270        assert_true (ai_move (ai, 4, 0));
3271        assert_true (ai_move (ai, 3, 0));
3272        assert_true (ai_move (ai, 3, 7));
3273        assert_true (ai_move (ai, 3, 6));
3274        assert_true (ai_move (ai, 0, 4));
3275        assert_true (ai_move (ai, 0, 3));
3276        assert_true (ai_move (ai, 3, 5));
3277        assert_true (ai_move (ai, 4, 7));
3278        assert_true (ai_move (ai, 1, 5));
3279        assert_true (ai_move (ai, 2, 7));
3280        assert_true (ai_move (ai, 1, 4));
3281        assert_true (ai_move (ai, 2, 4));
3282        assert_true (ai_move (ai, 2, 6));
3283        assert_true (ai_move (ai, 0, 5));
3284        assert_true (ai_move (ai, 6, 1));
3285        assert_true (ai_move (ai, 6, 6));
3286        assert_true (ai_move (ai, 0, 1));
3287        assert_true (ai_move (ai, 0, 0));
3288        assert_true (ai_move (ai, 1, 0));
3289        assert_true (ai_move (ai, 1, 7));
3290        assert_true (ai_move (ai, 6, 7));
3291        assert_true (ai_move (ai, 7, 7));
3292        assert_true (ai_move (ai, 7, 6));
3293        assert_true (ai_move (ai, 7, 4));
3294        assert_true (ai_move (ai, 1, 1));
3295        assert_true (ai_move (ai, 0, 6));
3296        assert_true (ai_move (ai, 7, 3));
3297        assert_true (ai_move (ai, 7, 0));
3298        assert_true (ai_move (ai, 7, 1));
3299        assert_true (ai_move (ai, 6, 0));
3300        assert_true (ai_move (ai, 1, 6));
3301        assert_true (ai_move (ai, 0, 7));
3302    }
3303
3304    private static inline void test_complete_reversi_game_25 ()
3305    {
3306                                  /* 0 1 2 3 4 5 6 7 */
3307        string [] board = {/* 0 */ " . . . . . . . .",
3308                           /* 1 */ " . . . . . . . .",
3309                           /* 2 */ " . . . . . D . .",
3310                           /* 3 */ " . . . L L L L .",
3311                           /* 4 */ " . . . D D D . .",
3312                           /* 5 */ " . . . . . . . .",
3313                           /* 6 */ " . . . . . . . .",
3314                           /* 7 */ " . . . . . . . ."};
3315
3316        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3317        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3318
3319        assert_true (ai_move (ai, 6, 2));
3320        assert_true (ai_move (ai, 4, 1));
3321        assert_true (ai_move (ai, 5, 1));
3322        assert_true (ai_move (ai, 6, 5));
3323        assert_true (ai_move (ai, 5, 5));
3324        assert_true (ai_move (ai, 2, 5));
3325        assert_true (ai_move (ai, 7, 5));
3326        assert_true (ai_move (ai, 4, 5));
3327        assert_true (ai_move (ai, 7, 4));
3328        assert_true (ai_move (ai, 5, 6));
3329        assert_true (ai_move (ai, 5, 7));
3330        assert_true (ai_move (ai, 7, 2));
3331        assert_true (ai_move (ai, 6, 4));
3332        assert_true (ai_move (ai, 5, 0));
3333        assert_true (ai_move (ai, 3, 6));
3334        assert_true (ai_move (ai, 7, 1));
3335        assert_true (ai_move (ai, 1, 4));
3336        assert_true (ai_move (ai, 4, 6));
3337        assert_true (ai_move (ai, 3, 7));
3338        assert_true (ai_move (ai, 4, 7));
3339        assert_true (ai_move (ai, 3, 5));
3340        assert_true (ai_move (ai, 2, 6));
3341        assert_true (ai_move (ai, 2, 7));
3342        assert_true (ai_move (ai, 1, 5));
3343        assert_true (ai_move (ai, 0, 5));
3344        assert_true (ai_move (ai, 0, 3));
3345        assert_true (ai_move (ai, 1, 3));
3346        assert_true (ai_move (ai, 2, 3));
3347        assert_true (ai_move (ai, 2, 4));
3348        assert_true (ai_move (ai, 1, 6));
3349        assert_true (ai_move (ai, 1, 2));
3350        assert_true (ai_move (ai, 2, 2));
3351        assert_true (ai_move (ai, 2, 1));
3352        assert_true (ai_move (ai, 3, 2));
3353        assert_true (ai_move (ai, 0, 2));
3354        assert_true (ai_move (ai, 2, 0));
3355        assert_true (ai_move (ai, 0, 4));
3356        assert_true (ai_move (ai, 0, 6));
3357        assert_true (ai_move (ai, 0, 7));
3358        assert_true (ai_move (ai, 1, 7));
3359        assert_true (ai_move (ai, 4, 2));
3360        assert_true (ai_move (ai, 3, 1));
3361        assert_true (ai_move (ai, 4, 0));
3362        assert_true (ai_move (ai, 3, 0));
3363        assert_true (ai_move (ai, 1, 0));
3364        assert_true (ai_move (ai, 0, 0));
3365        assert_true (ai_move (ai, 6, 1));
3366        assert_true (ai_move (ai, 6, 0));
3367        assert_true (game.pass ());
3368        assert_true (ai_move (ai, 7, 0));
3369        assert_true (game.pass ());
3370        assert_true (ai_move (ai, 7, 3));
3371        assert_true (ai_move (ai, 6, 6));
3372        assert_true (ai_move (ai, 0, 1));
3373        assert_true (ai_move (ai, 1, 1));
3374        assert_true (ai_move (ai, 7, 7));
3375        assert_true (ai_move (ai, 7, 6));
3376        assert_true (ai_move (ai, 6, 7));
3377    }
3378
3379    private static inline void test_complete_reversi_game_26 ()
3380    {
3381                                  /* 0 1 2 3 4 5 6 7 */
3382        string [] board = {/* 0 */ " . . . . . . . .",
3383                           /* 1 */ " . . . . . . . .",
3384                           /* 2 */ " . . . . . D . .",
3385                           /* 3 */ " . . . L D D . .",
3386                           /* 4 */ " . . . D L D . .",
3387                           /* 5 */ " . . . . . L . .",
3388                           /* 6 */ " . . . . . . . .",
3389                           /* 7 */ " . . . . . . . ."};
3390
3391        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3392        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3393
3394        assert_true (ai_move (ai, 5, 6));
3395        assert_true (ai_move (ai, 6, 2));
3396        assert_true (ai_move (ai, 6, 3));
3397        assert_true (ai_move (ai, 4, 2));
3398        assert_true (ai_move (ai, 5, 1));
3399        assert_true (ai_move (ai, 7, 3));
3400        assert_true (ai_move (ai, 7, 4));
3401        assert_true (ai_move (ai, 7, 5));
3402        assert_true (ai_move (ai, 7, 2));
3403        assert_true (ai_move (ai, 7, 1));
3404        assert_true (ai_move (ai, 2, 4));
3405        assert_true (ai_move (ai, 6, 4));
3406        assert_true (ai_move (ai, 4, 5));
3407        assert_true (ai_move (ai, 4, 1));
3408        assert_true (ai_move (ai, 4, 0));
3409        assert_true (ai_move (ai, 4, 6));
3410        assert_true (ai_move (ai, 4, 7));
3411        assert_true (ai_move (ai, 3, 6));
3412        assert_true (ai_move (ai, 6, 5));
3413        assert_true (ai_move (ai, 3, 5));
3414        assert_true (ai_move (ai, 2, 7));
3415        assert_true (ai_move (ai, 3, 1));
3416        assert_true (ai_move (ai, 2, 5));
3417        assert_true (ai_move (ai, 2, 6));
3418        assert_true (ai_move (ai, 2, 2));
3419        assert_true (ai_move (ai, 5, 0));
3420        assert_true (ai_move (ai, 6, 0));
3421        assert_true (ai_move (ai, 1, 5));
3422        assert_true (ai_move (ai, 1, 4));
3423        assert_true (ai_move (ai, 2, 0));
3424        assert_true (ai_move (ai, 0, 5));
3425        assert_true (ai_move (ai, 1, 3));
3426        assert_true (ai_move (ai, 2, 3));
3427        assert_true (ai_move (ai, 0, 4));
3428        assert_true (ai_move (ai, 0, 2));
3429        assert_true (ai_move (ai, 0, 6));
3430        assert_true (ai_move (ai, 2, 1));
3431        assert_true (ai_move (ai, 5, 7));
3432        assert_true (ai_move (ai, 0, 3));
3433        assert_true (ai_move (ai, 0, 1));
3434        assert_true (ai_move (ai, 6, 1));
3435        assert_true (ai_move (ai, 3, 7));
3436        assert_true (ai_move (ai, 6, 7));
3437        assert_true (ai_move (ai, 1, 2));
3438        assert_true (ai_move (ai, 3, 2));
3439        assert_true (ai_move (ai, 3, 0));
3440        assert_true (ai_move (ai, 1, 0));
3441        assert_true (ai_move (ai, 1, 1));
3442        assert_true (ai_move (ai, 1, 7));
3443        assert_true (ai_move (ai, 7, 6));
3444        assert_true (ai_move (ai, 0, 0));
3445        assert_true (ai_move (ai, 7, 0));
3446        assert_true (ai_move (ai, 0, 7));
3447        assert_true (ai_move (ai, 6, 6));
3448        assert_true (ai_move (ai, 7, 7));
3449        assert_true (ai_move (ai, 1, 6));
3450    }
3451
3452    private static inline void test_complete_reversi_game_27 ()
3453    {
3454                                  /* 0 1 2 3 4 5 6 7 */
3455        string [] board = {/* 0 */ " . . . . . . . .",
3456                           /* 1 */ " . . . . . . . .",
3457                           /* 2 */ " . . . . . D . .",
3458                           /* 3 */ " . . . L D D . .",
3459                           /* 4 */ " . . . L D D . .",
3460                           /* 5 */ " . . . L . . . .",
3461                           /* 6 */ " . . . . . . . .",
3462                           /* 7 */ " . . . . . . . ."};
3463
3464        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3465        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3466
3467        assert_true (ai_move (ai, 2, 6));
3468        assert_true (ai_move (ai, 3, 6));
3469        assert_true (ai_move (ai, 2, 2));
3470        assert_true (ai_move (ai, 1, 7));
3471        assert_true (ai_move (ai, 2, 4));
3472        assert_true (ai_move (ai, 1, 3));
3473        assert_true (ai_move (ai, 1, 4));
3474        assert_true (ai_move (ai, 3, 1));
3475        assert_true (ai_move (ai, 4, 6));
3476        assert_true (ai_move (ai, 5, 6));
3477        assert_true (ai_move (ai, 5, 7));
3478        assert_true (ai_move (ai, 1, 5));
3479        assert_true (ai_move (ai, 5, 5));
3480        assert_true (ai_move (ai, 4, 2));
3481        assert_true (ai_move (ai, 4, 1));
3482        assert_true (ai_move (ai, 5, 1));
3483        assert_true (ai_move (ai, 4, 0));
3484        assert_true (ai_move (ai, 6, 3));
3485        assert_true (ai_move (ai, 6, 4));
3486        assert_true (ai_move (ai, 4, 5));
3487        assert_true (ai_move (ai, 5, 0));
3488        assert_true (ai_move (ai, 6, 2));
3489        assert_true (ai_move (ai, 7, 3));
3490        assert_true (ai_move (ai, 3, 0));
3491        assert_true (ai_move (ai, 3, 2));
3492        assert_true (ai_move (ai, 7, 5));
3493        assert_true (ai_move (ai, 1, 2));
3494        assert_true (ai_move (ai, 6, 5));
3495        assert_true (ai_move (ai, 2, 0));
3496        assert_true (ai_move (ai, 0, 2));
3497        assert_true (ai_move (ai, 2, 3));
3498        assert_true (ai_move (ai, 2, 5));
3499        assert_true (ai_move (ai, 2, 1));
3500        assert_true (ai_move (ai, 7, 2));
3501        assert_true (ai_move (ai, 7, 4));
3502        assert_true (ai_move (ai, 4, 7));
3503        assert_true (ai_move (ai, 0, 5));
3504        assert_true (ai_move (ai, 0, 3));
3505        assert_true (ai_move (ai, 0, 4));
3506        assert_true (ai_move (ai, 0, 6));
3507        assert_true (ai_move (ai, 2, 7));
3508        assert_true (ai_move (ai, 1, 6));
3509        assert_true (ai_move (ai, 0, 7));
3510        assert_true (ai_move (ai, 1, 1));
3511        assert_true (ai_move (ai, 0, 0));
3512        assert_true (ai_move (ai, 6, 7));
3513        assert_true (ai_move (ai, 0, 1));
3514        assert_true (ai_move (ai, 6, 6));
3515        assert_true (ai_move (ai, 3, 7));
3516        assert_true (ai_move (ai, 1, 0));
3517        assert_true (ai_move (ai, 7, 7));
3518        assert_true (ai_move (ai, 7, 6));
3519        assert_true (ai_move (ai, 6, 1));
3520        assert_true (ai_move (ai, 7, 0));
3521        assert_true (ai_move (ai, 7, 1));
3522        assert_true (ai_move (ai, 6, 0));
3523    }
3524
3525    private static inline void test_complete_reversi_game_28 ()
3526    {
3527                                  /* 0 1 2 3 4 5 6 7 */
3528        string [] board = {/* 0 */ " . . . . . . . .",
3529                           /* 1 */ " . . . . . . . .",
3530                           /* 2 */ " . . . . D . . .",
3531                           /* 3 */ " . . . L D L . .",
3532                           /* 4 */ " . . . D L L . .",
3533                           /* 5 */ " . . . . . L . .",
3534                           /* 6 */ " . . . . . . . .",
3535                           /* 7 */ " . . . . . . . ."};
3536
3537        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3538        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3539
3540        assert_true (ai_move (ai, 6, 5));
3541        assert_true (ai_move (ai, 6, 4));
3542        assert_true (ai_move (ai, 3, 2));
3543        assert_true (ai_move (ai, 7, 5));
3544        assert_true (ai_move (ai, 4, 5));
3545        assert_true (ai_move (ai, 3, 6));
3546        assert_true (ai_move (ai, 4, 6));
3547        assert_true (ai_move (ai, 3, 7));
3548        assert_true (ai_move (ai, 2, 7));
3549        assert_true (ai_move (ai, 2, 6));
3550        assert_true (ai_move (ai, 2, 5));
3551        assert_true (ai_move (ai, 3, 5));
3552        assert_true (ai_move (ai, 6, 2));
3553        assert_true (ai_move (ai, 5, 2));
3554        assert_true (ai_move (ai, 6, 3));
3555        assert_true (ai_move (ai, 2, 1));
3556        assert_true (ai_move (ai, 5, 1));
3557        assert_true (ai_move (ai, 5, 0));
3558        assert_true (ai_move (ai, 4, 1));
3559        assert_true (ai_move (ai, 7, 2));
3560        assert_true (ai_move (ai, 2, 3));
3561        assert_true (ai_move (ai, 1, 5));
3562        assert_true (ai_move (ai, 1, 4));
3563        assert_true (ai_move (ai, 1, 7));
3564        assert_true (ai_move (ai, 0, 5));
3565        assert_true (ai_move (ai, 2, 4));
3566        assert_true (ai_move (ai, 5, 6));
3567        assert_true (ai_move (ai, 4, 7));
3568        assert_true (ai_move (ai, 7, 4));
3569        assert_true (ai_move (ai, 7, 3));
3570        assert_true (ai_move (ai, 2, 2));
3571        assert_true (ai_move (ai, 1, 2));
3572        assert_true (ai_move (ai, 3, 1));
3573        assert_true (ai_move (ai, 6, 1));
3574        assert_true (ai_move (ai, 1, 3));
3575        assert_true (ai_move (ai, 4, 0));
3576        assert_true (ai_move (ai, 5, 7));
3577        assert_true (ai_move (ai, 6, 7));
3578        assert_true (ai_move (ai, 0, 2));
3579        assert_true (ai_move (ai, 2, 0));
3580        assert_true (ai_move (ai, 3, 0));
3581        assert_true (ai_move (ai, 0, 4));
3582        assert_true (ai_move (ai, 1, 1));
3583        assert_true (ai_move (ai, 0, 6));
3584        assert_true (ai_move (ai, 6, 6));
3585        assert_true (ai_move (ai, 7, 6));
3586        assert_true (ai_move (ai, 7, 7));
3587        assert_true (ai_move (ai, 0, 1));
3588        assert_true (ai_move (ai, 0, 3));
3589        assert_true (ai_move (ai, 1, 0));
3590        assert_true (ai_move (ai, 0, 7));
3591        assert_true (game.pass ());
3592        assert_true (ai_move (ai, 7, 1));
3593        assert_true (game.pass ());
3594        assert_true (ai_move (ai, 1, 6));
3595        assert_true (game.pass ());
3596        assert_true (ai_move (ai, 7, 0));
3597        assert_true (ai_move (ai, 6, 0));
3598        assert_true (ai_move (ai, 0, 0));
3599    }
3600
3601    private static inline void test_complete_reversi_game_29 ()
3602    {
3603                                  /* 0 1 2 3 4 5 6 7 */
3604        string [] board = {/* 0 */ " . . . . . . . .",
3605                           /* 1 */ " . . . . . L . .",
3606                           /* 2 */ " . . . . L . . .",
3607                           /* 3 */ " . . . L D L . .",
3608                           /* 4 */ " . . . D D D . .",
3609                           /* 5 */ " . . . . . . . .",
3610                           /* 6 */ " . . . . . . . .",
3611                           /* 7 */ " . . . . . . . ."};
3612
3613        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3614        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3615
3616        assert_true (ai_move (ai, 4, 1));
3617        assert_true (ai_move (ai, 5, 5));
3618        assert_true (ai_move (ai, 6, 5));
3619        assert_true (ai_move (ai, 6, 4));
3620        assert_true (ai_move (ai, 3, 2));
3621        assert_true (ai_move (ai, 7, 5));
3622        assert_true (ai_move (ai, 4, 5));
3623        assert_true (ai_move (ai, 3, 6));
3624        assert_true (ai_move (ai, 4, 6));
3625        assert_true (ai_move (ai, 3, 7));
3626        assert_true (ai_move (ai, 2, 7));
3627        assert_true (ai_move (ai, 2, 6));
3628        assert_true (ai_move (ai, 2, 5));
3629        assert_true (ai_move (ai, 3, 5));
3630        assert_true (ai_move (ai, 6, 2));
3631        assert_true (ai_move (ai, 7, 3));
3632        assert_true (ai_move (ai, 7, 4));
3633        assert_true (ai_move (ai, 1, 5));
3634        assert_true (ai_move (ai, 5, 6));
3635        assert_true (ai_move (ai, 6, 3));
3636        assert_true (ai_move (ai, 4, 7));
3637        assert_true (ai_move (ai, 5, 7));
3638        assert_true (ai_move (ai, 6, 7));
3639        assert_true (ai_move (ai, 2, 1));
3640        assert_true (ai_move (ai, 2, 4));
3641        assert_true (ai_move (ai, 5, 2));
3642        assert_true (ai_move (ai, 5, 0));
3643        assert_true (ai_move (ai, 1, 4));
3644        assert_true (ai_move (ai, 2, 3));
3645        assert_true (ai_move (ai, 3, 0));
3646        assert_true (ai_move (ai, 0, 3));
3647        assert_true (ai_move (ai, 2, 2));
3648        assert_true (ai_move (ai, 2, 0));
3649        assert_true (ai_move (ai, 4, 0));
3650        assert_true (ai_move (ai, 0, 5));
3651        assert_true (ai_move (ai, 1, 2));
3652        assert_true (ai_move (ai, 3, 1));
3653        assert_true (ai_move (ai, 1, 3));
3654        assert_true (ai_move (ai, 0, 4));
3655        assert_true (ai_move (ai, 1, 6));
3656        assert_true (ai_move (ai, 0, 2));
3657        assert_true (ai_move (ai, 1, 1));
3658        assert_true (ai_move (ai, 7, 2));
3659        assert_true (ai_move (ai, 6, 1));
3660        assert_true (ai_move (ai, 7, 6));
3661        assert_true (ai_move (ai, 6, 6));
3662        assert_true (ai_move (ai, 0, 1));
3663        assert_true (ai_move (ai, 0, 0));
3664        assert_true (ai_move (ai, 1, 0));
3665        assert_true (ai_move (ai, 0, 6));
3666        assert_true (ai_move (ai, 7, 7));
3667        assert_true (ai_move (ai, 6, 0));
3668        assert_true (ai_move (ai, 7, 0));
3669        assert_true (ai_move (ai, 7, 1));
3670        assert_true (ai_move (ai, 1, 7));
3671        assert_true (ai_move (ai, 0, 7));
3672    }
3673
3674    private static inline void test_complete_reversi_game_30 ()
3675    {
3676                                  /* 0 1 2 3 4 5 6 7 */
3677        string [] board = {/* 0 */ " . . . . . . . .",
3678                           /* 1 */ " . . . . . . . .",
3679                           /* 2 */ " . . . . D . . .",
3680                           /* 3 */ " . . . L D L . .",
3681                           /* 4 */ " . . . L L D . .",
3682                           /* 5 */ " . . . L . . . .",
3683                           /* 6 */ " . . . . . . . .",
3684                           /* 7 */ " . . . . . . . ."};
3685
3686        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3687        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3688
3689        assert_true (ai_move (ai, 5, 2));
3690        assert_true (ai_move (ai, 6, 2));
3691        assert_true (ai_move (ai, 6, 4));
3692        assert_true (ai_move (ai, 3, 2));
3693        assert_true (ai_move (ai, 5, 1));
3694        assert_true (ai_move (ai, 4, 0));
3695        assert_true (ai_move (ai, 5, 0));
3696        assert_true (ai_move (ai, 6, 3));
3697        assert_true (ai_move (ai, 3, 1));
3698        assert_true (ai_move (ai, 4, 1));
3699        assert_true (ai_move (ai, 3, 0));
3700        assert_true (ai_move (ai, 5, 5));
3701        assert_true (ai_move (ai, 5, 6));
3702        assert_true (ai_move (ai, 4, 5));
3703        assert_true (ai_move (ai, 4, 6));
3704        assert_true (ai_move (ai, 6, 5));
3705        assert_true (ai_move (ai, 7, 5));
3706        assert_true (ai_move (ai, 7, 4));
3707        assert_true (ai_move (ai, 2, 6));
3708        assert_true (ai_move (ai, 2, 5));
3709        assert_true (ai_move (ai, 1, 5));
3710        assert_true (ai_move (ai, 3, 6));
3711        assert_true (ai_move (ai, 7, 2));
3712        assert_true (ai_move (ai, 1, 4));
3713        assert_true (ai_move (ai, 7, 3));
3714        assert_true (ai_move (ai, 2, 7));
3715        assert_true (ai_move (ai, 2, 1));
3716        assert_true (ai_move (ai, 0, 5));
3717        assert_true (ai_move (ai, 2, 2));
3718        assert_true (ai_move (ai, 4, 7));
3719        assert_true (ai_move (ai, 2, 3));
3720        assert_true (ai_move (ai, 5, 7));
3721        assert_true (ai_move (ai, 3, 7));
3722        assert_true (ai_move (ai, 1, 2));
3723        assert_true (ai_move (ai, 2, 4));
3724        assert_true (ai_move (ai, 1, 3));
3725        assert_true (ai_move (ai, 0, 2));
3726        assert_true (ai_move (ai, 2, 0));
3727        assert_true (ai_move (ai, 1, 0));
3728        assert_true (ai_move (ai, 6, 6));
3729        assert_true (ai_move (ai, 0, 3));
3730        assert_true (ai_move (ai, 6, 0));
3731        assert_true (ai_move (ai, 7, 0));
3732        assert_true (ai_move (ai, 7, 1));
3733        assert_true (ai_move (ai, 0, 6));
3734        assert_true (ai_move (ai, 7, 6));
3735        assert_true (ai_move (ai, 0, 4));
3736        assert_true (ai_move (ai, 0, 1));
3737        assert_true (ai_move (ai, 0, 0));
3738        assert_true (ai_move (ai, 1, 6));
3739        assert_true (ai_move (ai, 6, 1));
3740        assert_true (ai_move (ai, 1, 1));
3741        assert_true (ai_move (ai, 7, 7));
3742        assert_true (ai_move (ai, 6, 7));
3743        assert_true (ai_move (ai, 1, 7));
3744        assert_true (ai_move (ai, 0, 7));
3745    }
3746
3747    private static inline void test_complete_reversi_game_31 ()
3748    {
3749                                  /* 0 1 2 3 4 5 6 7 */
3750        string [] board = {/* 0 */ " . . . . . . . .",
3751                           /* 1 */ " . . . L . . . .",
3752                           /* 2 */ " . . . . L . . .",
3753                           /* 3 */ " . . . L D L . .",
3754                           /* 4 */ " . . . D D D . .",
3755                           /* 5 */ " . . . . . . . .",
3756                           /* 6 */ " . . . . . . . .",
3757                           /* 7 */ " . . . . . . . ."};
3758
3759        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3760        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3761
3762        assert_true (ai_move (ai, 4, 1));
3763        assert_true (ai_move (ai, 5, 5));
3764        assert_true (ai_move (ai, 6, 5));
3765        assert_true (ai_move (ai, 6, 4));
3766        assert_true (ai_move (ai, 2, 0));
3767        assert_true (ai_move (ai, 5, 1));
3768        assert_true (ai_move (ai, 3, 2));
3769        assert_true (ai_move (ai, 2, 2));
3770        assert_true (ai_move (ai, 2, 1));
3771        assert_true (ai_move (ai, 3, 0));
3772        assert_true (ai_move (ai, 4, 0));
3773        assert_true (ai_move (ai, 7, 5));
3774        assert_true (ai_move (ai, 1, 3));
3775        assert_true (ai_move (ai, 1, 2));
3776        assert_true (ai_move (ai, 2, 3));
3777        assert_true (ai_move (ai, 1, 4));
3778        assert_true (ai_move (ai, 0, 5));
3779        assert_true (ai_move (ai, 1, 5));
3780        assert_true (ai_move (ai, 0, 2));
3781        assert_true (ai_move (ai, 5, 0));
3782        assert_true (ai_move (ai, 5, 2));
3783        assert_true (ai_move (ai, 1, 0));
3784        assert_true (ai_move (ai, 5, 6));
3785        assert_true (ai_move (ai, 4, 6));
3786        assert_true (ai_move (ai, 2, 4));
3787        assert_true (ai_move (ai, 2, 5));
3788        assert_true (ai_move (ai, 3, 6));
3789        assert_true (ai_move (ai, 6, 3));
3790        assert_true (ai_move (ai, 7, 2));
3791        assert_true (ai_move (ai, 6, 2));
3792        assert_true (ai_move (ai, 0, 3));
3793        assert_true (ai_move (ai, 3, 5));
3794        assert_true (ai_move (ai, 4, 5));
3795        assert_true (ai_move (ai, 2, 7));
3796        assert_true (ai_move (ai, 2, 6));
3797        assert_true (ai_move (ai, 0, 4));
3798        assert_true (ai_move (ai, 7, 3));
3799        assert_true (ai_move (ai, 5, 7));
3800        assert_true (ai_move (ai, 4, 7));
3801        assert_true (ai_move (ai, 3, 7));
3802        assert_true (ai_move (ai, 7, 1));
3803        assert_true (ai_move (ai, 1, 6));
3804        assert_true (ai_move (ai, 6, 1));
3805        assert_true (ai_move (ai, 7, 0));
3806        assert_true (ai_move (ai, 6, 0));
3807        assert_true (ai_move (ai, 7, 4));
3808        assert_true (ai_move (ai, 0, 0));
3809        assert_true (ai_move (ai, 0, 1));
3810        assert_true (ai_move (ai, 0, 7));
3811        assert_true (ai_move (ai, 0, 6));
3812        assert_true (ai_move (ai, 1, 1));
3813        assert_true (game.pass ());
3814        assert_true (ai_move (ai, 6, 6));
3815        assert_true (ai_move (ai, 7, 6));
3816        assert_true (ai_move (ai, 1, 7));
3817        assert_true (game.pass ());
3818        assert_true (ai_move (ai, 6, 7));
3819    }
3820
3821    private static inline void test_complete_reversi_game_32 ()
3822    {
3823                                  /* 0 1 2 3 4 5 6 7 */
3824        string [] board = {/* 0 */ " . . . . . . . .",
3825                           /* 1 */ " . . . . . . . .",
3826                           /* 2 */ " . . . D . . . .",
3827                           /* 3 */ " . . . D D L . .",
3828                           /* 4 */ " . . . D D L . .",
3829                           /* 5 */ " . . . . . L . .",
3830                           /* 6 */ " . . . . . . . .",
3831                           /* 7 */ " . . . . . . . ."};
3832
3833        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3834        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3835
3836        assert_true (ai_move (ai, 6, 4));
3837        assert_true (ai_move (ai, 7, 5));
3838        assert_true (ai_move (ai, 5, 6));
3839        assert_true (ai_move (ai, 4, 6));
3840        assert_true (ai_move (ai, 5, 2));
3841        assert_true (ai_move (ai, 5, 7));
3842        assert_true (ai_move (ai, 7, 4));
3843        assert_true (ai_move (ai, 7, 3));
3844        assert_true (ai_move (ai, 6, 6));
3845        assert_true (ai_move (ai, 5, 1));
3846        assert_true (ai_move (ai, 6, 2));
3847        assert_true (ai_move (ai, 7, 2));
3848        assert_true (ai_move (ai, 6, 5));
3849        assert_true (ai_move (ai, 4, 2));
3850        assert_true (ai_move (ai, 4, 5));
3851        assert_true (ai_move (ai, 3, 5));
3852        assert_true (ai_move (ai, 5, 0));
3853        assert_true (ai_move (ai, 6, 3));
3854        assert_true (ai_move (ai, 7, 6));
3855        assert_true (ai_move (ai, 7, 7));
3856        assert_true (ai_move (ai, 2, 5));
3857        assert_true (ai_move (ai, 1, 5));
3858        assert_true (ai_move (ai, 4, 1));
3859        assert_true (ai_move (ai, 3, 0));
3860        assert_true (ai_move (ai, 4, 0));
3861        assert_true (ai_move (ai, 2, 1));
3862        assert_true (ai_move (ai, 2, 3));
3863        assert_true (ai_move (ai, 6, 0));
3864        assert_true (ai_move (ai, 1, 0));
3865        assert_true (ai_move (ai, 2, 2));
3866        assert_true (ai_move (ai, 3, 6));
3867        assert_true (ai_move (ai, 2, 4));
3868        assert_true (ai_move (ai, 2, 6));
3869        assert_true (ai_move (ai, 1, 3));
3870        assert_true (ai_move (ai, 4, 7));
3871        assert_true (ai_move (ai, 3, 1));
3872        assert_true (ai_move (ai, 1, 4));
3873        assert_true (ai_move (ai, 0, 5));
3874        assert_true (ai_move (ai, 1, 2));
3875        assert_true (ai_move (ai, 2, 7));
3876        assert_true (ai_move (ai, 3, 7));
3877        assert_true (ai_move (ai, 0, 2));
3878        assert_true (ai_move (ai, 1, 1));
3879        assert_true (ai_move (ai, 6, 1));
3880        assert_true (ai_move (ai, 6, 7));
3881        assert_true (ai_move (ai, 0, 0));
3882        assert_true (ai_move (ai, 2, 0));
3883        assert_true (game.pass ());
3884        assert_true (ai_move (ai, 7, 0));
3885        assert_true (ai_move (ai, 7, 1));
3886        assert_true (ai_move (ai, 0, 1));
3887        assert_true (game.pass ());
3888        assert_true (ai_move (ai, 0, 4));
3889        assert_true (ai_move (ai, 0, 3));
3890        assert_true (ai_move (ai, 1, 6));
3891        assert_true (ai_move (ai, 0, 7));
3892        assert_true (ai_move (ai, 0, 6));
3893        assert_true (ai_move (ai, 1, 7));
3894    }
3895
3896    private static inline void test_complete_reversi_game_33 ()
3897    {
3898                                  /* 0 1 2 3 4 5 6 7 */
3899        string [] board = {/* 0 */ " . . . . . . . .",
3900                           /* 1 */ " . . . . . . . .",
3901                           /* 2 */ " . . . D . . . .",
3902                           /* 3 */ " . . . D D L . .",
3903                           /* 4 */ " . . . D L D . .",
3904                           /* 5 */ " . . . L . . . .",
3905                           /* 6 */ " . . . . . . . .",
3906                           /* 7 */ " . . . . . . . ."};
3907
3908        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3909        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3910
3911        assert_true (ai_move (ai, 5, 2));
3912        assert_true (ai_move (ai, 6, 2));
3913        assert_true (ai_move (ai, 6, 3));
3914        assert_true (ai_move (ai, 4, 2));
3915        assert_true (ai_move (ai, 4, 1));
3916        assert_true (ai_move (ai, 6, 5));
3917        assert_true (ai_move (ai, 3, 1));
3918        assert_true (ai_move (ai, 5, 1));
3919        assert_true (ai_move (ai, 7, 2));
3920        assert_true (ai_move (ai, 4, 0));
3921        assert_true (ai_move (ai, 3, 0));
3922        assert_true (ai_move (ai, 2, 0));
3923        assert_true (ai_move (ai, 2, 1));
3924        assert_true (ai_move (ai, 1, 2));
3925        assert_true (ai_move (ai, 3, 6));
3926        assert_true (ai_move (ai, 2, 6));
3927        assert_true (ai_move (ai, 5, 0));
3928        assert_true (ai_move (ai, 6, 0));
3929        assert_true (ai_move (ai, 4, 5));
3930        assert_true (ai_move (ai, 2, 2));
3931        assert_true (ai_move (ai, 2, 5));
3932        assert_true (ai_move (ai, 7, 4));
3933        assert_true (ai_move (ai, 0, 2));
3934        assert_true (ai_move (ai, 1, 3));
3935        assert_true (ai_move (ai, 2, 7));
3936        assert_true (ai_move (ai, 2, 3));
3937        assert_true (ai_move (ai, 1, 4));
3938        assert_true (ai_move (ai, 0, 4));
3939        assert_true (ai_move (ai, 6, 4));
3940        assert_true (ai_move (ai, 7, 5));
3941        assert_true (ai_move (ai, 2, 4));
3942        assert_true (ai_move (ai, 5, 5));
3943        assert_true (ai_move (ai, 6, 1));
3944        assert_true (ai_move (ai, 5, 6));
3945        assert_true (ai_move (ai, 5, 7));
3946        assert_true (ai_move (ai, 4, 6));
3947        assert_true (ai_move (ai, 4, 7));
3948        assert_true (ai_move (ai, 3, 7));
3949        assert_true (ai_move (ai, 1, 1));
3950        assert_true (ai_move (ai, 1, 0));
3951        assert_true (ai_move (ai, 6, 6));
3952        assert_true (ai_move (ai, 7, 3));
3953        assert_true (ai_move (ai, 7, 6));
3954        assert_true (ai_move (ai, 7, 0));
3955        assert_true (ai_move (ai, 7, 1));
3956        assert_true (ai_move (ai, 7, 7));
3957        assert_true (ai_move (ai, 6, 7));
3958        assert_true (ai_move (ai, 0, 0));
3959        assert_true (ai_move (ai, 0, 1));
3960        assert_true (ai_move (ai, 0, 3));
3961        assert_true (ai_move (ai, 0, 5));
3962        assert_true (ai_move (ai, 1, 5));
3963        assert_true (ai_move (ai, 0, 6));
3964        assert_true (ai_move (ai, 0, 7));
3965        assert_true (ai_move (ai, 1, 6));
3966        assert_true (ai_move (ai, 1, 7));
3967    }
3968
3969    private static inline void test_complete_reversi_game_34 ()
3970    {
3971                                  /* 0 1 2 3 4 5 6 7 */
3972        string [] board = {/* 0 */ " . . . . . . . .",
3973                           /* 1 */ " . . . . . . . .",
3974                           /* 2 */ " . . . D . . . .",
3975                           /* 3 */ " . . L L L L . .",
3976                           /* 4 */ " . . . D D D . .",
3977                           /* 5 */ " . . . . . . . .",
3978                           /* 6 */ " . . . . . . . .",
3979                           /* 7 */ " . . . . . . . ."};
3980
3981        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
3982        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
3983
3984        assert_true (ai_move (ai, 6, 2));
3985        assert_true (ai_move (ai, 2, 1));
3986        assert_true (ai_move (ai, 1, 2));
3987        assert_true (ai_move (ai, 1, 4));
3988        assert_true (ai_move (ai, 3, 0));
3989        assert_true (ai_move (ai, 6, 3));
3990        assert_true (ai_move (ai, 7, 2));
3991        assert_true (ai_move (ai, 6, 5));
3992        assert_true (ai_move (ai, 4, 5));
3993        assert_true (ai_move (ai, 5, 5));
3994        assert_true (ai_move (ai, 7, 5));
3995        assert_true (ai_move (ai, 3, 6));
3996        assert_true (ai_move (ai, 5, 6));
3997        assert_true (ai_move (ai, 4, 6));
3998        assert_true (ai_move (ai, 3, 7));
3999        assert_true (ai_move (ai, 5, 7));
4000        assert_true (ai_move (ai, 6, 4));
4001        assert_true (ai_move (ai, 4, 7));
4002        assert_true (ai_move (ai, 6, 7));
4003        assert_true (ai_move (ai, 2, 5));
4004        assert_true (ai_move (ai, 2, 7));
4005        assert_true (ai_move (ai, 3, 5));
4006        assert_true (ai_move (ai, 5, 2));
4007        assert_true (ai_move (ai, 2, 6));
4008        assert_true (ai_move (ai, 4, 2));
4009        assert_true (ai_move (ai, 5, 1));
4010        assert_true (ai_move (ai, 4, 1));
4011        assert_true (ai_move (ai, 5, 0));
4012        assert_true (ai_move (ai, 2, 4));
4013        assert_true (ai_move (ai, 1, 5));
4014        assert_true (ai_move (ai, 0, 5));
4015        assert_true (ai_move (ai, 1, 0));
4016        assert_true (ai_move (ai, 0, 3));
4017        assert_true (ai_move (ai, 0, 4));
4018        assert_true (ai_move (ai, 2, 2));
4019        assert_true (ai_move (ai, 0, 2));
4020        assert_true (ai_move (ai, 0, 1));
4021        assert_true (ai_move (ai, 3, 1));
4022        assert_true (ai_move (ai, 1, 3));
4023        assert_true (ai_move (ai, 7, 4));
4024        assert_true (ai_move (ai, 7, 3));
4025        assert_true (ai_move (ai, 1, 1));
4026        assert_true (ai_move (ai, 0, 0));
4027        assert_true (ai_move (ai, 0, 6));
4028        assert_true (ai_move (ai, 2, 0));
4029        assert_true (ai_move (ai, 1, 6));
4030        assert_true (ai_move (ai, 4, 0));
4031        assert_true (ai_move (ai, 6, 6));
4032        assert_true (ai_move (ai, 6, 0));
4033        assert_true (ai_move (ai, 7, 6));
4034        assert_true (ai_move (ai, 7, 7));
4035        assert_true (ai_move (ai, 6, 1));
4036        assert_true (ai_move (ai, 7, 0));
4037        assert_true (game.pass ());
4038        assert_true (ai_move (ai, 7, 1));
4039        assert_true (game.pass ());
4040        assert_true (ai_move (ai, 0, 7));
4041        assert_true (ai_move (ai, 1, 7));
4042    }
4043
4044    private static inline void test_complete_reversi_game_35 ()
4045    {
4046                                  /* 0 1 2 3 4 5 6 7 */
4047        string [] board = {/* 0 */ " . . . . . . . .",
4048                           /* 1 */ " . . . . . . . .",
4049                           /* 2 */ " . . D . . . . .",
4050                           /* 3 */ " . . . D L L . .",
4051                           /* 4 */ " . . . D D L . .",
4052                           /* 5 */ " . . . . . . L .",
4053                           /* 6 */ " . . . . . . . .",
4054                           /* 7 */ " . . . . . . . ."};
4055
4056        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4057        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4058
4059        assert_true (ai_move (ai, 4, 2));
4060        assert_true (ai_move (ai, 3, 1));
4061        assert_true (ai_move (ai, 5, 1));
4062        assert_true (ai_move (ai, 1, 3));
4063        assert_true (ai_move (ai, 6, 4));
4064        assert_true (ai_move (ai, 6, 3));
4065        assert_true (ai_move (ai, 7, 2));
4066        assert_true (ai_move (ai, 6, 2));
4067        assert_true (ai_move (ai, 5, 2));
4068        assert_true (ai_move (ai, 4, 1));
4069        assert_true (ai_move (ai, 7, 3));
4070        assert_true (ai_move (ai, 7, 4));
4071        assert_true (ai_move (ai, 7, 5));
4072        assert_true (ai_move (ai, 5, 0));
4073        assert_true (ai_move (ai, 3, 0));
4074        assert_true (ai_move (ai, 2, 4));
4075        assert_true (ai_move (ai, 5, 5));
4076        assert_true (ai_move (ai, 5, 6));
4077        assert_true (ai_move (ai, 4, 5));
4078        assert_true (ai_move (ai, 4, 0));
4079        assert_true (ai_move (ai, 6, 0));
4080        assert_true (ai_move (ai, 2, 3));
4081        assert_true (ai_move (ai, 3, 5));
4082        assert_true (ai_move (ai, 3, 6));
4083        assert_true (ai_move (ai, 2, 6));
4084        assert_true (ai_move (ai, 6, 6));
4085        assert_true (ai_move (ai, 4, 6));
4086        assert_true (ai_move (ai, 4, 7));
4087        assert_true (ai_move (ai, 2, 0));
4088        assert_true (ai_move (ai, 3, 2));
4089        assert_true (ai_move (ai, 1, 2));
4090        assert_true (ai_move (ai, 2, 5));
4091        assert_true (ai_move (ai, 1, 5));
4092        assert_true (ai_move (ai, 1, 4));
4093        assert_true (ai_move (ai, 0, 2));
4094        assert_true (ai_move (ai, 2, 7));
4095        assert_true (ai_move (ai, 1, 6));
4096        assert_true (ai_move (ai, 0, 4));
4097        assert_true (ai_move (ai, 0, 3));
4098        assert_true (ai_move (ai, 0, 1));
4099        assert_true (ai_move (ai, 6, 1));
4100        assert_true (ai_move (ai, 2, 1));
4101        assert_true (ai_move (ai, 1, 0));
4102        assert_true (ai_move (ai, 0, 5));
4103        assert_true (ai_move (ai, 0, 7));
4104        assert_true (ai_move (ai, 1, 7));
4105        assert_true (ai_move (ai, 0, 6));
4106        assert_true (ai_move (ai, 7, 0));
4107        assert_true (ai_move (ai, 0, 0));
4108        assert_true (ai_move (ai, 7, 1));
4109        assert_true (ai_move (ai, 1, 1));
4110        assert_true (ai_move (ai, 7, 6));
4111        assert_true (ai_move (ai, 3, 7));
4112        assert_true (game.pass ());
4113        assert_true (ai_move (ai, 5, 7));
4114        assert_true (ai_move (ai, 6, 7));
4115        assert_true (ai_move (ai, 7, 7));
4116    }
4117
4118    private static inline void test_complete_reversi_game_36 ()
4119    {
4120                                  /* 0 1 2 3 4 5 6 7 */
4121        string [] board = {/* 0 */ " . . . . . . . .",
4122                           /* 1 */ " . . . . . . . .",
4123                           /* 2 */ " . . D . . . . .",
4124                           /* 3 */ " . . . D L L . .",
4125                           /* 4 */ " . . . D D L . .",
4126                           /* 5 */ " . . . . . L . .",
4127                           /* 6 */ " . . . . . . . .",
4128                           /* 7 */ " . . . . . . . ."};
4129
4130        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4131        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4132
4133        assert_true (ai_move (ai, 6, 4));
4134        assert_true (ai_move (ai, 6, 5));
4135        assert_true (ai_move (ai, 4, 6));
4136        assert_true (ai_move (ai, 5, 6));
4137        assert_true (ai_move (ai, 6, 2));
4138        assert_true (ai_move (ai, 5, 2));
4139        assert_true (ai_move (ai, 6, 3));
4140        assert_true (ai_move (ai, 7, 2));
4141        assert_true (ai_move (ai, 5, 1));
4142        assert_true (ai_move (ai, 4, 1));
4143        assert_true (ai_move (ai, 7, 3));
4144        assert_true (ai_move (ai, 5, 0));
4145        assert_true (ai_move (ai, 4, 2));
4146        assert_true (ai_move (ai, 7, 4));
4147        assert_true (ai_move (ai, 5, 7));
4148        assert_true (ai_move (ai, 3, 7));
4149        assert_true (ai_move (ai, 6, 1));
4150        assert_true (ai_move (ai, 3, 2));
4151        assert_true (ai_move (ai, 7, 1));
4152        assert_true (ai_move (ai, 7, 0));
4153        assert_true (ai_move (ai, 3, 1));
4154        assert_true (ai_move (ai, 2, 0));
4155        assert_true (ai_move (ai, 3, 5));
4156        assert_true (ai_move (ai, 1, 3));
4157        assert_true (ai_move (ai, 1, 2));
4158        assert_true (ai_move (ai, 2, 1));
4159        assert_true (ai_move (ai, 0, 4));
4160        assert_true (ai_move (ai, 2, 3));
4161        assert_true (ai_move (ai, 6, 0));
4162        assert_true (ai_move (ai, 0, 2));
4163        assert_true (ai_move (ai, 2, 4));
4164        assert_true (ai_move (ai, 4, 7));
4165        assert_true (ai_move (ai, 2, 7));
4166        assert_true (ai_move (ai, 0, 3));
4167        assert_true (ai_move (ai, 7, 5));
4168        assert_true (ai_move (ai, 7, 6));
4169        assert_true (ai_move (ai, 3, 0));
4170        assert_true (ai_move (ai, 4, 0));
4171        assert_true (ai_move (ai, 1, 4));
4172        assert_true (ai_move (ai, 0, 5));
4173        assert_true (ai_move (ai, 1, 1));
4174        assert_true (ai_move (ai, 2, 6));
4175        assert_true (ai_move (ai, 3, 6));
4176        assert_true (ai_move (ai, 0, 0));
4177        assert_true (ai_move (ai, 1, 0));
4178        assert_true (ai_move (ai, 2, 5));
4179        assert_true (ai_move (ai, 4, 5));
4180        assert_true (game.pass ());
4181        assert_true (ai_move (ai, 1, 7));
4182        assert_true (ai_move (ai, 1, 6));
4183        assert_true (ai_move (ai, 6, 7));
4184        assert_true (ai_move (ai, 6, 6));
4185        assert_true (ai_move (ai, 7, 7));
4186        assert_true (game.pass ());
4187        assert_true (ai_move (ai, 0, 1));
4188        assert_true (game.pass ());
4189        assert_true (ai_move (ai, 0, 7));
4190        assert_true (ai_move (ai, 1, 5));
4191        assert_true (ai_move (ai, 0, 6));
4192    }
4193
4194    private static inline void test_complete_reversi_game_37 ()
4195    {
4196                                  /* 0 1 2 3 4 5 6 7 */
4197        string [] board = {/* 0 */ " . . . . . . . .",
4198                           /* 1 */ " . . . . . . . .",
4199                           /* 2 */ " . . D . . . . .",
4200                           /* 3 */ " . . . D L L . .",
4201                           /* 4 */ " . . . D L D . .",
4202                           /* 5 */ " . . . . L . . .",
4203                           /* 6 */ " . . . . . . . .",
4204                           /* 7 */ " . . . . . . . ."};
4205
4206        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4207        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4208
4209        assert_true (ai_move (ai, 5, 6));
4210        assert_true (ai_move (ai, 6, 4));
4211        assert_true (ai_move (ai, 5, 5));
4212        assert_true (ai_move (ai, 4, 6));
4213        assert_true (ai_move (ai, 3, 6));
4214        assert_true (ai_move (ai, 3, 7));
4215        assert_true (ai_move (ai, 5, 2));
4216        assert_true (ai_move (ai, 6, 5));
4217        assert_true (ai_move (ai, 6, 6));
4218        assert_true (ai_move (ai, 4, 2));
4219        assert_true (ai_move (ai, 3, 5));
4220        assert_true (ai_move (ai, 6, 2));
4221        assert_true (ai_move (ai, 5, 1));
4222        assert_true (ai_move (ai, 4, 7));
4223        assert_true (ai_move (ai, 6, 7));
4224        assert_true (ai_move (ai, 4, 1));
4225        assert_true (ai_move (ai, 7, 2));
4226        assert_true (ai_move (ai, 6, 3));
4227        assert_true (ai_move (ai, 5, 7));
4228        assert_true (ai_move (ai, 2, 7));
4229        assert_true (ai_move (ai, 1, 7));
4230        assert_true (ai_move (ai, 7, 7));
4231        assert_true (ai_move (ai, 7, 5));
4232        assert_true (ai_move (ai, 0, 7));
4233        assert_true (ai_move (ai, 3, 2));
4234        assert_true (ai_move (ai, 7, 6));
4235        assert_true (ai_move (ai, 3, 1));
4236        assert_true (ai_move (ai, 2, 6));
4237        assert_true (ai_move (ai, 2, 5));
4238        assert_true (ai_move (ai, 2, 0));
4239        assert_true (ai_move (ai, 4, 0));
4240        assert_true (ai_move (ai, 1, 4));
4241        assert_true (ai_move (ai, 1, 5));
4242        assert_true (ai_move (ai, 1, 6));
4243        assert_true (ai_move (ai, 0, 5));
4244        assert_true (ai_move (ai, 2, 1));
4245        assert_true (ai_move (ai, 2, 3));
4246        assert_true (ai_move (ai, 7, 4));
4247        assert_true (ai_move (ai, 7, 3));
4248        assert_true (ai_move (ai, 7, 1));
4249        assert_true (ai_move (ai, 6, 1));
4250        assert_true (ai_move (ai, 0, 3));
4251        assert_true (ai_move (ai, 1, 3));
4252        assert_true (ai_move (ai, 2, 4));
4253        assert_true (ai_move (ai, 1, 2));
4254        assert_true (ai_move (ai, 3, 0));
4255        assert_true (ai_move (ai, 5, 0));
4256        assert_true (ai_move (ai, 0, 6));
4257        assert_true (ai_move (ai, 1, 0));
4258        assert_true (ai_move (ai, 0, 4));
4259        assert_true (ai_move (ai, 1, 1));
4260        assert_true (ai_move (ai, 0, 2));
4261        assert_true (ai_move (ai, 0, 1));
4262        assert_true (ai_move (ai, 7, 0));
4263        assert_true (ai_move (ai, 6, 0));
4264        assert_true (ai_move (ai, 0, 0));
4265    }
4266
4267    private static inline void test_complete_reversi_game_38 ()
4268    {
4269                                  /* 0 1 2 3 4 5 6 7 */
4270        string [] board = {/* 0 */ " . . . . . . . .",
4271                           /* 1 */ " . . . . . . . .",
4272                           /* 2 */ " . . D . . . . .",
4273                           /* 3 */ " . . . D L L . .",
4274                           /* 4 */ " . . . D L D . .",
4275                           /* 5 */ " . . . L . . . .",
4276                           /* 6 */ " . . . . . . . .",
4277                           /* 7 */ " . . . . . . . ."};
4278
4279        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4280        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4281
4282        assert_true (ai_move (ai, 5, 5));
4283        assert_true (ai_move (ai, 5, 6));
4284        assert_true (ai_move (ai, 2, 6));
4285        assert_true (ai_move (ai, 4, 5));
4286        assert_true (ai_move (ai, 6, 5));
4287        assert_true (ai_move (ai, 3, 6));
4288        assert_true (ai_move (ai, 5, 7));
4289        assert_true (ai_move (ai, 7, 5));
4290        assert_true (ai_move (ai, 3, 7));
4291        assert_true (ai_move (ai, 4, 7));
4292        assert_true (ai_move (ai, 6, 4));
4293        assert_true (ai_move (ai, 6, 3));
4294        assert_true (ai_move (ai, 4, 6));
4295        assert_true (ai_move (ai, 2, 7));
4296        assert_true (ai_move (ai, 1, 7));
4297        assert_true (ai_move (ai, 2, 5));
4298        assert_true (ai_move (ai, 7, 2));
4299        assert_true (ai_move (ai, 7, 3));
4300        assert_true (ai_move (ai, 6, 7));
4301        assert_true (ai_move (ai, 3, 2));
4302        assert_true (ai_move (ai, 1, 4));
4303        assert_true (ai_move (ai, 1, 5));
4304        assert_true (ai_move (ai, 0, 5));
4305        assert_true (ai_move (ai, 1, 2));
4306        assert_true (ai_move (ai, 2, 4));
4307        assert_true (ai_move (ai, 0, 4));
4308        assert_true (ai_move (ai, 0, 3));
4309        assert_true (ai_move (ai, 7, 1));
4310        assert_true (ai_move (ai, 1, 3));
4311        assert_true (ai_move (ai, 1, 6));
4312        assert_true (ai_move (ai, 2, 3));
4313        assert_true (ai_move (ai, 6, 6));
4314        assert_true (ai_move (ai, 7, 4));
4315        assert_true (ai_move (ai, 0, 2));
4316        assert_true (ai_move (ai, 0, 1));
4317        assert_true (ai_move (ai, 7, 6));
4318        assert_true (ai_move (ai, 7, 0));
4319        assert_true (ai_move (ai, 1, 1));
4320        assert_true (ai_move (ai, 0, 7));
4321        assert_true (ai_move (ai, 0, 6));
4322        assert_true (ai_move (ai, 0, 0));
4323        assert_true (ai_move (ai, 2, 1));
4324        assert_true (ai_move (ai, 7, 7));
4325        assert_true (ai_move (ai, 4, 2));
4326        assert_true (ai_move (ai, 2, 0));
4327        assert_true (ai_move (ai, 3, 1));
4328        assert_true (ai_move (ai, 4, 0));
4329        assert_true (ai_move (ai, 1, 0));
4330        assert_true (ai_move (ai, 3, 0));
4331        assert_true (ai_move (ai, 4, 1));
4332        assert_true (ai_move (ai, 5, 0));
4333        assert_true (ai_move (ai, 6, 0));
4334        assert_true (ai_move (ai, 6, 2));
4335        assert_true (ai_move (ai, 6, 1));
4336        assert_true (ai_move (ai, 5, 1));
4337        assert_true (ai_move (ai, 5, 2));
4338    }
4339
4340    private static inline void test_complete_reversi_game_39 ()
4341    {
4342                                  /* 0 1 2 3 4 5 6 7 */
4343        string [] board = {/* 0 */ " . . . . . . . .",
4344                           /* 1 */ " . . . . . . . .",
4345                           /* 2 */ " . . D . . . . .",
4346                           /* 3 */ " . . . D L L . .",
4347                           /* 4 */ " . . . L D D . .",
4348                           /* 5 */ " . . L . . . . .",
4349                           /* 6 */ " . . . . . . . .",
4350                           /* 7 */ " . . . . . . . ."};
4351
4352        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4353        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4354
4355        assert_true (ai_move (ai, 5, 2));
4356        assert_true (ai_move (ai, 6, 3));
4357        assert_true (ai_move (ai, 6, 2));
4358        assert_true (ai_move (ai, 4, 1));
4359        assert_true (ai_move (ai, 5, 1));
4360        assert_true (ai_move (ai, 6, 5));
4361        assert_true (ai_move (ai, 5, 5));
4362        assert_true (ai_move (ai, 3, 2));
4363        assert_true (ai_move (ai, 7, 5));
4364        assert_true (ai_move (ai, 1, 2));
4365        assert_true (ai_move (ai, 7, 4));
4366        assert_true (ai_move (ai, 4, 5));
4367        assert_true (ai_move (ai, 3, 6));
4368        assert_true (ai_move (ai, 4, 6));
4369        assert_true (ai_move (ai, 1, 4));
4370        assert_true (ai_move (ai, 6, 4));
4371        assert_true (ai_move (ai, 5, 6));
4372        assert_true (ai_move (ai, 4, 2));
4373        assert_true (ai_move (ai, 3, 5));
4374        assert_true (ai_move (ai, 7, 3));
4375        assert_true (ai_move (ai, 7, 2));
4376        assert_true (ai_move (ai, 5, 7));
4377        assert_true (ai_move (ai, 2, 1));
4378        assert_true (ai_move (ai, 2, 3));
4379        assert_true (ai_move (ai, 4, 7));
4380        assert_true (ai_move (ai, 5, 0));
4381        assert_true (ai_move (ai, 0, 2));
4382        assert_true (ai_move (ai, 2, 0));
4383        assert_true (ai_move (ai, 1, 3));
4384        assert_true (ai_move (ai, 1, 5));
4385        assert_true (ai_move (ai, 0, 5));
4386        assert_true (ai_move (ai, 3, 1));
4387        assert_true (ai_move (ai, 2, 4));
4388        assert_true (ai_move (ai, 2, 6));
4389        assert_true (ai_move (ai, 3, 7));
4390        assert_true (ai_move (ai, 2, 7));
4391        assert_true (ai_move (ai, 4, 0));
4392        assert_true (ai_move (ai, 3, 0));
4393        assert_true (ai_move (ai, 1, 6));
4394        assert_true (ai_move (ai, 6, 7));
4395        assert_true (ai_move (ai, 1, 0));
4396        assert_true (ai_move (ai, 0, 0));
4397        assert_true (ai_move (ai, 6, 6));
4398        assert_true (ai_move (ai, 6, 0));
4399        assert_true (ai_move (ai, 6, 1));
4400        assert_true (ai_move (ai, 1, 1));
4401        assert_true (ai_move (ai, 0, 1));
4402        assert_true (ai_move (ai, 0, 3));
4403        assert_true (ai_move (ai, 0, 4));
4404        assert_true (ai_move (ai, 7, 7));
4405        assert_true (ai_move (ai, 7, 6));
4406        assert_true (ai_move (ai, 0, 7));
4407        assert_true (ai_move (ai, 0, 6));
4408        assert_true (ai_move (ai, 1, 7));
4409        assert_true (game.pass ());
4410        assert_true (ai_move (ai, 7, 1));
4411        assert_true (ai_move (ai, 7, 0));
4412    }
4413
4414    private static inline void test_complete_reversi_game_40 ()
4415    {
4416                                  /* 0 1 2 3 4 5 6 7 */
4417        string [] board = {/* 0 */ " . . . . . . . .",
4418                           /* 1 */ " . . . . . . . .",
4419                           /* 2 */ " . . D . . . . .",
4420                           /* 3 */ " . . L L L L . .",
4421                           /* 4 */ " . . . D D D . .",
4422                           /* 5 */ " . . . . . . . .",
4423                           /* 6 */ " . . . . . . . .",
4424                           /* 7 */ " . . . . . . . ."};
4425
4426        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4427        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4428
4429        assert_true (ai_move (ai, 2, 4));
4430        assert_true (ai_move (ai, 6, 5));
4431        assert_true (ai_move (ai, 6, 4));
4432        assert_true (ai_move (ai, 1, 3));
4433        assert_true (ai_move (ai, 1, 2));
4434        assert_true (ai_move (ai, 3, 1));
4435        assert_true (ai_move (ai, 2, 1));
4436        assert_true (ai_move (ai, 7, 5));
4437        assert_true (ai_move (ai, 0, 4));
4438        assert_true (ai_move (ai, 5, 5));
4439        assert_true (ai_move (ai, 3, 2));
4440        assert_true (ai_move (ai, 2, 5));
4441        assert_true (ai_move (ai, 2, 6));
4442        assert_true (ai_move (ai, 1, 4));
4443        assert_true (ai_move (ai, 1, 5));
4444        assert_true (ai_move (ai, 0, 1));
4445        assert_true (ai_move (ai, 0, 3));
4446        assert_true (ai_move (ai, 2, 0));
4447        assert_true (ai_move (ai, 4, 0));
4448        assert_true (ai_move (ai, 2, 7));
4449        assert_true (ai_move (ai, 3, 6));
4450        assert_true (ai_move (ai, 0, 5));
4451        assert_true (ai_move (ai, 0, 6));
4452        assert_true (ai_move (ai, 4, 7));
4453        assert_true (ai_move (ai, 3, 0));
4454        assert_true (ai_move (ai, 5, 0));
4455        assert_true (ai_move (ai, 3, 5));
4456        assert_true (ai_move (ai, 4, 5));
4457        assert_true (ai_move (ai, 5, 6));
4458        assert_true (ai_move (ai, 4, 1));
4459        assert_true (ai_move (ai, 4, 2));
4460        assert_true (ai_move (ai, 5, 7));
4461        assert_true (ai_move (ai, 6, 6));
4462        assert_true (ai_move (ai, 4, 6));
4463        assert_true (ai_move (ai, 5, 2));
4464        assert_true (ai_move (ai, 5, 1));
4465        assert_true (ai_move (ai, 6, 2));
4466        assert_true (ai_move (ai, 1, 0));
4467        assert_true (ai_move (ai, 6, 7));
4468        assert_true (ai_move (ai, 6, 3));
4469        assert_true (ai_move (ai, 7, 2));
4470        assert_true (ai_move (ai, 7, 4));
4471        assert_true (ai_move (ai, 3, 7));
4472        assert_true (ai_move (ai, 7, 7));
4473        assert_true (ai_move (ai, 6, 1));
4474        assert_true (ai_move (ai, 1, 7));
4475        assert_true (ai_move (ai, 7, 3));
4476        assert_true (ai_move (ai, 7, 1));
4477        assert_true (ai_move (ai, 7, 0));
4478        assert_true (ai_move (ai, 0, 2));
4479        assert_true (ai_move (ai, 0, 0));
4480        assert_true (ai_move (ai, 6, 0));
4481        assert_true (ai_move (ai, 7, 6));
4482        assert_true (ai_move (ai, 1, 6));
4483        assert_true (ai_move (ai, 0, 7));
4484        assert_true (game.pass ());
4485        assert_true (ai_move (ai, 1, 1));
4486    }
4487
4488    private static inline void test_complete_reversi_game_41 ()
4489    {
4490                                  /* 0 1 2 3 4 5 6 7 */
4491        string [] board = {/* 0 */ " . . . . . . . .",
4492                           /* 1 */ " . . . . . . . .",
4493                           /* 2 */ " . . . . . . . .",
4494                           /* 3 */ " . . . L D . . .",
4495                           /* 4 */ " . . . L L L L .",
4496                           /* 5 */ " . . . D . . . .",
4497                           /* 6 */ " . . D . . . . .",
4498                           /* 7 */ " . . . . . . . ."};
4499
4500        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4501        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4502
4503        assert_true (ai_move (ai, 6, 5));
4504        assert_true (ai_move (ai, 3, 6));
4505        assert_true (ai_move (ai, 7, 4));
4506        assert_true (ai_move (ai, 5, 2));
4507        assert_true (ai_move (ai, 3, 2));
4508        assert_true (ai_move (ai, 3, 1));
4509        assert_true (ai_move (ai, 2, 1));
4510        assert_true (ai_move (ai, 4, 2));
4511        assert_true (ai_move (ai, 6, 2));
4512        assert_true (ai_move (ai, 5, 3));
4513        assert_true (ai_move (ai, 2, 0));
4514        assert_true (ai_move (ai, 6, 3));
4515        assert_true (ai_move (ai, 7, 2));
4516        assert_true (ai_move (ai, 7, 3));
4517        assert_true (ai_move (ai, 4, 6));
4518        assert_true (ai_move (ai, 3, 7));
4519        assert_true (ai_move (ai, 4, 5));
4520        assert_true (ai_move (ai, 1, 5));
4521        assert_true (ai_move (ai, 2, 7));
4522        assert_true (ai_move (ai, 1, 7));
4523        assert_true (ai_move (ai, 2, 2));
4524        assert_true (ai_move (ai, 4, 1));
4525        assert_true (ai_move (ai, 5, 1));
4526        assert_true (ai_move (ai, 2, 3));
4527        assert_true (ai_move (ai, 1, 4));
4528        assert_true (ai_move (ai, 1, 2));
4529        assert_true (ai_move (ai, 0, 3));
4530        assert_true (ai_move (ai, 0, 5));
4531        assert_true (ai_move (ai, 2, 4));
4532        assert_true (ai_move (ai, 2, 5));
4533        assert_true (ai_move (ai, 0, 4));
4534        assert_true (ai_move (ai, 0, 2));
4535        assert_true (ai_move (ai, 1, 6));
4536        assert_true (ai_move (ai, 4, 7));
4537        assert_true (ai_move (ai, 1, 3));
4538        assert_true (ai_move (ai, 5, 7));
4539        assert_true (ai_move (ai, 5, 6));
4540        assert_true (ai_move (ai, 5, 0));
4541        assert_true (ai_move (ai, 3, 0));
4542        assert_true (ai_move (ai, 0, 6));
4543        assert_true (ai_move (ai, 4, 0));
4544        assert_true (ai_move (ai, 1, 0));
4545        assert_true (ai_move (ai, 1, 1));
4546        assert_true (ai_move (ai, 6, 0));
4547        assert_true (ai_move (ai, 6, 1));
4548        assert_true (ai_move (ai, 6, 7));
4549        assert_true (ai_move (ai, 6, 6));
4550        assert_true (ai_move (ai, 0, 1));
4551        assert_true (game.pass ());
4552        assert_true (ai_move (ai, 0, 7));
4553        assert_true (game.pass ());
4554        assert_true (ai_move (ai, 0, 0));
4555        assert_true (game.pass ());
4556        assert_true (ai_move (ai, 7, 0));
4557        assert_true (ai_move (ai, 7, 1));
4558        assert_true (ai_move (ai, 7, 5));
4559        assert_true (ai_move (ai, 7, 6));
4560        assert_true (ai_move (ai, 7, 7));
4561        assert_true (game.pass ());
4562        assert_true (ai_move (ai, 5, 5));
4563    }
4564
4565    private static inline void test_complete_reversi_game_42 ()
4566    {
4567                                  /* 0 1 2 3 4 5 6 7 */
4568        string [] board = {/* 0 */ " . . . . . . . .",
4569                           /* 1 */ " . . . . . . . .",
4570                           /* 2 */ " . . . . . . . .",
4571                           /* 3 */ " . . . L D . . .",
4572                           /* 4 */ " . . . L L D . .",
4573                           /* 5 */ " . . . D . L . .",
4574                           /* 6 */ " . . D . . . . .",
4575                           /* 7 */ " . . . . . . . ."};
4576
4577        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4578        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4579
4580        assert_true (ai_move (ai, 5, 6));
4581        assert_true (ai_move (ai, 3, 6));
4582        assert_true (ai_move (ai, 5, 3));
4583        assert_true (ai_move (ai, 5, 2));
4584        assert_true (ai_move (ai, 5, 1));
4585        assert_true (ai_move (ai, 6, 5));
4586        assert_true (ai_move (ai, 6, 4));
4587        assert_true (ai_move (ai, 4, 7));
4588        assert_true (ai_move (ai, 7, 5));
4589        assert_true (ai_move (ai, 6, 3));
4590        assert_true (ai_move (ai, 7, 4));
4591        assert_true (ai_move (ai, 5, 0));
4592        assert_true (ai_move (ai, 4, 1));
4593        assert_true (ai_move (ai, 3, 2));
4594        assert_true (ai_move (ai, 6, 2));
4595        assert_true (ai_move (ai, 4, 5));
4596        assert_true (ai_move (ai, 2, 7));
4597        assert_true (ai_move (ai, 4, 6));
4598        assert_true (ai_move (ai, 3, 7));
4599        assert_true (ai_move (ai, 2, 5));
4600        assert_true (ai_move (ai, 5, 7));
4601        assert_true (ai_move (ai, 7, 2));
4602        assert_true (ai_move (ai, 1, 5));
4603        assert_true (ai_move (ai, 4, 2));
4604        assert_true (ai_move (ai, 2, 1));
4605        assert_true (ai_move (ai, 1, 4));
4606        assert_true (ai_move (ai, 3, 1));
4607        assert_true (ai_move (ai, 2, 2));
4608        assert_true (ai_move (ai, 4, 0));
4609        assert_true (ai_move (ai, 2, 0));
4610        assert_true (ai_move (ai, 1, 2));
4611        assert_true (ai_move (ai, 0, 2));
4612        assert_true (ai_move (ai, 6, 0));
4613        assert_true (ai_move (ai, 0, 5));
4614        assert_true (ai_move (ai, 1, 3));
4615        assert_true (ai_move (ai, 2, 3));
4616        assert_true (ai_move (ai, 0, 3));
4617        assert_true (ai_move (ai, 0, 4));
4618        assert_true (ai_move (ai, 2, 4));
4619        assert_true (ai_move (ai, 1, 6));
4620        assert_true (ai_move (ai, 0, 1));
4621        assert_true (ai_move (ai, 0, 0));
4622        assert_true (ai_move (ai, 0, 7));
4623        assert_true (ai_move (ai, 1, 1));
4624        assert_true (ai_move (ai, 0, 6));
4625        assert_true (ai_move (ai, 1, 7));
4626        assert_true (ai_move (ai, 7, 3));
4627        assert_true (ai_move (ai, 7, 6));
4628        assert_true (ai_move (ai, 6, 1));
4629        assert_true (ai_move (ai, 7, 0));
4630        assert_true (ai_move (ai, 7, 1));
4631        assert_true (ai_move (ai, 3, 0));
4632        assert_true (ai_move (ai, 7, 7));
4633        assert_true (ai_move (ai, 6, 7));
4634        assert_true (ai_move (ai, 6, 6));
4635        assert_true (game.pass ());
4636        assert_true (ai_move (ai, 1, 0));
4637    }
4638
4639    private static inline void test_complete_reversi_game_43 ()
4640    {
4641                                  /* 0 1 2 3 4 5 6 7 */
4642        string [] board = {/* 0 */ " . . . . . . . .",
4643                           /* 1 */ " . . . . . . . .",
4644                           /* 2 */ " . . . . . . . .",
4645                           /* 3 */ " . . . L L L . .",
4646                           /* 4 */ " . . . L D D . .",
4647                           /* 5 */ " . . . D . . . .",
4648                           /* 6 */ " . . D . . . . .",
4649                           /* 7 */ " . . . . . . . ."};
4650
4651        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4652        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4653
4654        assert_true (ai_move (ai, 5, 2));
4655        assert_true (ai_move (ai, 3, 6));
4656        assert_true (ai_move (ai, 3, 2));
4657        assert_true (ai_move (ai, 3, 1));
4658        assert_true (ai_move (ai, 2, 1));
4659        assert_true (ai_move (ai, 5, 5));
4660        assert_true (ai_move (ai, 5, 6));
4661        assert_true (ai_move (ai, 6, 2));
4662        assert_true (ai_move (ai, 6, 3));
4663        assert_true (ai_move (ai, 4, 2));
4664        assert_true (ai_move (ai, 7, 2));
4665        assert_true (ai_move (ai, 4, 1));
4666        assert_true (ai_move (ai, 2, 0));
4667        assert_true (ai_move (ai, 5, 1));
4668        assert_true (ai_move (ai, 4, 0));
4669        assert_true (ai_move (ai, 3, 0));
4670        assert_true (ai_move (ai, 4, 5));
4671        assert_true (ai_move (ai, 6, 4));
4672        assert_true (ai_move (ai, 6, 5));
4673        assert_true (ai_move (ai, 4, 6));
4674        assert_true (ai_move (ai, 4, 7));
4675        assert_true (ai_move (ai, 1, 2));
4676        assert_true (ai_move (ai, 2, 7));
4677        assert_true (ai_move (ai, 3, 7));
4678        assert_true (ai_move (ai, 2, 2));
4679        assert_true (ai_move (ai, 1, 5));
4680        assert_true (ai_move (ai, 0, 2));
4681        assert_true (ai_move (ai, 7, 5));
4682        assert_true (ai_move (ai, 2, 3));
4683        assert_true (ai_move (ai, 7, 3));
4684        assert_true (ai_move (ai, 2, 5));
4685        assert_true (ai_move (ai, 0, 3));
4686        assert_true (ai_move (ai, 0, 5));
4687        assert_true (ai_move (ai, 0, 4));
4688        assert_true (ai_move (ai, 1, 6));
4689        assert_true (ai_move (ai, 2, 4));
4690        assert_true (ai_move (ai, 1, 3));
4691        assert_true (ai_move (ai, 1, 4));
4692        assert_true (ai_move (ai, 0, 6));
4693        assert_true (ai_move (ai, 5, 0));
4694        assert_true (ai_move (ai, 6, 0));
4695        assert_true (ai_move (ai, 5, 7));
4696        assert_true (ai_move (ai, 6, 7));
4697        assert_true (ai_move (ai, 1, 1));
4698        assert_true (ai_move (ai, 6, 1));
4699        assert_true (ai_move (ai, 6, 6));
4700        assert_true (ai_move (ai, 7, 4));
4701        assert_true (ai_move (ai, 0, 7));
4702        assert_true (ai_move (ai, 7, 6));
4703        assert_true (ai_move (ai, 7, 7));
4704        assert_true (ai_move (ai, 1, 7));
4705        assert_true (ai_move (ai, 0, 1));
4706        assert_true (ai_move (ai, 1, 0));
4707        assert_true (ai_move (ai, 0, 0));
4708        assert_true (game.pass ());
4709        assert_true (ai_move (ai, 7, 0));
4710        assert_true (ai_move (ai, 7, 1));
4711    }
4712
4713    private static inline void test_complete_reversi_game_44 ()
4714    {
4715                                  /* 0 1 2 3 4 5 6 7 */
4716        string [] board = {/* 0 */ " . . . . . . . .",
4717                           /* 1 */ " . . . . . . . .",
4718                           /* 2 */ " . . . . . L . .",
4719                           /* 3 */ " . . . L L . . .",
4720                           /* 4 */ " . . . L D D . .",
4721                           /* 5 */ " . . . D . . . .",
4722                           /* 6 */ " . . D . . . . .",
4723                           /* 7 */ " . . . . . . . ."};
4724
4725        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4726        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4727
4728        assert_true (ai_move (ai, 2, 2));
4729        assert_true (ai_move (ai, 3, 6));
4730        assert_true (ai_move (ai, 3, 2));
4731        assert_true (ai_move (ai, 5, 3));
4732        assert_true (ai_move (ai, 5, 1));
4733        assert_true (ai_move (ai, 6, 4));
4734        assert_true (ai_move (ai, 6, 5));
4735        assert_true (ai_move (ai, 6, 2));
4736        assert_true (ai_move (ai, 6, 3));
4737        assert_true (ai_move (ai, 4, 0));
4738        assert_true (ai_move (ai, 5, 0));
4739        assert_true (ai_move (ai, 6, 0));
4740        assert_true (ai_move (ai, 5, 5));
4741        assert_true (ai_move (ai, 4, 2));
4742        assert_true (ai_move (ai, 3, 1));
4743        assert_true (ai_move (ai, 5, 6));
4744        assert_true (ai_move (ai, 7, 2));
4745        assert_true (ai_move (ai, 2, 1));
4746        assert_true (ai_move (ai, 4, 5));
4747        assert_true (ai_move (ai, 1, 2));
4748        assert_true (ai_move (ai, 1, 3));
4749        assert_true (ai_move (ai, 3, 0));
4750        assert_true (ai_move (ai, 2, 5));
4751        assert_true (ai_move (ai, 7, 4));
4752        assert_true (ai_move (ai, 7, 5));
4753        assert_true (ai_move (ai, 7, 3));
4754        assert_true (ai_move (ai, 0, 2));
4755        assert_true (ai_move (ai, 4, 1));
4756        assert_true (ai_move (ai, 5, 7));
4757        assert_true (ai_move (ai, 4, 6));
4758        assert_true (ai_move (ai, 6, 6));
4759        assert_true (ai_move (ai, 1, 7));
4760        assert_true (ai_move (ai, 2, 0));
4761        assert_true (ai_move (ai, 1, 0));
4762        assert_true (ai_move (ai, 4, 7));
4763        assert_true (ai_move (ai, 2, 3));
4764        assert_true (ai_move (ai, 2, 4));
4765        assert_true (ai_move (ai, 1, 4));
4766        assert_true (ai_move (ai, 2, 7));
4767        assert_true (ai_move (ai, 1, 6));
4768        assert_true (ai_move (ai, 1, 5));
4769        assert_true (ai_move (ai, 0, 5));
4770        assert_true (ai_move (ai, 0, 3));
4771        assert_true (ai_move (ai, 0, 4));
4772        assert_true (ai_move (ai, 1, 1));
4773        assert_true (ai_move (ai, 3, 7));
4774        assert_true (ai_move (ai, 0, 7));
4775        assert_true (ai_move (ai, 0, 6));
4776        assert_true (ai_move (ai, 6, 1));
4777        assert_true (ai_move (ai, 7, 0));
4778        assert_true (ai_move (ai, 7, 1));
4779        assert_true (ai_move (ai, 0, 0));
4780        assert_true (ai_move (ai, 0, 1));
4781        assert_true (ai_move (ai, 7, 7));
4782        assert_true (ai_move (ai, 6, 7));
4783        assert_true (ai_move (ai, 7, 6));
4784    }
4785
4786    private static inline void test_complete_reversi_game_45 ()
4787    {
4788                                  /* 0 1 2 3 4 5 6 7 */
4789        string [] board = {/* 0 */ " . . . . . . . .",
4790                           /* 1 */ " . . . . . . . .",
4791                           /* 2 */ " . . . . . . . .",
4792                           /* 3 */ " . . . L D . . .",
4793                           /* 4 */ " . . . L D D . .",
4794                           /* 5 */ " . . . L . . . .",
4795                           /* 6 */ " . . D L . . . .",
4796                           /* 7 */ " . . . . . . . ."};
4797
4798        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4799        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4800
4801        assert_true (ai_move (ai, 2, 2));
4802        assert_true (ai_move (ai, 5, 2));
4803        assert_true (ai_move (ai, 3, 2));
4804        assert_true (ai_move (ai, 5, 3));
4805        assert_true (ai_move (ai, 5, 1));
4806        assert_true (ai_move (ai, 6, 4));
4807        assert_true (ai_move (ai, 6, 5));
4808        assert_true (ai_move (ai, 6, 2));
4809        assert_true (ai_move (ai, 6, 3));
4810        assert_true (ai_move (ai, 4, 0));
4811        assert_true (ai_move (ai, 5, 0));
4812        assert_true (ai_move (ai, 6, 0));
4813        assert_true (ai_move (ai, 5, 5));
4814        assert_true (ai_move (ai, 4, 2));
4815        assert_true (ai_move (ai, 3, 1));
4816        assert_true (ai_move (ai, 5, 6));
4817        assert_true (ai_move (ai, 7, 2));
4818        assert_true (ai_move (ai, 2, 1));
4819        assert_true (ai_move (ai, 4, 5));
4820        assert_true (ai_move (ai, 1, 2));
4821        assert_true (ai_move (ai, 1, 3));
4822        assert_true (ai_move (ai, 3, 0));
4823        assert_true (ai_move (ai, 2, 5));
4824        assert_true (ai_move (ai, 7, 4));
4825        assert_true (ai_move (ai, 7, 5));
4826        assert_true (ai_move (ai, 7, 3));
4827        assert_true (ai_move (ai, 0, 2));
4828        assert_true (ai_move (ai, 4, 1));
4829        assert_true (ai_move (ai, 5, 7));
4830        assert_true (ai_move (ai, 4, 6));
4831        assert_true (ai_move (ai, 6, 6));
4832        assert_true (ai_move (ai, 1, 7));
4833        assert_true (ai_move (ai, 2, 0));
4834        assert_true (ai_move (ai, 1, 0));
4835        assert_true (ai_move (ai, 4, 7));
4836        assert_true (ai_move (ai, 2, 3));
4837        assert_true (ai_move (ai, 2, 4));
4838        assert_true (ai_move (ai, 1, 4));
4839        assert_true (ai_move (ai, 2, 7));
4840        assert_true (ai_move (ai, 1, 6));
4841        assert_true (ai_move (ai, 1, 5));
4842        assert_true (ai_move (ai, 0, 5));
4843        assert_true (ai_move (ai, 0, 3));
4844        assert_true (ai_move (ai, 0, 4));
4845        assert_true (ai_move (ai, 1, 1));
4846        assert_true (ai_move (ai, 3, 7));
4847        assert_true (ai_move (ai, 0, 7));
4848        assert_true (ai_move (ai, 0, 6));
4849        assert_true (ai_move (ai, 6, 1));
4850        assert_true (ai_move (ai, 7, 0));
4851        assert_true (ai_move (ai, 7, 1));
4852        assert_true (ai_move (ai, 0, 0));
4853        assert_true (ai_move (ai, 0, 1));
4854        assert_true (ai_move (ai, 7, 7));
4855        assert_true (ai_move (ai, 6, 7));
4856        assert_true (ai_move (ai, 7, 6));
4857    }
4858
4859    private static inline void test_complete_reversi_game_46 ()
4860    {
4861                                  /* 0 1 2 3 4 5 6 7 */
4862        string [] board = {/* 0 */ " . . . . . . . .",
4863                           /* 1 */ " . . . . . . . .",
4864                           /* 2 */ " . . . . . . . .",
4865                           /* 3 */ " . . . L D . . .",
4866                           /* 4 */ " . . . D L D . .",
4867                           /* 5 */ " . . D L . L . .",
4868                           /* 6 */ " . . . . . . . .",
4869                           /* 7 */ " . . . . . . . ."};
4870
4871        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4872        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4873
4874        assert_true (ai_move (ai, 5, 6));
4875        assert_true (ai_move (ai, 1, 5));
4876        assert_true (ai_move (ai, 3, 2));
4877        assert_true (ai_move (ai, 2, 4));
4878        assert_true (ai_move (ai, 4, 5));
4879        assert_true (ai_move (ai, 6, 5));
4880        assert_true (ai_move (ai, 4, 6));
4881        assert_true (ai_move (ai, 3, 7));
4882        assert_true (ai_move (ai, 7, 5));
4883        assert_true (ai_move (ai, 6, 4));
4884        assert_true (ai_move (ai, 5, 3));
4885        assert_true (ai_move (ai, 7, 3));
4886        assert_true (ai_move (ai, 4, 7));
4887        assert_true (ai_move (ai, 6, 2));
4888        assert_true (ai_move (ai, 2, 7));
4889        assert_true (ai_move (ai, 5, 2));
4890        assert_true (ai_move (ai, 5, 1));
4891        assert_true (ai_move (ai, 5, 0));
4892        assert_true (ai_move (ai, 1, 3));
4893        assert_true (ai_move (ai, 1, 4));
4894        assert_true (ai_move (ai, 0, 5));
4895        assert_true (ai_move (ai, 3, 6));
4896        assert_true (ai_move (ai, 2, 6));
4897        assert_true (ai_move (ai, 2, 1));
4898        assert_true (ai_move (ai, 2, 3));
4899        assert_true (ai_move (ai, 0, 2));
4900        assert_true (ai_move (ai, 3, 1));
4901        assert_true (ai_move (ai, 0, 4));
4902        assert_true (ai_move (ai, 7, 4));
4903        assert_true (ai_move (ai, 4, 2));
4904        assert_true (ai_move (ai, 6, 3));
4905        assert_true (ai_move (ai, 7, 6));
4906        assert_true (ai_move (ai, 4, 1));
4907        assert_true (ai_move (ai, 7, 2));
4908        assert_true (ai_move (ai, 0, 3));
4909        assert_true (ai_move (ai, 0, 6));
4910        assert_true (ai_move (ai, 1, 6));
4911        assert_true (ai_move (ai, 2, 0));
4912        assert_true (ai_move (ai, 3, 0));
4913        assert_true (ai_move (ai, 4, 0));
4914        assert_true (ai_move (ai, 6, 1));
4915        assert_true (ai_move (ai, 5, 7));
4916        assert_true (ai_move (ai, 6, 7));
4917        assert_true (ai_move (ai, 2, 2));
4918        assert_true (ai_move (ai, 1, 2));
4919        assert_true (ai_move (ai, 1, 1));
4920        assert_true (ai_move (ai, 7, 1));
4921        assert_true (ai_move (ai, 7, 0));
4922        assert_true (ai_move (ai, 0, 0));
4923        assert_true (ai_move (ai, 6, 0));
4924        assert_true (ai_move (ai, 1, 0));
4925        assert_true (ai_move (ai, 0, 7));
4926        assert_true (ai_move (ai, 6, 6));
4927        assert_true (ai_move (ai, 1, 7));
4928        assert_true (game.pass ());
4929        assert_true (ai_move (ai, 7, 7));
4930        assert_true (game.pass ());
4931        assert_true (ai_move (ai, 0, 1));
4932    }
4933
4934    private static inline void test_complete_reversi_game_47 ()
4935    {
4936                                  /* 0 1 2 3 4 5 6 7 */
4937        string [] board = {/* 0 */ " . . . . . . . .",
4938                           /* 1 */ " . . . . . . . .",
4939                           /* 2 */ " . . . . . . . .",
4940                           /* 3 */ " . . . L L L . .",
4941                           /* 4 */ " . . . D L D . .",
4942                           /* 5 */ " . . D L . . . .",
4943                           /* 6 */ " . . . . . . . .",
4944                           /* 7 */ " . . . . . . . ."};
4945
4946        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
4947        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
4948
4949        assert_true (ai_move (ai, 3, 6));
4950        assert_true (ai_move (ai, 5, 5));
4951        assert_true (ai_move (ai, 5, 2));
4952        assert_true (ai_move (ai, 5, 1));
4953        assert_true (ai_move (ai, 6, 5));
4954        assert_true (ai_move (ai, 6, 4));
4955        assert_true (ai_move (ai, 4, 5));
4956        assert_true (ai_move (ai, 5, 6));
4957        assert_true (ai_move (ai, 7, 4));
4958        assert_true (ai_move (ai, 1, 5));
4959        assert_true (ai_move (ai, 4, 6));
4960        assert_true (ai_move (ai, 2, 3));
4961        assert_true (ai_move (ai, 0, 5));
4962        assert_true (ai_move (ai, 7, 5));
4963        assert_true (ai_move (ai, 7, 6));
4964        assert_true (ai_move (ai, 3, 7));
4965        assert_true (ai_move (ai, 6, 2));
4966        assert_true (ai_move (ai, 1, 4));
4967        assert_true (ai_move (ai, 4, 2));
4968        assert_true (ai_move (ai, 3, 1));
4969        assert_true (ai_move (ai, 6, 3));
4970        assert_true (ai_move (ai, 7, 2));
4971        assert_true (ai_move (ai, 5, 7));
4972        assert_true (ai_move (ai, 7, 3));
4973        assert_true (ai_move (ai, 7, 1));
4974        assert_true (ai_move (ai, 6, 1));
4975        assert_true (ai_move (ai, 4, 7));
4976        assert_true (ai_move (ai, 6, 7));
4977        assert_true (ai_move (ai, 4, 0));
4978        assert_true (ai_move (ai, 5, 0));
4979        assert_true (ai_move (ai, 2, 7));
4980        assert_true (ai_move (ai, 1, 7));
4981        assert_true (ai_move (ai, 0, 3));
4982        assert_true (ai_move (ai, 3, 0));
4983        assert_true (ai_move (ai, 2, 6));
4984        assert_true (ai_move (ai, 2, 4));
4985        assert_true (ai_move (ai, 2, 2));
4986        assert_true (ai_move (ai, 1, 3));
4987        assert_true (ai_move (ai, 1, 2));
4988        assert_true (ai_move (ai, 0, 2));
4989        assert_true (ai_move (ai, 3, 2));
4990        assert_true (ai_move (ai, 4, 1));
4991        assert_true (ai_move (ai, 2, 0));
4992        assert_true (ai_move (ai, 2, 1));
4993        assert_true (ai_move (ai, 7, 0));
4994        assert_true (ai_move (ai, 6, 0));
4995        assert_true (ai_move (ai, 0, 1));
4996        assert_true (ai_move (ai, 0, 4));
4997        assert_true (ai_move (ai, 1, 1));
4998        assert_true (ai_move (ai, 0, 0));
4999        assert_true (ai_move (ai, 1, 0));
5000        assert_true (ai_move (ai, 0, 6));
5001        assert_true (ai_move (ai, 1, 6));
5002        assert_true (ai_move (ai, 6, 6));
5003        assert_true (ai_move (ai, 7, 7));
5004        assert_true (game.pass ());
5005        assert_true (ai_move (ai, 0, 7));
5006    }
5007
5008    private static inline void test_complete_reversi_game_48 ()
5009    {
5010                                  /* 0 1 2 3 4 5 6 7 */
5011        string [] board = {/* 0 */ " . . . . . . . .",
5012                           /* 1 */ " . . . . . . . .",
5013                           /* 2 */ " . . . . . . . .",
5014                           /* 3 */ " . . . L D . . .",
5015                           /* 4 */ " . . . D D D . .",
5016                           /* 5 */ " . L L L . . . .",
5017                           /* 6 */ " . . . . . . . .",
5018                           /* 7 */ " . . . . . . . ."};
5019
5020        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5021        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5022
5023        assert_true (ai_move (ai, 2, 2));
5024        assert_true (ai_move (ai, 5, 3));
5025        assert_true (ai_move (ai, 5, 2));
5026        assert_true (ai_move (ai, 6, 2));
5027        assert_true (ai_move (ai, 6, 3));
5028        assert_true (ai_move (ai, 4, 2));
5029        assert_true (ai_move (ai, 4, 1));
5030        assert_true (ai_move (ai, 6, 5));
5031        assert_true (ai_move (ai, 5, 1));
5032        assert_true (ai_move (ai, 7, 2));
5033        assert_true (ai_move (ai, 5, 5));
5034        assert_true (ai_move (ai, 3, 0));
5035        assert_true (ai_move (ai, 3, 2));
5036        assert_true (ai_move (ai, 5, 6));
5037        assert_true (ai_move (ai, 6, 4));
5038        assert_true (ai_move (ai, 1, 2));
5039        assert_true (ai_move (ai, 4, 6));
5040        assert_true (ai_move (ai, 7, 5));
5041        assert_true (ai_move (ai, 2, 4));
5042        assert_true (ai_move (ai, 5, 0));
5043        assert_true (ai_move (ai, 2, 6));
5044        assert_true (ai_move (ai, 4, 5));
5045        assert_true (ai_move (ai, 3, 6));
5046        assert_true (ai_move (ai, 2, 7));
5047        assert_true (ai_move (ai, 0, 5));
5048        assert_true (ai_move (ai, 3, 7));
5049        assert_true (ai_move (ai, 6, 1));
5050        assert_true (ai_move (ai, 1, 4));
5051        assert_true (ai_move (ai, 1, 6));
5052        assert_true (ai_move (ai, 2, 3));
5053        assert_true (ai_move (ai, 5, 7));
5054        assert_true (ai_move (ai, 0, 7));
5055        assert_true (ai_move (ai, 2, 1));
5056        assert_true (ai_move (ai, 0, 6));
5057        assert_true (ai_move (ai, 1, 3));
5058        assert_true (ai_move (ai, 0, 4));
5059        assert_true (ai_move (ai, 7, 1));
5060        assert_true (ai_move (ai, 7, 3));
5061        assert_true (ai_move (ai, 3, 1));
5062        assert_true (ai_move (ai, 2, 0));
5063        assert_true (ai_move (ai, 0, 2));
5064        assert_true (ai_move (ai, 4, 0));
5065        assert_true (ai_move (ai, 6, 0));
5066        assert_true (ai_move (ai, 7, 0));
5067        assert_true (ai_move (ai, 1, 7));
5068        assert_true (ai_move (ai, 4, 7));
5069        assert_true (ai_move (ai, 7, 4));
5070        assert_true (ai_move (ai, 0, 3));
5071        assert_true (ai_move (ai, 1, 0));
5072        assert_true (ai_move (ai, 0, 1));
5073        assert_true (ai_move (ai, 1, 1));
5074        assert_true (ai_move (ai, 0, 0));
5075        assert_true (ai_move (ai, 6, 7));
5076        assert_true (ai_move (ai, 6, 6));
5077        assert_true (ai_move (ai, 7, 6));
5078        assert_true (ai_move (ai, 7, 7));
5079    }
5080
5081    private static inline void test_complete_reversi_game_49 ()
5082    {
5083                                  /* 0 1 2 3 4 5 6 7 */
5084        string [] board = {/* 0 */ " . . . . . . . .",
5085                           /* 1 */ " . . . . . . . .",
5086                           /* 2 */ " . . . . . . . .",
5087                           /* 3 */ " . . . L D . . .",
5088                           /* 4 */ " . . D D L D . .",
5089                           /* 5 */ " . . . L . L . .",
5090                           /* 6 */ " . . . . . . . .",
5091                           /* 7 */ " . . . . . . . ."};
5092
5093        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5094        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5095
5096        assert_true (ai_move (ai, 5, 6));
5097        assert_true (ai_move (ai, 1, 5));
5098        assert_true (ai_move (ai, 1, 4));
5099        assert_true (ai_move (ai, 6, 4));
5100        assert_true (ai_move (ai, 5, 3));
5101        assert_true (ai_move (ai, 4, 6));
5102        assert_true (ai_move (ai, 4, 5));
5103        assert_true (ai_move (ai, 5, 2));
5104        assert_true (ai_move (ai, 2, 5));
5105        assert_true (ai_move (ai, 5, 7));
5106        assert_true (ai_move (ai, 6, 2));
5107        assert_true (ai_move (ai, 7, 2));
5108        assert_true (ai_move (ai, 5, 1));
5109        assert_true (ai_move (ai, 4, 0));
5110        assert_true (ai_move (ai, 6, 3));
5111        assert_true (ai_move (ai, 2, 3));
5112        assert_true (ai_move (ai, 3, 6));
5113        assert_true (ai_move (ai, 0, 5));
5114        assert_true (ai_move (ai, 0, 3));
5115        assert_true (ai_move (ai, 0, 4));
5116        assert_true (ai_move (ai, 5, 0));
5117        assert_true (ai_move (ai, 0, 2));
5118        assert_true (ai_move (ai, 3, 0));
5119        assert_true (ai_move (ai, 4, 7));
5120        assert_true (ai_move (ai, 7, 4));
5121        assert_true (ai_move (ai, 2, 6));
5122        assert_true (ai_move (ai, 4, 2));
5123        assert_true (ai_move (ai, 3, 2));
5124        assert_true (ai_move (ai, 4, 1));
5125        assert_true (ai_move (ai, 7, 3));
5126        assert_true (ai_move (ai, 7, 5));
5127        assert_true (ai_move (ai, 7, 6));
5128        assert_true (ai_move (ai, 6, 5));
5129        assert_true (ai_move (ai, 3, 1));
5130        assert_true (ai_move (ai, 1, 6));
5131        assert_true (ai_move (ai, 6, 6));
5132        assert_true (ai_move (ai, 3, 7));
5133        assert_true (ai_move (ai, 2, 7));
5134        assert_true (ai_move (ai, 0, 7));
5135        assert_true (ai_move (ai, 0, 6));
5136        assert_true (ai_move (ai, 0, 1));
5137        assert_true (ai_move (ai, 6, 1));
5138        assert_true (ai_move (ai, 1, 3));
5139        assert_true (ai_move (ai, 1, 2));
5140        assert_true (ai_move (ai, 2, 1));
5141        assert_true (ai_move (ai, 1, 0));
5142        assert_true (ai_move (ai, 7, 0));
5143        assert_true (ai_move (ai, 1, 7));
5144        assert_true (ai_move (ai, 7, 1));
5145        assert_true (ai_move (ai, 6, 0));
5146        assert_true (ai_move (ai, 2, 0));
5147        assert_true (ai_move (ai, 1, 1));
5148        assert_true (ai_move (ai, 6, 7));
5149        assert_true (game.pass ());
5150        assert_true (ai_move (ai, 7, 7));
5151        assert_true (game.pass ());
5152        assert_true (ai_move (ai, 2, 2));
5153        assert_true (game.pass ());
5154        assert_true (ai_move (ai, 0, 0));
5155    }
5156
5157    private static inline void test_complete_reversi_game_50 ()
5158    {
5159                                  /* 0 1 2 3 4 5 6 7 */
5160        string [] board = {/* 0 */ " . . . . . . . .",
5161                           /* 1 */ " . . . . . . . .",
5162                           /* 2 */ " . . . . . . . .",
5163                           /* 3 */ " . . . L L L . .",
5164                           /* 4 */ " . . D D L D . .",
5165                           /* 5 */ " . . . L . . . .",
5166                           /* 6 */ " . . . . . . . .",
5167                           /* 7 */ " . . . . . . . ."};
5168
5169        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5170        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5171
5172        assert_true (ai_move (ai, 3, 6));
5173        assert_true (ai_move (ai, 5, 5));
5174        assert_true (ai_move (ai, 3, 2));
5175        assert_true (ai_move (ai, 2, 1));
5176        assert_true (ai_move (ai, 3, 1));
5177        assert_true (ai_move (ai, 2, 6));
5178        assert_true (ai_move (ai, 4, 6));
5179        assert_true (ai_move (ai, 3, 7));
5180        assert_true (ai_move (ai, 5, 7));
5181        assert_true (ai_move (ai, 5, 6));
5182        assert_true (ai_move (ai, 1, 7));
5183        assert_true (ai_move (ai, 1, 5));
5184        assert_true (ai_move (ai, 6, 5));
5185        assert_true (ai_move (ai, 6, 4));
5186        assert_true (ai_move (ai, 5, 2));
5187        assert_true (ai_move (ai, 6, 2));
5188        assert_true (ai_move (ai, 7, 2));
5189        assert_true (ai_move (ai, 1, 3));
5190        assert_true (ai_move (ai, 1, 4));
5191        assert_true (ai_move (ai, 5, 1));
5192        assert_true (ai_move (ai, 4, 2));
5193        assert_true (ai_move (ai, 7, 3));
5194        assert_true (ai_move (ai, 7, 5));
5195        assert_true (ai_move (ai, 7, 4));
5196        assert_true (ai_move (ai, 5, 0));
5197        assert_true (ai_move (ai, 4, 0));
5198        assert_true (ai_move (ai, 3, 0));
5199        assert_true (ai_move (ai, 4, 1));
5200        assert_true (ai_move (ai, 6, 3));
5201        assert_true (ai_move (ai, 2, 5));
5202        assert_true (ai_move (ai, 2, 0));
5203        assert_true (ai_move (ai, 2, 2));
5204        assert_true (ai_move (ai, 6, 0));
5205        assert_true (ai_move (ai, 2, 3));
5206        assert_true (ai_move (ai, 1, 0));
5207        assert_true (ai_move (ai, 0, 4));
5208        assert_true (ai_move (ai, 0, 5));
5209        assert_true (ai_move (ai, 0, 3));
5210        assert_true (ai_move (ai, 4, 5));
5211        assert_true (ai_move (ai, 1, 6));
5212        assert_true (ai_move (ai, 0, 2));
5213        assert_true (ai_move (ai, 4, 7));
5214        assert_true (ai_move (ai, 1, 2));
5215        assert_true (ai_move (ai, 6, 7));
5216        assert_true (ai_move (ai, 0, 6));
5217        assert_true (ai_move (ai, 6, 1));
5218        assert_true (ai_move (ai, 7, 1));
5219        assert_true (ai_move (ai, 7, 0));
5220        assert_true (ai_move (ai, 7, 6));
5221        assert_true (ai_move (ai, 0, 0));
5222        assert_true (ai_move (ai, 2, 7));
5223        assert_true (ai_move (ai, 0, 7));
5224        assert_true (ai_move (ai, 6, 6));
5225        assert_true (ai_move (ai, 0, 1));
5226        assert_true (ai_move (ai, 1, 1));
5227        assert_true (ai_move (ai, 7, 7));
5228    }
5229
5230    private static inline void test_complete_reversi_game_51 ()
5231    {
5232                                  /* 0 1 2 3 4 5 6 7 */
5233        string [] board = {/* 0 */ " . . . . . . . .",
5234                           /* 1 */ " . . . . . . . .",
5235                           /* 2 */ " . . . . . . . .",
5236                           /* 3 */ " . . . L D . . .",
5237                           /* 4 */ " . . L D D D . .",
5238                           /* 5 */ " . L . L . . . .",
5239                           /* 6 */ " . . . . . . . .",
5240                           /* 7 */ " . . . . . . . ."};
5241
5242        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5243        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5244
5245        assert_true (ai_move (ai, 1, 4));
5246        assert_true (ai_move (ai, 1, 3));
5247        assert_true (ai_move (ai, 3, 6));
5248        assert_true (ai_move (ai, 4, 6));
5249        assert_true (ai_move (ai, 2, 6));
5250        assert_true (ai_move (ai, 5, 5));
5251        assert_true (ai_move (ai, 5, 6));
5252        assert_true (ai_move (ai, 4, 2));
5253        assert_true (ai_move (ai, 0, 2));
5254        assert_true (ai_move (ai, 6, 4));
5255        assert_true (ai_move (ai, 7, 3));
5256        assert_true (ai_move (ai, 5, 7));
5257        assert_true (ai_move (ai, 3, 2));
5258        assert_true (ai_move (ai, 2, 1));
5259        assert_true (ai_move (ai, 3, 1));
5260        assert_true (ai_move (ai, 2, 0));
5261        assert_true (ai_move (ai, 5, 1));
5262        assert_true (ai_move (ai, 5, 3));
5263        assert_true (ai_move (ai, 5, 2));
5264        assert_true (ai_move (ai, 4, 1));
5265        assert_true (ai_move (ai, 5, 0));
5266        assert_true (ai_move (ai, 6, 2));
5267        assert_true (ai_move (ai, 7, 2));
5268        assert_true (ai_move (ai, 4, 0));
5269        assert_true (ai_move (ai, 6, 3));
5270        assert_true (ai_move (ai, 7, 5));
5271        assert_true (ai_move (ai, 6, 5));
5272        assert_true (ai_move (ai, 7, 4));
5273        assert_true (ai_move (ai, 6, 1));
5274        assert_true (ai_move (ai, 2, 3));
5275        assert_true (ai_move (ai, 7, 6));
5276        assert_true (ai_move (ai, 0, 3));
5277        assert_true (ai_move (ai, 2, 2));
5278        assert_true (ai_move (ai, 2, 5));
5279        assert_true (ai_move (ai, 1, 2));
5280        assert_true (ai_move (ai, 4, 5));
5281        assert_true (ai_move (ai, 0, 5));
5282        assert_true (ai_move (ai, 0, 4));
5283        assert_true (ai_move (ai, 4, 7));
5284        assert_true (ai_move (ai, 2, 7));
5285        assert_true (ai_move (ai, 3, 7));
5286        assert_true (ai_move (ai, 7, 0));
5287        assert_true (ai_move (ai, 6, 0));
5288        assert_true (ai_move (ai, 7, 1));
5289        assert_true (ai_move (ai, 3, 0));
5290        assert_true (ai_move (ai, 7, 7));
5291        assert_true (ai_move (ai, 6, 7));
5292        assert_true (ai_move (ai, 6, 6));
5293        assert_true (ai_move (ai, 1, 6));
5294        assert_true (ai_move (ai, 0, 7));
5295        assert_true (ai_move (ai, 1, 7));
5296        assert_true (ai_move (ai, 1, 1));
5297        assert_true (ai_move (ai, 0, 1));
5298        assert_true (ai_move (ai, 0, 6));
5299        assert_true (ai_move (ai, 1, 0));
5300        assert_true (ai_move (ai, 0, 0));
5301    }
5302
5303    private static inline void test_complete_reversi_game_52 ()
5304    {
5305                                  /* 0 1 2 3 4 5 6 7 */
5306        string [] board = {/* 0 */ " . . . . . . . .",
5307                           /* 1 */ " . . . . . . . .",
5308                           /* 2 */ " . . . . . . . .",
5309                           /* 3 */ " . L . L D . . .",
5310                           /* 4 */ " . . L D D D . .",
5311                           /* 5 */ " . . . L . . . .",
5312                           /* 6 */ " . . . . . . . .",
5313                           /* 7 */ " . . . . . . . ."};
5314
5315        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5316        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5317
5318        assert_true (ai_move (ai, 1, 4));
5319        assert_true (ai_move (ai, 1, 5));
5320        assert_true (ai_move (ai, 3, 6));
5321        assert_true (ai_move (ai, 4, 6));
5322        assert_true (ai_move (ai, 2, 6));
5323        assert_true (ai_move (ai, 5, 5));
5324        assert_true (ai_move (ai, 5, 6));
5325        assert_true (ai_move (ai, 4, 2));
5326        assert_true (ai_move (ai, 0, 2));
5327        assert_true (ai_move (ai, 6, 4));
5328        assert_true (ai_move (ai, 7, 3));
5329        assert_true (ai_move (ai, 5, 7));
5330        assert_true (ai_move (ai, 3, 2));
5331        assert_true (ai_move (ai, 2, 1));
5332        assert_true (ai_move (ai, 3, 1));
5333        assert_true (ai_move (ai, 2, 0));
5334        assert_true (ai_move (ai, 5, 1));
5335        assert_true (ai_move (ai, 5, 3));
5336        assert_true (ai_move (ai, 5, 2));
5337        assert_true (ai_move (ai, 4, 1));
5338        assert_true (ai_move (ai, 5, 0));
5339        assert_true (ai_move (ai, 6, 2));
5340        assert_true (ai_move (ai, 7, 2));
5341        assert_true (ai_move (ai, 4, 0));
5342        assert_true (ai_move (ai, 6, 3));
5343        assert_true (ai_move (ai, 7, 5));
5344        assert_true (ai_move (ai, 6, 5));
5345        assert_true (ai_move (ai, 7, 4));
5346        assert_true (ai_move (ai, 6, 1));
5347        assert_true (ai_move (ai, 2, 3));
5348        assert_true (ai_move (ai, 7, 6));
5349        assert_true (ai_move (ai, 0, 3));
5350        assert_true (ai_move (ai, 2, 2));
5351        assert_true (ai_move (ai, 2, 5));
5352        assert_true (ai_move (ai, 1, 2));
5353        assert_true (ai_move (ai, 4, 5));
5354        assert_true (ai_move (ai, 0, 5));
5355        assert_true (ai_move (ai, 0, 4));
5356        assert_true (ai_move (ai, 4, 7));
5357        assert_true (ai_move (ai, 2, 7));
5358        assert_true (ai_move (ai, 3, 7));
5359        assert_true (ai_move (ai, 7, 0));
5360        assert_true (ai_move (ai, 6, 0));
5361        assert_true (ai_move (ai, 7, 1));
5362        assert_true (ai_move (ai, 3, 0));
5363        assert_true (ai_move (ai, 7, 7));
5364        assert_true (ai_move (ai, 6, 7));
5365        assert_true (ai_move (ai, 6, 6));
5366        assert_true (ai_move (ai, 1, 6));
5367        assert_true (ai_move (ai, 0, 7));
5368        assert_true (ai_move (ai, 1, 7));
5369        assert_true (ai_move (ai, 1, 1));
5370        assert_true (ai_move (ai, 0, 1));
5371        assert_true (ai_move (ai, 0, 6));
5372        assert_true (ai_move (ai, 1, 0));
5373        assert_true (ai_move (ai, 0, 0));
5374    }
5375
5376    private static inline void test_complete_reversi_game_53 ()
5377    {
5378                                  /* 0 1 2 3 4 5 6 7 */
5379        string [] board = {/* 0 */ " . . . . . . . .",
5380                           /* 1 */ " . . . . . . . .",
5381                           /* 2 */ " . . . . . . . .",
5382                           /* 3 */ " . . D D D . . .",
5383                           /* 4 */ " . . . L L L L .",
5384                           /* 5 */ " . . . L . . . .",
5385                           /* 6 */ " . . . . . . . .",
5386                           /* 7 */ " . . . . . . . ."};
5387
5388        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5389        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5390
5391        assert_true (ai_move (ai, 6, 5));
5392        assert_true (ai_move (ai, 1, 2));
5393        assert_true (ai_move (ai, 1, 3));
5394        assert_true (ai_move (ai, 5, 2));
5395        assert_true (ai_move (ai, 7, 4));
5396        assert_true (ai_move (ai, 3, 2));
5397        assert_true (ai_move (ai, 4, 1));
5398        assert_true (ai_move (ai, 2, 1));
5399        assert_true (ai_move (ai, 6, 3));
5400        assert_true (ai_move (ai, 1, 4));
5401        assert_true (ai_move (ai, 0, 5));
5402        assert_true (ai_move (ai, 3, 1));
5403        assert_true (ai_move (ai, 0, 3));
5404        assert_true (ai_move (ai, 5, 0));
5405        assert_true (ai_move (ai, 1, 1));
5406        assert_true (ai_move (ai, 7, 6));
5407        assert_true (ai_move (ai, 5, 6));
5408        assert_true (ai_move (ai, 7, 2));
5409        assert_true (ai_move (ai, 3, 0));
5410        assert_true (ai_move (ai, 5, 1));
5411        assert_true (ai_move (ai, 6, 2));
5412        assert_true (ai_move (ai, 4, 2));
5413        assert_true (ai_move (ai, 4, 5));
5414        assert_true (ai_move (ai, 4, 6));
5415        assert_true (ai_move (ai, 3, 6));
5416        assert_true (ai_move (ai, 1, 0));
5417        assert_true (ai_move (ai, 5, 3));
5418        assert_true (ai_move (ai, 5, 5));
5419        assert_true (ai_move (ai, 6, 6));
5420        assert_true (ai_move (ai, 5, 7));
5421        assert_true (ai_move (ai, 4, 7));
5422        assert_true (ai_move (ai, 2, 7));
5423        assert_true (ai_move (ai, 6, 7));
5424        assert_true (ai_move (ai, 7, 3));
5425        assert_true (ai_move (ai, 7, 1));
5426        assert_true (ai_move (ai, 3, 7));
5427        assert_true (ai_move (ai, 2, 2));
5428        assert_true (ai_move (ai, 0, 4));
5429        assert_true (ai_move (ai, 1, 7));
5430        assert_true (ai_move (ai, 0, 2));
5431        assert_true (ai_move (ai, 0, 1));
5432        assert_true (ai_move (ai, 2, 5));
5433        assert_true (ai_move (ai, 1, 5));
5434        assert_true (ai_move (ai, 7, 7));
5435        assert_true (ai_move (ai, 7, 5));
5436        assert_true (ai_move (ai, 7, 0));
5437        assert_true (ai_move (ai, 2, 0));
5438        assert_true (ai_move (ai, 4, 0));
5439        assert_true (ai_move (ai, 6, 0));
5440        assert_true (ai_move (ai, 0, 0));
5441        assert_true (ai_move (ai, 2, 4));
5442        assert_true (ai_move (ai, 0, 7));
5443        assert_true (ai_move (ai, 2, 6));
5444        assert_true (ai_move (ai, 0, 6));
5445        assert_true (game.pass ());
5446        assert_true (ai_move (ai, 1, 6));
5447        assert_true (game.pass ());
5448        assert_true (ai_move (ai, 6, 1));
5449    }
5450
5451    private static inline void test_complete_reversi_game_54 ()
5452    {
5453                                  /* 0 1 2 3 4 5 6 7 */
5454        string [] board = {/* 0 */ " . . . . . . . .",
5455                           /* 1 */ " . . . . . . . .",
5456                           /* 2 */ " . . . . . . . .",
5457                           /* 3 */ " . . D D D L . .",
5458                           /* 4 */ " . . . L L D . .",
5459                           /* 5 */ " . . . L . . . .",
5460                           /* 6 */ " . . . . . . . .",
5461                           /* 7 */ " . . . . . . . ."};
5462
5463        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5464        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5465
5466        assert_true (ai_move (ai, 5, 2));
5467        assert_true (ai_move (ai, 1, 2));
5468        assert_true (ai_move (ai, 5, 5));
5469        assert_true (ai_move (ai, 3, 2));
5470        assert_true (ai_move (ai, 2, 6));
5471        assert_true (ai_move (ai, 3, 6));
5472        assert_true (ai_move (ai, 2, 1));
5473        assert_true (ai_move (ai, 4, 1));
5474        assert_true (ai_move (ai, 0, 3));
5475        assert_true (ai_move (ai, 6, 5));
5476        assert_true (ai_move (ai, 6, 4));
5477        assert_true (ai_move (ai, 4, 5));
5478        assert_true (ai_move (ai, 4, 6));
5479        assert_true (ai_move (ai, 6, 2));
5480        assert_true (ai_move (ai, 7, 2));
5481        assert_true (ai_move (ai, 5, 1));
5482        assert_true (ai_move (ai, 5, 0));
5483        assert_true (ai_move (ai, 5, 7));
5484        assert_true (ai_move (ai, 3, 7));
5485        assert_true (ai_move (ai, 4, 7));
5486        assert_true (ai_move (ai, 7, 5));
5487        assert_true (ai_move (ai, 2, 7));
5488        assert_true (ai_move (ai, 3, 0));
5489        assert_true (ai_move (ai, 1, 7));
5490        assert_true (ai_move (ai, 1, 4));
5491        assert_true (ai_move (ai, 3, 1));
5492        assert_true (ai_move (ai, 2, 2));
5493        assert_true (ai_move (ai, 0, 2));
5494        assert_true (ai_move (ai, 4, 2));
5495        assert_true (ai_move (ai, 0, 4));
5496        assert_true (ai_move (ai, 2, 0));
5497        assert_true (ai_move (ai, 4, 0));
5498        assert_true (ai_move (ai, 2, 4));
5499        assert_true (ai_move (ai, 6, 3));
5500        assert_true (ai_move (ai, 2, 5));
5501        assert_true (ai_move (ai, 5, 6));
5502        assert_true (ai_move (ai, 1, 3));
5503        assert_true (ai_move (ai, 0, 5));
5504        assert_true (ai_move (ai, 1, 5));
5505        assert_true (ai_move (ai, 0, 6));
5506        assert_true (ai_move (ai, 7, 3));
5507        assert_true (ai_move (ai, 7, 4));
5508        assert_true (ai_move (ai, 6, 1));
5509        assert_true (ai_move (ai, 7, 0));
5510        assert_true (ai_move (ai, 7, 1));
5511        assert_true (ai_move (ai, 6, 0));
5512        assert_true (ai_move (ai, 6, 6));
5513        assert_true (ai_move (ai, 1, 6));
5514        assert_true (ai_move (ai, 1, 1));
5515        assert_true (ai_move (ai, 6, 7));
5516        assert_true (ai_move (ai, 7, 7));
5517        assert_true (ai_move (ai, 7, 6));
5518        assert_true (ai_move (ai, 0, 7));
5519        assert_true (ai_move (ai, 0, 0));
5520        assert_true (ai_move (ai, 0, 1));
5521        assert_true (ai_move (ai, 1, 0));
5522    }
5523
5524    private static inline void test_complete_reversi_game_55 ()
5525    {
5526                                  /* 0 1 2 3 4 5 6 7 */
5527        string [] board = {/* 0 */ " . . . . . . . .",
5528                           /* 1 */ " . . . . . . . .",
5529                           /* 2 */ " . . . . . L . .",
5530                           /* 3 */ " . . D D L . . .",
5531                           /* 4 */ " . . . L D D . .",
5532                           /* 5 */ " . . . L . . . .",
5533                           /* 6 */ " . . . . . . . .",
5534                           /* 7 */ " . . . . . . . ."};
5535
5536        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5537        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5538
5539        assert_true (ai_move (ai, 2, 6));
5540        assert_true (ai_move (ai, 3, 6));
5541        assert_true (ai_move (ai, 4, 2));
5542        assert_true (ai_move (ai, 1, 2));
5543        assert_true (ai_move (ai, 6, 2));
5544        assert_true (ai_move (ai, 3, 2));
5545        assert_true (ai_move (ai, 2, 1));
5546        assert_true (ai_move (ai, 4, 1));
5547        assert_true (ai_move (ai, 0, 3));
5548        assert_true (ai_move (ai, 6, 3));
5549        assert_true (ai_move (ai, 7, 2));
5550        assert_true (ai_move (ai, 5, 1));
5551        assert_true (ai_move (ai, 3, 0));
5552        assert_true (ai_move (ai, 5, 0));
5553        assert_true (ai_move (ai, 4, 6));
5554        assert_true (ai_move (ai, 7, 4));
5555        assert_true (ai_move (ai, 2, 2));
5556        assert_true (ai_move (ai, 2, 0));
5557        assert_true (ai_move (ai, 1, 4));
5558        assert_true (ai_move (ai, 4, 0));
5559        assert_true (ai_move (ai, 2, 5));
5560        assert_true (ai_move (ai, 3, 1));
5561        assert_true (ai_move (ai, 4, 5));
5562        assert_true (ai_move (ai, 5, 3));
5563        assert_true (ai_move (ai, 6, 4));
5564        assert_true (ai_move (ai, 6, 5));
5565        assert_true (ai_move (ai, 6, 1));
5566        assert_true (ai_move (ai, 2, 4));
5567        assert_true (ai_move (ai, 1, 3));
5568        assert_true (ai_move (ai, 0, 5));
5569        assert_true (ai_move (ai, 1, 5));
5570        assert_true (ai_move (ai, 3, 7));
5571        assert_true (ai_move (ai, 6, 0));
5572        assert_true (ai_move (ai, 5, 5));
5573        assert_true (ai_move (ai, 1, 0));
5574        assert_true (ai_move (ai, 0, 2));
5575        assert_true (ai_move (ai, 0, 4));
5576        assert_true (ai_move (ai, 7, 5));
5577        assert_true (ai_move (ai, 5, 7));
5578        assert_true (ai_move (ai, 5, 6));
5579        assert_true (ai_move (ai, 2, 7));
5580        assert_true (ai_move (ai, 7, 3));
5581        assert_true (ai_move (ai, 7, 6));
5582        assert_true (ai_move (ai, 1, 1));
5583        assert_true (ai_move (ai, 4, 7));
5584        assert_true (ai_move (ai, 6, 6));
5585        assert_true (ai_move (ai, 6, 7));
5586        assert_true (ai_move (ai, 7, 7));
5587        assert_true (ai_move (ai, 0, 1));
5588        assert_true (ai_move (ai, 7, 1));
5589        assert_true (ai_move (ai, 0, 6));
5590        assert_true (ai_move (ai, 1, 7));
5591        assert_true (ai_move (ai, 1, 6));
5592        assert_true (ai_move (ai, 0, 0));
5593        assert_true (game.pass ());
5594        assert_true (ai_move (ai, 7, 0));
5595        assert_true (game.pass ());
5596        assert_true (ai_move (ai, 0, 7));
5597    }
5598
5599    private static inline void test_complete_reversi_game_56 ()
5600    {
5601                                  /* 0 1 2 3 4 5 6 7 */
5602        string [] board = {/* 0 */ " . . . . . . . .",
5603                           /* 1 */ " . . . . . . . .",
5604                           /* 2 */ " . . . L . . . .",
5605                           /* 3 */ " . . D L D . . .",
5606                           /* 4 */ " . . . L D D . .",
5607                           /* 5 */ " . . . L . . . .",
5608                           /* 6 */ " . . . . . . . .",
5609                           /* 7 */ " . . . . . . . ."};
5610
5611        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5612        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5613
5614        assert_true (ai_move (ai, 2, 1));
5615        assert_true (ai_move (ai, 3, 1));
5616        assert_true (ai_move (ai, 2, 6));
5617        assert_true (ai_move (ai, 1, 4));
5618        assert_true (ai_move (ai, 2, 5));
5619        assert_true (ai_move (ai, 3, 6));
5620        assert_true (ai_move (ai, 4, 6));
5621        assert_true (ai_move (ai, 2, 7));
5622        assert_true (ai_move (ai, 4, 1));
5623        assert_true (ai_move (ai, 4, 7));
5624        assert_true (ai_move (ai, 0, 5));
5625        assert_true (ai_move (ai, 1, 3));
5626        assert_true (ai_move (ai, 1, 2));
5627        assert_true (ai_move (ai, 5, 7));
5628        assert_true (ai_move (ai, 4, 5));
5629        assert_true (ai_move (ai, 6, 3));
5630        assert_true (ai_move (ai, 5, 6));
5631        assert_true (ai_move (ai, 6, 5));
5632        assert_true (ai_move (ai, 1, 5));
5633        assert_true (ai_move (ai, 3, 0));
5634        assert_true (ai_move (ai, 3, 7));
5635        assert_true (ai_move (ai, 5, 5));
5636        assert_true (ai_move (ai, 7, 5));
5637        assert_true (ai_move (ai, 6, 4));
5638        assert_true (ai_move (ai, 7, 3));
5639        assert_true (ai_move (ai, 2, 4));
5640        assert_true (ai_move (ai, 4, 2));
5641        assert_true (ai_move (ai, 2, 2));
5642        assert_true (ai_move (ai, 2, 0));
5643        assert_true (ai_move (ai, 1, 0));
5644        assert_true (ai_move (ai, 7, 2));
5645        assert_true (ai_move (ai, 6, 6));
5646        assert_true (ai_move (ai, 1, 6));
5647        assert_true (ai_move (ai, 0, 3));
5648        assert_true (ai_move (ai, 5, 3));
5649        assert_true (ai_move (ai, 7, 4));
5650        assert_true (ai_move (ai, 0, 2));
5651        assert_true (ai_move (ai, 7, 6));
5652        assert_true (ai_move (ai, 0, 4));
5653        assert_true (ai_move (ai, 7, 1));
5654        assert_true (ai_move (ai, 7, 7));
5655        assert_true (ai_move (ai, 6, 7));
5656        assert_true (ai_move (ai, 7, 0));
5657        assert_true (ai_move (ai, 1, 1));
5658        assert_true (ai_move (ai, 0, 0));
5659        assert_true (ai_move (ai, 5, 0));
5660        assert_true (ai_move (ai, 4, 0));
5661        assert_true (ai_move (ai, 0, 7));
5662        assert_true (ai_move (ai, 6, 0));
5663        assert_true (ai_move (ai, 0, 1));
5664        assert_true (ai_move (ai, 0, 6));
5665        assert_true (ai_move (ai, 1, 7));
5666        assert_true (game.pass ());
5667        assert_true (ai_move (ai, 6, 2));
5668        assert_true (ai_move (ai, 6, 1));
5669        assert_true (ai_move (ai, 5, 1));
5670        assert_true (ai_move (ai, 5, 2));
5671    }
5672
5673    private static inline void test_complete_reversi_game_57 ()
5674    {
5675                                  /* 0 1 2 3 4 5 6 7 */
5676        string [] board = {/* 0 */ " . . . . . . . .",
5677                           /* 1 */ " . . . . . . . .",
5678                           /* 2 */ " . L . . . . . .",
5679                           /* 3 */ " . . L D D . . .",
5680                           /* 4 */ " . . . L D D . .",
5681                           /* 5 */ " . . . L . . . .",
5682                           /* 6 */ " . . . . . . . .",
5683                           /* 7 */ " . . . . . . . ."};
5684
5685        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5686        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5687
5688        assert_true (ai_move (ai, 1, 3));
5689        assert_true (ai_move (ai, 5, 2));
5690        assert_true (ai_move (ai, 2, 6));
5691        assert_true (ai_move (ai, 3, 6));
5692        assert_true (ai_move (ai, 3, 2));
5693        assert_true (ai_move (ai, 1, 4));
5694        assert_true (ai_move (ai, 0, 5));
5695        assert_true (ai_move (ai, 1, 5));
5696        assert_true (ai_move (ai, 0, 4));
5697        assert_true (ai_move (ai, 4, 1));
5698        assert_true (ai_move (ai, 3, 1));
5699        assert_true (ai_move (ai, 2, 1));
5700        assert_true (ai_move (ai, 3, 0));
5701        assert_true (ai_move (ai, 6, 5));
5702        assert_true (ai_move (ai, 5, 3));
5703        assert_true (ai_move (ai, 6, 2));
5704        assert_true (ai_move (ai, 2, 5));
5705        assert_true (ai_move (ai, 2, 2));
5706        assert_true (ai_move (ai, 4, 5));
5707        assert_true (ai_move (ai, 5, 5));
5708        assert_true (ai_move (ai, 6, 4));
5709        assert_true (ai_move (ai, 4, 0));
5710        assert_true (ai_move (ai, 5, 6));
5711        assert_true (ai_move (ai, 2, 0));
5712        assert_true (ai_move (ai, 6, 3));
5713        assert_true (ai_move (ai, 5, 7));
5714        assert_true (ai_move (ai, 7, 5));
5715        assert_true (ai_move (ai, 7, 3));
5716        assert_true (ai_move (ai, 7, 2));
5717        assert_true (ai_move (ai, 7, 4));
5718        assert_true (ai_move (ai, 5, 1));
5719        assert_true (ai_move (ai, 5, 0));
5720        assert_true (ai_move (ai, 4, 6));
5721        assert_true (ai_move (ai, 6, 6));
5722        assert_true (ai_move (ai, 4, 2));
5723        assert_true (ai_move (ai, 2, 7));
5724        assert_true (ai_move (ai, 0, 2));
5725        assert_true (ai_move (ai, 0, 3));
5726        assert_true (ai_move (ai, 2, 4));
5727        assert_true (ai_move (ai, 1, 1));
5728        assert_true (ai_move (ai, 4, 7));
5729        assert_true (ai_move (ai, 3, 7));
5730        assert_true (ai_move (ai, 7, 6));
5731        assert_true (ai_move (ai, 6, 7));
5732        assert_true (ai_move (ai, 6, 0));
5733        assert_true (ai_move (ai, 7, 0));
5734        assert_true (ai_move (ai, 1, 0));
5735        assert_true (ai_move (ai, 7, 7));
5736        assert_true (game.pass ());
5737        assert_true (ai_move (ai, 1, 7));
5738        assert_true (ai_move (ai, 1, 6));
5739        assert_true (ai_move (ai, 7, 1));
5740        assert_true (game.pass ());
5741        assert_true (ai_move (ai, 6, 1));
5742        assert_true (game.pass ());
5743        assert_true (ai_move (ai, 0, 7));
5744        assert_true (ai_move (ai, 0, 6));
5745        assert_true (ai_move (ai, 0, 1));
5746        assert_true (ai_move (ai, 0, 0));
5747    }
5748
5749    private static inline void test_complete_reversi_game_58 ()
5750    {
5751                                  /* 0 1 2 3 4 5 6 7 */
5752        string [] board = {/* 0 */ " . . . . . . . .",
5753                           /* 1 */ " . . . . . . . .",
5754                           /* 2 */ " . . D . . . . .",
5755                           /* 3 */ " . . . D D . . .",
5756                           /* 4 */ " . . . L L L L .",
5757                           /* 5 */ " . . . L . . . .",
5758                           /* 6 */ " . . . . . . . .",
5759                           /* 7 */ " . . . . . . . ."};
5760
5761        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5762        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5763
5764        assert_true (ai_move (ai, 6, 5));
5765        assert_true (ai_move (ai, 5, 2));
5766        assert_true (ai_move (ai, 7, 4));
5767        assert_true (ai_move (ai, 2, 3));
5768        assert_true (ai_move (ai, 3, 2));
5769        assert_true (ai_move (ai, 2, 1));
5770        assert_true (ai_move (ai, 1, 2));
5771        assert_true (ai_move (ai, 4, 1));
5772        assert_true (ai_move (ai, 4, 2));
5773        assert_true (ai_move (ai, 3, 1));
5774        assert_true (ai_move (ai, 6, 2));
5775        assert_true (ai_move (ai, 1, 3));
5776        assert_true (ai_move (ai, 2, 0));
5777        assert_true (ai_move (ai, 6, 3));
5778        assert_true (ai_move (ai, 7, 2));
5779        assert_true (ai_move (ai, 4, 0));
5780        assert_true (ai_move (ai, 1, 0));
5781        assert_true (ai_move (ai, 0, 2));
5782        assert_true (ai_move (ai, 5, 0));
5783        assert_true (ai_move (ai, 3, 0));
5784        assert_true (ai_move (ai, 1, 4));
5785        assert_true (ai_move (ai, 2, 4));
5786        assert_true (ai_move (ai, 2, 5));
5787        assert_true (ai_move (ai, 0, 5));
5788        assert_true (ai_move (ai, 6, 1));
5789        assert_true (ai_move (ai, 4, 5));
5790        assert_true (ai_move (ai, 3, 6));
5791        assert_true (ai_move (ai, 5, 6));
5792        assert_true (ai_move (ai, 5, 1));
5793        assert_true (ai_move (ai, 0, 0));
5794        assert_true (ai_move (ai, 4, 7));
5795        assert_true (ai_move (ai, 6, 7));
5796        assert_true (ai_move (ai, 5, 5));
5797        assert_true (ai_move (ai, 2, 6));
5798        assert_true (ai_move (ai, 0, 1));
5799        assert_true (ai_move (ai, 7, 5));
5800        assert_true (ai_move (ai, 4, 6));
5801        assert_true (ai_move (ai, 7, 3));
5802        assert_true (ai_move (ai, 7, 6));
5803        assert_true (ai_move (ai, 5, 3));
5804        assert_true (ai_move (ai, 5, 7));
5805        assert_true (ai_move (ai, 3, 7));
5806        assert_true (ai_move (ai, 7, 1));
5807        assert_true (ai_move (ai, 6, 0));
5808        assert_true (ai_move (ai, 0, 3));
5809        assert_true (ai_move (ai, 7, 0));
5810        assert_true (ai_move (ai, 1, 5));
5811        assert_true (ai_move (ai, 7, 7));
5812        assert_true (ai_move (ai, 2, 7));
5813        assert_true (ai_move (ai, 1, 6));
5814        assert_true (ai_move (ai, 1, 7));
5815        assert_true (ai_move (ai, 6, 6));
5816        assert_true (game.pass ());
5817        assert_true (ai_move (ai, 0, 4));
5818        assert_true (ai_move (ai, 1, 1));
5819        assert_true (ai_move (ai, 0, 7));
5820        assert_true (ai_move (ai, 0, 6));
5821    }
5822
5823    private static inline void test_complete_reversi_game_59 ()
5824    {
5825                                  /* 0 1 2 3 4 5 6 7 */
5826        string [] board = {/* 0 */ " . . . . . . . .",
5827                           /* 1 */ " . . . . . . . .",
5828                           /* 2 */ " . . D . . . . .",
5829                           /* 3 */ " . . . D D L . .",
5830                           /* 4 */ " . . . L L D . .",
5831                           /* 5 */ " . . . L . . . .",
5832                           /* 6 */ " . . . . . . . .",
5833                           /* 7 */ " . . . . . . . ."};
5834
5835        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5836        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5837
5838        assert_true (ai_move (ai, 5, 2));
5839        assert_true (ai_move (ai, 6, 2));
5840        assert_true (ai_move (ai, 6, 3));
5841        assert_true (ai_move (ai, 4, 2));
5842        assert_true (ai_move (ai, 4, 1));
5843        assert_true (ai_move (ai, 6, 5));
5844        assert_true (ai_move (ai, 5, 1));
5845        assert_true (ai_move (ai, 7, 2));
5846        assert_true (ai_move (ai, 5, 5));
5847        assert_true (ai_move (ai, 3, 0));
5848        assert_true (ai_move (ai, 2, 6));
5849        assert_true (ai_move (ai, 5, 6));
5850        assert_true (ai_move (ai, 6, 4));
5851        assert_true (ai_move (ai, 3, 6));
5852        assert_true (ai_move (ai, 3, 2));
5853        assert_true (ai_move (ai, 1, 2));
5854        assert_true (ai_move (ai, 2, 1));
5855        assert_true (ai_move (ai, 2, 0));
5856        assert_true (ai_move (ai, 5, 7));
5857        assert_true (ai_move (ai, 7, 5));
5858        assert_true (ai_move (ai, 0, 2));
5859        assert_true (ai_move (ai, 4, 6));
5860        assert_true (ai_move (ai, 5, 0));
5861        assert_true (ai_move (ai, 4, 7));
5862        assert_true (ai_move (ai, 2, 5));
5863        assert_true (ai_move (ai, 1, 5));
5864        assert_true (ai_move (ai, 2, 4));
5865        assert_true (ai_move (ai, 0, 3));
5866        assert_true (ai_move (ai, 3, 7));
5867        assert_true (ai_move (ai, 4, 5));
5868        assert_true (ai_move (ai, 1, 4));
5869        assert_true (ai_move (ai, 4, 0));
5870        assert_true (ai_move (ai, 1, 0));
5871        assert_true (ai_move (ai, 2, 7));
5872        assert_true (ai_move (ai, 1, 7));
5873        assert_true (ai_move (ai, 0, 1));
5874        assert_true (ai_move (ai, 6, 7));
5875        assert_true (ai_move (ai, 2, 3));
5876        assert_true (ai_move (ai, 3, 1));
5877        assert_true (ai_move (ai, 1, 3));
5878        assert_true (ai_move (ai, 6, 6));
5879        assert_true (ai_move (ai, 1, 6));
5880        assert_true (ai_move (ai, 6, 0));
5881        assert_true (ai_move (ai, 1, 1));
5882        assert_true (ai_move (ai, 0, 0));
5883        assert_true (ai_move (ai, 6, 1));
5884        assert_true (ai_move (ai, 7, 4));
5885        assert_true (ai_move (ai, 7, 3));
5886        assert_true (ai_move (ai, 0, 4));
5887        assert_true (ai_move (ai, 0, 6));
5888        assert_true (ai_move (ai, 0, 7));
5889        assert_true (ai_move (ai, 0, 5));
5890        assert_true (ai_move (ai, 7, 0));
5891        assert_true (ai_move (ai, 7, 7));
5892        assert_true (ai_move (ai, 7, 1));
5893        assert_true (ai_move (ai, 7, 6));
5894    }
5895
5896    private static inline void test_complete_reversi_game_60 ()
5897    {
5898                                  /* 0 1 2 3 4 5 6 7 */
5899        string [] board = {/* 0 */ " . . . . . . . .",
5900                           /* 1 */ " . . . . . . . .",
5901                           /* 2 */ " . . D . . L . .",
5902                           /* 3 */ " . . . D L . . .",
5903                           /* 4 */ " . . . L D D . .",
5904                           /* 5 */ " . . . L . . . .",
5905                           /* 6 */ " . . . . . . . .",
5906                           /* 7 */ " . . . . . . . ."};
5907
5908        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5909        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5910
5911        assert_true (ai_move (ai, 2, 6));
5912        assert_true (ai_move (ai, 3, 6));
5913        assert_true (ai_move (ai, 3, 2));
5914        assert_true (ai_move (ai, 5, 3));
5915        assert_true (ai_move (ai, 5, 1));
5916        assert_true (ai_move (ai, 6, 4));
5917        assert_true (ai_move (ai, 6, 5));
5918        assert_true (ai_move (ai, 6, 2));
5919        assert_true (ai_move (ai, 6, 3));
5920        assert_true (ai_move (ai, 4, 0));
5921        assert_true (ai_move (ai, 5, 0));
5922        assert_true (ai_move (ai, 6, 0));
5923        assert_true (ai_move (ai, 5, 5));
5924        assert_true (ai_move (ai, 4, 2));
5925        assert_true (ai_move (ai, 3, 1));
5926        assert_true (ai_move (ai, 5, 6));
5927        assert_true (ai_move (ai, 7, 2));
5928        assert_true (ai_move (ai, 2, 1));
5929        assert_true (ai_move (ai, 4, 5));
5930        assert_true (ai_move (ai, 1, 2));
5931        assert_true (ai_move (ai, 1, 3));
5932        assert_true (ai_move (ai, 3, 0));
5933        assert_true (ai_move (ai, 2, 5));
5934        assert_true (ai_move (ai, 7, 4));
5935        assert_true (ai_move (ai, 7, 5));
5936        assert_true (ai_move (ai, 7, 3));
5937        assert_true (ai_move (ai, 0, 2));
5938        assert_true (ai_move (ai, 4, 1));
5939        assert_true (ai_move (ai, 5, 7));
5940        assert_true (ai_move (ai, 4, 6));
5941        assert_true (ai_move (ai, 6, 6));
5942        assert_true (ai_move (ai, 1, 7));
5943        assert_true (ai_move (ai, 2, 0));
5944        assert_true (ai_move (ai, 1, 0));
5945        assert_true (ai_move (ai, 4, 7));
5946        assert_true (ai_move (ai, 2, 3));
5947        assert_true (ai_move (ai, 2, 4));
5948        assert_true (ai_move (ai, 1, 4));
5949        assert_true (ai_move (ai, 2, 7));
5950        assert_true (ai_move (ai, 1, 6));
5951        assert_true (ai_move (ai, 1, 5));
5952        assert_true (ai_move (ai, 0, 5));
5953        assert_true (ai_move (ai, 0, 3));
5954        assert_true (ai_move (ai, 0, 4));
5955        assert_true (ai_move (ai, 1, 1));
5956        assert_true (ai_move (ai, 3, 7));
5957        assert_true (ai_move (ai, 0, 7));
5958        assert_true (ai_move (ai, 0, 6));
5959        assert_true (ai_move (ai, 6, 1));
5960        assert_true (ai_move (ai, 7, 0));
5961        assert_true (ai_move (ai, 7, 1));
5962        assert_true (ai_move (ai, 0, 0));
5963        assert_true (ai_move (ai, 0, 1));
5964        assert_true (ai_move (ai, 7, 7));
5965        assert_true (ai_move (ai, 6, 7));
5966        assert_true (ai_move (ai, 7, 6));
5967    }
5968
5969    private static inline void test_complete_reversi_game_61 ()
5970    {
5971                                  /* 0 1 2 3 4 5 6 7 */
5972        string [] board = {/* 0 */ " . . . . . . . .",
5973                           /* 1 */ " . . . . . . . .",
5974                           /* 2 */ " . . D L . . . .",
5975                           /* 3 */ " . . . L D . . .",
5976                           /* 4 */ " . . . L D D . .",
5977                           /* 5 */ " . . . L . . . .",
5978                           /* 6 */ " . . . . . . . .",
5979                           /* 7 */ " . . . . . . . ."};
5980
5981        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
5982        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
5983
5984        assert_true (ai_move (ai, 2, 1));
5985        assert_true (ai_move (ai, 5, 2));
5986        assert_true (ai_move (ai, 2, 6));
5987        assert_true (ai_move (ai, 3, 6));
5988        assert_true (ai_move (ai, 4, 6));
5989        assert_true (ai_move (ai, 6, 5));
5990        assert_true (ai_move (ai, 6, 4));
5991        assert_true (ai_move (ai, 3, 1));
5992        assert_true (ai_move (ai, 4, 0));
5993        assert_true (ai_move (ai, 5, 7));
5994        assert_true (ai_move (ai, 5, 6));
5995        assert_true (ai_move (ai, 4, 7));
5996        assert_true (ai_move (ai, 4, 2));
5997        assert_true (ai_move (ai, 3, 7));
5998        assert_true (ai_move (ai, 6, 2));
5999        assert_true (ai_move (ai, 1, 5));
6000        assert_true (ai_move (ai, 2, 3));
6001        assert_true (ai_move (ai, 5, 5));
6002        assert_true (ai_move (ai, 2, 4));
6003        assert_true (ai_move (ai, 6, 3));
6004        assert_true (ai_move (ai, 7, 2));
6005        assert_true (ai_move (ai, 1, 3));
6006        assert_true (ai_move (ai, 1, 4));
6007        assert_true (ai_move (ai, 5, 1));
6008        assert_true (ai_move (ai, 5, 3));
6009        assert_true (ai_move (ai, 2, 0));
6010        assert_true (ai_move (ai, 4, 1));
6011        assert_true (ai_move (ai, 5, 0));
6012        assert_true (ai_move (ai, 3, 0));
6013        assert_true (ai_move (ai, 0, 4));
6014        assert_true (ai_move (ai, 1, 2));
6015        assert_true (ai_move (ai, 7, 3));
6016        assert_true (ai_move (ai, 2, 5));
6017        assert_true (ai_move (ai, 0, 2));
6018        assert_true (ai_move (ai, 4, 5));
6019        assert_true (ai_move (ai, 7, 1));
6020        assert_true (ai_move (ai, 6, 1));
6021        assert_true (ai_move (ai, 6, 0));
6022        assert_true (ai_move (ai, 7, 0));
6023        assert_true (ai_move (ai, 1, 1));
6024        assert_true (ai_move (ai, 7, 4));
6025        assert_true (ai_move (ai, 7, 5));
6026        assert_true (ai_move (ai, 7, 6));
6027        assert_true (ai_move (ai, 6, 6));
6028        assert_true (ai_move (ai, 2, 7));
6029        assert_true (ai_move (ai, 1, 7));
6030        assert_true (ai_move (ai, 1, 6));
6031        assert_true (ai_move (ai, 0, 5));
6032        assert_true (ai_move (ai, 1, 0));
6033        assert_true (game.pass ());
6034        assert_true (ai_move (ai, 0, 3));
6035        assert_true (ai_move (ai, 0, 1));
6036        assert_true (ai_move (ai, 7, 7));
6037        assert_true (ai_move (ai, 6, 7));
6038        assert_true (ai_move (ai, 0, 7));
6039        assert_true (ai_move (ai, 0, 6));
6040        assert_true (ai_move (ai, 0, 0));
6041    }
6042
6043    private static inline void test_complete_reversi_game_62 ()
6044    {
6045                                  /* 0 1 2 3 4 5 6 7 */
6046        string [] board = {/* 0 */ " . . . . . . . .",
6047                           /* 1 */ " . . . . . . . .",
6048                           /* 2 */ " . . . . . . . .",
6049                           /* 3 */ " . . . L D . . .",
6050                           /* 4 */ " . . . D L . . .",
6051                           /* 5 */ " . . . . D L D .",
6052                           /* 6 */ " . . . . . . L .",
6053                           /* 7 */ " . . . . . . . ."};
6054
6055        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6056        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6057
6058        assert_true (ai_move (ai, 5, 4));
6059        assert_true (ai_move (ai, 7, 5));
6060        assert_true (ai_move (ai, 5, 6));
6061        assert_true (ai_move (ai, 4, 7));
6062        assert_true (ai_move (ai, 5, 7));
6063        assert_true (ai_move (ai, 6, 7));
6064        assert_true (ai_move (ai, 7, 4));
6065        assert_true (ai_move (ai, 4, 6));
6066        assert_true (ai_move (ai, 7, 6));
6067        assert_true (ai_move (ai, 6, 4));
6068        assert_true (ai_move (ai, 7, 7));
6069        assert_true (ai_move (ai, 5, 3));
6070        assert_true (ai_move (ai, 3, 7));
6071        assert_true (ai_move (ai, 3, 6));
6072        assert_true (ai_move (ai, 3, 5));
6073        assert_true (ai_move (ai, 2, 7));
6074        assert_true (ai_move (ai, 1, 7));
6075        assert_true (ai_move (ai, 2, 3));
6076        assert_true (ai_move (ai, 6, 3));
6077        assert_true (ai_move (ai, 7, 3));
6078        assert_true (ai_move (ai, 7, 2));
6079        assert_true (ai_move (ai, 2, 6));
6080        assert_true (ai_move (ai, 1, 5));
6081        assert_true (ai_move (ai, 1, 6));
6082        assert_true (ai_move (ai, 5, 2));
6083        assert_true (ai_move (ai, 0, 4));
6084        assert_true (ai_move (ai, 4, 2));
6085        assert_true (ai_move (ai, 5, 1));
6086        assert_true (ai_move (ai, 5, 0));
6087        assert_true (ai_move (ai, 6, 2));
6088        assert_true (ai_move (ai, 3, 1));
6089        assert_true (ai_move (ai, 4, 0));
6090        assert_true (ai_move (ai, 3, 0));
6091        assert_true (ai_move (ai, 3, 2));
6092        assert_true (ai_move (ai, 4, 1));
6093        assert_true (ai_move (ai, 2, 1));
6094        assert_true (ai_move (ai, 7, 1));
6095        assert_true (ai_move (ai, 6, 1));
6096        assert_true (ai_move (ai, 0, 5));
6097        assert_true (ai_move (ai, 0, 6));
6098        assert_true (ai_move (ai, 2, 0));
6099        assert_true (game.pass ());
6100        assert_true (ai_move (ai, 1, 1));
6101        assert_true (ai_move (ai, 1, 0));
6102        assert_true (ai_move (ai, 0, 0));
6103        assert_true (ai_move (ai, 0, 1));
6104        assert_true (ai_move (ai, 0, 2));
6105        assert_true (game.pass ());
6106        assert_true (ai_move (ai, 2, 5));
6107        assert_true (ai_move (ai, 2, 4));
6108        assert_true (ai_move (ai, 2, 2));
6109        assert_true (ai_move (ai, 1, 4));
6110        assert_true (ai_move (ai, 0, 3));
6111        assert_true (ai_move (ai, 1, 3));
6112        assert_true (ai_move (ai, 0, 7));
6113        assert_true (ai_move (ai, 1, 2));
6114        assert_true (ai_move (ai, 6, 0));
6115        assert_true (ai_move (ai, 7, 0));
6116    }
6117
6118    private static inline void test_complete_reversi_game_63 ()
6119    {
6120                                  /* 0 1 2 3 4 5 6 7 */
6121        string [] board = {/* 0 */ " . . . . . . . .",
6122                           /* 1 */ " . . . . . . . .",
6123                           /* 2 */ " . . . . . . . .",
6124                           /* 3 */ " . . . L L L . .",
6125                           /* 4 */ " . . . D L . . .",
6126                           /* 5 */ " . . . . D D D .",
6127                           /* 6 */ " . . . . . . . .",
6128                           /* 7 */ " . . . . . . . ."};
6129
6130        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6131        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6132
6133        assert_true (ai_move (ai, 3, 2));
6134        assert_true (ai_move (ai, 2, 1));
6135        assert_true (ai_move (ai, 3, 1));
6136        assert_true (ai_move (ai, 2, 5));
6137        assert_true (ai_move (ai, 2, 3));
6138        assert_true (ai_move (ai, 4, 6));
6139        assert_true (ai_move (ai, 3, 5));
6140        assert_true (ai_move (ai, 6, 4));
6141        assert_true (ai_move (ai, 1, 5));
6142        assert_true (ai_move (ai, 7, 5));
6143        assert_true (ai_move (ai, 5, 7));
6144        assert_true (ai_move (ai, 3, 7));
6145        assert_true (ai_move (ai, 4, 7));
6146        assert_true (ai_move (ai, 6, 7));
6147        assert_true (ai_move (ai, 7, 3));
6148        assert_true (ai_move (ai, 6, 3));
6149        assert_true (ai_move (ai, 5, 2));
6150        assert_true (ai_move (ai, 5, 1));
6151        assert_true (ai_move (ai, 6, 2));
6152        assert_true (ai_move (ai, 7, 2));
6153        assert_true (ai_move (ai, 7, 1));
6154        assert_true (ai_move (ai, 0, 5));
6155        assert_true (ai_move (ai, 2, 4));
6156        assert_true (ai_move (ai, 1, 2));
6157        assert_true (ai_move (ai, 4, 2));
6158        assert_true (ai_move (ai, 1, 4));
6159        assert_true (ai_move (ai, 5, 4));
6160        assert_true (ai_move (ai, 3, 6));
6161        assert_true (ai_move (ai, 5, 6));
6162        assert_true (ai_move (ai, 2, 0));
6163        assert_true (ai_move (ai, 4, 1));
6164        assert_true (ai_move (ai, 4, 0));
6165        assert_true (ai_move (ai, 1, 3));
6166        assert_true (ai_move (ai, 2, 6));
6167        assert_true (ai_move (ai, 2, 7));
6168        assert_true (ai_move (ai, 1, 7));
6169        assert_true (ai_move (ai, 6, 0));
6170        assert_true (ai_move (ai, 2, 2));
6171        assert_true (ai_move (ai, 0, 2));
6172        assert_true (ai_move (ai, 5, 0));
6173        assert_true (ai_move (ai, 0, 3));
6174        assert_true (ai_move (ai, 1, 6));
6175        assert_true (ai_move (ai, 3, 0));
6176        assert_true (ai_move (ai, 7, 0));
6177        assert_true (ai_move (ai, 7, 4));
6178        assert_true (ai_move (ai, 6, 1));
6179        assert_true (ai_move (ai, 0, 6));
6180        assert_true (ai_move (ai, 0, 4));
6181        assert_true (ai_move (ai, 1, 1));
6182        assert_true (ai_move (ai, 0, 7));
6183        assert_true (ai_move (ai, 7, 6));
6184        assert_true (ai_move (ai, 7, 7));
6185        assert_true (game.pass ());
6186        assert_true (ai_move (ai, 6, 6));
6187        assert_true (game.pass ());
6188        assert_true (ai_move (ai, 0, 0));
6189        assert_true (ai_move (ai, 0, 1));
6190        assert_true (ai_move (ai, 1, 0));
6191    }
6192
6193    private static inline void test_complete_reversi_game_64 ()
6194    {
6195                                  /* 0 1 2 3 4 5 6 7 */
6196        string [] board = {/* 0 */ " . . . . . . . .",
6197                           /* 1 */ " . . . . . . . .",
6198                           /* 2 */ " . . . . . . . .",
6199                           /* 3 */ " . . . L D . . .",
6200                           /* 4 */ " . . . D L . . .",
6201                           /* 5 */ " . . . . L D D .",
6202                           /* 6 */ " . . . . L . . .",
6203                           /* 7 */ " . . . . . . . ."};
6204
6205        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6206        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6207
6208        assert_true (ai_move (ai, 3, 5));
6209        assert_true (ai_move (ai, 6, 4));
6210        assert_true (ai_move (ai, 5, 7));
6211        assert_true (ai_move (ai, 7, 5));
6212        assert_true (ai_move (ai, 7, 3));
6213        assert_true (ai_move (ai, 2, 5));
6214        assert_true (ai_move (ai, 5, 6));
6215        assert_true (ai_move (ai, 3, 7));
6216        assert_true (ai_move (ai, 4, 7));
6217        assert_true (ai_move (ai, 6, 7));
6218        assert_true (ai_move (ai, 5, 4));
6219        assert_true (ai_move (ai, 6, 3));
6220        assert_true (ai_move (ai, 5, 3));
6221        assert_true (ai_move (ai, 2, 4));
6222        assert_true (ai_move (ai, 1, 5));
6223        assert_true (ai_move (ai, 2, 6));
6224        assert_true (ai_move (ai, 1, 3));
6225        assert_true (ai_move (ai, 2, 3));
6226        assert_true (ai_move (ai, 1, 2));
6227        assert_true (ai_move (ai, 2, 2));
6228        assert_true (ai_move (ai, 3, 1));
6229        assert_true (ai_move (ai, 2, 1));
6230        assert_true (ai_move (ai, 1, 4));
6231        assert_true (ai_move (ai, 3, 6));
6232        assert_true (ai_move (ai, 3, 2));
6233        assert_true (ai_move (ai, 7, 2));
6234        assert_true (ai_move (ai, 7, 4));
6235        assert_true (ai_move (ai, 5, 2));
6236        assert_true (ai_move (ai, 2, 0));
6237        assert_true (ai_move (ai, 0, 5));
6238        assert_true (ai_move (ai, 4, 1));
6239        assert_true (ai_move (ai, 5, 1));
6240        assert_true (ai_move (ai, 2, 7));
6241        assert_true (ai_move (ai, 1, 7));
6242        assert_true (ai_move (ai, 6, 2));
6243        assert_true (ai_move (ai, 4, 2));
6244        assert_true (ai_move (ai, 5, 0));
6245        assert_true (ai_move (ai, 0, 2));
6246        assert_true (ai_move (ai, 0, 3));
6247        assert_true (ai_move (ai, 0, 4));
6248        assert_true (ai_move (ai, 1, 1));
6249        assert_true (ai_move (ai, 0, 1));
6250        assert_true (ai_move (ai, 6, 6));
6251        assert_true (ai_move (ai, 4, 0));
6252        assert_true (ai_move (ai, 3, 0));
6253        assert_true (ai_move (ai, 1, 6));
6254        assert_true (ai_move (ai, 0, 7));
6255        assert_true (ai_move (ai, 7, 7));
6256        assert_true (ai_move (ai, 0, 6));
6257        assert_true (ai_move (ai, 0, 0));
6258        assert_true (ai_move (ai, 7, 6));
6259        assert_true (ai_move (ai, 7, 1));
6260        assert_true (ai_move (ai, 6, 1));
6261        assert_true (ai_move (ai, 6, 0));
6262        assert_true (ai_move (ai, 1, 0));
6263        assert_true (game.pass ());
6264        assert_true (ai_move (ai, 7, 0));
6265    }
6266
6267    private static inline void test_complete_reversi_game_65 ()
6268    {
6269                                  /* 0 1 2 3 4 5 6 7 */
6270        string [] board = {/* 0 */ " . . . . . . . .",
6271                           /* 1 */ " . . . . . . . .",
6272                           /* 2 */ " . . . . L . . .",
6273                           /* 3 */ " . . . L L . . .",
6274                           /* 4 */ " . . . D L . . .",
6275                           /* 5 */ " . . . . D D D .",
6276                           /* 6 */ " . . . . . . . .",
6277                           /* 7 */ " . . . . . . . ."};
6278
6279        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6280        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6281
6282        assert_true (ai_move (ai, 5, 4));
6283        assert_true (ai_move (ai, 2, 5));
6284        assert_true (ai_move (ai, 2, 3));
6285        assert_true (ai_move (ai, 1, 3));
6286        assert_true (ai_move (ai, 1, 2));
6287        assert_true (ai_move (ai, 3, 5));
6288        assert_true (ai_move (ai, 2, 6));
6289        assert_true (ai_move (ai, 3, 6));
6290        assert_true (ai_move (ai, 1, 5));
6291        assert_true (ai_move (ai, 5, 6));
6292        assert_true (ai_move (ai, 5, 7));
6293        assert_true (ai_move (ai, 6, 3));
6294        assert_true (ai_move (ai, 6, 4));
6295        assert_true (ai_move (ai, 7, 5));
6296        assert_true (ai_move (ai, 4, 7));
6297        assert_true (ai_move (ai, 2, 7));
6298        assert_true (ai_move (ai, 4, 6));
6299        assert_true (ai_move (ai, 0, 5));
6300        assert_true (ai_move (ai, 2, 4));
6301        assert_true (ai_move (ai, 2, 2));
6302        assert_true (ai_move (ai, 7, 4));
6303        assert_true (ai_move (ai, 7, 3));
6304        assert_true (ai_move (ai, 7, 2));
6305        assert_true (ai_move (ai, 7, 1));
6306        assert_true (ai_move (ai, 1, 4));
6307        assert_true (ai_move (ai, 7, 6));
6308        assert_true (ai_move (ai, 3, 1));
6309        assert_true (ai_move (ai, 2, 1));
6310        assert_true (ai_move (ai, 3, 2));
6311        assert_true (ai_move (ai, 6, 2));
6312        assert_true (ai_move (ai, 5, 3));
6313        assert_true (ai_move (ai, 0, 4));
6314        assert_true (ai_move (ai, 2, 0));
6315        assert_true (ai_move (ai, 4, 1));
6316        assert_true (ai_move (ai, 5, 2));
6317        assert_true (ai_move (ai, 5, 1));
6318        assert_true (ai_move (ai, 5, 0));
6319        assert_true (ai_move (ai, 0, 2));
6320        assert_true (ai_move (ai, 0, 3));
6321        assert_true (ai_move (ai, 3, 7));
6322        assert_true (ai_move (ai, 1, 7));
6323        assert_true (ai_move (ai, 4, 0));
6324        assert_true (ai_move (ai, 3, 0));
6325        assert_true (ai_move (ai, 6, 6));
6326        assert_true (ai_move (ai, 6, 7));
6327        assert_true (ai_move (ai, 1, 0));
6328        assert_true (ai_move (ai, 0, 0));
6329        assert_true (ai_move (ai, 6, 1));
6330        assert_true (ai_move (ai, 1, 1));
6331        assert_true (ai_move (ai, 1, 6));
6332        assert_true (ai_move (ai, 0, 1));
6333        assert_true (game.pass ());
6334        assert_true (ai_move (ai, 7, 7));
6335        assert_true (game.pass ());
6336        assert_true (ai_move (ai, 7, 0));
6337        assert_true (game.pass ());
6338        assert_true (ai_move (ai, 6, 0));
6339        assert_true (game.pass ());
6340        assert_true (ai_move (ai, 0, 6));
6341        assert_true (ai_move (ai, 0, 7));
6342    }
6343
6344    private static inline void test_complete_reversi_game_66 ()
6345    {
6346                                  /* 0 1 2 3 4 5 6 7 */
6347        string [] board = {/* 0 */ " . . . . . . . .",
6348                           /* 1 */ " . . . . . . . .",
6349                           /* 2 */ " . . . . . . . .",
6350                           /* 3 */ " . . . L D . . .",
6351                           /* 4 */ " . . . L L . . .",
6352                           /* 5 */ " . . . L D D D .",
6353                           /* 6 */ " . . . . . . . .",
6354                           /* 7 */ " . . . . . . . ."};
6355
6356        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6357        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6358
6359        assert_true (ai_move (ai, 2, 5));
6360        assert_true (ai_move (ai, 2, 6));
6361        assert_true (ai_move (ai, 3, 6));
6362        assert_true (ai_move (ai, 2, 4));
6363        assert_true (ai_move (ai, 1, 5));
6364        assert_true (ai_move (ai, 3, 7));
6365        assert_true (ai_move (ai, 4, 7));
6366        assert_true (ai_move (ai, 5, 7));
6367        assert_true (ai_move (ai, 2, 7));
6368        assert_true (ai_move (ai, 1, 7));
6369        assert_true (ai_move (ai, 4, 2));
6370        assert_true (ai_move (ai, 4, 6));
6371        assert_true (ai_move (ai, 5, 4));
6372        assert_true (ai_move (ai, 1, 4));
6373        assert_true (ai_move (ai, 0, 4));
6374        assert_true (ai_move (ai, 6, 4));
6375        assert_true (ai_move (ai, 7, 4));
6376        assert_true (ai_move (ai, 6, 3));
6377        assert_true (ai_move (ai, 5, 6));
6378        assert_true (ai_move (ai, 5, 3));
6379        assert_true (ai_move (ai, 7, 2));
6380        assert_true (ai_move (ai, 1, 3));
6381        assert_true (ai_move (ai, 5, 2));
6382        assert_true (ai_move (ai, 6, 2));
6383        assert_true (ai_move (ai, 2, 2));
6384        assert_true (ai_move (ai, 0, 5));
6385        assert_true (ai_move (ai, 0, 6));
6386        assert_true (ai_move (ai, 5, 1));
6387        assert_true (ai_move (ai, 4, 1));
6388        assert_true (ai_move (ai, 0, 2));
6389        assert_true (ai_move (ai, 5, 0));
6390        assert_true (ai_move (ai, 3, 1));
6391        assert_true (ai_move (ai, 3, 2));
6392        assert_true (ai_move (ai, 4, 0));
6393        assert_true (ai_move (ai, 2, 0));
6394        assert_true (ai_move (ai, 6, 0));
6395        assert_true (ai_move (ai, 1, 2));
6396        assert_true (ai_move (ai, 7, 5));
6397        assert_true (ai_move (ai, 3, 0));
6398        assert_true (ai_move (ai, 1, 0));
6399        assert_true (ai_move (ai, 1, 6));
6400        assert_true (ai_move (ai, 7, 3));
6401        assert_true (ai_move (ai, 7, 6));
6402        assert_true (ai_move (ai, 2, 1));
6403        assert_true (ai_move (ai, 2, 3));
6404        assert_true (ai_move (ai, 0, 3));
6405        assert_true (ai_move (ai, 0, 1));
6406        assert_true (ai_move (ai, 1, 1));
6407        assert_true (ai_move (ai, 7, 1));
6408        assert_true (ai_move (ai, 6, 7));
6409        assert_true (ai_move (ai, 0, 0));
6410        assert_true (ai_move (ai, 0, 7));
6411        assert_true (ai_move (ai, 7, 0));
6412        assert_true (ai_move (ai, 6, 6));
6413        assert_true (ai_move (ai, 7, 7));
6414        assert_true (ai_move (ai, 6, 1));
6415    }
6416
6417    private static inline void test_complete_reversi_game_67 ()
6418    {
6419                                  /* 0 1 2 3 4 5 6 7 */
6420        string [] board = {/* 0 */ " . . . . . . . .",
6421                           /* 1 */ " . . . . . . . .",
6422                           /* 2 */ " . . . . . . . .",
6423                           /* 3 */ " . . . L D . . .",
6424                           /* 4 */ " . . L L L . . .",
6425                           /* 5 */ " . . . . D D D .",
6426                           /* 6 */ " . . . . . . . .",
6427                           /* 7 */ " . . . . . . . ."};
6428
6429        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6430        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6431
6432        assert_true (ai_move (ai, 2, 5));
6433        assert_true (ai_move (ai, 3, 5));
6434        assert_true (ai_move (ai, 2, 3));
6435        assert_true (ai_move (ai, 1, 5));
6436        assert_true (ai_move (ai, 2, 6));
6437        assert_true (ai_move (ai, 1, 3));
6438        assert_true (ai_move (ai, 1, 4));
6439        assert_true (ai_move (ai, 0, 4));
6440        assert_true (ai_move (ai, 3, 6));
6441        assert_true (ai_move (ai, 4, 6));
6442        assert_true (ai_move (ai, 3, 7));
6443        assert_true (ai_move (ai, 5, 7));
6444        assert_true (ai_move (ai, 5, 3));
6445        assert_true (ai_move (ai, 4, 7));
6446        assert_true (ai_move (ai, 0, 2));
6447        assert_true (ai_move (ai, 2, 7));
6448        assert_true (ai_move (ai, 5, 6));
6449        assert_true (ai_move (ai, 5, 4));
6450        assert_true (ai_move (ai, 0, 6));
6451        assert_true (ai_move (ai, 6, 2));
6452        assert_true (ai_move (ai, 6, 3));
6453        assert_true (ai_move (ai, 7, 5));
6454        assert_true (ai_move (ai, 6, 4));
6455        assert_true (ai_move (ai, 7, 2));
6456        assert_true (ai_move (ai, 1, 6));
6457        assert_true (ai_move (ai, 2, 2));
6458        assert_true (ai_move (ai, 4, 2));
6459        assert_true (ai_move (ai, 7, 4));
6460        assert_true (ai_move (ai, 0, 3));
6461        assert_true (ai_move (ai, 0, 1));
6462        assert_true (ai_move (ai, 2, 1));
6463        assert_true (ai_move (ai, 2, 0));
6464        assert_true (ai_move (ai, 1, 2));
6465        assert_true (ai_move (ai, 3, 1));
6466        assert_true (ai_move (ai, 4, 1));
6467        assert_true (ai_move (ai, 1, 1));
6468        assert_true (ai_move (ai, 0, 5));
6469        assert_true (ai_move (ai, 0, 7));
6470        assert_true (ai_move (ai, 0, 0));
6471        assert_true (ai_move (ai, 5, 2));
6472        assert_true (ai_move (ai, 4, 0));
6473        assert_true (ai_move (ai, 3, 2));
6474        assert_true (ai_move (ai, 6, 6));
6475        assert_true (ai_move (ai, 5, 0));
6476        assert_true (ai_move (ai, 5, 1));
6477        assert_true (ai_move (ai, 3, 0));
6478        assert_true (ai_move (ai, 1, 0));
6479        assert_true (ai_move (ai, 6, 0));
6480        assert_true (ai_move (ai, 7, 0));
6481        assert_true (ai_move (ai, 7, 7));
6482        assert_true (ai_move (ai, 6, 1));
6483        assert_true (ai_move (ai, 7, 1));
6484        assert_true (ai_move (ai, 7, 3));
6485        assert_true (game.pass ());
6486        assert_true (ai_move (ai, 7, 6));
6487        assert_true (game.pass ());
6488        assert_true (ai_move (ai, 6, 7));
6489        assert_true (game.pass ());
6490        assert_true (ai_move (ai, 1, 7));
6491    }
6492
6493    private static inline void test_complete_reversi_game_68 ()
6494    {
6495                                  /* 0 1 2 3 4 5 6 7 */
6496        string [] board = {/* 0 */ " . . . . . . . .",
6497                           /* 1 */ " . . . . . . . .",
6498                           /* 2 */ " . . . . . . . .",
6499                           /* 3 */ " . . . L L L . .",
6500                           /* 4 */ " . . . D D L . .",
6501                           /* 5 */ " . . . . D L . .",
6502                           /* 6 */ " . . . . . . . .",
6503                           /* 7 */ " . . . . . . . ."};
6504
6505        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6506        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6507
6508        assert_true (ai_move (ai, 6, 5));
6509        assert_true (ai_move (ai, 5, 6));
6510        assert_true (ai_move (ai, 6, 3));
6511        assert_true (ai_move (ai, 7, 5));
6512        assert_true (ai_move (ai, 5, 7));
6513        assert_true (ai_move (ai, 4, 7));
6514        assert_true (ai_move (ai, 3, 7));
6515        assert_true (ai_move (ai, 7, 3));
6516        assert_true (ai_move (ai, 7, 2));
6517        assert_true (ai_move (ai, 2, 5));
6518        assert_true (ai_move (ai, 5, 2));
6519        assert_true (ai_move (ai, 5, 1));
6520        assert_true (ai_move (ai, 6, 4));
6521        assert_true (ai_move (ai, 6, 2));
6522        assert_true (ai_move (ai, 3, 2));
6523        assert_true (ai_move (ai, 3, 6));
6524        assert_true (ai_move (ai, 4, 6));
6525        assert_true (ai_move (ai, 3, 5));
6526        assert_true (ai_move (ai, 4, 2));
6527        assert_true (ai_move (ai, 4, 1));
6528        assert_true (ai_move (ai, 5, 0));
6529        assert_true (ai_move (ai, 2, 2));
6530        assert_true (ai_move (ai, 1, 5));
6531        assert_true (ai_move (ai, 1, 4));
6532        assert_true (ai_move (ai, 1, 2));
6533        assert_true (ai_move (ai, 3, 1));
6534        assert_true (ai_move (ai, 2, 7));
6535        assert_true (ai_move (ai, 1, 3));
6536        assert_true (ai_move (ai, 0, 3));
6537        assert_true (ai_move (ai, 6, 6));
6538        assert_true (ai_move (ai, 2, 4));
6539        assert_true (ai_move (ai, 0, 5));
6540        assert_true (ai_move (ai, 2, 6));
6541        assert_true (ai_move (ai, 3, 0));
6542        assert_true (ai_move (ai, 4, 0));
6543        assert_true (ai_move (ai, 6, 7));
6544        assert_true (ai_move (ai, 7, 7));
6545        assert_true (ai_move (ai, 0, 2));
6546        assert_true (ai_move (ai, 2, 0));
6547        assert_true (ai_move (ai, 0, 4));
6548        assert_true (ai_move (ai, 2, 3));
6549        assert_true (ai_move (ai, 2, 1));
6550        assert_true (ai_move (ai, 6, 1));
6551        assert_true (ai_move (ai, 1, 7));
6552        assert_true (ai_move (ai, 7, 6));
6553        assert_true (ai_move (ai, 6, 0));
6554        assert_true (ai_move (ai, 7, 0));
6555        assert_true (ai_move (ai, 7, 1));
6556        assert_true (ai_move (ai, 7, 4));
6557        assert_true (ai_move (ai, 1, 6));
6558        assert_true (ai_move (ai, 1, 0));
6559        assert_true (ai_move (ai, 1, 1));
6560        assert_true (ai_move (ai, 0, 0));
6561        assert_true (ai_move (ai, 0, 1));
6562        assert_true (ai_move (ai, 0, 6));
6563        assert_true (ai_move (ai, 0, 7));
6564    }
6565
6566    private static inline void test_complete_reversi_game_69 ()
6567    {
6568                                  /* 0 1 2 3 4 5 6 7 */
6569        string [] board = {/* 0 */ " . . . . . . . .",
6570                           /* 1 */ " . . . . . . . .",
6571                           /* 2 */ " . . . . . . . .",
6572                           /* 3 */ " . . . L D . . .",
6573                           /* 4 */ " . . . L D D . .",
6574                           /* 5 */ " . . . L L L . .",
6575                           /* 6 */ " . . . . . . . .",
6576                           /* 7 */ " . . . . . . . ."};
6577
6578        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6579        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6580
6581        assert_true (ai_move (ai, 5, 6));
6582        assert_true (ai_move (ai, 6, 5));
6583        assert_true (ai_move (ai, 3, 6));
6584        assert_true (ai_move (ai, 5, 7));
6585        assert_true (ai_move (ai, 7, 5));
6586        assert_true (ai_move (ai, 7, 4));
6587        assert_true (ai_move (ai, 7, 3));
6588        assert_true (ai_move (ai, 3, 7));
6589        assert_true (ai_move (ai, 2, 7));
6590        assert_true (ai_move (ai, 5, 2));
6591        assert_true (ai_move (ai, 2, 5));
6592        assert_true (ai_move (ai, 1, 5));
6593        assert_true (ai_move (ai, 4, 6));
6594        assert_true (ai_move (ai, 2, 6));
6595        assert_true (ai_move (ai, 2, 3));
6596        assert_true (ai_move (ai, 6, 3));
6597        assert_true (ai_move (ai, 6, 4));
6598        assert_true (ai_move (ai, 5, 3));
6599        assert_true (ai_move (ai, 2, 4));
6600        assert_true (ai_move (ai, 1, 4));
6601        assert_true (ai_move (ai, 0, 5));
6602        assert_true (ai_move (ai, 2, 2));
6603        assert_true (ai_move (ai, 5, 1));
6604        assert_true (ai_move (ai, 4, 1));
6605        assert_true (ai_move (ai, 2, 1));
6606        assert_true (ai_move (ai, 1, 3));
6607        assert_true (ai_move (ai, 7, 2));
6608        assert_true (ai_move (ai, 3, 1));
6609        assert_true (ai_move (ai, 3, 0));
6610        assert_true (ai_move (ai, 6, 6));
6611        assert_true (ai_move (ai, 4, 2));
6612        assert_true (ai_move (ai, 5, 0));
6613        assert_true (ai_move (ai, 6, 2));
6614        assert_true (ai_move (ai, 0, 3));
6615        assert_true (ai_move (ai, 0, 4));
6616        assert_true (ai_move (ai, 7, 6));
6617        assert_true (ai_move (ai, 7, 7));
6618        assert_true (ai_move (ai, 2, 0));
6619        assert_true (ai_move (ai, 0, 2));
6620        assert_true (ai_move (ai, 4, 0));
6621        assert_true (ai_move (ai, 3, 2));
6622        assert_true (ai_move (ai, 1, 2));
6623        assert_true (ai_move (ai, 1, 6));
6624        assert_true (ai_move (ai, 7, 1));
6625        assert_true (ai_move (ai, 6, 7));
6626        assert_true (ai_move (ai, 0, 6));
6627        assert_true (ai_move (ai, 0, 7));
6628        assert_true (ai_move (ai, 1, 7));
6629        assert_true (ai_move (ai, 4, 7));
6630        assert_true (ai_move (ai, 6, 1));
6631        assert_true (ai_move (ai, 0, 1));
6632        assert_true (ai_move (ai, 1, 1));
6633        assert_true (ai_move (ai, 0, 0));
6634        assert_true (ai_move (ai, 1, 0));
6635        assert_true (ai_move (ai, 6, 0));
6636        assert_true (ai_move (ai, 7, 0));
6637    }
6638
6639    private static inline void test_complete_reversi_game_70 ()
6640    {
6641                                  /* 0 1 2 3 4 5 6 7 */
6642        string [] board = {/* 0 */ " . . . . . . . .",
6643                           /* 1 */ " . . . . . . . .",
6644                           /* 2 */ " . . . D . . . .",
6645                           /* 3 */ " . . . D D . . .",
6646                           /* 4 */ " . . . D L . . .",
6647                           /* 5 */ " . . . . L L . .",
6648                           /* 6 */ " . . . . L . . .",
6649                           /* 7 */ " . . . . . . . ."};
6650
6651        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6652        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6653
6654        assert_true (ai_move (ai, 5, 6));
6655        assert_true (ai_move (ai, 3, 5));
6656        assert_true (ai_move (ai, 5, 4));
6657        assert_true (ai_move (ai, 6, 4));
6658        assert_true (ai_move (ai, 4, 7));
6659        assert_true (ai_move (ai, 3, 7));
6660        assert_true (ai_move (ai, 2, 7));
6661        assert_true (ai_move (ai, 5, 7));
6662        assert_true (ai_move (ai, 6, 7));
6663        assert_true (ai_move (ai, 5, 3));
6664        assert_true (ai_move (ai, 6, 5));
6665        assert_true (ai_move (ai, 7, 5));
6666        assert_true (ai_move (ai, 5, 2));
6667        assert_true (ai_move (ai, 6, 3));
6668        assert_true (ai_move (ai, 2, 6));
6669        assert_true (ai_move (ai, 4, 1));
6670        assert_true (ai_move (ai, 3, 6));
6671        assert_true (ai_move (ai, 2, 1));
6672        assert_true (ai_move (ai, 7, 2));
6673        assert_true (ai_move (ai, 4, 2));
6674        assert_true (ai_move (ai, 6, 2));
6675        assert_true (ai_move (ai, 7, 3));
6676        assert_true (ai_move (ai, 2, 2));
6677        assert_true (ai_move (ai, 3, 1));
6678        assert_true (ai_move (ai, 5, 1));
6679        assert_true (ai_move (ai, 1, 3));
6680        assert_true (ai_move (ai, 1, 2));
6681        assert_true (ai_move (ai, 5, 0));
6682        assert_true (ai_move (ai, 0, 4));
6683        assert_true (ai_move (ai, 0, 2));
6684        assert_true (ai_move (ai, 3, 0));
6685        assert_true (ai_move (ai, 4, 0));
6686        assert_true (ai_move (ai, 6, 0));
6687        assert_true (ai_move (ai, 2, 3));
6688        assert_true (ai_move (ai, 2, 0));
6689        assert_true (ai_move (ai, 0, 3));
6690        assert_true (ai_move (ai, 1, 0));
6691        assert_true (ai_move (ai, 0, 5));
6692        assert_true (ai_move (ai, 1, 4));
6693        assert_true (ai_move (ai, 1, 5));
6694        assert_true (ai_move (ai, 6, 1));
6695        assert_true (ai_move (ai, 2, 5));
6696        assert_true (ai_move (ai, 2, 4));
6697        assert_true (ai_move (ai, 7, 1));
6698        assert_true (ai_move (ai, 1, 1));
6699        assert_true (ai_move (ai, 0, 0));
6700        assert_true (ai_move (ai, 7, 0));
6701        assert_true (ai_move (ai, 1, 7));
6702        assert_true (ai_move (ai, 0, 7));
6703        assert_true (ai_move (ai, 6, 6));
6704        assert_true (ai_move (ai, 7, 4));
6705        assert_true (game.pass ());
6706        assert_true (ai_move (ai, 0, 6));
6707        assert_true (ai_move (ai, 1, 6));
6708        assert_true (ai_move (ai, 0, 1));
6709        assert_true (game.pass ());
6710        assert_true (ai_move (ai, 7, 7));
6711        assert_true (ai_move (ai, 7, 6));
6712    }
6713
6714    private static inline void test_complete_reversi_game_71 ()
6715    {
6716                                  /* 0 1 2 3 4 5 6 7 */
6717        string [] board = {/* 0 */ " . . . . . . . .",
6718                           /* 1 */ " . . . . . . . .",
6719                           /* 2 */ " . . . D L . . .",
6720                           /* 3 */ " . . . D L . . .",
6721                           /* 4 */ " . . . D L . . .",
6722                           /* 5 */ " . . . . D L . .",
6723                           /* 6 */ " . . . . . . . .",
6724                           /* 7 */ " . . . . . . . ."};
6725
6726        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6727        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6728
6729        assert_true (ai_move (ai, 6, 5));
6730        assert_true (ai_move (ai, 2, 1));
6731        assert_true (ai_move (ai, 3, 1));
6732        assert_true (ai_move (ai, 2, 0));
6733        assert_true (ai_move (ai, 5, 1));
6734        assert_true (ai_move (ai, 5, 3));
6735        assert_true (ai_move (ai, 5, 2));
6736        assert_true (ai_move (ai, 4, 6));
6737        assert_true (ai_move (ai, 6, 4));
6738        assert_true (ai_move (ai, 6, 2));
6739        assert_true (ai_move (ai, 6, 3));
6740        assert_true (ai_move (ai, 4, 1));
6741        assert_true (ai_move (ai, 5, 0));
6742        assert_true (ai_move (ai, 4, 0));
6743        assert_true (ai_move (ai, 5, 6));
6744        assert_true (ai_move (ai, 5, 4));
6745        assert_true (ai_move (ai, 7, 2));
6746        assert_true (ai_move (ai, 5, 7));
6747        assert_true (ai_move (ai, 3, 7));
6748        assert_true (ai_move (ai, 7, 5));
6749        assert_true (ai_move (ai, 3, 5));
6750        assert_true (ai_move (ai, 7, 4));
6751        assert_true (ai_move (ai, 7, 3));
6752        assert_true (ai_move (ai, 7, 1));
6753        assert_true (ai_move (ai, 3, 0));
6754        assert_true (ai_move (ai, 6, 0));
6755        assert_true (ai_move (ai, 6, 6));
6756        assert_true (ai_move (ai, 7, 6));
6757        assert_true (ai_move (ai, 1, 0));
6758        assert_true (ai_move (ai, 0, 0));
6759        assert_true (ai_move (ai, 6, 1));
6760        assert_true (ai_move (ai, 1, 2));
6761        assert_true (ai_move (ai, 1, 1));
6762        assert_true (ai_move (ai, 7, 0));
6763        assert_true (ai_move (ai, 0, 3));
6764        assert_true (ai_move (ai, 2, 5));
6765        assert_true (ai_move (ai, 2, 6));
6766        assert_true (ai_move (ai, 4, 7));
6767        assert_true (ai_move (ai, 1, 5));
6768        assert_true (ai_move (ai, 2, 7));
6769        assert_true (ai_move (ai, 3, 6));
6770        assert_true (ai_move (ai, 0, 5));
6771        assert_true (ai_move (ai, 1, 4));
6772        assert_true (ai_move (ai, 1, 7));
6773        assert_true (ai_move (ai, 2, 3));
6774        assert_true (ai_move (ai, 0, 2));
6775        assert_true (ai_move (ai, 2, 4));
6776        assert_true (ai_move (ai, 1, 6));
6777        assert_true (ai_move (ai, 0, 1));
6778        assert_true (ai_move (ai, 0, 4));
6779        assert_true (ai_move (ai, 1, 3));
6780        assert_true (ai_move (ai, 2, 2));
6781        assert_true (ai_move (ai, 0, 6));
6782        assert_true (ai_move (ai, 7, 7));
6783        assert_true (ai_move (ai, 6, 7));
6784        assert_true (ai_move (ai, 0, 7));
6785    }
6786
6787    private static inline void test_complete_reversi_game_72 ()
6788    {
6789                                  /* 0 1 2 3 4 5 6 7 */
6790        string [] board = {/* 0 */ " . . . . . . . .",
6791                           /* 1 */ " . . . . . . . .",
6792                           /* 2 */ " . . . D . . . .",
6793                           /* 3 */ " . . . D D . . .",
6794                           /* 4 */ " . . . D L . . .",
6795                           /* 5 */ " . . . L L L . .",
6796                           /* 6 */ " . . . . . . . .",
6797                           /* 7 */ " . . . . . . . ."};
6798
6799        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6800        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6801
6802        assert_true (ai_move (ai, 5, 6));
6803        assert_true (ai_move (ai, 4, 6));
6804        assert_true (ai_move (ai, 5, 4));
6805        assert_true (ai_move (ai, 6, 4));
6806        assert_true (ai_move (ai, 4, 7));
6807        assert_true (ai_move (ai, 3, 7));
6808        assert_true (ai_move (ai, 2, 7));
6809        assert_true (ai_move (ai, 5, 7));
6810        assert_true (ai_move (ai, 6, 7));
6811        assert_true (ai_move (ai, 5, 3));
6812        assert_true (ai_move (ai, 6, 5));
6813        assert_true (ai_move (ai, 7, 5));
6814        assert_true (ai_move (ai, 5, 2));
6815        assert_true (ai_move (ai, 6, 3));
6816        assert_true (ai_move (ai, 2, 6));
6817        assert_true (ai_move (ai, 4, 1));
6818        assert_true (ai_move (ai, 3, 6));
6819        assert_true (ai_move (ai, 2, 1));
6820        assert_true (ai_move (ai, 7, 2));
6821        assert_true (ai_move (ai, 4, 2));
6822        assert_true (ai_move (ai, 6, 2));
6823        assert_true (ai_move (ai, 7, 3));
6824        assert_true (ai_move (ai, 2, 2));
6825        assert_true (ai_move (ai, 3, 1));
6826        assert_true (ai_move (ai, 5, 1));
6827        assert_true (ai_move (ai, 1, 3));
6828        assert_true (ai_move (ai, 1, 2));
6829        assert_true (ai_move (ai, 5, 0));
6830        assert_true (ai_move (ai, 0, 4));
6831        assert_true (ai_move (ai, 0, 2));
6832        assert_true (ai_move (ai, 3, 0));
6833        assert_true (ai_move (ai, 4, 0));
6834        assert_true (ai_move (ai, 6, 0));
6835        assert_true (ai_move (ai, 2, 3));
6836        assert_true (ai_move (ai, 2, 0));
6837        assert_true (ai_move (ai, 0, 3));
6838        assert_true (ai_move (ai, 1, 0));
6839        assert_true (ai_move (ai, 0, 5));
6840        assert_true (ai_move (ai, 1, 4));
6841        assert_true (ai_move (ai, 1, 5));
6842        assert_true (ai_move (ai, 6, 1));
6843        assert_true (ai_move (ai, 2, 5));
6844        assert_true (ai_move (ai, 2, 4));
6845        assert_true (ai_move (ai, 7, 1));
6846        assert_true (ai_move (ai, 1, 1));
6847        assert_true (ai_move (ai, 0, 0));
6848        assert_true (ai_move (ai, 7, 0));
6849        assert_true (ai_move (ai, 1, 7));
6850        assert_true (ai_move (ai, 0, 7));
6851        assert_true (ai_move (ai, 6, 6));
6852        assert_true (ai_move (ai, 7, 4));
6853        assert_true (game.pass ());
6854        assert_true (ai_move (ai, 0, 6));
6855        assert_true (ai_move (ai, 1, 6));
6856        assert_true (ai_move (ai, 0, 1));
6857        assert_true (game.pass ());
6858        assert_true (ai_move (ai, 7, 7));
6859        assert_true (ai_move (ai, 7, 6));
6860    }
6861
6862    private static inline void test_complete_reversi_game_73 ()
6863    {
6864                                  /* 0 1 2 3 4 5 6 7 */
6865        string [] board = {/* 0 */ " . . . . . . . .",
6866                           /* 1 */ " . . . . . . . .",
6867                           /* 2 */ " . . . D . . . .",
6868                           /* 3 */ " . . . D D . . .",
6869                           /* 4 */ " . . L L L . . .",
6870                           /* 5 */ " . . . . D L . .",
6871                           /* 6 */ " . . . . . . . .",
6872                           /* 7 */ " . . . . . . . ."};
6873
6874        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6875        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6876
6877        assert_true (ai_move (ai, 6, 5));
6878        assert_true (ai_move (ai, 4, 6));
6879        assert_true (ai_move (ai, 1, 5));
6880        assert_true (ai_move (ai, 6, 4));
6881        assert_true (ai_move (ai, 2, 5));
6882        assert_true (ai_move (ai, 7, 5));
6883        assert_true (ai_move (ai, 5, 6));
6884        assert_true (ai_move (ai, 4, 7));
6885        assert_true (ai_move (ai, 5, 4));
6886        assert_true (ai_move (ai, 5, 3));
6887        assert_true (ai_move (ai, 6, 2));
6888        assert_true (ai_move (ai, 3, 5));
6889        assert_true (ai_move (ai, 2, 6));
6890        assert_true (ai_move (ai, 0, 5));
6891        assert_true (ai_move (ai, 3, 6));
6892        assert_true (ai_move (ai, 1, 3));
6893        assert_true (ai_move (ai, 6, 3));
6894        assert_true (ai_move (ai, 2, 7));
6895        assert_true (ai_move (ai, 1, 4));
6896        assert_true (ai_move (ai, 5, 2));
6897        assert_true (ai_move (ai, 4, 2));
6898        assert_true (ai_move (ai, 3, 7));
6899        assert_true (ai_move (ai, 5, 7));
6900        assert_true (ai_move (ai, 6, 7));
6901        assert_true (ai_move (ai, 7, 3));
6902        assert_true (ai_move (ai, 5, 1));
6903        assert_true (ai_move (ai, 3, 1));
6904        assert_true (ai_move (ai, 4, 1));
6905        assert_true (ai_move (ai, 4, 0));
6906        assert_true (ai_move (ai, 2, 2));
6907        assert_true (ai_move (ai, 2, 3));
6908        assert_true (ai_move (ai, 2, 0));
6909        assert_true (ai_move (ai, 5, 0));
6910        assert_true (ai_move (ai, 1, 2));
6911        assert_true (ai_move (ai, 2, 1));
6912        assert_true (ai_move (ai, 0, 4));
6913        assert_true (ai_move (ai, 0, 2));
6914        assert_true (ai_move (ai, 1, 1));
6915        assert_true (ai_move (ai, 6, 1));
6916        assert_true (ai_move (ai, 7, 4));
6917        assert_true (ai_move (ai, 7, 6));
6918        assert_true (ai_move (ai, 6, 6));
6919        assert_true (ai_move (ai, 0, 3));
6920        assert_true (ai_move (ai, 0, 1));
6921        assert_true (ai_move (ai, 1, 7));
6922        assert_true (ai_move (ai, 0, 7));
6923        assert_true (ai_move (ai, 0, 6));
6924        assert_true (ai_move (ai, 7, 2));
6925        assert_true (ai_move (ai, 7, 1));
6926        assert_true (ai_move (ai, 1, 6));
6927        assert_true (ai_move (ai, 0, 0));
6928        assert_true (ai_move (ai, 3, 0));
6929        assert_true (ai_move (ai, 1, 0));
6930        assert_true (ai_move (ai, 7, 0));
6931        assert_true (ai_move (ai, 7, 7));
6932        assert_true (ai_move (ai, 6, 0));
6933    }
6934
6935    private static inline void test_complete_reversi_game_74 ()
6936    {
6937                                  /* 0 1 2 3 4 5 6 7 */
6938        string [] board = {/* 0 */ " . . . . . . . .",
6939                           /* 1 */ " . . . . . . . .",
6940                           /* 2 */ " . . L D . . . .",
6941                           /* 3 */ " . . . L D . . .",
6942                           /* 4 */ " . . . D L . . .",
6943                           /* 5 */ " . . . . D L . .",
6944                           /* 6 */ " . . . . . . . .",
6945                           /* 7 */ " . . . . . . . ."};
6946
6947        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
6948        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
6949
6950        assert_true (ai_move (ai, 6, 5));
6951        assert_true (ai_move (ai, 3, 1));
6952        assert_true (ai_move (ai, 5, 4));
6953        assert_true (ai_move (ai, 5, 3));
6954        assert_true (ai_move (ai, 6, 2));
6955        assert_true (ai_move (ai, 6, 3));
6956        assert_true (ai_move (ai, 7, 2));
6957        assert_true (ai_move (ai, 5, 6));
6958        assert_true (ai_move (ai, 6, 4));
6959        assert_true (ai_move (ai, 7, 4));
6960        assert_true (ai_move (ai, 4, 6));
6961        assert_true (ai_move (ai, 5, 2));
6962        assert_true (ai_move (ai, 7, 5));
6963        assert_true (ai_move (ai, 7, 6));
6964        assert_true (ai_move (ai, 5, 1));
6965        assert_true (ai_move (ai, 5, 0));
6966        assert_true (ai_move (ai, 4, 2));
6967        assert_true (ai_move (ai, 4, 1));
6968        assert_true (ai_move (ai, 5, 7));
6969        assert_true (ai_move (ai, 3, 6));
6970        assert_true (ai_move (ai, 3, 5));
6971        assert_true (ai_move (ai, 2, 5));
6972        assert_true (ai_move (ai, 1, 2));
6973        assert_true (ai_move (ai, 1, 3));
6974        assert_true (ai_move (ai, 2, 7));
6975        assert_true (ai_move (ai, 2, 3));
6976        assert_true (ai_move (ai, 2, 1));
6977        assert_true (ai_move (ai, 2, 0));
6978        assert_true (ai_move (ai, 2, 6));
6979        assert_true (ai_move (ai, 0, 2));
6980        assert_true (ai_move (ai, 1, 5));
6981        assert_true (ai_move (ai, 0, 5));
6982        assert_true (ai_move (ai, 2, 4));
6983        assert_true (ai_move (ai, 1, 4));
6984        assert_true (ai_move (ai, 0, 3));
6985        assert_true (ai_move (ai, 0, 4));
6986        assert_true (ai_move (ai, 3, 0));
6987        assert_true (ai_move (ai, 4, 0));
6988        assert_true (ai_move (ai, 7, 3));
6989        assert_true (ai_move (ai, 7, 1));
6990        assert_true (ai_move (ai, 1, 1));
6991        assert_true (ai_move (ai, 6, 1));
6992        assert_true (ai_move (ai, 7, 0));
6993        assert_true (ai_move (ai, 6, 0));
6994        assert_true (ai_move (ai, 7, 7));
6995        assert_true (ai_move (ai, 1, 6));
6996        assert_true (ai_move (ai, 1, 0));
6997        assert_true (ai_move (ai, 1, 7));
6998        assert_true (ai_move (ai, 6, 6));
6999        assert_true (ai_move (ai, 3, 7));
7000        assert_true (ai_move (ai, 0, 7));
7001        assert_true (ai_move (ai, 4, 7));
7002        assert_true (ai_move (ai, 0, 6));
7003        assert_true (ai_move (ai, 6, 7));
7004        assert_true (ai_move (ai, 0, 1));
7005        assert_true (ai_move (ai, 0, 0));
7006    }
7007
7008    private static inline void test_complete_reversi_game_75 ()
7009    {
7010                                  /* 0 1 2 3 4 5 6 7 */
7011        string [] board = {/* 0 */ " . . . . . . . .",
7012                           /* 1 */ " . . . . . . . .",
7013                           /* 2 */ " . . . . . . . .",
7014                           /* 3 */ " . . D D D . . .",
7015                           /* 4 */ " . . . D L . . .",
7016                           /* 5 */ " . . . . L L . .",
7017                           /* 6 */ " . . . . L . . .",
7018                           /* 7 */ " . . . . . . . ."};
7019
7020        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7021        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7022
7023        assert_true (ai_move (ai, 5, 6));
7024        assert_true (ai_move (ai, 3, 5));
7025        assert_true (ai_move (ai, 5, 4));
7026        assert_true (ai_move (ai, 6, 4));
7027        assert_true (ai_move (ai, 4, 7));
7028        assert_true (ai_move (ai, 3, 7));
7029        assert_true (ai_move (ai, 2, 7));
7030        assert_true (ai_move (ai, 5, 7));
7031        assert_true (ai_move (ai, 6, 7));
7032        assert_true (ai_move (ai, 5, 3));
7033        assert_true (ai_move (ai, 6, 5));
7034        assert_true (ai_move (ai, 7, 5));
7035        assert_true (ai_move (ai, 5, 2));
7036        assert_true (ai_move (ai, 6, 3));
7037        assert_true (ai_move (ai, 2, 4));
7038        assert_true (ai_move (ai, 6, 2));
7039        assert_true (ai_move (ai, 7, 2));
7040        assert_true (ai_move (ai, 5, 1));
7041        assert_true (ai_move (ai, 3, 6));
7042        assert_true (ai_move (ai, 7, 4));
7043        assert_true (ai_move (ai, 4, 0));
7044        assert_true (ai_move (ai, 3, 2));
7045        assert_true (ai_move (ai, 4, 1));
7046        assert_true (ai_move (ai, 2, 1));
7047        assert_true (ai_move (ai, 3, 1));
7048        assert_true (ai_move (ai, 5, 0));
7049        assert_true (ai_move (ai, 7, 3));
7050        assert_true (ai_move (ai, 7, 1));
7051        assert_true (ai_move (ai, 4, 2));
7052        assert_true (ai_move (ai, 3, 0));
7053        assert_true (ai_move (ai, 1, 0));
7054        assert_true (ai_move (ai, 1, 2));
7055        assert_true (ai_move (ai, 0, 1));
7056        assert_true (ai_move (ai, 0, 3));
7057        assert_true (ai_move (ai, 6, 6));
7058        assert_true (ai_move (ai, 7, 6));
7059        assert_true (ai_move (ai, 6, 1));
7060        assert_true (ai_move (ai, 7, 7));
7061        assert_true (ai_move (ai, 1, 1));
7062        assert_true (ai_move (ai, 1, 7));
7063        assert_true (ai_move (ai, 1, 3));
7064        assert_true (ai_move (ai, 2, 2));
7065        assert_true (ai_move (ai, 2, 0));
7066        assert_true (ai_move (ai, 0, 0));
7067        assert_true (game.pass ());
7068        assert_true (ai_move (ai, 0, 2));
7069        assert_true (ai_move (ai, 0, 4));
7070        assert_true (ai_move (ai, 0, 5));
7071        assert_true (ai_move (ai, 1, 4));
7072        assert_true (ai_move (ai, 2, 6));
7073        assert_true (ai_move (ai, 2, 5));
7074        assert_true (ai_move (ai, 1, 5));
7075        assert_true (ai_move (ai, 1, 6));
7076        assert_true (ai_move (ai, 7, 0));
7077        assert_true (ai_move (ai, 6, 0));
7078        assert_true (ai_move (ai, 0, 6));
7079        assert_true (ai_move (ai, 0, 7));
7080    }
7081
7082    private static inline void test_complete_reversi_game_76 ()
7083    {
7084                                  /* 0 1 2 3 4 5 6 7 */
7085        string [] board = {/* 0 */ " . . . . . . . .",
7086                           /* 1 */ " . . . . . . . .",
7087                           /* 2 */ " . . . . L . . .",
7088                           /* 3 */ " . . D D L . . .",
7089                           /* 4 */ " . . . D L . . .",
7090                           /* 5 */ " . . . . D L . .",
7091                           /* 6 */ " . . . . . . . .",
7092                           /* 7 */ " . . . . . . . ."};
7093
7094        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7095        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7096
7097        assert_true (ai_move (ai, 6, 5));
7098        assert_true (ai_move (ai, 2, 5));
7099        assert_true (ai_move (ai, 5, 1));
7100        assert_true (ai_move (ai, 4, 1));
7101        assert_true (ai_move (ai, 3, 1));
7102        assert_true (ai_move (ai, 1, 2));
7103        assert_true (ai_move (ai, 1, 3));
7104        assert_true (ai_move (ai, 4, 6));
7105        assert_true (ai_move (ai, 3, 7));
7106        assert_true (ai_move (ai, 2, 0));
7107        assert_true (ai_move (ai, 5, 6));
7108        assert_true (ai_move (ai, 4, 0));
7109        assert_true (ai_move (ai, 5, 4));
7110        assert_true (ai_move (ai, 6, 2));
7111        assert_true (ai_move (ai, 5, 3));
7112        assert_true (ai_move (ai, 1, 4));
7113        assert_true (ai_move (ai, 0, 5));
7114        assert_true (ai_move (ai, 0, 3));
7115        assert_true (ai_move (ai, 6, 0));
7116        assert_true (ai_move (ai, 6, 1));
7117        assert_true (ai_move (ai, 7, 1));
7118        assert_true (ai_move (ai, 7, 3));
7119        assert_true (ai_move (ai, 0, 1));
7120        assert_true (ai_move (ai, 2, 1));
7121        assert_true (ai_move (ai, 1, 6));
7122        assert_true (ai_move (ai, 3, 6));
7123        assert_true (ai_move (ai, 3, 5));
7124        assert_true (ai_move (ai, 7, 5));
7125        assert_true (ai_move (ai, 2, 4));
7126        assert_true (ai_move (ai, 2, 2));
7127        assert_true (ai_move (ai, 6, 4));
7128        assert_true (ai_move (ai, 7, 4));
7129        assert_true (ai_move (ai, 0, 4));
7130        assert_true (ai_move (ai, 6, 6));
7131        assert_true (ai_move (ai, 1, 5));
7132        assert_true (ai_move (ai, 0, 6));
7133        assert_true (ai_move (ai, 3, 2));
7134        assert_true (ai_move (ai, 5, 7));
7135        assert_true (ai_move (ai, 3, 0));
7136        assert_true (ai_move (ai, 4, 7));
7137        assert_true (ai_move (ai, 2, 6));
7138        assert_true (ai_move (ai, 2, 7));
7139        assert_true (ai_move (ai, 5, 2));
7140        assert_true (ai_move (ai, 5, 0));
7141        assert_true (ai_move (ai, 7, 0));
7142        assert_true (ai_move (ai, 6, 3));
7143        assert_true (ai_move (ai, 7, 2));
7144        assert_true (game.pass ());
7145        assert_true (ai_move (ai, 7, 6));
7146        assert_true (game.pass ());
7147        assert_true (ai_move (ai, 7, 7));
7148        assert_true (ai_move (ai, 6, 7));
7149        assert_true (ai_move (ai, 1, 7));
7150        assert_true (game.pass ());
7151        assert_true (ai_move (ai, 0, 7));
7152        assert_true (game.pass ());
7153        assert_true (ai_move (ai, 0, 2));
7154        assert_true (ai_move (ai, 1, 1));
7155        assert_true (ai_move (ai, 1, 0));
7156        assert_true (ai_move (ai, 0, 0));
7157    }
7158
7159    private static inline void test_complete_reversi_game_77 ()
7160    {
7161                                  /* 0 1 2 3 4 5 6 7 */
7162        string [] board = {/* 0 */ " . . . . . . . .",
7163                           /* 1 */ " . . . . . . . .",
7164                           /* 2 */ " . . . . . . . .",
7165                           /* 3 */ " . . D D D . . .",
7166                           /* 4 */ " . . . D L . . .",
7167                           /* 5 */ " . . . L L L . .",
7168                           /* 6 */ " . . . . . . . .",
7169                           /* 7 */ " . . . . . . . ."};
7170
7171        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7172        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7173
7174        assert_true (ai_move (ai, 5, 6));
7175        assert_true (ai_move (ai, 4, 6));
7176        assert_true (ai_move (ai, 5, 4));
7177        assert_true (ai_move (ai, 6, 4));
7178        assert_true (ai_move (ai, 4, 7));
7179        assert_true (ai_move (ai, 3, 7));
7180        assert_true (ai_move (ai, 2, 7));
7181        assert_true (ai_move (ai, 5, 7));
7182        assert_true (ai_move (ai, 6, 7));
7183        assert_true (ai_move (ai, 5, 3));
7184        assert_true (ai_move (ai, 6, 5));
7185        assert_true (ai_move (ai, 7, 5));
7186        assert_true (ai_move (ai, 5, 2));
7187        assert_true (ai_move (ai, 6, 3));
7188        assert_true (ai_move (ai, 2, 4));
7189        assert_true (ai_move (ai, 6, 2));
7190        assert_true (ai_move (ai, 7, 2));
7191        assert_true (ai_move (ai, 5, 1));
7192        assert_true (ai_move (ai, 3, 6));
7193        assert_true (ai_move (ai, 7, 4));
7194        assert_true (ai_move (ai, 4, 0));
7195        assert_true (ai_move (ai, 3, 2));
7196        assert_true (ai_move (ai, 4, 1));
7197        assert_true (ai_move (ai, 2, 1));
7198        assert_true (ai_move (ai, 3, 1));
7199        assert_true (ai_move (ai, 5, 0));
7200        assert_true (ai_move (ai, 7, 3));
7201        assert_true (ai_move (ai, 7, 1));
7202        assert_true (ai_move (ai, 4, 2));
7203        assert_true (ai_move (ai, 3, 0));
7204        assert_true (ai_move (ai, 1, 0));
7205        assert_true (ai_move (ai, 1, 2));
7206        assert_true (ai_move (ai, 0, 1));
7207        assert_true (ai_move (ai, 0, 3));
7208        assert_true (ai_move (ai, 6, 6));
7209        assert_true (ai_move (ai, 7, 6));
7210        assert_true (ai_move (ai, 6, 1));
7211        assert_true (ai_move (ai, 7, 7));
7212        assert_true (ai_move (ai, 1, 1));
7213        assert_true (ai_move (ai, 1, 7));
7214        assert_true (ai_move (ai, 1, 3));
7215        assert_true (ai_move (ai, 2, 2));
7216        assert_true (ai_move (ai, 2, 0));
7217        assert_true (ai_move (ai, 0, 0));
7218        assert_true (game.pass ());
7219        assert_true (ai_move (ai, 0, 2));
7220        assert_true (ai_move (ai, 0, 4));
7221        assert_true (ai_move (ai, 0, 5));
7222        assert_true (ai_move (ai, 1, 4));
7223        assert_true (ai_move (ai, 2, 6));
7224        assert_true (ai_move (ai, 2, 5));
7225        assert_true (ai_move (ai, 1, 5));
7226        assert_true (ai_move (ai, 1, 6));
7227        assert_true (ai_move (ai, 7, 0));
7228        assert_true (ai_move (ai, 6, 0));
7229        assert_true (ai_move (ai, 0, 6));
7230        assert_true (ai_move (ai, 0, 7));
7231    }
7232
7233    private static inline void test_complete_reversi_game_78 ()
7234    {
7235                                  /* 0 1 2 3 4 5 6 7 */
7236        string [] board = {/* 0 */ " . . . . . . . .",
7237                           /* 1 */ " . . . . . . . .",
7238                           /* 2 */ " . . . . . . . .",
7239                           /* 3 */ " . . D D D . . .",
7240                           /* 4 */ " . . L L L . . .",
7241                           /* 5 */ " . . . . D L . .",
7242                           /* 6 */ " . . . . . . . .",
7243                           /* 7 */ " . . . . . . . ."};
7244
7245        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7246        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7247
7248        assert_true (ai_move (ai, 6, 5));
7249        assert_true (ai_move (ai, 1, 2));
7250        assert_true (ai_move (ai, 1, 3));
7251        assert_true (ai_move (ai, 4, 6));
7252        assert_true (ai_move (ai, 1, 5));
7253        assert_true (ai_move (ai, 6, 4));
7254        assert_true (ai_move (ai, 2, 5));
7255        assert_true (ai_move (ai, 7, 5));
7256        assert_true (ai_move (ai, 5, 6));
7257        assert_true (ai_move (ai, 4, 7));
7258        assert_true (ai_move (ai, 5, 4));
7259        assert_true (ai_move (ai, 5, 3));
7260        assert_true (ai_move (ai, 6, 2));
7261        assert_true (ai_move (ai, 3, 6));
7262        assert_true (ai_move (ai, 5, 7));
7263        assert_true (ai_move (ai, 6, 3));
7264        assert_true (ai_move (ai, 3, 5));
7265        assert_true (ai_move (ai, 0, 5));
7266        assert_true (ai_move (ai, 3, 7));
7267        assert_true (ai_move (ai, 2, 7));
7268        assert_true (ai_move (ai, 1, 7));
7269        assert_true (ai_move (ai, 2, 2));
7270        assert_true (ai_move (ai, 2, 6));
7271        assert_true (ai_move (ai, 1, 4));
7272        assert_true (ai_move (ai, 2, 1));
7273        assert_true (ai_move (ai, 3, 1));
7274        assert_true (ai_move (ai, 7, 2));
7275        assert_true (ai_move (ai, 5, 2));
7276        assert_true (ai_move (ai, 5, 1));
7277        assert_true (ai_move (ai, 3, 2));
7278        assert_true (ai_move (ai, 7, 3));
7279        assert_true (ai_move (ai, 4, 2));
7280        assert_true (ai_move (ai, 7, 4));
7281        assert_true (ai_move (ai, 7, 1));
7282        assert_true (ai_move (ai, 2, 0));
7283        assert_true (ai_move (ai, 4, 1));
7284        assert_true (ai_move (ai, 4, 0));
7285        assert_true (ai_move (ai, 7, 6));
7286        assert_true (ai_move (ai, 0, 2));
7287        assert_true (ai_move (ai, 3, 0));
7288        assert_true (ai_move (ai, 0, 3));
7289        assert_true (ai_move (ai, 5, 0));
7290        assert_true (ai_move (ai, 6, 0));
7291        assert_true (ai_move (ai, 0, 4));
7292        assert_true (ai_move (ai, 0, 6));
7293        assert_true (ai_move (ai, 1, 6));
7294        assert_true (ai_move (ai, 1, 1));
7295        assert_true (ai_move (ai, 6, 1));
7296        assert_true (ai_move (ai, 6, 6));
7297        assert_true (ai_move (ai, 7, 7));
7298        assert_true (ai_move (ai, 6, 7));
7299        assert_true (ai_move (ai, 0, 7));
7300        assert_true (game.pass ());
7301        assert_true (ai_move (ai, 0, 0));
7302        assert_true (ai_move (ai, 0, 1));
7303        assert_true (ai_move (ai, 1, 0));
7304        assert_true (game.pass ());
7305        assert_true (ai_move (ai, 7, 0));
7306    }
7307
7308    private static inline void test_complete_reversi_game_79 ()
7309    {
7310                                  /* 0 1 2 3 4 5 6 7 */
7311        string [] board = {/* 0 */ " . . . . . . . .",
7312                           /* 1 */ " . . . . . . . .",
7313                           /* 2 */ " . . L . . . . .",
7314                           /* 3 */ " . . D L D . . .",
7315                           /* 4 */ " . . . D L . . .",
7316                           /* 5 */ " . . . . D L . .",
7317                           /* 6 */ " . . . . . . . .",
7318                           /* 7 */ " . . . . . . . ."};
7319
7320        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7321        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7322
7323        assert_true (ai_move (ai, 6, 5));
7324        assert_true (ai_move (ai, 1, 3));
7325        assert_true (ai_move (ai, 5, 4));
7326        assert_true (ai_move (ai, 3, 5));
7327        assert_true (ai_move (ai, 2, 5));
7328        assert_true (ai_move (ai, 5, 6));
7329        assert_true (ai_move (ai, 3, 6));
7330        assert_true (ai_move (ai, 7, 4));
7331        assert_true (ai_move (ai, 7, 5));
7332        assert_true (ai_move (ai, 7, 6));
7333        assert_true (ai_move (ai, 4, 7));
7334        assert_true (ai_move (ai, 1, 5));
7335        assert_true (ai_move (ai, 4, 6));
7336        assert_true (ai_move (ai, 5, 7));
7337        assert_true (ai_move (ai, 1, 4));
7338        assert_true (ai_move (ai, 3, 7));
7339        assert_true (ai_move (ai, 0, 5));
7340        assert_true (ai_move (ai, 6, 3));
7341        assert_true (ai_move (ai, 6, 4));
7342        assert_true (ai_move (ai, 7, 3));
7343        assert_true (ai_move (ai, 2, 7));
7344        assert_true (ai_move (ai, 1, 7));
7345        assert_true (ai_move (ai, 2, 6));
7346        assert_true (ai_move (ai, 2, 4));
7347        assert_true (ai_move (ai, 4, 2));
7348        assert_true (ai_move (ai, 0, 4));
7349        assert_true (ai_move (ai, 1, 6));
7350        assert_true (ai_move (ai, 5, 1));
7351        assert_true (ai_move (ai, 4, 1));
7352        assert_true (ai_move (ai, 3, 1));
7353        assert_true (ai_move (ai, 2, 0));
7354        assert_true (ai_move (ai, 2, 1));
7355        assert_true (ai_move (ai, 4, 0));
7356        assert_true (ai_move (ai, 3, 2));
7357        assert_true (ai_move (ai, 5, 2));
7358        assert_true (ai_move (ai, 6, 2));
7359        assert_true (ai_move (ai, 3, 0));
7360        assert_true (ai_move (ai, 5, 3));
7361        assert_true (ai_move (ai, 7, 2));
7362        assert_true (ai_move (ai, 7, 1));
7363        assert_true (ai_move (ai, 5, 0));
7364        assert_true (ai_move (ai, 0, 7));
7365        assert_true (ai_move (ai, 0, 3));
7366        assert_true (ai_move (ai, 1, 2));
7367        assert_true (ai_move (ai, 1, 0));
7368        assert_true (ai_move (ai, 6, 1));
7369        assert_true (ai_move (ai, 0, 2));
7370        assert_true (ai_move (ai, 6, 0));
7371        assert_true (ai_move (ai, 7, 0));
7372        assert_true (ai_move (ai, 1, 1));
7373        assert_true (ai_move (ai, 7, 7));
7374        assert_true (game.pass ());
7375        assert_true (ai_move (ai, 6, 7));
7376        assert_true (ai_move (ai, 6, 6));
7377        assert_true (ai_move (ai, 0, 0));
7378        assert_true (ai_move (ai, 0, 1));
7379        assert_true (ai_move (ai, 0, 6));
7380    }
7381
7382    private static inline void test_complete_reversi_game_80 ()
7383    {
7384                                  /* 0 1 2 3 4 5 6 7 */
7385        string [] board = {/* 0 */ " . . . . . . . .",
7386                           /* 1 */ " . . . . . . . .",
7387                           /* 2 */ " . . . . . . D .",
7388                           /* 3 */ " . . . L L L L .",
7389                           /* 4 */ " . . . D D . . .",
7390                           /* 5 */ " . . . . D . . .",
7391                           /* 6 */ " . . . . . . . .",
7392                           /* 7 */ " . . . . . . . ."};
7393
7394        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7395        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7396
7397        assert_true (ai_move (ai, 2, 2));
7398        assert_true (ai_move (ai, 2, 5));
7399        assert_true (ai_move (ai, 2, 3));
7400        assert_true (ai_move (ai, 3, 5));
7401        assert_true (ai_move (ai, 1, 5));
7402        assert_true (ai_move (ai, 4, 6));
7403        assert_true (ai_move (ai, 5, 6));
7404        assert_true (ai_move (ai, 2, 6));
7405        assert_true (ai_move (ai, 3, 6));
7406        assert_true (ai_move (ai, 0, 4));
7407        assert_true (ai_move (ai, 0, 5));
7408        assert_true (ai_move (ai, 0, 6));
7409        assert_true (ai_move (ai, 5, 5));
7410        assert_true (ai_move (ai, 2, 4));
7411        assert_true (ai_move (ai, 1, 3));
7412        assert_true (ai_move (ai, 6, 5));
7413        assert_true (ai_move (ai, 2, 7));
7414        assert_true (ai_move (ai, 1, 2));
7415        assert_true (ai_move (ai, 5, 4));
7416        assert_true (ai_move (ai, 2, 1));
7417        assert_true (ai_move (ai, 3, 1));
7418        assert_true (ai_move (ai, 0, 3));
7419        assert_true (ai_move (ai, 5, 2));
7420        assert_true (ai_move (ai, 4, 7));
7421        assert_true (ai_move (ai, 5, 7));
7422        assert_true (ai_move (ai, 3, 7));
7423        assert_true (ai_move (ai, 2, 0));
7424        assert_true (ai_move (ai, 1, 4));
7425        assert_true (ai_move (ai, 7, 5));
7426        assert_true (ai_move (ai, 6, 4));
7427        assert_true (ai_move (ai, 6, 6));
7428        assert_true (ai_move (ai, 7, 1));
7429        assert_true (ai_move (ai, 0, 2));
7430        assert_true (ai_move (ai, 0, 1));
7431        assert_true (ai_move (ai, 7, 4));
7432        assert_true (ai_move (ai, 3, 2));
7433        assert_true (ai_move (ai, 4, 2));
7434        assert_true (ai_move (ai, 4, 1));
7435        assert_true (ai_move (ai, 7, 2));
7436        assert_true (ai_move (ai, 6, 1));
7437        assert_true (ai_move (ai, 5, 1));
7438        assert_true (ai_move (ai, 5, 0));
7439        assert_true (ai_move (ai, 3, 0));
7440        assert_true (ai_move (ai, 4, 0));
7441        assert_true (ai_move (ai, 1, 1));
7442        assert_true (ai_move (ai, 7, 3));
7443        assert_true (ai_move (ai, 7, 0));
7444        assert_true (ai_move (ai, 6, 0));
7445        assert_true (ai_move (ai, 1, 6));
7446        assert_true (ai_move (ai, 0, 7));
7447        assert_true (ai_move (ai, 1, 7));
7448        assert_true (ai_move (ai, 0, 0));
7449        assert_true (ai_move (ai, 1, 0));
7450        assert_true (ai_move (ai, 7, 7));
7451        assert_true (ai_move (ai, 7, 6));
7452        assert_true (ai_move (ai, 6, 7));
7453    }
7454
7455    private static inline void test_complete_reversi_game_81 ()
7456    {
7457                                  /* 0 1 2 3 4 5 6 7 */
7458        string [] board = {/* 0 */ " . . . . . . . .",
7459                           /* 1 */ " . . . . . . . .",
7460                           /* 2 */ " . . . . . . D .",
7461                           /* 3 */ " . . . L L D . .",
7462                           /* 4 */ " . . . D L . . .",
7463                           /* 5 */ " . . . . D L . .",
7464                           /* 6 */ " . . . . . . . .",
7465                           /* 7 */ " . . . . . . . ."};
7466
7467        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7468        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7469
7470        assert_true (ai_move (ai, 6, 5));
7471        assert_true (ai_move (ai, 6, 3));
7472        assert_true (ai_move (ai, 3, 5));
7473        assert_true (ai_move (ai, 2, 5));
7474        assert_true (ai_move (ai, 1, 5));
7475        assert_true (ai_move (ai, 5, 6));
7476        assert_true (ai_move (ai, 4, 6));
7477        assert_true (ai_move (ai, 7, 4));
7478        assert_true (ai_move (ai, 5, 7));
7479        assert_true (ai_move (ai, 3, 6));
7480        assert_true (ai_move (ai, 4, 7));
7481        assert_true (ai_move (ai, 0, 5));
7482        assert_true (ai_move (ai, 1, 4));
7483        assert_true (ai_move (ai, 2, 3));
7484        assert_true (ai_move (ai, 2, 6));
7485        assert_true (ai_move (ai, 5, 4));
7486        assert_true (ai_move (ai, 7, 2));
7487        assert_true (ai_move (ai, 6, 4));
7488        assert_true (ai_move (ai, 7, 3));
7489        assert_true (ai_move (ai, 5, 2));
7490        assert_true (ai_move (ai, 7, 5));
7491        assert_true (ai_move (ai, 2, 7));
7492        assert_true (ai_move (ai, 5, 1));
7493        assert_true (ai_move (ai, 2, 4));
7494        assert_true (ai_move (ai, 1, 2));
7495        assert_true (ai_move (ai, 4, 1));
7496        assert_true (ai_move (ai, 1, 3));
7497        assert_true (ai_move (ai, 2, 2));
7498        assert_true (ai_move (ai, 0, 4));
7499        assert_true (ai_move (ai, 0, 2));
7500        assert_true (ai_move (ai, 2, 1));
7501        assert_true (ai_move (ai, 2, 0));
7502        assert_true (ai_move (ai, 0, 6));
7503        assert_true (ai_move (ai, 5, 0));
7504        assert_true (ai_move (ai, 3, 1));
7505        assert_true (ai_move (ai, 3, 2));
7506        assert_true (ai_move (ai, 3, 0));
7507        assert_true (ai_move (ai, 4, 0));
7508        assert_true (ai_move (ai, 4, 2));
7509        assert_true (ai_move (ai, 6, 1));
7510        assert_true (ai_move (ai, 1, 0));
7511        assert_true (ai_move (ai, 0, 0));
7512        assert_true (ai_move (ai, 7, 0));
7513        assert_true (ai_move (ai, 1, 1));
7514        assert_true (ai_move (ai, 6, 0));
7515        assert_true (ai_move (ai, 7, 1));
7516        assert_true (ai_move (ai, 3, 7));
7517        assert_true (ai_move (ai, 6, 7));
7518        assert_true (ai_move (ai, 1, 6));
7519        assert_true (ai_move (ai, 0, 7));
7520        assert_true (ai_move (ai, 1, 7));
7521        assert_true (ai_move (ai, 0, 3));
7522        assert_true (ai_move (ai, 7, 7));
7523        assert_true (ai_move (ai, 7, 6));
7524        assert_true (ai_move (ai, 6, 6));
7525        assert_true (game.pass ());
7526        assert_true (ai_move (ai, 0, 1));
7527    }
7528
7529    private static inline void test_complete_reversi_game_82 ()
7530    {
7531                                  /* 0 1 2 3 4 5 6 7 */
7532        string [] board = {/* 0 */ " . . . . . . . .",
7533                           /* 1 */ " . . . . . . . .",
7534                           /* 2 */ " . . . . . . D .",
7535                           /* 3 */ " . . . L L D . .",
7536                           /* 4 */ " . . . D L . . .",
7537                           /* 5 */ " . . . . L . . .",
7538                           /* 6 */ " . . . . L . . .",
7539                           /* 7 */ " . . . . . . . ."};
7540
7541        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7542        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7543
7544        assert_true (ai_move (ai, 5, 6));
7545        assert_true (ai_move (ai, 6, 3));
7546        assert_true (ai_move (ai, 4, 7));
7547        assert_true (ai_move (ai, 2, 5));
7548        assert_true (ai_move (ai, 2, 3));
7549        assert_true (ai_move (ai, 1, 3));
7550        assert_true (ai_move (ai, 1, 2));
7551        assert_true (ai_move (ai, 2, 4));
7552        assert_true (ai_move (ai, 2, 6));
7553        assert_true (ai_move (ai, 3, 5));
7554        assert_true (ai_move (ai, 0, 2));
7555        assert_true (ai_move (ai, 3, 6));
7556        assert_true (ai_move (ai, 2, 7));
7557        assert_true (ai_move (ai, 3, 7));
7558        assert_true (ai_move (ai, 6, 4));
7559        assert_true (ai_move (ai, 7, 3));
7560        assert_true (ai_move (ai, 5, 4));
7561        assert_true (ai_move (ai, 5, 1));
7562        assert_true (ai_move (ai, 7, 2));
7563        assert_true (ai_move (ai, 7, 1));
7564        assert_true (ai_move (ai, 2, 2));
7565        assert_true (ai_move (ai, 1, 4));
7566        assert_true (ai_move (ai, 1, 5));
7567        assert_true (ai_move (ai, 3, 2));
7568        assert_true (ai_move (ai, 4, 1));
7569        assert_true (ai_move (ai, 2, 1));
7570        assert_true (ai_move (ai, 3, 0));
7571        assert_true (ai_move (ai, 5, 0));
7572        assert_true (ai_move (ai, 4, 2));
7573        assert_true (ai_move (ai, 5, 2));
7574        assert_true (ai_move (ai, 4, 0));
7575        assert_true (ai_move (ai, 2, 0));
7576        assert_true (ai_move (ai, 6, 1));
7577        assert_true (ai_move (ai, 7, 4));
7578        assert_true (ai_move (ai, 3, 1));
7579        assert_true (ai_move (ai, 7, 5));
7580        assert_true (ai_move (ai, 6, 5));
7581        assert_true (ai_move (ai, 0, 5));
7582        assert_true (ai_move (ai, 0, 3));
7583        assert_true (ai_move (ai, 6, 0));
7584        assert_true (ai_move (ai, 0, 4));
7585        assert_true (ai_move (ai, 0, 1));
7586        assert_true (ai_move (ai, 1, 1));
7587        assert_true (ai_move (ai, 0, 6));
7588        assert_true (ai_move (ai, 1, 6));
7589        assert_true (ai_move (ai, 7, 6));
7590        assert_true (ai_move (ai, 6, 6));
7591        assert_true (ai_move (ai, 1, 0));
7592        assert_true (game.pass ());
7593        assert_true (ai_move (ai, 7, 0));
7594        assert_true (game.pass ());
7595        assert_true (ai_move (ai, 0, 0));
7596        assert_true (game.pass ());
7597        assert_true (ai_move (ai, 0, 7));
7598        assert_true (ai_move (ai, 1, 7));
7599        assert_true (ai_move (ai, 5, 7));
7600        assert_true (ai_move (ai, 6, 7));
7601        assert_true (ai_move (ai, 7, 7));
7602        assert_true (game.pass ());
7603        assert_true (ai_move (ai, 5, 5));
7604    }
7605
7606    private static inline void test_complete_reversi_game_83 ()
7607    {
7608                                  /* 0 1 2 3 4 5 6 7 */
7609        string [] board = {/* 0 */ " . . . . . . . .",
7610                           /* 1 */ " . . . . . . . .",
7611                           /* 2 */ " . . . . . . D .",
7612                           /* 3 */ " . . . L L D . .",
7613                           /* 4 */ " . . . L D . . .",
7614                           /* 5 */ " . . . L D . . .",
7615                           /* 6 */ " . . . . . . . .",
7616                           /* 7 */ " . . . . . . . ."};
7617
7618        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7619        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7620
7621        assert_true (ai_move (ai, 2, 5));
7622        assert_true (ai_move (ai, 6, 3));
7623        assert_true (ai_move (ai, 2, 3));
7624        assert_true (ai_move (ai, 1, 3));
7625        assert_true (ai_move (ai, 1, 2));
7626        assert_true (ai_move (ai, 5, 5));
7627        assert_true (ai_move (ai, 6, 5));
7628        assert_true (ai_move (ai, 2, 6));
7629        assert_true (ai_move (ai, 3, 6));
7630        assert_true (ai_move (ai, 2, 4));
7631        assert_true (ai_move (ai, 2, 7));
7632        assert_true (ai_move (ai, 1, 4));
7633        assert_true (ai_move (ai, 0, 2));
7634        assert_true (ai_move (ai, 1, 5));
7635        assert_true (ai_move (ai, 0, 4));
7636        assert_true (ai_move (ai, 0, 3));
7637        assert_true (ai_move (ai, 5, 4));
7638        assert_true (ai_move (ai, 4, 6));
7639        assert_true (ai_move (ai, 5, 6));
7640        assert_true (ai_move (ai, 6, 4));
7641        assert_true (ai_move (ai, 7, 4));
7642        assert_true (ai_move (ai, 2, 1));
7643        assert_true (ai_move (ai, 7, 2));
7644        assert_true (ai_move (ai, 7, 3));
7645        assert_true (ai_move (ai, 2, 2));
7646        assert_true (ai_move (ai, 5, 1));
7647        assert_true (ai_move (ai, 2, 0));
7648        assert_true (ai_move (ai, 5, 7));
7649        assert_true (ai_move (ai, 3, 2));
7650        assert_true (ai_move (ai, 3, 7));
7651        assert_true (ai_move (ai, 5, 2));
7652        assert_true (ai_move (ai, 3, 0));
7653        assert_true (ai_move (ai, 5, 0));
7654        assert_true (ai_move (ai, 4, 0));
7655        assert_true (ai_move (ai, 6, 1));
7656        assert_true (ai_move (ai, 4, 2));
7657        assert_true (ai_move (ai, 3, 1));
7658        assert_true (ai_move (ai, 4, 1));
7659        assert_true (ai_move (ai, 6, 0));
7660        assert_true (ai_move (ai, 0, 5));
7661        assert_true (ai_move (ai, 0, 6));
7662        assert_true (ai_move (ai, 7, 5));
7663        assert_true (ai_move (ai, 7, 6));
7664        assert_true (ai_move (ai, 1, 1));
7665        assert_true (ai_move (ai, 1, 6));
7666        assert_true (ai_move (ai, 6, 6));
7667        assert_true (ai_move (ai, 4, 7));
7668        assert_true (ai_move (ai, 7, 0));
7669        assert_true (ai_move (ai, 6, 7));
7670        assert_true (ai_move (ai, 7, 7));
7671        assert_true (ai_move (ai, 7, 1));
7672        assert_true (ai_move (ai, 1, 0));
7673        assert_true (ai_move (ai, 0, 1));
7674        assert_true (ai_move (ai, 0, 0));
7675        assert_true (game.pass ());
7676        assert_true (ai_move (ai, 0, 7));
7677        assert_true (ai_move (ai, 1, 7));
7678    }
7679
7680    private static inline void test_complete_reversi_game_84 ()
7681    {
7682                                  /* 0 1 2 3 4 5 6 7 */
7683        string [] board = {/* 0 */ " . . . . . . . .",
7684                           /* 1 */ " . . . . . . . .",
7685                           /* 2 */ " . . . . . . D .",
7686                           /* 3 */ " . . . L L D . .",
7687                           /* 4 */ " . . . L D . . .",
7688                           /* 5 */ " . . L . D . . .",
7689                           /* 6 */ " . . . . . . . .",
7690                           /* 7 */ " . . . . . . . ."};
7691
7692        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7693        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7694
7695        assert_true (ai_move (ai, 2, 2));
7696        assert_true (ai_move (ai, 6, 3));
7697        assert_true (ai_move (ai, 2, 3));
7698        assert_true (ai_move (ai, 3, 5));
7699        assert_true (ai_move (ai, 1, 5));
7700        assert_true (ai_move (ai, 4, 6));
7701        assert_true (ai_move (ai, 5, 6));
7702        assert_true (ai_move (ai, 2, 6));
7703        assert_true (ai_move (ai, 3, 6));
7704        assert_true (ai_move (ai, 0, 4));
7705        assert_true (ai_move (ai, 0, 5));
7706        assert_true (ai_move (ai, 0, 6));
7707        assert_true (ai_move (ai, 5, 5));
7708        assert_true (ai_move (ai, 2, 4));
7709        assert_true (ai_move (ai, 1, 3));
7710        assert_true (ai_move (ai, 6, 5));
7711        assert_true (ai_move (ai, 2, 7));
7712        assert_true (ai_move (ai, 1, 2));
7713        assert_true (ai_move (ai, 5, 4));
7714        assert_true (ai_move (ai, 2, 1));
7715        assert_true (ai_move (ai, 3, 1));
7716        assert_true (ai_move (ai, 0, 3));
7717        assert_true (ai_move (ai, 5, 2));
7718        assert_true (ai_move (ai, 4, 7));
7719        assert_true (ai_move (ai, 5, 7));
7720        assert_true (ai_move (ai, 3, 7));
7721        assert_true (ai_move (ai, 2, 0));
7722        assert_true (ai_move (ai, 1, 4));
7723        assert_true (ai_move (ai, 7, 5));
7724        assert_true (ai_move (ai, 6, 4));
7725        assert_true (ai_move (ai, 6, 6));
7726        assert_true (ai_move (ai, 7, 1));
7727        assert_true (ai_move (ai, 0, 2));
7728        assert_true (ai_move (ai, 0, 1));
7729        assert_true (ai_move (ai, 7, 4));
7730        assert_true (ai_move (ai, 3, 2));
7731        assert_true (ai_move (ai, 4, 2));
7732        assert_true (ai_move (ai, 4, 1));
7733        assert_true (ai_move (ai, 7, 2));
7734        assert_true (ai_move (ai, 6, 1));
7735        assert_true (ai_move (ai, 5, 1));
7736        assert_true (ai_move (ai, 5, 0));
7737        assert_true (ai_move (ai, 3, 0));
7738        assert_true (ai_move (ai, 4, 0));
7739        assert_true (ai_move (ai, 1, 1));
7740        assert_true (ai_move (ai, 7, 3));
7741        assert_true (ai_move (ai, 7, 0));
7742        assert_true (ai_move (ai, 6, 0));
7743        assert_true (ai_move (ai, 1, 6));
7744        assert_true (ai_move (ai, 0, 7));
7745        assert_true (ai_move (ai, 1, 7));
7746        assert_true (ai_move (ai, 0, 0));
7747        assert_true (ai_move (ai, 1, 0));
7748        assert_true (ai_move (ai, 7, 7));
7749        assert_true (ai_move (ai, 7, 6));
7750        assert_true (ai_move (ai, 6, 7));
7751    }
7752
7753    private static inline void test_complete_reversi_game_85 ()
7754    {
7755                                  /* 0 1 2 3 4 5 6 7 */
7756        string [] board = {/* 0 */ " . . . . . . . .",
7757                           /* 1 */ " . . . . . . . .",
7758                           /* 2 */ " . . . . . D . .",
7759                           /* 3 */ " . . . L D L . .",
7760                           /* 4 */ " . . . D L . . .",
7761                           /* 5 */ " . . . . D L . .",
7762                           /* 6 */ " . . . . . . . .",
7763                           /* 7 */ " . . . . . . . ."};
7764
7765        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7766        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7767
7768        assert_true (ai_move (ai, 6, 5));
7769        assert_true (ai_move (ai, 5, 1));
7770        assert_true (ai_move (ai, 2, 3));
7771        assert_true (ai_move (ai, 4, 2));
7772        assert_true (ai_move (ai, 5, 4));
7773        assert_true (ai_move (ai, 5, 6));
7774        assert_true (ai_move (ai, 6, 4));
7775        assert_true (ai_move (ai, 7, 3));
7776        assert_true (ai_move (ai, 5, 7));
7777        assert_true (ai_move (ai, 4, 6));
7778        assert_true (ai_move (ai, 3, 5));
7779        assert_true (ai_move (ai, 3, 7));
7780        assert_true (ai_move (ai, 7, 4));
7781        assert_true (ai_move (ai, 2, 6));
7782        assert_true (ai_move (ai, 7, 2));
7783        assert_true (ai_move (ai, 2, 5));
7784        assert_true (ai_move (ai, 1, 5));
7785        assert_true (ai_move (ai, 0, 5));
7786        assert_true (ai_move (ai, 3, 1));
7787        assert_true (ai_move (ai, 4, 1));
7788        assert_true (ai_move (ai, 5, 0));
7789        assert_true (ai_move (ai, 6, 3));
7790        assert_true (ai_move (ai, 6, 2));
7791        assert_true (ai_move (ai, 1, 2));
7792        assert_true (ai_move (ai, 3, 2));
7793        assert_true (ai_move (ai, 2, 0));
7794        assert_true (ai_move (ai, 1, 3));
7795        assert_true (ai_move (ai, 4, 0));
7796        assert_true (ai_move (ai, 4, 7));
7797        assert_true (ai_move (ai, 2, 4));
7798        assert_true (ai_move (ai, 3, 6));
7799        assert_true (ai_move (ai, 6, 7));
7800        assert_true (ai_move (ai, 1, 4));
7801        assert_true (ai_move (ai, 2, 7));
7802        assert_true (ai_move (ai, 3, 0));
7803        assert_true (ai_move (ai, 6, 0));
7804        assert_true (ai_move (ai, 6, 1));
7805        assert_true (ai_move (ai, 0, 2));
7806        assert_true (ai_move (ai, 0, 3));
7807        assert_true (ai_move (ai, 0, 4));
7808        assert_true (ai_move (ai, 1, 6));
7809        assert_true (ai_move (ai, 7, 5));
7810        assert_true (ai_move (ai, 7, 6));
7811        assert_true (ai_move (ai, 2, 2));
7812        assert_true (ai_move (ai, 2, 1));
7813        assert_true (ai_move (ai, 1, 1));
7814        assert_true (ai_move (ai, 1, 7));
7815        assert_true (ai_move (ai, 0, 7));
7816        assert_true (ai_move (ai, 0, 0));
7817        assert_true (ai_move (ai, 0, 6));
7818        assert_true (ai_move (ai, 0, 1));
7819        assert_true (ai_move (ai, 7, 0));
7820        assert_true (ai_move (ai, 6, 6));
7821        assert_true (ai_move (ai, 7, 1));
7822        assert_true (game.pass ());
7823        assert_true (ai_move (ai, 7, 7));
7824        assert_true (game.pass ());
7825        assert_true (ai_move (ai, 1, 0));
7826    }
7827
7828    private static inline void test_complete_reversi_game_86 ()
7829    {
7830                                  /* 0 1 2 3 4 5 6 7 */
7831        string [] board = {/* 0 */ " . . . . . . . .",
7832                           /* 1 */ " . . . . . L . .",
7833                           /* 2 */ " . . . . . L . .",
7834                           /* 3 */ " . . . L D L . .",
7835                           /* 4 */ " . . . D D . . .",
7836                           /* 5 */ " . . . . D . . .",
7837                           /* 6 */ " . . . . . . . .",
7838                           /* 7 */ " . . . . . . . ."};
7839
7840        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7841        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7842
7843        assert_true (ai_move (ai, 2, 2));
7844        assert_true (ai_move (ai, 3, 5));
7845        assert_true (ai_move (ai, 2, 5));
7846        assert_true (ai_move (ai, 2, 6));
7847        assert_true (ai_move (ai, 3, 6));
7848        assert_true (ai_move (ai, 2, 4));
7849        assert_true (ai_move (ai, 1, 4));
7850        assert_true (ai_move (ai, 5, 6));
7851        assert_true (ai_move (ai, 1, 5));
7852        assert_true (ai_move (ai, 2, 7));
7853        assert_true (ai_move (ai, 5, 5));
7854        assert_true (ai_move (ai, 0, 3));
7855        assert_true (ai_move (ai, 2, 3));
7856        assert_true (ai_move (ai, 6, 5));
7857        assert_true (ai_move (ai, 4, 6));
7858        assert_true (ai_move (ai, 2, 1));
7859        assert_true (ai_move (ai, 6, 4));
7860        assert_true (ai_move (ai, 5, 7));
7861        assert_true (ai_move (ai, 4, 2));
7862        assert_true (ai_move (ai, 0, 5));
7863        assert_true (ai_move (ai, 6, 2));
7864        assert_true (ai_move (ai, 5, 4));
7865        assert_true (ai_move (ai, 6, 3));
7866        assert_true (ai_move (ai, 7, 2));
7867        assert_true (ai_move (ai, 5, 0));
7868        assert_true (ai_move (ai, 7, 3));
7869        assert_true (ai_move (ai, 1, 6));
7870        assert_true (ai_move (ai, 4, 1));
7871        assert_true (ai_move (ai, 6, 1));
7872        assert_true (ai_move (ai, 3, 2));
7873        assert_true (ai_move (ai, 7, 5));
7874        assert_true (ai_move (ai, 7, 0));
7875        assert_true (ai_move (ai, 1, 2));
7876        assert_true (ai_move (ai, 6, 0));
7877        assert_true (ai_move (ai, 3, 1));
7878        assert_true (ai_move (ai, 4, 0));
7879        assert_true (ai_move (ai, 1, 7));
7880        assert_true (ai_move (ai, 3, 7));
7881        assert_true (ai_move (ai, 1, 3));
7882        assert_true (ai_move (ai, 0, 2));
7883        assert_true (ai_move (ai, 2, 0));
7884        assert_true (ai_move (ai, 0, 4));
7885        assert_true (ai_move (ai, 0, 6));
7886        assert_true (ai_move (ai, 0, 7));
7887        assert_true (ai_move (ai, 7, 1));
7888        assert_true (ai_move (ai, 7, 4));
7889        assert_true (ai_move (ai, 4, 7));
7890        assert_true (ai_move (ai, 3, 0));
7891        assert_true (ai_move (ai, 0, 1));
7892        assert_true (ai_move (ai, 1, 0));
7893        assert_true (ai_move (ai, 1, 1));
7894        assert_true (ai_move (ai, 0, 0));
7895        assert_true (ai_move (ai, 7, 6));
7896        assert_true (ai_move (ai, 6, 6));
7897        assert_true (ai_move (ai, 6, 7));
7898        assert_true (ai_move (ai, 7, 7));
7899    }
7900
7901    private static inline void test_complete_reversi_game_87 ()
7902    {
7903                                  /* 0 1 2 3 4 5 6 7 */
7904        string [] board = {/* 0 */ " . . . . . . . .",
7905                           /* 1 */ " . . . . . . . .",
7906                           /* 2 */ " . . . . . D . .",
7907                           /* 3 */ " . . . L D L . .",
7908                           /* 4 */ " . . . L L . . .",
7909                           /* 5 */ " . . . L D . . .",
7910                           /* 6 */ " . . . . . . . .",
7911                           /* 7 */ " . . . . . . . ."};
7912
7913        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7914        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7915
7916        assert_true (ai_move (ai, 6, 3));
7917        assert_true (ai_move (ai, 5, 5));
7918        assert_true (ai_move (ai, 2, 5));
7919        assert_true (ai_move (ai, 1, 5));
7920        assert_true (ai_move (ai, 5, 6));
7921        assert_true (ai_move (ai, 4, 6));
7922        assert_true (ai_move (ai, 5, 4));
7923        assert_true (ai_move (ai, 6, 5));
7924        assert_true (ai_move (ai, 4, 7));
7925        assert_true (ai_move (ai, 5, 1));
7926        assert_true (ai_move (ai, 6, 4));
7927        assert_true (ai_move (ai, 3, 2));
7928        assert_true (ai_move (ai, 5, 0));
7929        assert_true (ai_move (ai, 5, 7));
7930        assert_true (ai_move (ai, 6, 7));
7931        assert_true (ai_move (ai, 7, 3));
7932        assert_true (ai_move (ai, 2, 6));
7933        assert_true (ai_move (ai, 4, 1));
7934        assert_true (ai_move (ai, 2, 4));
7935        assert_true (ai_move (ai, 1, 3));
7936        assert_true (ai_move (ai, 3, 6));
7937        assert_true (ai_move (ai, 2, 7));
7938        assert_true (ai_move (ai, 7, 5));
7939        assert_true (ai_move (ai, 3, 7));
7940        assert_true (ai_move (ai, 1, 7));
7941        assert_true (ai_move (ai, 1, 6));
7942        assert_true (ai_move (ai, 7, 4));
7943        assert_true (ai_move (ai, 7, 6));
7944        assert_true (ai_move (ai, 0, 4));
7945        assert_true (ai_move (ai, 0, 5));
7946        assert_true (ai_move (ai, 7, 2));
7947        assert_true (ai_move (ai, 7, 1));
7948        assert_true (ai_move (ai, 3, 0));
7949        assert_true (ai_move (ai, 0, 3));
7950        assert_true (ai_move (ai, 6, 2));
7951        assert_true (ai_move (ai, 4, 2));
7952        assert_true (ai_move (ai, 2, 2));
7953        assert_true (ai_move (ai, 3, 1));
7954        assert_true (ai_move (ai, 2, 1));
7955        assert_true (ai_move (ai, 2, 0));
7956        assert_true (ai_move (ai, 2, 3));
7957        assert_true (ai_move (ai, 1, 4));
7958        assert_true (ai_move (ai, 0, 2));
7959        assert_true (ai_move (ai, 1, 2));
7960        assert_true (ai_move (ai, 0, 7));
7961        assert_true (ai_move (ai, 0, 6));
7962        assert_true (ai_move (ai, 1, 0));
7963        assert_true (ai_move (ai, 4, 0));
7964        assert_true (ai_move (ai, 1, 1));
7965        assert_true (ai_move (ai, 0, 0));
7966        assert_true (ai_move (ai, 0, 1));
7967        assert_true (ai_move (ai, 6, 0));
7968        assert_true (ai_move (ai, 6, 1));
7969        assert_true (ai_move (ai, 6, 6));
7970        assert_true (ai_move (ai, 7, 7));
7971        assert_true (game.pass ());
7972        assert_true (ai_move (ai, 7, 0));
7973    }
7974
7975    private static inline void test_complete_reversi_game_88 ()
7976    {
7977                                  /* 0 1 2 3 4 5 6 7 */
7978        string [] board = {/* 0 */ " . . . . . . . .",
7979                           /* 1 */ " . . . . . . . .",
7980                           /* 2 */ " . . . . D . . .",
7981                           /* 3 */ " . . . L D L . .",
7982                           /* 4 */ " . . . D L . . .",
7983                           /* 5 */ " . . . . D L . .",
7984                           /* 6 */ " . . . . . . . .",
7985                           /* 7 */ " . . . . . . . ."};
7986
7987        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
7988        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
7989
7990        assert_true (ai_move (ai, 6, 5));
7991        assert_true (ai_move (ai, 5, 1));
7992        assert_true (ai_move (ai, 4, 1));
7993        assert_true (ai_move (ai, 4, 6));
7994        assert_true (ai_move (ai, 3, 5));
7995        assert_true (ai_move (ai, 6, 4));
7996        assert_true (ai_move (ai, 5, 4));
7997        assert_true (ai_move (ai, 2, 5));
7998        assert_true (ai_move (ai, 5, 2));
7999        assert_true (ai_move (ai, 7, 5));
8000        assert_true (ai_move (ai, 2, 6));
8001        assert_true (ai_move (ai, 2, 7));
8002        assert_true (ai_move (ai, 1, 5));
8003        assert_true (ai_move (ai, 0, 4));
8004        assert_true (ai_move (ai, 3, 6));
8005        assert_true (ai_move (ai, 3, 2));
8006        assert_true (ai_move (ai, 6, 3));
8007        assert_true (ai_move (ai, 5, 0));
8008        assert_true (ai_move (ai, 3, 0));
8009        assert_true (ai_move (ai, 4, 0));
8010        assert_true (ai_move (ai, 0, 5));
8011        assert_true (ai_move (ai, 2, 0));
8012        assert_true (ai_move (ai, 0, 3));
8013        assert_true (ai_move (ai, 7, 4));
8014        assert_true (ai_move (ai, 4, 7));
8015        assert_true (ai_move (ai, 6, 2));
8016        assert_true (ai_move (ai, 2, 4));
8017        assert_true (ai_move (ai, 2, 3));
8018        assert_true (ai_move (ai, 1, 4));
8019        assert_true (ai_move (ai, 3, 7));
8020        assert_true (ai_move (ai, 5, 7));
8021        assert_true (ai_move (ai, 6, 7));
8022        assert_true (ai_move (ai, 5, 6));
8023        assert_true (ai_move (ai, 1, 3));
8024        assert_true (ai_move (ai, 6, 1));
8025        assert_true (ai_move (ai, 6, 6));
8026        assert_true (ai_move (ai, 7, 3));
8027        assert_true (ai_move (ai, 7, 2));
8028        assert_true (ai_move (ai, 7, 0));
8029        assert_true (ai_move (ai, 6, 0));
8030        assert_true (ai_move (ai, 1, 0));
8031        assert_true (ai_move (ai, 1, 6));
8032        assert_true (ai_move (ai, 3, 1));
8033        assert_true (ai_move (ai, 2, 1));
8034        assert_true (ai_move (ai, 1, 2));
8035        assert_true (ai_move (ai, 0, 1));
8036        assert_true (ai_move (ai, 0, 7));
8037        assert_true (ai_move (ai, 7, 1));
8038        assert_true (ai_move (ai, 1, 7));
8039        assert_true (ai_move (ai, 0, 6));
8040        assert_true (ai_move (ai, 0, 2));
8041        assert_true (ai_move (ai, 1, 1));
8042        assert_true (ai_move (ai, 7, 6));
8043        assert_true (game.pass ());
8044        assert_true (ai_move (ai, 7, 7));
8045        assert_true (game.pass ());
8046        assert_true (ai_move (ai, 2, 2));
8047        assert_true (game.pass ());
8048        assert_true (ai_move (ai, 0, 0));
8049    }
8050
8051    private static inline void test_complete_reversi_game_89 ()
8052    {
8053                                  /* 0 1 2 3 4 5 6 7 */
8054        string [] board = {/* 0 */ " . . . . . . . .",
8055                           /* 1 */ " . . . . . L . .",
8056                           /* 2 */ " . . . . L . . .",
8057                           /* 3 */ " . . . L D L . .",
8058                           /* 4 */ " . . . D D . . .",
8059                           /* 5 */ " . . . . D . . .",
8060                           /* 6 */ " . . . . . . . .",
8061                           /* 7 */ " . . . . . . . ."};
8062
8063        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8064        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8065
8066        assert_true (ai_move (ai, 4, 1));
8067        assert_true (ai_move (ai, 3, 1));
8068        assert_true (ai_move (ai, 6, 3));
8069        assert_true (ai_move (ai, 6, 4));
8070        assert_true (ai_move (ai, 6, 2));
8071        assert_true (ai_move (ai, 5, 5));
8072        assert_true (ai_move (ai, 6, 5));
8073        assert_true (ai_move (ai, 2, 4));
8074        assert_true (ai_move (ai, 2, 0));
8075        assert_true (ai_move (ai, 4, 6));
8076        assert_true (ai_move (ai, 3, 7));
8077        assert_true (ai_move (ai, 7, 5));
8078        assert_true (ai_move (ai, 2, 3));
8079        assert_true (ai_move (ai, 1, 2));
8080        assert_true (ai_move (ai, 1, 3));
8081        assert_true (ai_move (ai, 0, 2));
8082        assert_true (ai_move (ai, 1, 5));
8083        assert_true (ai_move (ai, 3, 5));
8084        assert_true (ai_move (ai, 2, 5));
8085        assert_true (ai_move (ai, 1, 4));
8086        assert_true (ai_move (ai, 0, 5));
8087        assert_true (ai_move (ai, 2, 6));
8088        assert_true (ai_move (ai, 2, 7));
8089        assert_true (ai_move (ai, 0, 4));
8090        assert_true (ai_move (ai, 3, 6));
8091        assert_true (ai_move (ai, 5, 7));
8092        assert_true (ai_move (ai, 5, 6));
8093        assert_true (ai_move (ai, 4, 7));
8094        assert_true (ai_move (ai, 1, 6));
8095        assert_true (ai_move (ai, 3, 2));
8096        assert_true (ai_move (ai, 6, 7));
8097        assert_true (ai_move (ai, 3, 0));
8098        assert_true (ai_move (ai, 2, 2));
8099        assert_true (ai_move (ai, 5, 2));
8100        assert_true (ai_move (ai, 2, 1));
8101        assert_true (ai_move (ai, 5, 4));
8102        assert_true (ai_move (ai, 5, 0));
8103        assert_true (ai_move (ai, 4, 0));
8104        assert_true (ai_move (ai, 7, 4));
8105        assert_true (ai_move (ai, 7, 2));
8106        assert_true (ai_move (ai, 7, 3));
8107        assert_true (ai_move (ai, 0, 7));
8108        assert_true (ai_move (ai, 0, 6));
8109        assert_true (ai_move (ai, 1, 7));
8110        assert_true (ai_move (ai, 0, 3));
8111        assert_true (ai_move (ai, 7, 7));
8112        assert_true (ai_move (ai, 7, 6));
8113        assert_true (ai_move (ai, 6, 6));
8114        assert_true (ai_move (ai, 6, 1));
8115        assert_true (ai_move (ai, 7, 0));
8116        assert_true (ai_move (ai, 7, 1));
8117        assert_true (ai_move (ai, 1, 1));
8118        assert_true (ai_move (ai, 1, 0));
8119        assert_true (ai_move (ai, 6, 0));
8120        assert_true (ai_move (ai, 0, 1));
8121        assert_true (ai_move (ai, 0, 0));
8122    }
8123
8124    private static inline void test_complete_reversi_game_90 ()
8125    {
8126                                  /* 0 1 2 3 4 5 6 7 */
8127        string [] board = {/* 0 */ " . . . . . . . .",
8128                           /* 1 */ " . . . . . . . .",
8129                           /* 2 */ " . . . . D . . .",
8130                           /* 3 */ " . . . L D L . .",
8131                           /* 4 */ " . . . L L . . .",
8132                           /* 5 */ " . . . L D . . .",
8133                           /* 6 */ " . . . . . . . .",
8134                           /* 7 */ " . . . . . . . ."};
8135
8136        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8137        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8138
8139        assert_true (ai_move (ai, 6, 3));
8140        assert_true (ai_move (ai, 5, 5));
8141        assert_true (ai_move (ai, 2, 3));
8142        assert_true (ai_move (ai, 1, 2));
8143        assert_true (ai_move (ai, 1, 3));
8144        assert_true (ai_move (ai, 6, 2));
8145        assert_true (ai_move (ai, 6, 4));
8146        assert_true (ai_move (ai, 7, 3));
8147        assert_true (ai_move (ai, 7, 5));
8148        assert_true (ai_move (ai, 6, 5));
8149        assert_true (ai_move (ai, 7, 1));
8150        assert_true (ai_move (ai, 5, 1));
8151        assert_true (ai_move (ai, 5, 6));
8152        assert_true (ai_move (ai, 4, 6));
8153        assert_true (ai_move (ai, 2, 5));
8154        assert_true (ai_move (ai, 2, 6));
8155        assert_true (ai_move (ai, 2, 7));
8156        assert_true (ai_move (ai, 3, 1));
8157        assert_true (ai_move (ai, 4, 1));
8158        assert_true (ai_move (ai, 1, 5));
8159        assert_true (ai_move (ai, 2, 4));
8160        assert_true (ai_move (ai, 3, 7));
8161        assert_true (ai_move (ai, 5, 7));
8162        assert_true (ai_move (ai, 4, 7));
8163        assert_true (ai_move (ai, 0, 5));
8164        assert_true (ai_move (ai, 0, 4));
8165        assert_true (ai_move (ai, 0, 3));
8166        assert_true (ai_move (ai, 1, 4));
8167        assert_true (ai_move (ai, 3, 6));
8168        assert_true (ai_move (ai, 5, 2));
8169        assert_true (ai_move (ai, 0, 2));
8170        assert_true (ai_move (ai, 2, 2));
8171        assert_true (ai_move (ai, 0, 6));
8172        assert_true (ai_move (ai, 3, 2));
8173        assert_true (ai_move (ai, 0, 1));
8174        assert_true (ai_move (ai, 4, 0));
8175        assert_true (ai_move (ai, 5, 0));
8176        assert_true (ai_move (ai, 3, 0));
8177        assert_true (ai_move (ai, 5, 4));
8178        assert_true (ai_move (ai, 6, 1));
8179        assert_true (ai_move (ai, 2, 0));
8180        assert_true (ai_move (ai, 7, 4));
8181        assert_true (ai_move (ai, 2, 1));
8182        assert_true (ai_move (ai, 7, 6));
8183        assert_true (ai_move (ai, 6, 0));
8184        assert_true (ai_move (ai, 1, 6));
8185        assert_true (ai_move (ai, 1, 7));
8186        assert_true (ai_move (ai, 0, 7));
8187        assert_true (ai_move (ai, 6, 7));
8188        assert_true (ai_move (ai, 0, 0));
8189        assert_true (ai_move (ai, 7, 2));
8190        assert_true (ai_move (ai, 7, 0));
8191        assert_true (ai_move (ai, 6, 6));
8192        assert_true (ai_move (ai, 1, 0));
8193        assert_true (ai_move (ai, 1, 1));
8194        assert_true (ai_move (ai, 7, 7));
8195    }
8196
8197    private static inline void test_complete_reversi_game_91 ()
8198    {
8199                                  /* 0 1 2 3 4 5 6 7 */
8200        string [] board = {/* 0 */ " . . . . . . . .",
8201                           /* 1 */ " . . . L . . . .",
8202                           /* 2 */ " . . . . L . . .",
8203                           /* 3 */ " . . . L D L . .",
8204                           /* 4 */ " . . . D D . . .",
8205                           /* 5 */ " . . . . D . . .",
8206                           /* 6 */ " . . . . . . . .",
8207                           /* 7 */ " . . . . . . . ."};
8208
8209        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8210        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8211
8212        assert_true (ai_move (ai, 4, 1));
8213        assert_true (ai_move (ai, 5, 1));
8214        assert_true (ai_move (ai, 6, 3));
8215        assert_true (ai_move (ai, 6, 4));
8216        assert_true (ai_move (ai, 6, 2));
8217        assert_true (ai_move (ai, 5, 5));
8218        assert_true (ai_move (ai, 6, 5));
8219        assert_true (ai_move (ai, 2, 4));
8220        assert_true (ai_move (ai, 2, 0));
8221        assert_true (ai_move (ai, 4, 6));
8222        assert_true (ai_move (ai, 3, 7));
8223        assert_true (ai_move (ai, 7, 5));
8224        assert_true (ai_move (ai, 2, 3));
8225        assert_true (ai_move (ai, 1, 2));
8226        assert_true (ai_move (ai, 1, 3));
8227        assert_true (ai_move (ai, 0, 2));
8228        assert_true (ai_move (ai, 1, 5));
8229        assert_true (ai_move (ai, 3, 5));
8230        assert_true (ai_move (ai, 2, 5));
8231        assert_true (ai_move (ai, 1, 4));
8232        assert_true (ai_move (ai, 0, 5));
8233        assert_true (ai_move (ai, 2, 6));
8234        assert_true (ai_move (ai, 2, 7));
8235        assert_true (ai_move (ai, 0, 4));
8236        assert_true (ai_move (ai, 3, 6));
8237        assert_true (ai_move (ai, 5, 7));
8238        assert_true (ai_move (ai, 5, 6));
8239        assert_true (ai_move (ai, 4, 7));
8240        assert_true (ai_move (ai, 1, 6));
8241        assert_true (ai_move (ai, 3, 2));
8242        assert_true (ai_move (ai, 6, 7));
8243        assert_true (ai_move (ai, 3, 0));
8244        assert_true (ai_move (ai, 2, 2));
8245        assert_true (ai_move (ai, 5, 2));
8246        assert_true (ai_move (ai, 2, 1));
8247        assert_true (ai_move (ai, 5, 4));
8248        assert_true (ai_move (ai, 5, 0));
8249        assert_true (ai_move (ai, 4, 0));
8250        assert_true (ai_move (ai, 7, 4));
8251        assert_true (ai_move (ai, 7, 2));
8252        assert_true (ai_move (ai, 7, 3));
8253        assert_true (ai_move (ai, 0, 7));
8254        assert_true (ai_move (ai, 0, 6));
8255        assert_true (ai_move (ai, 1, 7));
8256        assert_true (ai_move (ai, 0, 3));
8257        assert_true (ai_move (ai, 7, 7));
8258        assert_true (ai_move (ai, 7, 6));
8259        assert_true (ai_move (ai, 6, 6));
8260        assert_true (ai_move (ai, 6, 1));
8261        assert_true (ai_move (ai, 7, 0));
8262        assert_true (ai_move (ai, 7, 1));
8263        assert_true (ai_move (ai, 1, 1));
8264        assert_true (ai_move (ai, 1, 0));
8265        assert_true (ai_move (ai, 6, 0));
8266        assert_true (ai_move (ai, 0, 1));
8267        assert_true (ai_move (ai, 0, 0));
8268    }
8269
8270    private static inline void test_complete_reversi_game_92 ()
8271    {
8272                                  /* 0 1 2 3 4 5 6 7 */
8273        string [] board = {/* 0 */ " . . . . . . . .",
8274                           /* 1 */ " . . . . . . . .",
8275                           /* 2 */ " . . . D . . . .",
8276                           /* 3 */ " . . . D L L . .",
8277                           /* 4 */ " . . . D L . . .",
8278                           /* 5 */ " . . . . L . . .",
8279                           /* 6 */ " . . . . L . . .",
8280                           /* 7 */ " . . . . . . . ."};
8281
8282        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8283        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8284
8285        assert_true (ai_move (ai, 5, 6));
8286        assert_true (ai_move (ai, 2, 1));
8287        assert_true (ai_move (ai, 3, 1));
8288        assert_true (ai_move (ai, 2, 5));
8289        assert_true (ai_move (ai, 4, 7));
8290        assert_true (ai_move (ai, 2, 3));
8291        assert_true (ai_move (ai, 1, 4));
8292        assert_true (ai_move (ai, 1, 2));
8293        assert_true (ai_move (ai, 3, 6));
8294        assert_true (ai_move (ai, 4, 1));
8295        assert_true (ai_move (ai, 5, 0));
8296        assert_true (ai_move (ai, 1, 3));
8297        assert_true (ai_move (ai, 3, 0));
8298        assert_true (ai_move (ai, 0, 5));
8299        assert_true (ai_move (ai, 1, 1));
8300        assert_true (ai_move (ai, 6, 7));
8301        assert_true (ai_move (ai, 6, 5));
8302        assert_true (ai_move (ai, 2, 7));
8303        assert_true (ai_move (ai, 0, 3));
8304        assert_true (ai_move (ai, 1, 5));
8305        assert_true (ai_move (ai, 2, 6));
8306        assert_true (ai_move (ai, 2, 4));
8307        assert_true (ai_move (ai, 5, 4));
8308        assert_true (ai_move (ai, 6, 4));
8309        assert_true (ai_move (ai, 6, 3));
8310        assert_true (ai_move (ai, 0, 1));
8311        assert_true (ai_move (ai, 3, 5));
8312        assert_true (ai_move (ai, 5, 5));
8313        assert_true (ai_move (ai, 6, 6));
8314        assert_true (ai_move (ai, 7, 5));
8315        assert_true (ai_move (ai, 7, 4));
8316        assert_true (ai_move (ai, 7, 2));
8317        assert_true (ai_move (ai, 7, 6));
8318        assert_true (ai_move (ai, 3, 7));
8319        assert_true (ai_move (ai, 1, 7));
8320        assert_true (ai_move (ai, 7, 3));
8321        assert_true (ai_move (ai, 2, 2));
8322        assert_true (ai_move (ai, 4, 0));
8323        assert_true (ai_move (ai, 7, 1));
8324        assert_true (ai_move (ai, 2, 0));
8325        assert_true (ai_move (ai, 1, 0));
8326        assert_true (ai_move (ai, 5, 2));
8327        assert_true (ai_move (ai, 5, 1));
8328        assert_true (ai_move (ai, 7, 7));
8329        assert_true (ai_move (ai, 5, 7));
8330        assert_true (ai_move (ai, 0, 7));
8331        assert_true (ai_move (ai, 0, 2));
8332        assert_true (ai_move (ai, 0, 4));
8333        assert_true (ai_move (ai, 0, 6));
8334        assert_true (ai_move (ai, 0, 0));
8335        assert_true (ai_move (ai, 4, 2));
8336        assert_true (ai_move (ai, 7, 0));
8337        assert_true (ai_move (ai, 6, 2));
8338        assert_true (ai_move (ai, 6, 0));
8339        assert_true (game.pass ());
8340        assert_true (ai_move (ai, 6, 1));
8341        assert_true (game.pass ());
8342        assert_true (ai_move (ai, 1, 6));
8343    }
8344
8345    private static inline void test_complete_reversi_game_93 ()
8346    {
8347                                  /* 0 1 2 3 4 5 6 7 */
8348        string [] board = {/* 0 */ " . . . . . . . .",
8349                           /* 1 */ " . . . . . . . .",
8350                           /* 2 */ " . . . D . . . .",
8351                           /* 3 */ " . . . D L L . .",
8352                           /* 4 */ " . . . D L . . .",
8353                           /* 5 */ " . . . L D . . .",
8354                           /* 6 */ " . . . . . . . .",
8355                           /* 7 */ " . . . . . . . ."};
8356
8357        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8358        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8359
8360        assert_true (ai_move (ai, 2, 5));
8361        assert_true (ai_move (ai, 2, 1));
8362        assert_true (ai_move (ai, 5, 5));
8363        assert_true (ai_move (ai, 2, 3));
8364        assert_true (ai_move (ai, 6, 2));
8365        assert_true (ai_move (ai, 6, 3));
8366        assert_true (ai_move (ai, 1, 2));
8367        assert_true (ai_move (ai, 1, 4));
8368        assert_true (ai_move (ai, 3, 0));
8369        assert_true (ai_move (ai, 5, 6));
8370        assert_true (ai_move (ai, 4, 6));
8371        assert_true (ai_move (ai, 5, 4));
8372        assert_true (ai_move (ai, 6, 4));
8373        assert_true (ai_move (ai, 2, 6));
8374        assert_true (ai_move (ai, 2, 7));
8375        assert_true (ai_move (ai, 1, 5));
8376        assert_true (ai_move (ai, 0, 5));
8377        assert_true (ai_move (ai, 7, 5));
8378        assert_true (ai_move (ai, 7, 3));
8379        assert_true (ai_move (ai, 7, 4));
8380        assert_true (ai_move (ai, 5, 7));
8381        assert_true (ai_move (ai, 7, 2));
8382        assert_true (ai_move (ai, 0, 3));
8383        assert_true (ai_move (ai, 7, 1));
8384        assert_true (ai_move (ai, 4, 1));
8385        assert_true (ai_move (ai, 1, 3));
8386        assert_true (ai_move (ai, 2, 2));
8387        assert_true (ai_move (ai, 2, 0));
8388        assert_true (ai_move (ai, 2, 4));
8389        assert_true (ai_move (ai, 4, 0));
8390        assert_true (ai_move (ai, 0, 2));
8391        assert_true (ai_move (ai, 0, 4));
8392        assert_true (ai_move (ai, 4, 2));
8393        assert_true (ai_move (ai, 3, 6));
8394        assert_true (ai_move (ai, 5, 2));
8395        assert_true (ai_move (ai, 6, 5));
8396        assert_true (ai_move (ai, 3, 1));
8397        assert_true (ai_move (ai, 5, 0));
8398        assert_true (ai_move (ai, 5, 1));
8399        assert_true (ai_move (ai, 6, 0));
8400        assert_true (ai_move (ai, 3, 7));
8401        assert_true (ai_move (ai, 4, 7));
8402        assert_true (ai_move (ai, 1, 6));
8403        assert_true (ai_move (ai, 0, 7));
8404        assert_true (ai_move (ai, 1, 7));
8405        assert_true (ai_move (ai, 0, 6));
8406        assert_true (ai_move (ai, 6, 6));
8407        assert_true (ai_move (ai, 6, 1));
8408        assert_true (ai_move (ai, 1, 1));
8409        assert_true (ai_move (ai, 7, 6));
8410        assert_true (ai_move (ai, 7, 7));
8411        assert_true (ai_move (ai, 6, 7));
8412        assert_true (ai_move (ai, 7, 0));
8413        assert_true (ai_move (ai, 0, 0));
8414        assert_true (ai_move (ai, 1, 0));
8415        assert_true (ai_move (ai, 0, 1));
8416    }
8417
8418    private static inline void test_complete_reversi_game_94 ()
8419    {
8420                                  /* 0 1 2 3 4 5 6 7 */
8421        string [] board = {/* 0 */ " . . . . . . . .",
8422                           /* 1 */ " . . . . . . . .",
8423                           /* 2 */ " . . . D . . . .",
8424                           /* 3 */ " . . . D L L . .",
8425                           /* 4 */ " . . . L D . . .",
8426                           /* 5 */ " . . L . D . . .",
8427                           /* 6 */ " . . . . . . . .",
8428                           /* 7 */ " . . . . . . . ."};
8429
8430        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8431        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8432
8433        assert_true (ai_move (ai, 6, 2));
8434        assert_true (ai_move (ai, 6, 3));
8435        assert_true (ai_move (ai, 2, 4));
8436        assert_true (ai_move (ai, 2, 1));
8437        assert_true (ai_move (ai, 2, 6));
8438        assert_true (ai_move (ai, 2, 3));
8439        assert_true (ai_move (ai, 1, 2));
8440        assert_true (ai_move (ai, 1, 4));
8441        assert_true (ai_move (ai, 3, 0));
8442        assert_true (ai_move (ai, 3, 6));
8443        assert_true (ai_move (ai, 2, 7));
8444        assert_true (ai_move (ai, 1, 5));
8445        assert_true (ai_move (ai, 0, 3));
8446        assert_true (ai_move (ai, 0, 5));
8447        assert_true (ai_move (ai, 6, 4));
8448        assert_true (ai_move (ai, 4, 7));
8449        assert_true (ai_move (ai, 2, 2));
8450        assert_true (ai_move (ai, 0, 2));
8451        assert_true (ai_move (ai, 4, 1));
8452        assert_true (ai_move (ai, 0, 4));
8453        assert_true (ai_move (ai, 5, 2));
8454        assert_true (ai_move (ai, 1, 3));
8455        assert_true (ai_move (ai, 5, 4));
8456        assert_true (ai_move (ai, 3, 5));
8457        assert_true (ai_move (ai, 4, 6));
8458        assert_true (ai_move (ai, 5, 6));
8459        assert_true (ai_move (ai, 1, 6));
8460        assert_true (ai_move (ai, 4, 2));
8461        assert_true (ai_move (ai, 3, 1));
8462        assert_true (ai_move (ai, 5, 0));
8463        assert_true (ai_move (ai, 5, 1));
8464        assert_true (ai_move (ai, 7, 3));
8465        assert_true (ai_move (ai, 0, 6));
8466        assert_true (ai_move (ai, 5, 5));
8467        assert_true (ai_move (ai, 0, 1));
8468        assert_true (ai_move (ai, 2, 0));
8469        assert_true (ai_move (ai, 4, 0));
8470        assert_true (ai_move (ai, 5, 7));
8471        assert_true (ai_move (ai, 7, 5));
8472        assert_true (ai_move (ai, 6, 5));
8473        assert_true (ai_move (ai, 7, 2));
8474        assert_true (ai_move (ai, 3, 7));
8475        assert_true (ai_move (ai, 6, 7));
8476        assert_true (ai_move (ai, 1, 1));
8477        assert_true (ai_move (ai, 7, 4));
8478        assert_true (ai_move (ai, 6, 6));
8479        assert_true (ai_move (ai, 7, 6));
8480        assert_true (ai_move (ai, 7, 7));
8481        assert_true (ai_move (ai, 1, 0));
8482        assert_true (ai_move (ai, 1, 7));
8483        assert_true (ai_move (ai, 6, 0));
8484        assert_true (ai_move (ai, 7, 1));
8485        assert_true (ai_move (ai, 6, 1));
8486        assert_true (ai_move (ai, 0, 0));
8487        assert_true (game.pass ());
8488        assert_true (ai_move (ai, 7, 0));
8489        assert_true (game.pass ());
8490        assert_true (ai_move (ai, 0, 7));
8491    }
8492
8493    private static inline void test_complete_reversi_game_95 ()
8494    {
8495                                  /* 0 1 2 3 4 5 6 7 */
8496        string [] board = {/* 0 */ " . . . . . . . .",
8497                           /* 1 */ " . . . . . . . .",
8498                           /* 2 */ " . . . D . . . .",
8499                           /* 3 */ " . . L L L L . .",
8500                           /* 4 */ " . . . D D . . .",
8501                           /* 5 */ " . . . . D . . .",
8502                           /* 6 */ " . . . . . . . .",
8503                           /* 7 */ " . . . . . . . ."};
8504
8505        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8506        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8507
8508        assert_true (ai_move (ai, 1, 2));
8509        assert_true (ai_move (ai, 1, 3));
8510        assert_true (ai_move (ai, 6, 2));
8511        assert_true (ai_move (ai, 4, 1));
8512        assert_true (ai_move (ai, 5, 2));
8513        assert_true (ai_move (ai, 6, 3));
8514        assert_true (ai_move (ai, 6, 4));
8515        assert_true (ai_move (ai, 7, 2));
8516        assert_true (ai_move (ai, 1, 4));
8517        assert_true (ai_move (ai, 7, 4));
8518        assert_true (ai_move (ai, 5, 0));
8519        assert_true (ai_move (ai, 3, 1));
8520        assert_true (ai_move (ai, 2, 1));
8521        assert_true (ai_move (ai, 7, 5));
8522        assert_true (ai_move (ai, 5, 4));
8523        assert_true (ai_move (ai, 3, 6));
8524        assert_true (ai_move (ai, 6, 5));
8525        assert_true (ai_move (ai, 5, 6));
8526        assert_true (ai_move (ai, 5, 1));
8527        assert_true (ai_move (ai, 0, 3));
8528        assert_true (ai_move (ai, 7, 3));
8529        assert_true (ai_move (ai, 5, 5));
8530        assert_true (ai_move (ai, 5, 7));
8531        assert_true (ai_move (ai, 4, 6));
8532        assert_true (ai_move (ai, 3, 7));
8533        assert_true (ai_move (ai, 4, 2));
8534        assert_true (ai_move (ai, 2, 4));
8535        assert_true (ai_move (ai, 2, 2));
8536        assert_true (ai_move (ai, 0, 2));
8537        assert_true (ai_move (ai, 0, 1));
8538        assert_true (ai_move (ai, 2, 7));
8539        assert_true (ai_move (ai, 6, 6));
8540        assert_true (ai_move (ai, 6, 1));
8541        assert_true (ai_move (ai, 3, 0));
8542        assert_true (ai_move (ai, 3, 5));
8543        assert_true (ai_move (ai, 4, 7));
8544        assert_true (ai_move (ai, 2, 0));
8545        assert_true (ai_move (ai, 6, 7));
8546        assert_true (ai_move (ai, 4, 0));
8547        assert_true (ai_move (ai, 1, 7));
8548        assert_true (ai_move (ai, 7, 7));
8549        assert_true (ai_move (ai, 7, 6));
8550        assert_true (ai_move (ai, 0, 7));
8551        assert_true (ai_move (ai, 1, 1));
8552        assert_true (ai_move (ai, 0, 0));
8553        assert_true (ai_move (ai, 0, 5));
8554        assert_true (ai_move (ai, 0, 4));
8555        assert_true (ai_move (ai, 7, 0));
8556        assert_true (ai_move (ai, 0, 6));
8557        assert_true (ai_move (ai, 1, 0));
8558        assert_true (ai_move (ai, 6, 0));
8559        assert_true (ai_move (ai, 7, 1));
8560        assert_true (game.pass ());
8561        assert_true (ai_move (ai, 2, 6));
8562        assert_true (ai_move (ai, 1, 6));
8563        assert_true (ai_move (ai, 1, 5));
8564        assert_true (ai_move (ai, 2, 5));
8565    }
8566
8567    private static inline void test_complete_reversi_game_96 ()
8568    {
8569                                  /* 0 1 2 3 4 5 6 7 */
8570        string [] board = {/* 0 */ " . . . . . . . .",
8571                           /* 1 */ " . . L . . . . .",
8572                           /* 2 */ " . . . L . . . .",
8573                           /* 3 */ " . . . D L L . .",
8574                           /* 4 */ " . . . D D . . .",
8575                           /* 5 */ " . . . . D . . .",
8576                           /* 6 */ " . . . . . . . .",
8577                           /* 7 */ " . . . . . . . ."};
8578
8579        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8580        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8581
8582        assert_true (ai_move (ai, 3, 1));
8583        assert_true (ai_move (ai, 2, 5));
8584        assert_true (ai_move (ai, 6, 2));
8585        assert_true (ai_move (ai, 6, 3));
8586        assert_true (ai_move (ai, 2, 3));
8587        assert_true (ai_move (ai, 4, 1));
8588        assert_true (ai_move (ai, 5, 0));
8589        assert_true (ai_move (ai, 5, 1));
8590        assert_true (ai_move (ai, 4, 0));
8591        assert_true (ai_move (ai, 1, 4));
8592        assert_true (ai_move (ai, 1, 3));
8593        assert_true (ai_move (ai, 1, 2));
8594        assert_true (ai_move (ai, 0, 3));
8595        assert_true (ai_move (ai, 5, 6));
8596        assert_true (ai_move (ai, 3, 5));
8597        assert_true (ai_move (ai, 2, 6));
8598        assert_true (ai_move (ai, 5, 2));
8599        assert_true (ai_move (ai, 2, 2));
8600        assert_true (ai_move (ai, 5, 4));
8601        assert_true (ai_move (ai, 5, 5));
8602        assert_true (ai_move (ai, 4, 6));
8603        assert_true (ai_move (ai, 0, 4));
8604        assert_true (ai_move (ai, 6, 5));
8605        assert_true (ai_move (ai, 0, 2));
8606        assert_true (ai_move (ai, 3, 6));
8607        assert_true (ai_move (ai, 7, 5));
8608        assert_true (ai_move (ai, 5, 7));
8609        assert_true (ai_move (ai, 3, 7));
8610        assert_true (ai_move (ai, 2, 7));
8611        assert_true (ai_move (ai, 4, 7));
8612        assert_true (ai_move (ai, 1, 5));
8613        assert_true (ai_move (ai, 0, 5));
8614        assert_true (ai_move (ai, 6, 4));
8615        assert_true (ai_move (ai, 6, 6));
8616        assert_true (ai_move (ai, 2, 4));
8617        assert_true (ai_move (ai, 7, 2));
8618        assert_true (ai_move (ai, 2, 0));
8619        assert_true (ai_move (ai, 3, 0));
8620        assert_true (ai_move (ai, 4, 2));
8621        assert_true (ai_move (ai, 1, 1));
8622        assert_true (ai_move (ai, 7, 4));
8623        assert_true (ai_move (ai, 7, 3));
8624        assert_true (ai_move (ai, 6, 7));
8625        assert_true (ai_move (ai, 7, 6));
8626        assert_true (ai_move (ai, 0, 6));
8627        assert_true (ai_move (ai, 0, 7));
8628        assert_true (ai_move (ai, 0, 1));
8629        assert_true (ai_move (ai, 7, 7));
8630        assert_true (game.pass ());
8631        assert_true (ai_move (ai, 7, 1));
8632        assert_true (ai_move (ai, 6, 1));
8633        assert_true (ai_move (ai, 1, 7));
8634        assert_true (game.pass ());
8635        assert_true (ai_move (ai, 1, 6));
8636        assert_true (game.pass ());
8637        assert_true (ai_move (ai, 7, 0));
8638        assert_true (ai_move (ai, 6, 0));
8639        assert_true (ai_move (ai, 1, 0));
8640        assert_true (ai_move (ai, 0, 0));
8641    }
8642
8643    private static inline void test_complete_reversi_game_97 ()
8644    {
8645                                  /* 0 1 2 3 4 5 6 7 */
8646        string [] board = {/* 0 */ " . . . . . . . .",
8647                           /* 1 */ " . . . . . . . .",
8648                           /* 2 */ " . . D . . . . .",
8649                           /* 3 */ " . . . D L L . .",
8650                           /* 4 */ " . . . D L . . .",
8651                           /* 5 */ " . . . . L . . .",
8652                           /* 6 */ " . . . . L . . .",
8653                           /* 7 */ " . . . . . . . ."};
8654
8655        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8656        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8657
8658        assert_true (ai_move (ai, 5, 6));
8659        assert_true (ai_move (ai, 2, 5));
8660        assert_true (ai_move (ai, 4, 7));
8661        assert_true (ai_move (ai, 3, 2));
8662        assert_true (ai_move (ai, 2, 3));
8663        assert_true (ai_move (ai, 1, 2));
8664        assert_true (ai_move (ai, 2, 1));
8665        assert_true (ai_move (ai, 1, 4));
8666        assert_true (ai_move (ai, 2, 4));
8667        assert_true (ai_move (ai, 1, 3));
8668        assert_true (ai_move (ai, 2, 6));
8669        assert_true (ai_move (ai, 3, 1));
8670        assert_true (ai_move (ai, 0, 2));
8671        assert_true (ai_move (ai, 3, 6));
8672        assert_true (ai_move (ai, 2, 7));
8673        assert_true (ai_move (ai, 0, 4));
8674        assert_true (ai_move (ai, 0, 1));
8675        assert_true (ai_move (ai, 2, 0));
8676        assert_true (ai_move (ai, 0, 5));
8677        assert_true (ai_move (ai, 0, 3));
8678        assert_true (ai_move (ai, 4, 1));
8679        assert_true (ai_move (ai, 4, 2));
8680        assert_true (ai_move (ai, 5, 2));
8681        assert_true (ai_move (ai, 5, 0));
8682        assert_true (ai_move (ai, 1, 6));
8683        assert_true (ai_move (ai, 5, 4));
8684        assert_true (ai_move (ai, 6, 3));
8685        assert_true (ai_move (ai, 6, 5));
8686        assert_true (ai_move (ai, 1, 5));
8687        assert_true (ai_move (ai, 0, 0));
8688        assert_true (ai_move (ai, 7, 4));
8689        assert_true (ai_move (ai, 7, 6));
8690        assert_true (ai_move (ai, 5, 5));
8691        assert_true (ai_move (ai, 6, 2));
8692        assert_true (ai_move (ai, 1, 0));
8693        assert_true (ai_move (ai, 5, 7));
8694        assert_true (ai_move (ai, 6, 4));
8695        assert_true (ai_move (ai, 3, 7));
8696        assert_true (ai_move (ai, 6, 7));
8697        assert_true (ai_move (ai, 3, 5));
8698        assert_true (ai_move (ai, 7, 5));
8699        assert_true (ai_move (ai, 7, 3));
8700        assert_true (ai_move (ai, 1, 7));
8701        assert_true (ai_move (ai, 0, 6));
8702        assert_true (ai_move (ai, 3, 0));
8703        assert_true (ai_move (ai, 0, 7));
8704        assert_true (ai_move (ai, 5, 1));
8705        assert_true (ai_move (ai, 7, 7));
8706        assert_true (ai_move (ai, 7, 2));
8707        assert_true (ai_move (ai, 6, 1));
8708        assert_true (ai_move (ai, 7, 1));
8709        assert_true (ai_move (ai, 6, 6));
8710        assert_true (game.pass ());
8711        assert_true (ai_move (ai, 4, 0));
8712        assert_true (ai_move (ai, 1, 1));
8713        assert_true (ai_move (ai, 7, 0));
8714        assert_true (ai_move (ai, 6, 0));
8715    }
8716
8717    private static inline void test_complete_reversi_game_98 ()
8718    {
8719                                  /* 0 1 2 3 4 5 6 7 */
8720        string [] board = {/* 0 */ " . . . . . . . .",
8721                           /* 1 */ " . . . . . . . .",
8722                           /* 2 */ " . . D . . . . .",
8723                           /* 3 */ " . . . D L L . .",
8724                           /* 4 */ " . . . D L . . .",
8725                           /* 5 */ " . . . L D . . .",
8726                           /* 6 */ " . . . . . . . .",
8727                           /* 7 */ " . . . . . . . ."};
8728
8729        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8730        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8731
8732        assert_true (ai_move (ai, 2, 5));
8733        assert_true (ai_move (ai, 2, 6));
8734        assert_true (ai_move (ai, 3, 6));
8735        assert_true (ai_move (ai, 2, 4));
8736        assert_true (ai_move (ai, 1, 4));
8737        assert_true (ai_move (ai, 5, 6));
8738        assert_true (ai_move (ai, 1, 5));
8739        assert_true (ai_move (ai, 2, 7));
8740        assert_true (ai_move (ai, 5, 5));
8741        assert_true (ai_move (ai, 0, 3));
8742        assert_true (ai_move (ai, 6, 2));
8743        assert_true (ai_move (ai, 6, 5));
8744        assert_true (ai_move (ai, 4, 6));
8745        assert_true (ai_move (ai, 6, 3));
8746        assert_true (ai_move (ai, 2, 3));
8747        assert_true (ai_move (ai, 2, 1));
8748        assert_true (ai_move (ai, 1, 2));
8749        assert_true (ai_move (ai, 0, 2));
8750        assert_true (ai_move (ai, 7, 5));
8751        assert_true (ai_move (ai, 5, 7));
8752        assert_true (ai_move (ai, 2, 0));
8753        assert_true (ai_move (ai, 6, 4));
8754        assert_true (ai_move (ai, 0, 5));
8755        assert_true (ai_move (ai, 7, 4));
8756        assert_true (ai_move (ai, 5, 2));
8757        assert_true (ai_move (ai, 5, 1));
8758        assert_true (ai_move (ai, 4, 2));
8759        assert_true (ai_move (ai, 3, 0));
8760        assert_true (ai_move (ai, 7, 3));
8761        assert_true (ai_move (ai, 5, 4));
8762        assert_true (ai_move (ai, 4, 1));
8763        assert_true (ai_move (ai, 0, 4));
8764        assert_true (ai_move (ai, 0, 1));
8765        assert_true (ai_move (ai, 7, 2));
8766        assert_true (ai_move (ai, 7, 1));
8767        assert_true (ai_move (ai, 1, 0));
8768        assert_true (ai_move (ai, 7, 6));
8769        assert_true (ai_move (ai, 3, 2));
8770        assert_true (ai_move (ai, 1, 3));
8771        assert_true (ai_move (ai, 3, 1));
8772        assert_true (ai_move (ai, 6, 6));
8773        assert_true (ai_move (ai, 6, 1));
8774        assert_true (ai_move (ai, 0, 6));
8775        assert_true (ai_move (ai, 1, 1));
8776        assert_true (ai_move (ai, 0, 0));
8777        assert_true (ai_move (ai, 1, 6));
8778        assert_true (ai_move (ai, 4, 7));
8779        assert_true (ai_move (ai, 3, 7));
8780        assert_true (ai_move (ai, 4, 0));
8781        assert_true (ai_move (ai, 6, 0));
8782        assert_true (ai_move (ai, 7, 0));
8783        assert_true (ai_move (ai, 5, 0));
8784        assert_true (ai_move (ai, 0, 7));
8785        assert_true (ai_move (ai, 7, 7));
8786        assert_true (ai_move (ai, 1, 7));
8787        assert_true (ai_move (ai, 6, 7));
8788    }
8789
8790    private static inline void test_complete_reversi_game_99 ()
8791    {
8792                                  /* 0 1 2 3 4 5 6 7 */
8793        string [] board = {/* 0 */ " . . . . . . . .",
8794                           /* 1 */ " . . . . . . . .",
8795                           /* 2 */ " . . D . . . . .",
8796                           /* 3 */ " . . . D L L . .",
8797                           /* 4 */ " . . . L D . . .",
8798                           /* 5 */ " . . L . D . . .",
8799                           /* 6 */ " . . . . . . . .",
8800                           /* 7 */ " . . . . . . . ."};
8801
8802        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8803        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8804
8805        assert_true (ai_move (ai, 6, 2));
8806        assert_true (ai_move (ai, 6, 3));
8807        assert_true (ai_move (ai, 2, 3));
8808        assert_true (ai_move (ai, 3, 5));
8809        assert_true (ai_move (ai, 1, 5));
8810        assert_true (ai_move (ai, 4, 6));
8811        assert_true (ai_move (ai, 5, 6));
8812        assert_true (ai_move (ai, 2, 6));
8813        assert_true (ai_move (ai, 3, 6));
8814        assert_true (ai_move (ai, 0, 4));
8815        assert_true (ai_move (ai, 0, 5));
8816        assert_true (ai_move (ai, 0, 6));
8817        assert_true (ai_move (ai, 5, 5));
8818        assert_true (ai_move (ai, 2, 4));
8819        assert_true (ai_move (ai, 1, 3));
8820        assert_true (ai_move (ai, 6, 5));
8821        assert_true (ai_move (ai, 2, 7));
8822        assert_true (ai_move (ai, 1, 2));
8823        assert_true (ai_move (ai, 5, 4));
8824        assert_true (ai_move (ai, 2, 1));
8825        assert_true (ai_move (ai, 3, 1));
8826        assert_true (ai_move (ai, 0, 3));
8827        assert_true (ai_move (ai, 5, 2));
8828        assert_true (ai_move (ai, 4, 7));
8829        assert_true (ai_move (ai, 5, 7));
8830        assert_true (ai_move (ai, 3, 7));
8831        assert_true (ai_move (ai, 2, 0));
8832        assert_true (ai_move (ai, 1, 4));
8833        assert_true (ai_move (ai, 7, 5));
8834        assert_true (ai_move (ai, 6, 4));
8835        assert_true (ai_move (ai, 6, 6));
8836        assert_true (ai_move (ai, 7, 1));
8837        assert_true (ai_move (ai, 0, 2));
8838        assert_true (ai_move (ai, 0, 1));
8839        assert_true (ai_move (ai, 7, 4));
8840        assert_true (ai_move (ai, 3, 2));
8841        assert_true (ai_move (ai, 4, 2));
8842        assert_true (ai_move (ai, 4, 1));
8843        assert_true (ai_move (ai, 7, 2));
8844        assert_true (ai_move (ai, 6, 1));
8845        assert_true (ai_move (ai, 5, 1));
8846        assert_true (ai_move (ai, 5, 0));
8847        assert_true (ai_move (ai, 3, 0));
8848        assert_true (ai_move (ai, 4, 0));
8849        assert_true (ai_move (ai, 1, 1));
8850        assert_true (ai_move (ai, 7, 3));
8851        assert_true (ai_move (ai, 7, 0));
8852        assert_true (ai_move (ai, 6, 0));
8853        assert_true (ai_move (ai, 1, 6));
8854        assert_true (ai_move (ai, 0, 7));
8855        assert_true (ai_move (ai, 1, 7));
8856        assert_true (ai_move (ai, 0, 0));
8857        assert_true (ai_move (ai, 1, 0));
8858        assert_true (ai_move (ai, 7, 7));
8859        assert_true (ai_move (ai, 7, 6));
8860        assert_true (ai_move (ai, 6, 7));
8861    }
8862
8863    private static inline void test_complete_reversi_game_100 ()
8864    {
8865                                  /* 0 1 2 3 4 5 6 7 */
8866        string [] board = {/* 0 */ " . . . . . . . .",
8867                           /* 1 */ " . . . . . . . .",
8868                           /* 2 */ " . . D . . . . .",
8869                           /* 3 */ " . . L L L L . .",
8870                           /* 4 */ " . . . D D . . .",
8871                           /* 5 */ " . . . . D . . .",
8872                           /* 6 */ " . . . . . . . .",
8873                           /* 7 */ " . . . . . . . ."};
8874
8875        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8876        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8877
8878        assert_true (ai_move (ai, 1, 2));
8879        assert_true (ai_move (ai, 2, 5));
8880        assert_true (ai_move (ai, 6, 2));
8881        assert_true (ai_move (ai, 6, 3));
8882        assert_true (ai_move (ai, 6, 4));
8883        assert_true (ai_move (ai, 5, 6));
8884        assert_true (ai_move (ai, 4, 6));
8885        assert_true (ai_move (ai, 1, 3));
8886        assert_true (ai_move (ai, 0, 4));
8887        assert_true (ai_move (ai, 7, 5));
8888        assert_true (ai_move (ai, 6, 5));
8889        assert_true (ai_move (ai, 7, 4));
8890        assert_true (ai_move (ai, 2, 4));
8891        assert_true (ai_move (ai, 7, 3));
8892        assert_true (ai_move (ai, 2, 6));
8893        assert_true (ai_move (ai, 5, 1));
8894        assert_true (ai_move (ai, 3, 2));
8895        assert_true (ai_move (ai, 5, 5));
8896        assert_true (ai_move (ai, 4, 2));
8897        assert_true (ai_move (ai, 3, 6));
8898        assert_true (ai_move (ai, 2, 7));
8899        assert_true (ai_move (ai, 3, 1));
8900        assert_true (ai_move (ai, 4, 1));
8901        assert_true (ai_move (ai, 1, 5));
8902        assert_true (ai_move (ai, 3, 5));
8903        assert_true (ai_move (ai, 0, 2));
8904        assert_true (ai_move (ai, 1, 4));
8905        assert_true (ai_move (ai, 0, 5));
8906        assert_true (ai_move (ai, 0, 3));
8907        assert_true (ai_move (ai, 4, 0));
8908        assert_true (ai_move (ai, 2, 1));
8909        assert_true (ai_move (ai, 3, 7));
8910        assert_true (ai_move (ai, 5, 2));
8911        assert_true (ai_move (ai, 2, 0));
8912        assert_true (ai_move (ai, 5, 4));
8913        assert_true (ai_move (ai, 1, 7));
8914        assert_true (ai_move (ai, 1, 6));
8915        assert_true (ai_move (ai, 0, 6));
8916        assert_true (ai_move (ai, 0, 7));
8917        assert_true (ai_move (ai, 1, 1));
8918        assert_true (ai_move (ai, 4, 7));
8919        assert_true (ai_move (ai, 5, 7));
8920        assert_true (ai_move (ai, 6, 7));
8921        assert_true (ai_move (ai, 6, 6));
8922        assert_true (ai_move (ai, 7, 2));
8923        assert_true (ai_move (ai, 7, 1));
8924        assert_true (ai_move (ai, 6, 1));
8925        assert_true (ai_move (ai, 5, 0));
8926        assert_true (ai_move (ai, 0, 1));
8927        assert_true (game.pass ());
8928        assert_true (ai_move (ai, 3, 0));
8929        assert_true (ai_move (ai, 1, 0));
8930        assert_true (ai_move (ai, 7, 7));
8931        assert_true (ai_move (ai, 7, 6));
8932        assert_true (ai_move (ai, 7, 0));
8933        assert_true (ai_move (ai, 6, 0));
8934        assert_true (ai_move (ai, 0, 0));
8935    }
8936
8937    private static inline void test_complete_reversi_game_101 ()
8938    {
8939                                  /* 0 1 2 3 4 5 6 7 */
8940        string [] board = {/* 0 */ " . . . . . . . .",
8941                           /* 1 */ " . . . . . . . .",
8942                           /* 2 */ " . . . . . . . .",
8943                           /* 3 */ " . . . L D . . .",
8944                           /* 4 */ " . . . L D . . .",
8945                           /* 5 */ " . . . D L . . .",
8946                           /* 6 */ " . . D . . L . .",
8947                           /* 7 */ " . . . . . . . ."};
8948
8949        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
8950        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
8951
8952        assert_true (ai_move (ai, 5, 5));
8953        assert_true (ai_move (ai, 3, 6));
8954        assert_true (ai_move (ai, 5, 7));
8955        assert_true (ai_move (ai, 6, 5));
8956        assert_true (ai_move (ai, 5, 4));
8957        assert_true (ai_move (ai, 6, 3));
8958        assert_true (ai_move (ai, 5, 3));
8959        assert_true (ai_move (ai, 6, 4));
8960        assert_true (ai_move (ai, 7, 5));
8961        assert_true (ai_move (ai, 7, 4));
8962        assert_true (ai_move (ai, 7, 3));
8963        assert_true (ai_move (ai, 7, 2));
8964        assert_true (ai_move (ai, 7, 1));
8965        assert_true (ai_move (ai, 6, 2));
8966        assert_true (ai_move (ai, 5, 2));
8967        assert_true (ai_move (ai, 4, 2));
8968        assert_true (ai_move (ai, 3, 1));
8969        assert_true (ai_move (ai, 4, 1));
8970        assert_true (ai_move (ai, 3, 0));
8971        assert_true (ai_move (ai, 2, 0));
8972        assert_true (ai_move (ai, 1, 0));
8973        assert_true (ai_move (ai, 6, 6));
8974        assert_true (ai_move (ai, 2, 5));
8975        assert_true (ai_move (ai, 1, 4));
8976        assert_true (ai_move (ai, 1, 5));
8977        assert_true (ai_move (ai, 4, 6));
8978        assert_true (ai_move (ai, 4, 7));
8979        assert_true (ai_move (ai, 4, 0));
8980        assert_true (ai_move (ai, 5, 0));
8981        assert_true (ai_move (ai, 3, 7));
8982        assert_true (ai_move (ai, 2, 7));
8983        assert_true (ai_move (ai, 6, 7));
8984        assert_true (ai_move (ai, 7, 7));
8985        assert_true (ai_move (ai, 5, 1));
8986        assert_true (ai_move (ai, 0, 3));
8987        assert_true (ai_move (ai, 0, 5));
8988        assert_true (ai_move (ai, 0, 4));
8989        assert_true (ai_move (ai, 0, 2));
8990        assert_true (ai_move (ai, 2, 4));
8991        assert_true (ai_move (ai, 3, 2));
8992        assert_true (ai_move (ai, 2, 3));
8993        assert_true (ai_move (ai, 1, 2));
8994        assert_true (ai_move (ai, 6, 0));
8995        assert_true (ai_move (ai, 2, 2));
8996        assert_true (ai_move (ai, 2, 1));
8997        assert_true (ai_move (ai, 1, 3));
8998        assert_true (ai_move (ai, 6, 1));
8999        assert_true (ai_move (ai, 7, 0));
9000        assert_true (ai_move (ai, 0, 1));
9001        assert_true (ai_move (ai, 0, 0));
9002        assert_true (game.pass ());
9003        assert_true (ai_move (ai, 1, 1));
9004        assert_true (game.pass ());
9005        assert_true (ai_move (ai, 1, 6));
9006        assert_true (ai_move (ai, 0, 6));
9007        assert_true (ai_move (ai, 7, 6));
9008        assert_true (game.pass ());
9009        assert_true (ai_move (ai, 1, 7));
9010        assert_true (ai_move (ai, 0, 7));
9011    }
9012
9013    private static inline void test_complete_reversi_game_102 ()
9014    {
9015                                  /* 0 1 2 3 4 5 6 7 */
9016        string [] board = {/* 0 */ " . . . . . . . .",
9017                           /* 1 */ " . . . . . . . .",
9018                           /* 2 */ " . . . . . . . .",
9019                           /* 3 */ " . . . L D . . .",
9020                           /* 4 */ " . . . L L . . .",
9021                           /* 5 */ " . . . D D L . .",
9022                           /* 6 */ " . . D . . . . .",
9023                           /* 7 */ " . . . . . . . ."};
9024
9025        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9026        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9027
9028        assert_true (ai_move (ai, 6, 5));
9029        assert_true (ai_move (ai, 4, 6));
9030        assert_true (ai_move (ai, 2, 5));
9031        assert_true (ai_move (ai, 6, 4));
9032        assert_true (ai_move (ai, 5, 6));
9033        assert_true (ai_move (ai, 5, 7));
9034        assert_true (ai_move (ai, 6, 3));
9035        assert_true (ai_move (ai, 7, 3));
9036        assert_true (ai_move (ai, 4, 7));
9037        assert_true (ai_move (ai, 3, 7));
9038        assert_true (ai_move (ai, 5, 4));
9039        assert_true (ai_move (ai, 1, 5));
9040        assert_true (ai_move (ai, 0, 5));
9041        assert_true (ai_move (ai, 7, 4));
9042        assert_true (ai_move (ai, 7, 5));
9043        assert_true (ai_move (ai, 7, 6));
9044        assert_true (ai_move (ai, 2, 7));
9045        assert_true (ai_move (ai, 1, 7));
9046        assert_true (ai_move (ai, 2, 2));
9047        assert_true (ai_move (ai, 6, 2));
9048        assert_true (ai_move (ai, 7, 2));
9049        assert_true (ai_move (ai, 7, 1));
9050        assert_true (ai_move (ai, 6, 1));
9051        assert_true (ai_move (ai, 5, 2));
9052        assert_true (ai_move (ai, 6, 7));
9053        assert_true (ai_move (ai, 7, 7));
9054        assert_true (ai_move (ai, 3, 6));
9055        assert_true (ai_move (ai, 7, 0));
9056        assert_true (ai_move (ai, 6, 0));
9057        assert_true (ai_move (ai, 5, 0));
9058        assert_true (ai_move (ai, 4, 2));
9059        assert_true (ai_move (ai, 5, 1));
9060        assert_true (game.pass ());
9061        assert_true (ai_move (ai, 2, 3));
9062        assert_true (ai_move (ai, 6, 6));
9063        assert_true (ai_move (ai, 1, 4));
9064        assert_true (ai_move (ai, 3, 2));
9065        assert_true (ai_move (ai, 2, 4));
9066        assert_true (ai_move (ai, 4, 1));
9067        assert_true (ai_move (ai, 1, 3));
9068        assert_true (ai_move (ai, 1, 2));
9069        assert_true (ai_move (ai, 5, 3));
9070        assert_true (ai_move (ai, 1, 6));
9071        assert_true (ai_move (ai, 0, 3));
9072        assert_true (ai_move (ai, 0, 4));
9073        assert_true (ai_move (ai, 2, 1));
9074        assert_true (ai_move (ai, 0, 2));
9075        assert_true (ai_move (ai, 4, 0));
9076        assert_true (ai_move (ai, 2, 0));
9077        assert_true (ai_move (ai, 3, 1));
9078        assert_true (ai_move (ai, 3, 0));
9079        assert_true (ai_move (ai, 1, 0));
9080        assert_true (ai_move (ai, 1, 1));
9081        assert_true (ai_move (ai, 0, 0));
9082        assert_true (ai_move (ai, 0, 1));
9083        assert_true (ai_move (ai, 0, 6));
9084        assert_true (ai_move (ai, 0, 7));
9085    }
9086
9087    private static inline void test_complete_reversi_game_103 ()
9088    {
9089                                  /* 0 1 2 3 4 5 6 7 */
9090        string [] board = {/* 0 */ " . . . . . . . .",
9091                           /* 1 */ " . . . . . . . .",
9092                           /* 2 */ " . . . . . . . .",
9093                           /* 3 */ " . . . L D . . .",
9094                           /* 4 */ " . . . L L L . .",
9095                           /* 5 */ " . . . D D . . .",
9096                           /* 6 */ " . . D . . . . .",
9097                           /* 7 */ " . . . . . . . ."};
9098
9099        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9100        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9101
9102        assert_true (ai_move (ai, 6, 5));
9103        assert_true (ai_move (ai, 6, 4));
9104        assert_true (ai_move (ai, 2, 5));
9105        assert_true (ai_move (ai, 5, 3));
9106        assert_true (ai_move (ai, 5, 2));
9107        assert_true (ai_move (ai, 5, 1));
9108        assert_true (ai_move (ai, 2, 3));
9109        assert_true (ai_move (ai, 4, 6));
9110        assert_true (ai_move (ai, 5, 6));
9111        assert_true (ai_move (ai, 3, 6));
9112        assert_true (ai_move (ai, 3, 7));
9113        assert_true (ai_move (ai, 2, 7));
9114        assert_true (ai_move (ai, 1, 7));
9115        assert_true (ai_move (ai, 1, 5));
9116        assert_true (ai_move (ai, 2, 4));
9117        assert_true (ai_move (ai, 1, 4));
9118        assert_true (ai_move (ai, 0, 5));
9119        assert_true (ai_move (ai, 0, 3));
9120        assert_true (ai_move (ai, 0, 4));
9121        assert_true (ai_move (ai, 0, 6));
9122        assert_true (ai_move (ai, 6, 2));
9123        assert_true (ai_move (ai, 2, 2));
9124        assert_true (ai_move (ai, 4, 2));
9125        assert_true (ai_move (ai, 7, 3));
9126        assert_true (ai_move (ai, 7, 2));
9127        assert_true (ai_move (ai, 3, 1));
9128        assert_true (ai_move (ai, 3, 2));
9129        assert_true (ai_move (ai, 5, 5));
9130        assert_true (ai_move (ai, 7, 4));
9131        assert_true (ai_move (ai, 2, 1));
9132        assert_true (ai_move (ai, 6, 3));
9133        assert_true (ai_move (ai, 4, 1));
9134        assert_true (ai_move (ai, 4, 7));
9135        assert_true (ai_move (ai, 5, 7));
9136        assert_true (ai_move (ai, 6, 7));
9137        assert_true (ai_move (ai, 7, 5));
9138        assert_true (ai_move (ai, 7, 6));
9139        assert_true (ai_move (ai, 6, 6));
9140        assert_true (ai_move (ai, 1, 3));
9141        assert_true (ai_move (ai, 1, 2));
9142        assert_true (ai_move (ai, 1, 6));
9143        assert_true (ai_move (ai, 7, 1));
9144        assert_true (ai_move (ai, 7, 0));
9145        assert_true (game.pass ());
9146        assert_true (ai_move (ai, 6, 1));
9147        assert_true (ai_move (ai, 6, 0));
9148        assert_true (ai_move (ai, 5, 0));
9149        assert_true (ai_move (ai, 4, 0));
9150        assert_true (ai_move (ai, 3, 0));
9151        assert_true (ai_move (ai, 2, 0));
9152        assert_true (ai_move (ai, 1, 0));
9153        assert_true (ai_move (ai, 1, 1));
9154        assert_true (ai_move (ai, 0, 0));
9155        assert_true (ai_move (ai, 0, 1));
9156        assert_true (ai_move (ai, 7, 7));
9157        assert_true (game.pass ());
9158        assert_true (ai_move (ai, 0, 2));
9159        assert_true (game.pass ());
9160        assert_true (ai_move (ai, 0, 7));
9161    }
9162
9163    private static inline void test_complete_reversi_game_104 ()
9164    {
9165                                  /* 0 1 2 3 4 5 6 7 */
9166        string [] board = {/* 0 */ " . . . . . . . .",
9167                           /* 1 */ " . . . . . . . .",
9168                           /* 2 */ " . . . . . . . .",
9169                           /* 3 */ " . . . L L L . .",
9170                           /* 4 */ " . . . L D . . .",
9171                           /* 5 */ " . . . D D . . .",
9172                           /* 6 */ " . . D . . . . .",
9173                           /* 7 */ " . . . . . . . ."};
9174
9175        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9176        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9177
9178        assert_true (ai_move (ai, 6, 2));
9179        assert_true (ai_move (ai, 6, 3));
9180        assert_true (ai_move (ai, 2, 3));
9181        assert_true (ai_move (ai, 1, 3));
9182        assert_true (ai_move (ai, 1, 2));
9183        assert_true (ai_move (ai, 5, 5));
9184        assert_true (ai_move (ai, 6, 5));
9185        assert_true (ai_move (ai, 4, 6));
9186        assert_true (ai_move (ai, 5, 6));
9187        assert_true (ai_move (ai, 6, 4));
9188        assert_true (ai_move (ai, 5, 7));
9189        assert_true (ai_move (ai, 7, 5));
9190        assert_true (ai_move (ai, 5, 4));
9191        assert_true (ai_move (ai, 3, 7));
9192        assert_true (ai_move (ai, 4, 7));
9193        assert_true (ai_move (ai, 6, 7));
9194        assert_true (ai_move (ai, 7, 2));
9195        assert_true (ai_move (ai, 1, 5));
9196        assert_true (ai_move (ai, 7, 3));
9197        assert_true (ai_move (ai, 2, 5));
9198        assert_true (ai_move (ai, 5, 2));
9199        assert_true (ai_move (ai, 5, 1));
9200        assert_true (ai_move (ai, 3, 6));
9201        assert_true (ai_move (ai, 7, 4));
9202        assert_true (ai_move (ai, 7, 6));
9203        assert_true (ai_move (ai, 2, 7));
9204        assert_true (ai_move (ai, 4, 1));
9205        assert_true (ai_move (ai, 3, 1));
9206        assert_true (ai_move (ai, 5, 0));
9207        assert_true (ai_move (ai, 0, 1));
9208        assert_true (ai_move (ai, 2, 4));
9209        assert_true (ai_move (ai, 6, 1));
9210        assert_true (ai_move (ai, 7, 1));
9211        assert_true (ai_move (ai, 4, 2));
9212        assert_true (ai_move (ai, 3, 0));
9213        assert_true (ai_move (ai, 1, 4));
9214        assert_true (ai_move (ai, 4, 0));
9215        assert_true (ai_move (ai, 6, 6));
9216        assert_true (ai_move (ai, 0, 4));
9217        assert_true (ai_move (ai, 0, 5));
9218        assert_true (ai_move (ai, 2, 0));
9219        assert_true (ai_move (ai, 0, 3));
9220        assert_true (ai_move (ai, 7, 7));
9221        assert_true (ai_move (ai, 6, 0));
9222        assert_true (ai_move (ai, 7, 0));
9223        assert_true (ai_move (ai, 2, 1));
9224        assert_true (ai_move (ai, 1, 7));
9225        assert_true (ai_move (ai, 1, 6));
9226        assert_true (ai_move (ai, 0, 7));
9227        assert_true (ai_move (ai, 0, 6));
9228        assert_true (ai_move (ai, 0, 2));
9229        assert_true (game.pass ());
9230        assert_true (ai_move (ai, 1, 1));
9231        assert_true (ai_move (ai, 1, 0));
9232        assert_true (ai_move (ai, 2, 2));
9233        assert_true (ai_move (ai, 3, 2));
9234        assert_true (ai_move (ai, 0, 0));
9235    }
9236
9237    private static inline void test_complete_reversi_game_105 ()
9238    {
9239                                  /* 0 1 2 3 4 5 6 7 */
9240        string [] board = {/* 0 */ " . . . . . . . .",
9241                           /* 1 */ " . . . . . . . .",
9242                           /* 2 */ " . . . . . L . .",
9243                           /* 3 */ " . . . L L . . .",
9244                           /* 4 */ " . . . L D . . .",
9245                           /* 5 */ " . . . D D . . .",
9246                           /* 6 */ " . . D . . . . .",
9247                           /* 7 */ " . . . . . . . ."};
9248
9249        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9250        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9251
9252        assert_true (ai_move (ai, 2, 3));
9253        assert_true (ai_move (ai, 1, 3));
9254        assert_true (ai_move (ai, 1, 2));
9255        assert_true (ai_move (ai, 5, 5));
9256        assert_true (ai_move (ai, 6, 5));
9257        assert_true (ai_move (ai, 4, 6));
9258        assert_true (ai_move (ai, 5, 6));
9259        assert_true (ai_move (ai, 6, 4));
9260        assert_true (ai_move (ai, 5, 4));
9261        assert_true (ai_move (ai, 2, 5));
9262        assert_true (ai_move (ai, 2, 4));
9263        assert_true (ai_move (ai, 1, 5));
9264        assert_true (ai_move (ai, 0, 5));
9265        assert_true (ai_move (ai, 2, 2));
9266        assert_true (ai_move (ai, 2, 1));
9267        assert_true (ai_move (ai, 3, 1));
9268        assert_true (ai_move (ai, 3, 2));
9269        assert_true (ai_move (ai, 3, 6));
9270        assert_true (ai_move (ai, 5, 7));
9271        assert_true (ai_move (ai, 1, 4));
9272        assert_true (ai_move (ai, 0, 2));
9273        assert_true (ai_move (ai, 7, 5));
9274        assert_true (ai_move (ai, 2, 7));
9275        assert_true (ai_move (ai, 2, 0));
9276        assert_true (ai_move (ai, 0, 4));
9277        assert_true (ai_move (ai, 0, 3));
9278        assert_true (ai_move (ai, 7, 3));
9279        assert_true (ai_move (ai, 6, 3));
9280        assert_true (ai_move (ai, 4, 0));
9281        assert_true (ai_move (ai, 3, 0));
9282        assert_true (ai_move (ai, 5, 3));
9283        assert_true (ai_move (ai, 7, 4));
9284        assert_true (ai_move (ai, 5, 1));
9285        assert_true (ai_move (ai, 7, 2));
9286        assert_true (ai_move (ai, 4, 1));
9287        assert_true (ai_move (ai, 4, 2));
9288        assert_true (ai_move (ai, 6, 2));
9289        assert_true (ai_move (ai, 5, 0));
9290        assert_true (ai_move (ai, 1, 6));
9291        assert_true (ai_move (ai, 6, 6));
9292        assert_true (ai_move (ai, 1, 0));
9293        assert_true (ai_move (ai, 0, 0));
9294        assert_true (ai_move (ai, 0, 1));
9295        assert_true (ai_move (ai, 7, 1));
9296        assert_true (ai_move (ai, 7, 6));
9297        assert_true (ai_move (ai, 7, 7));
9298        assert_true (ai_move (ai, 6, 7));
9299        assert_true (ai_move (ai, 4, 7));
9300        assert_true (ai_move (ai, 1, 1));
9301        assert_true (ai_move (ai, 6, 0));
9302        assert_true (ai_move (ai, 3, 7));
9303        assert_true (ai_move (ai, 0, 7));
9304        assert_true (ai_move (ai, 1, 7));
9305        assert_true (ai_move (ai, 0, 6));
9306        assert_true (ai_move (ai, 6, 1));
9307        assert_true (ai_move (ai, 7, 0));
9308    }
9309
9310    private static inline void test_complete_reversi_game_106 ()
9311    {
9312                                  /* 0 1 2 3 4 5 6 7 */
9313        string [] board = {/* 0 */ " . . . . . . . .",
9314                           /* 1 */ " . . . . . . . .",
9315                           /* 2 */ " . . . . . . . .",
9316                           /* 3 */ " . . . L D . . .",
9317                           /* 4 */ " . . . L D . . .",
9318                           /* 5 */ " . . . L D . . .",
9319                           /* 6 */ " . . D L . . . .",
9320                           /* 7 */ " . . . . . . . ."};
9321
9322        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9323        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9324
9325        assert_true (ai_move (ai, 2, 7));
9326        assert_true (ai_move (ai, 5, 6));
9327        assert_true (ai_move (ai, 5, 4));
9328        assert_true (ai_move (ai, 5, 5));
9329        assert_true (ai_move (ai, 5, 7));
9330        assert_true (ai_move (ai, 6, 5));
9331        assert_true (ai_move (ai, 7, 4));
9332        assert_true (ai_move (ai, 6, 3));
9333        assert_true (ai_move (ai, 5, 2));
9334        assert_true (ai_move (ai, 5, 3));
9335        assert_true (ai_move (ai, 6, 2));
9336        assert_true (ai_move (ai, 5, 1));
9337        assert_true (ai_move (ai, 6, 4));
9338        assert_true (ai_move (ai, 2, 5));
9339        assert_true (ai_move (ai, 1, 5));
9340        assert_true (ai_move (ai, 7, 2));
9341        assert_true (ai_move (ai, 4, 1));
9342        assert_true (ai_move (ai, 7, 3));
9343        assert_true (ai_move (ai, 7, 1));
9344        assert_true (ai_move (ai, 4, 6));
9345        assert_true (ai_move (ai, 3, 7));
9346        assert_true (ai_move (ai, 0, 5));
9347        assert_true (ai_move (ai, 1, 4));
9348        assert_true (ai_move (ai, 2, 3));
9349        assert_true (ai_move (ai, 5, 0));
9350        assert_true (ai_move (ai, 4, 7));
9351        assert_true (ai_move (ai, 2, 4));
9352        assert_true (ai_move (ai, 3, 0));
9353        assert_true (ai_move (ai, 1, 2));
9354        assert_true (ai_move (ai, 3, 2));
9355        assert_true (ai_move (ai, 0, 3));
9356        assert_true (ai_move (ai, 1, 6));
9357        assert_true (ai_move (ai, 2, 1));
9358        assert_true (ai_move (ai, 4, 2));
9359        assert_true (ai_move (ai, 4, 0));
9360        assert_true (ai_move (ai, 2, 2));
9361        assert_true (ai_move (ai, 1, 3));
9362        assert_true (ai_move (ai, 7, 5));
9363        assert_true (ai_move (ai, 7, 6));
9364        assert_true (ai_move (ai, 1, 7));
9365        assert_true (ai_move (ai, 3, 1));
9366        assert_true (ai_move (ai, 6, 7));
9367        assert_true (ai_move (ai, 2, 0));
9368        assert_true (ai_move (ai, 0, 4));
9369        assert_true (ai_move (ai, 6, 6));
9370        assert_true (ai_move (ai, 0, 2));
9371        assert_true (ai_move (ai, 1, 1));
9372        assert_true (ai_move (ai, 6, 1));
9373        assert_true (ai_move (ai, 7, 0));
9374        assert_true (ai_move (ai, 6, 0));
9375        assert_true (ai_move (ai, 0, 7));
9376        assert_true (ai_move (ai, 1, 0));
9377        assert_true (ai_move (ai, 7, 7));
9378        assert_true (ai_move (ai, 0, 6));
9379        assert_true (ai_move (ai, 0, 0));
9380        assert_true (ai_move (ai, 0, 1));
9381    }
9382
9383    private static inline void test_complete_reversi_game_107 ()
9384    {
9385                                  /* 0 1 2 3 4 5 6 7 */
9386        string [] board = {/* 0 */ " . . . . . . . .",
9387                           /* 1 */ " . . . . . . . .",
9388                           /* 2 */ " . . . . . . . .",
9389                           /* 3 */ " . . . L D . . .",
9390                           /* 4 */ " . . . D L . . .",
9391                           /* 5 */ " . . D D D L . .",
9392                           /* 6 */ " . . . . . . . .",
9393                           /* 7 */ " . . . . . . . ."};
9394
9395        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9396        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9397
9398        assert_true (ai_move (ai, 6, 5));
9399        assert_true (ai_move (ai, 2, 6));
9400        assert_true (ai_move (ai, 3, 6));
9401        assert_true (ai_move (ai, 2, 4));
9402        assert_true (ai_move (ai, 1, 5));
9403        assert_true (ai_move (ai, 3, 7));
9404        assert_true (ai_move (ai, 4, 7));
9405        assert_true (ai_move (ai, 5, 7));
9406        assert_true (ai_move (ai, 2, 7));
9407        assert_true (ai_move (ai, 1, 7));
9408        assert_true (ai_move (ai, 4, 2));
9409        assert_true (ai_move (ai, 4, 6));
9410        assert_true (ai_move (ai, 5, 4));
9411        assert_true (ai_move (ai, 1, 4));
9412        assert_true (ai_move (ai, 0, 4));
9413        assert_true (ai_move (ai, 6, 4));
9414        assert_true (ai_move (ai, 7, 4));
9415        assert_true (ai_move (ai, 6, 3));
9416        assert_true (ai_move (ai, 5, 6));
9417        assert_true (ai_move (ai, 5, 3));
9418        assert_true (ai_move (ai, 7, 2));
9419        assert_true (ai_move (ai, 1, 3));
9420        assert_true (ai_move (ai, 5, 2));
9421        assert_true (ai_move (ai, 6, 2));
9422        assert_true (ai_move (ai, 2, 2));
9423        assert_true (ai_move (ai, 0, 5));
9424        assert_true (ai_move (ai, 0, 6));
9425        assert_true (ai_move (ai, 5, 1));
9426        assert_true (ai_move (ai, 4, 1));
9427        assert_true (ai_move (ai, 0, 2));
9428        assert_true (ai_move (ai, 5, 0));
9429        assert_true (ai_move (ai, 3, 1));
9430        assert_true (ai_move (ai, 3, 2));
9431        assert_true (ai_move (ai, 4, 0));
9432        assert_true (ai_move (ai, 2, 0));
9433        assert_true (ai_move (ai, 6, 0));
9434        assert_true (ai_move (ai, 1, 2));
9435        assert_true (ai_move (ai, 7, 5));
9436        assert_true (ai_move (ai, 3, 0));
9437        assert_true (ai_move (ai, 1, 0));
9438        assert_true (ai_move (ai, 1, 6));
9439        assert_true (ai_move (ai, 7, 3));
9440        assert_true (ai_move (ai, 7, 6));
9441        assert_true (ai_move (ai, 2, 1));
9442        assert_true (ai_move (ai, 2, 3));
9443        assert_true (ai_move (ai, 0, 3));
9444        assert_true (ai_move (ai, 0, 1));
9445        assert_true (ai_move (ai, 1, 1));
9446        assert_true (ai_move (ai, 7, 1));
9447        assert_true (ai_move (ai, 6, 7));
9448        assert_true (ai_move (ai, 0, 0));
9449        assert_true (ai_move (ai, 0, 7));
9450        assert_true (ai_move (ai, 7, 0));
9451        assert_true (ai_move (ai, 6, 6));
9452        assert_true (ai_move (ai, 7, 7));
9453        assert_true (ai_move (ai, 6, 1));
9454    }
9455
9456    private static inline void test_complete_reversi_game_108 ()
9457    {
9458                                  /* 0 1 2 3 4 5 6 7 */
9459        string [] board = {/* 0 */ " . . . . . . . .",
9460                           /* 1 */ " . . . . . . . .",
9461                           /* 2 */ " . . . . . . . .",
9462                           /* 3 */ " . . . L L L . .",
9463                           /* 4 */ " . . . D D . . .",
9464                           /* 5 */ " . . D D D . . .",
9465                           /* 6 */ " . . . . . . . .",
9466                           /* 7 */ " . . . . . . . ."};
9467
9468        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9469        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9470
9471        assert_true (ai_move (ai, 6, 2));
9472        assert_true (ai_move (ai, 6, 3));
9473        assert_true (ai_move (ai, 2, 2));
9474        assert_true (ai_move (ai, 7, 1));
9475        assert_true (ai_move (ai, 4, 2));
9476        assert_true (ai_move (ai, 3, 1));
9477        assert_true (ai_move (ai, 4, 1));
9478        assert_true (ai_move (ai, 1, 3));
9479        assert_true (ai_move (ai, 6, 4));
9480        assert_true (ai_move (ai, 6, 5));
9481        assert_true (ai_move (ai, 7, 5));
9482        assert_true (ai_move (ai, 5, 1));
9483        assert_true (ai_move (ai, 5, 5));
9484        assert_true (ai_move (ai, 2, 4));
9485        assert_true (ai_move (ai, 1, 4));
9486        assert_true (ai_move (ai, 1, 5));
9487        assert_true (ai_move (ai, 0, 4));
9488        assert_true (ai_move (ai, 3, 6));
9489        assert_true (ai_move (ai, 4, 6));
9490        assert_true (ai_move (ai, 5, 4));
9491        assert_true (ai_move (ai, 0, 5));
9492        assert_true (ai_move (ai, 2, 6));
9493        assert_true (ai_move (ai, 3, 7));
9494        assert_true (ai_move (ai, 0, 3));
9495        assert_true (ai_move (ai, 2, 3));
9496        assert_true (ai_move (ai, 5, 7));
9497        assert_true (ai_move (ai, 2, 1));
9498        assert_true (ai_move (ai, 5, 6));
9499        assert_true (ai_move (ai, 0, 2));
9500        assert_true (ai_move (ai, 2, 0));
9501        assert_true (ai_move (ai, 3, 2));
9502        assert_true (ai_move (ai, 5, 2));
9503        assert_true (ai_move (ai, 1, 2));
9504        assert_true (ai_move (ai, 2, 7));
9505        assert_true (ai_move (ai, 4, 7));
9506        assert_true (ai_move (ai, 7, 4));
9507        assert_true (ai_move (ai, 5, 0));
9508        assert_true (ai_move (ai, 3, 0));
9509        assert_true (ai_move (ai, 4, 0));
9510        assert_true (ai_move (ai, 6, 0));
9511        assert_true (ai_move (ai, 7, 2));
9512        assert_true (ai_move (ai, 6, 1));
9513        assert_true (ai_move (ai, 7, 0));
9514        assert_true (ai_move (ai, 1, 1));
9515        assert_true (ai_move (ai, 0, 0));
9516        assert_true (ai_move (ai, 7, 6));
9517        assert_true (ai_move (ai, 1, 0));
9518        assert_true (ai_move (ai, 6, 6));
9519        assert_true (ai_move (ai, 7, 3));
9520        assert_true (ai_move (ai, 0, 1));
9521        assert_true (ai_move (ai, 7, 7));
9522        assert_true (ai_move (ai, 6, 7));
9523        assert_true (ai_move (ai, 1, 6));
9524        assert_true (ai_move (ai, 0, 7));
9525        assert_true (ai_move (ai, 1, 7));
9526        assert_true (ai_move (ai, 0, 6));
9527    }
9528
9529    private static inline void test_complete_reversi_game_109 ()
9530    {
9531                                  /* 0 1 2 3 4 5 6 7 */
9532        string [] board = {/* 0 */ " . . . . . . . .",
9533                           /* 1 */ " . . . . . . . .",
9534                           /* 2 */ " . . . . . . . .",
9535                           /* 3 */ " . . . L D . . .",
9536                           /* 4 */ " . . . L D . . .",
9537                           /* 5 */ " . . D L D . . .",
9538                           /* 6 */ " . . . L . . . .",
9539                           /* 7 */ " . . . . . . . ."};
9540
9541        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9542        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9543
9544        assert_true (ai_move (ai, 2, 6));
9545        assert_true (ai_move (ai, 1, 4));
9546        assert_true (ai_move (ai, 1, 5));
9547        assert_true (ai_move (ai, 5, 6));
9548        assert_true (ai_move (ai, 5, 5));
9549        assert_true (ai_move (ai, 5, 2));
9550        assert_true (ai_move (ai, 5, 7));
9551        assert_true (ai_move (ai, 5, 4));
9552        assert_true (ai_move (ai, 4, 7));
9553        assert_true (ai_move (ai, 6, 5));
9554        assert_true (ai_move (ai, 7, 5));
9555        assert_true (ai_move (ai, 2, 7));
9556        assert_true (ai_move (ai, 4, 6));
9557        assert_true (ai_move (ai, 0, 5));
9558        assert_true (ai_move (ai, 6, 3));
9559        assert_true (ai_move (ai, 1, 7));
9560        assert_true (ai_move (ai, 4, 1));
9561        assert_true (ai_move (ai, 6, 4));
9562        assert_true (ai_move (ai, 7, 3));
9563        assert_true (ai_move (ai, 7, 4));
9564        assert_true (ai_move (ai, 5, 3));
9565        assert_true (ai_move (ai, 6, 2));
9566        assert_true (ai_move (ai, 7, 2));
9567        assert_true (ai_move (ai, 5, 1));
9568        assert_true (ai_move (ai, 5, 0));
9569        assert_true (ai_move (ai, 3, 0));
9570        assert_true (ai_move (ai, 3, 1));
9571        assert_true (ai_move (ai, 3, 2));
9572        assert_true (ai_move (ai, 4, 2));
9573        assert_true (ai_move (ai, 6, 1));
9574        assert_true (ai_move (ai, 2, 1));
9575        assert_true (ai_move (ai, 2, 2));
9576        assert_true (ai_move (ai, 1, 2));
9577        assert_true (ai_move (ai, 2, 3));
9578        assert_true (ai_move (ai, 2, 0));
9579        assert_true (ai_move (ai, 0, 2));
9580        assert_true (ai_move (ai, 4, 0));
9581        assert_true (ai_move (ai, 6, 0));
9582        assert_true (ai_move (ai, 7, 0));
9583        assert_true (ai_move (ai, 7, 1));
9584        assert_true (ai_move (ai, 2, 4));
9585        assert_true (ai_move (ai, 1, 3));
9586        assert_true (ai_move (ai, 0, 4));
9587        assert_true (ai_move (ai, 0, 3));
9588        assert_true (ai_move (ai, 0, 1));
9589        assert_true (ai_move (ai, 0, 0));
9590        assert_true (ai_move (ai, 1, 6));
9591        assert_true (ai_move (ai, 0, 6));
9592        assert_true (game.pass ());
9593        assert_true (ai_move (ai, 0, 7));
9594        assert_true (game.pass ());
9595        assert_true (ai_move (ai, 3, 7));
9596        assert_true (ai_move (ai, 6, 6));
9597        assert_true (ai_move (ai, 1, 0));
9598        assert_true (ai_move (ai, 1, 1));
9599        assert_true (ai_move (ai, 7, 7));
9600        assert_true (ai_move (ai, 6, 7));
9601        assert_true (ai_move (ai, 7, 6));
9602    }
9603
9604    private static inline void test_complete_reversi_game_110 ()
9605    {
9606                                  /* 0 1 2 3 4 5 6 7 */
9607        string [] board = {/* 0 */ " . . . . . . . .",
9608                           /* 1 */ " . . . . . . . .",
9609                           /* 2 */ " . . . . . . . .",
9610                           /* 3 */ " . . . L D . . .",
9611                           /* 4 */ " . . D D L . . .",
9612                           /* 5 */ " . . . L L L . .",
9613                           /* 6 */ " . . . . . . . .",
9614                           /* 7 */ " . . . . . . . ."};
9615
9616        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9617        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9618
9619        assert_true (ai_move (ai, 5, 6));
9620        assert_true (ai_move (ai, 4, 6));
9621        assert_true (ai_move (ai, 2, 3));
9622        assert_true (ai_move (ai, 5, 7));
9623        assert_true (ai_move (ai, 5, 4));
9624        assert_true (ai_move (ai, 6, 3));
9625        assert_true (ai_move (ai, 6, 4));
9626        assert_true (ai_move (ai, 7, 3));
9627        assert_true (ai_move (ai, 7, 2));
9628        assert_true (ai_move (ai, 6, 2));
9629        assert_true (ai_move (ai, 5, 2));
9630        assert_true (ai_move (ai, 5, 3));
9631        assert_true (ai_move (ai, 2, 6));
9632        assert_true (ai_move (ai, 2, 5));
9633        assert_true (ai_move (ai, 3, 6));
9634        assert_true (ai_move (ai, 1, 2));
9635        assert_true (ai_move (ai, 1, 5));
9636        assert_true (ai_move (ai, 0, 5));
9637        assert_true (ai_move (ai, 1, 4));
9638        assert_true (ai_move (ai, 2, 7));
9639        assert_true (ai_move (ai, 3, 2));
9640        assert_true (ai_move (ai, 5, 1));
9641        assert_true (ai_move (ai, 4, 1));
9642        assert_true (ai_move (ai, 7, 1));
9643        assert_true (ai_move (ai, 5, 0));
9644        assert_true (ai_move (ai, 4, 2));
9645        assert_true (ai_move (ai, 6, 5));
9646        assert_true (ai_move (ai, 7, 4));
9647        assert_true (ai_move (ai, 4, 7));
9648        assert_true (ai_move (ai, 3, 7));
9649        assert_true (ai_move (ai, 2, 2));
9650        assert_true (ai_move (ai, 2, 1));
9651        assert_true (ai_move (ai, 3, 1));
9652        assert_true (ai_move (ai, 1, 6));
9653        assert_true (ai_move (ai, 1, 3));
9654        assert_true (ai_move (ai, 0, 4));
9655        assert_true (ai_move (ai, 7, 5));
9656        assert_true (ai_move (ai, 7, 6));
9657        assert_true (ai_move (ai, 2, 0));
9658        assert_true (ai_move (ai, 0, 2));
9659        assert_true (ai_move (ai, 0, 3));
9660        assert_true (ai_move (ai, 4, 0));
9661        assert_true (ai_move (ai, 1, 1));
9662        assert_true (ai_move (ai, 6, 0));
9663        assert_true (ai_move (ai, 6, 6));
9664        assert_true (ai_move (ai, 6, 7));
9665        assert_true (ai_move (ai, 7, 7));
9666        assert_true (ai_move (ai, 1, 0));
9667        assert_true (ai_move (ai, 3, 0));
9668        assert_true (ai_move (ai, 0, 1));
9669        assert_true (ai_move (ai, 7, 0));
9670        assert_true (game.pass ());
9671        assert_true (ai_move (ai, 1, 7));
9672        assert_true (game.pass ());
9673        assert_true (ai_move (ai, 6, 1));
9674        assert_true (game.pass ());
9675        assert_true (ai_move (ai, 0, 7));
9676        assert_true (ai_move (ai, 0, 6));
9677        assert_true (ai_move (ai, 0, 0));
9678    }
9679
9680    private static inline void test_complete_reversi_game_111 ()
9681    {
9682                                  /* 0 1 2 3 4 5 6 7 */
9683        string [] board = {/* 0 */ " . . . . . . . .",
9684                           /* 1 */ " . . . . . . . .",
9685                           /* 2 */ " . . . . . . . .",
9686                           /* 3 */ " . . . L L L . .",
9687                           /* 4 */ " . . D D L . . .",
9688                           /* 5 */ " . . . L D . . .",
9689                           /* 6 */ " . . . . . . . .",
9690                           /* 7 */ " . . . . . . . ."};
9691
9692        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9693        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9694
9695        assert_true (ai_move (ai, 2, 5));
9696        assert_true (ai_move (ai, 2, 6));
9697        assert_true (ai_move (ai, 4, 6));
9698        assert_true (ai_move (ai, 2, 3));
9699        assert_true (ai_move (ai, 1, 5));
9700        assert_true (ai_move (ai, 0, 4));
9701        assert_true (ai_move (ai, 0, 5));
9702        assert_true (ai_move (ai, 3, 6));
9703        assert_true (ai_move (ai, 1, 3));
9704        assert_true (ai_move (ai, 1, 4));
9705        assert_true (ai_move (ai, 0, 3));
9706        assert_true (ai_move (ai, 5, 5));
9707        assert_true (ai_move (ai, 6, 5));
9708        assert_true (ai_move (ai, 5, 4));
9709        assert_true (ai_move (ai, 6, 4));
9710        assert_true (ai_move (ai, 5, 6));
9711        assert_true (ai_move (ai, 5, 7));
9712        assert_true (ai_move (ai, 4, 7));
9713        assert_true (ai_move (ai, 6, 2));
9714        assert_true (ai_move (ai, 5, 2));
9715        assert_true (ai_move (ai, 5, 1));
9716        assert_true (ai_move (ai, 6, 3));
9717        assert_true (ai_move (ai, 2, 7));
9718        assert_true (ai_move (ai, 4, 1));
9719        assert_true (ai_move (ai, 3, 7));
9720        assert_true (ai_move (ai, 7, 2));
9721        assert_true (ai_move (ai, 1, 2));
9722        assert_true (ai_move (ai, 5, 0));
9723        assert_true (ai_move (ai, 2, 2));
9724        assert_true (ai_move (ai, 7, 4));
9725        assert_true (ai_move (ai, 3, 2));
9726        assert_true (ai_move (ai, 7, 5));
9727        assert_true (ai_move (ai, 7, 3));
9728        assert_true (ai_move (ai, 2, 1));
9729        assert_true (ai_move (ai, 4, 2));
9730        assert_true (ai_move (ai, 3, 1));
9731        assert_true (ai_move (ai, 2, 0));
9732        assert_true (ai_move (ai, 0, 2));
9733        assert_true (ai_move (ai, 0, 1));
9734        assert_true (ai_move (ai, 6, 6));
9735        assert_true (ai_move (ai, 3, 0));
9736        assert_true (ai_move (ai, 0, 6));
9737        assert_true (ai_move (ai, 0, 7));
9738        assert_true (ai_move (ai, 1, 7));
9739        assert_true (ai_move (ai, 6, 0));
9740        assert_true (ai_move (ai, 6, 7));
9741        assert_true (ai_move (ai, 4, 0));
9742        assert_true (ai_move (ai, 1, 0));
9743        assert_true (ai_move (ai, 0, 0));
9744        assert_true (ai_move (ai, 6, 1));
9745        assert_true (ai_move (ai, 1, 6));
9746        assert_true (ai_move (ai, 1, 1));
9747        assert_true (ai_move (ai, 7, 7));
9748        assert_true (ai_move (ai, 7, 6));
9749        assert_true (ai_move (ai, 7, 1));
9750        assert_true (ai_move (ai, 7, 0));
9751    }
9752
9753    private static inline void test_complete_reversi_game_112 ()
9754    {
9755                                  /* 0 1 2 3 4 5 6 7 */
9756        string [] board = {/* 0 */ " . . . . . . . .",
9757                           /* 1 */ " . . . . . . . .",
9758                           /* 2 */ " . . . . . . . .",
9759                           /* 3 */ " . . . L D . . .",
9760                           /* 4 */ " . . L D D . . .",
9761                           /* 5 */ " . L . L D . . .",
9762                           /* 6 */ " . . . . . . . .",
9763                           /* 7 */ " . . . . . . . ."};
9764
9765        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9766        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9767
9768        assert_true (ai_move (ai, 1, 4));
9769        assert_true (ai_move (ai, 5, 5));
9770        assert_true (ai_move (ai, 5, 6));
9771        assert_true (ai_move (ai, 4, 6));
9772        assert_true (ai_move (ai, 2, 3));
9773        assert_true (ai_move (ai, 5, 7));
9774        assert_true (ai_move (ai, 5, 4));
9775        assert_true (ai_move (ai, 6, 3));
9776        assert_true (ai_move (ai, 6, 4));
9777        assert_true (ai_move (ai, 7, 3));
9778        assert_true (ai_move (ai, 7, 2));
9779        assert_true (ai_move (ai, 6, 2));
9780        assert_true (ai_move (ai, 5, 2));
9781        assert_true (ai_move (ai, 5, 3));
9782        assert_true (ai_move (ai, 2, 6));
9783        assert_true (ai_move (ai, 3, 7));
9784        assert_true (ai_move (ai, 4, 7));
9785        assert_true (ai_move (ai, 5, 1));
9786        assert_true (ai_move (ai, 6, 5));
9787        assert_true (ai_move (ai, 3, 6));
9788        assert_true (ai_move (ai, 7, 4));
9789        assert_true (ai_move (ai, 7, 5));
9790        assert_true (ai_move (ai, 7, 6));
9791        assert_true (ai_move (ai, 1, 2));
9792        assert_true (ai_move (ai, 4, 2));
9793        assert_true (ai_move (ai, 2, 5));
9794        assert_true (ai_move (ai, 0, 5));
9795        assert_true (ai_move (ai, 4, 1));
9796        assert_true (ai_move (ai, 3, 2));
9797        assert_true (ai_move (ai, 0, 3));
9798        assert_true (ai_move (ai, 3, 0));
9799        assert_true (ai_move (ai, 2, 2));
9800        assert_true (ai_move (ai, 0, 2));
9801        assert_true (ai_move (ai, 0, 4));
9802        assert_true (ai_move (ai, 5, 0));
9803        assert_true (ai_move (ai, 2, 1));
9804        assert_true (ai_move (ai, 1, 3));
9805        assert_true (ai_move (ai, 3, 1));
9806        assert_true (ai_move (ai, 4, 0));
9807        assert_true (ai_move (ai, 6, 1));
9808        assert_true (ai_move (ai, 2, 0));
9809        assert_true (ai_move (ai, 1, 1));
9810        assert_true (ai_move (ai, 2, 7));
9811        assert_true (ai_move (ai, 1, 6));
9812        assert_true (ai_move (ai, 6, 7));
9813        assert_true (ai_move (ai, 6, 6));
9814        assert_true (ai_move (ai, 1, 0));
9815        assert_true (ai_move (ai, 0, 0));
9816        assert_true (ai_move (ai, 0, 1));
9817        assert_true (ai_move (ai, 6, 0));
9818        assert_true (ai_move (ai, 7, 7));
9819        assert_true (ai_move (ai, 0, 6));
9820        assert_true (ai_move (ai, 0, 7));
9821        assert_true (ai_move (ai, 1, 7));
9822        assert_true (ai_move (ai, 7, 1));
9823        assert_true (ai_move (ai, 7, 0));
9824    }
9825
9826    private static inline void test_complete_reversi_game_113 ()
9827    {
9828                                  /* 0 1 2 3 4 5 6 7 */
9829        string [] board = {/* 0 */ " . . . . . . . .",
9830                           /* 1 */ " . . . . . . . .",
9831                           /* 2 */ " . . . . . . . .",
9832                           /* 3 */ " . L . L D . . .",
9833                           /* 4 */ " . . L D D . . .",
9834                           /* 5 */ " . . . L D . . .",
9835                           /* 6 */ " . . . . . . . .",
9836                           /* 7 */ " . . . . . . . ."};
9837
9838        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9839        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9840
9841        assert_true (ai_move (ai, 1, 4));
9842        assert_true (ai_move (ai, 5, 5));
9843        assert_true (ai_move (ai, 5, 6));
9844        assert_true (ai_move (ai, 4, 6));
9845        assert_true (ai_move (ai, 0, 2));
9846        assert_true (ai_move (ai, 1, 5));
9847        assert_true (ai_move (ai, 2, 3));
9848        assert_true (ai_move (ai, 2, 2));
9849        assert_true (ai_move (ai, 1, 2));
9850        assert_true (ai_move (ai, 0, 3));
9851        assert_true (ai_move (ai, 0, 4));
9852        assert_true (ai_move (ai, 5, 7));
9853        assert_true (ai_move (ai, 3, 1));
9854        assert_true (ai_move (ai, 2, 1));
9855        assert_true (ai_move (ai, 3, 2));
9856        assert_true (ai_move (ai, 4, 1));
9857        assert_true (ai_move (ai, 5, 0));
9858        assert_true (ai_move (ai, 5, 1));
9859        assert_true (ai_move (ai, 2, 0));
9860        assert_true (ai_move (ai, 0, 5));
9861        assert_true (ai_move (ai, 2, 5));
9862        assert_true (ai_move (ai, 0, 1));
9863        assert_true (ai_move (ai, 6, 5));
9864        assert_true (ai_move (ai, 6, 4));
9865        assert_true (ai_move (ai, 4, 2));
9866        assert_true (ai_move (ai, 5, 2));
9867        assert_true (ai_move (ai, 6, 3));
9868        assert_true (ai_move (ai, 3, 6));
9869        assert_true (ai_move (ai, 2, 7));
9870        assert_true (ai_move (ai, 2, 6));
9871        assert_true (ai_move (ai, 3, 0));
9872        assert_true (ai_move (ai, 5, 3));
9873        assert_true (ai_move (ai, 5, 4));
9874        assert_true (ai_move (ai, 7, 2));
9875        assert_true (ai_move (ai, 6, 2));
9876        assert_true (ai_move (ai, 4, 0));
9877        assert_true (ai_move (ai, 3, 7));
9878        assert_true (ai_move (ai, 7, 5));
9879        assert_true (ai_move (ai, 7, 4));
9880        assert_true (ai_move (ai, 7, 3));
9881        assert_true (ai_move (ai, 1, 7));
9882        assert_true (ai_move (ai, 6, 1));
9883        assert_true (ai_move (ai, 1, 6));
9884        assert_true (ai_move (ai, 0, 7));
9885        assert_true (ai_move (ai, 0, 6));
9886        assert_true (ai_move (ai, 4, 7));
9887        assert_true (ai_move (ai, 0, 0));
9888        assert_true (ai_move (ai, 1, 0));
9889        assert_true (ai_move (ai, 7, 0));
9890        assert_true (ai_move (ai, 6, 0));
9891        assert_true (ai_move (ai, 1, 1));
9892        assert_true (game.pass ());
9893        assert_true (ai_move (ai, 6, 6));
9894        assert_true (ai_move (ai, 6, 7));
9895        assert_true (ai_move (ai, 7, 1));
9896        assert_true (game.pass ());
9897        assert_true (ai_move (ai, 7, 6));
9898    }
9899
9900    private static inline void test_complete_reversi_game_114 ()
9901    {
9902                                  /* 0 1 2 3 4 5 6 7 */
9903        string [] board = {/* 0 */ " . . . . . . . .",
9904                           /* 1 */ " . . . . . . . .",
9905                           /* 2 */ " . . . . . . . .",
9906                           /* 3 */ " . . D D D . . .",
9907                           /* 4 */ " . . . D D . . .",
9908                           /* 5 */ " . . . L L L . .",
9909                           /* 6 */ " . . . . . . . .",
9910                           /* 7 */ " . . . . . . . ."};
9911
9912        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9913        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9914
9915        assert_true (ai_move (ai, 4, 6));
9916        assert_true (ai_move (ai, 5, 7));
9917        assert_true (ai_move (ai, 6, 5));
9918        assert_true (ai_move (ai, 6, 4));
9919        assert_true (ai_move (ai, 2, 5));
9920        assert_true (ai_move (ai, 7, 5));
9921        assert_true (ai_move (ai, 4, 7));
9922        assert_true (ai_move (ai, 3, 7));
9923        assert_true (ai_move (ai, 6, 6));
9924        assert_true (ai_move (ai, 1, 5));
9925        assert_true (ai_move (ai, 2, 6));
9926        assert_true (ai_move (ai, 2, 7));
9927        assert_true (ai_move (ai, 5, 6));
9928        assert_true (ai_move (ai, 2, 4));
9929        assert_true (ai_move (ai, 5, 4));
9930        assert_true (ai_move (ai, 5, 3));
9931        assert_true (ai_move (ai, 0, 5));
9932        assert_true (ai_move (ai, 3, 6));
9933        assert_true (ai_move (ai, 6, 7));
9934        assert_true (ai_move (ai, 7, 7));
9935        assert_true (ai_move (ai, 5, 2));
9936        assert_true (ai_move (ai, 5, 1));
9937        assert_true (ai_move (ai, 1, 4));
9938        assert_true (ai_move (ai, 0, 3));
9939        assert_true (ai_move (ai, 0, 4));
9940        assert_true (ai_move (ai, 1, 2));
9941        assert_true (ai_move (ai, 3, 2));
9942        assert_true (ai_move (ai, 0, 6));
9943        assert_true (ai_move (ai, 0, 1));
9944        assert_true (ai_move (ai, 2, 2));
9945        assert_true (ai_move (ai, 6, 3));
9946        assert_true (ai_move (ai, 4, 2));
9947        assert_true (ai_move (ai, 6, 2));
9948        assert_true (ai_move (ai, 3, 1));
9949        assert_true (ai_move (ai, 7, 4));
9950        assert_true (ai_move (ai, 1, 3));
9951        assert_true (ai_move (ai, 4, 1));
9952        assert_true (ai_move (ai, 5, 0));
9953        assert_true (ai_move (ai, 2, 1));
9954        assert_true (ai_move (ai, 7, 2));
9955        assert_true (ai_move (ai, 7, 3));
9956        assert_true (ai_move (ai, 2, 0));
9957        assert_true (ai_move (ai, 1, 1));
9958        assert_true (ai_move (ai, 1, 6));
9959        assert_true (ai_move (ai, 7, 6));
9960        assert_true (ai_move (ai, 0, 0));
9961        assert_true (ai_move (ai, 0, 2));
9962        assert_true (game.pass ());
9963        assert_true (ai_move (ai, 0, 7));
9964        assert_true (ai_move (ai, 1, 7));
9965        assert_true (ai_move (ai, 1, 0));
9966        assert_true (game.pass ());
9967        assert_true (ai_move (ai, 4, 0));
9968        assert_true (ai_move (ai, 3, 0));
9969        assert_true (ai_move (ai, 6, 1));
9970        assert_true (ai_move (ai, 7, 0));
9971        assert_true (ai_move (ai, 6, 0));
9972        assert_true (ai_move (ai, 7, 1));
9973    }
9974
9975    private static inline void test_complete_reversi_game_115 ()
9976    {
9977                                  /* 0 1 2 3 4 5 6 7 */
9978        string [] board = {/* 0 */ " . . . . . . . .",
9979                           /* 1 */ " . . . . . . . .",
9980                           /* 2 */ " . . . . . . . .",
9981                           /* 3 */ " . . D D D L . .",
9982                           /* 4 */ " . . . D L . . .",
9983                           /* 5 */ " . . . L D . . .",
9984                           /* 6 */ " . . . . . . . .",
9985                           /* 7 */ " . . . . . . . ."};
9986
9987        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
9988        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
9989
9990        assert_true (ai_move (ai, 2, 5));
9991        assert_true (ai_move (ai, 2, 6));
9992        assert_true (ai_move (ai, 3, 6));
9993        assert_true (ai_move (ai, 2, 4));
9994        assert_true (ai_move (ai, 1, 4));
9995        assert_true (ai_move (ai, 5, 6));
9996        assert_true (ai_move (ai, 1, 3));
9997        assert_true (ai_move (ai, 1, 5));
9998        assert_true (ai_move (ai, 2, 7));
9999        assert_true (ai_move (ai, 0, 4));
10000        assert_true (ai_move (ai, 0, 3));
10001        assert_true (ai_move (ai, 0, 2));
10002        assert_true (ai_move (ai, 1, 2));
10003        assert_true (ai_move (ai, 2, 1));
10004        assert_true (ai_move (ai, 6, 3));
10005        assert_true (ai_move (ai, 6, 2));
10006        assert_true (ai_move (ai, 0, 5));
10007        assert_true (ai_move (ai, 0, 6));
10008        assert_true (ai_move (ai, 5, 4));
10009        assert_true (ai_move (ai, 2, 2));
10010        assert_true (ai_move (ai, 5, 2));
10011        assert_true (ai_move (ai, 4, 7));
10012        assert_true (ai_move (ai, 2, 0));
10013        assert_true (ai_move (ai, 3, 1));
10014        assert_true (ai_move (ai, 7, 2));
10015        assert_true (ai_move (ai, 3, 2));
10016        assert_true (ai_move (ai, 4, 1));
10017        assert_true (ai_move (ai, 4, 0));
10018        assert_true (ai_move (ai, 4, 6));
10019        assert_true (ai_move (ai, 5, 7));
10020        assert_true (ai_move (ai, 4, 2));
10021        assert_true (ai_move (ai, 5, 5));
10022        assert_true (ai_move (ai, 1, 6));
10023        assert_true (ai_move (ai, 6, 5));
10024        assert_true (ai_move (ai, 7, 5));
10025        assert_true (ai_move (ai, 6, 4));
10026        assert_true (ai_move (ai, 7, 4));
10027        assert_true (ai_move (ai, 7, 3));
10028        assert_true (ai_move (ai, 1, 1));
10029        assert_true (ai_move (ai, 0, 1));
10030        assert_true (ai_move (ai, 6, 6));
10031        assert_true (ai_move (ai, 3, 7));
10032        assert_true (ai_move (ai, 6, 7));
10033        assert_true (ai_move (ai, 0, 7));
10034        assert_true (ai_move (ai, 1, 7));
10035        assert_true (ai_move (ai, 7, 7));
10036        assert_true (ai_move (ai, 7, 6));
10037        assert_true (ai_move (ai, 0, 0));
10038        assert_true (ai_move (ai, 1, 0));
10039        assert_true (ai_move (ai, 3, 0));
10040        assert_true (ai_move (ai, 5, 0));
10041        assert_true (ai_move (ai, 5, 1));
10042        assert_true (ai_move (ai, 6, 0));
10043        assert_true (ai_move (ai, 7, 0));
10044        assert_true (ai_move (ai, 6, 1));
10045        assert_true (ai_move (ai, 7, 1));
10046    }
10047
10048    private static inline void test_complete_reversi_game_116 ()
10049    {
10050                                  /* 0 1 2 3 4 5 6 7 */
10051        string [] board = {/* 0 */ " . . . . . . . .",
10052                           /* 1 */ " . . . . . . . .",
10053                           /* 2 */ " . . . L . . . .",
10054                           /* 3 */ " . . D L D . . .",
10055                           /* 4 */ " . . . L D . . .",
10056                           /* 5 */ " . . . L D . . .",
10057                           /* 6 */ " . . . . . . . .",
10058                           /* 7 */ " . . . . . . . ."};
10059
10060        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10061        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10062
10063        assert_true (ai_move (ai, 2, 6));
10064        assert_true (ai_move (ai, 1, 2));
10065        assert_true (ai_move (ai, 2, 1));
10066        assert_true (ai_move (ai, 4, 1));
10067        assert_true (ai_move (ai, 0, 3));
10068        assert_true (ai_move (ai, 3, 6));
10069        assert_true (ai_move (ai, 2, 7));
10070        assert_true (ai_move (ai, 5, 6));
10071        assert_true (ai_move (ai, 5, 4));
10072        assert_true (ai_move (ai, 5, 5));
10073        assert_true (ai_move (ai, 5, 7));
10074        assert_true (ai_move (ai, 6, 3));
10075        assert_true (ai_move (ai, 6, 5));
10076        assert_true (ai_move (ai, 6, 4));
10077        assert_true (ai_move (ai, 7, 3));
10078        assert_true (ai_move (ai, 7, 5));
10079        assert_true (ai_move (ai, 4, 6));
10080        assert_true (ai_move (ai, 7, 4));
10081        assert_true (ai_move (ai, 7, 6));
10082        assert_true (ai_move (ai, 5, 2));
10083        assert_true (ai_move (ai, 7, 2));
10084        assert_true (ai_move (ai, 5, 3));
10085        assert_true (ai_move (ai, 2, 5));
10086        assert_true (ai_move (ai, 6, 2));
10087        assert_true (ai_move (ai, 2, 4));
10088        assert_true (ai_move (ai, 1, 5));
10089        assert_true (ai_move (ai, 1, 4));
10090        assert_true (ai_move (ai, 0, 5));
10091        assert_true (ai_move (ai, 4, 2));
10092        assert_true (ai_move (ai, 5, 1));
10093        assert_true (ai_move (ai, 5, 0));
10094        assert_true (ai_move (ai, 0, 1));
10095        assert_true (ai_move (ai, 3, 0));
10096        assert_true (ai_move (ai, 4, 0));
10097        assert_true (ai_move (ai, 2, 2));
10098        assert_true (ai_move (ai, 2, 0));
10099        assert_true (ai_move (ai, 1, 0));
10100        assert_true (ai_move (ai, 1, 3));
10101        assert_true (ai_move (ai, 3, 1));
10102        assert_true (ai_move (ai, 4, 7));
10103        assert_true (ai_move (ai, 3, 7));
10104        assert_true (ai_move (ai, 1, 1));
10105        assert_true (ai_move (ai, 0, 0));
10106        assert_true (ai_move (ai, 6, 0));
10107        assert_true (ai_move (ai, 0, 2));
10108        assert_true (ai_move (ai, 6, 1));
10109        assert_true (ai_move (ai, 0, 4));
10110        assert_true (ai_move (ai, 6, 6));
10111        assert_true (ai_move (ai, 0, 6));
10112        assert_true (ai_move (ai, 6, 7));
10113        assert_true (ai_move (ai, 7, 7));
10114        assert_true (ai_move (ai, 1, 6));
10115        assert_true (ai_move (ai, 0, 7));
10116        assert_true (game.pass ());
10117        assert_true (ai_move (ai, 1, 7));
10118        assert_true (game.pass ());
10119        assert_true (ai_move (ai, 7, 0));
10120        assert_true (ai_move (ai, 7, 1));
10121    }
10122
10123    private static inline void test_complete_reversi_game_117 ()
10124    {
10125                                  /* 0 1 2 3 4 5 6 7 */
10126        string [] board = {/* 0 */ " . . . . . . . .",
10127                           /* 1 */ " . . . . . . . .",
10128                           /* 2 */ " . . D . . . . .",
10129                           /* 3 */ " . . . D D . . .",
10130                           /* 4 */ " . . . L D . . .",
10131                           /* 5 */ " . . . L L . . .",
10132                           /* 6 */ " . . . . . L . .",
10133                           /* 7 */ " . . . . . . . ."};
10134
10135        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10136        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10137
10138        assert_true (ai_move (ai, 2, 4));
10139        assert_true (ai_move (ai, 1, 3));
10140        assert_true (ai_move (ai, 1, 5));
10141        assert_true (ai_move (ai, 3, 1));
10142        assert_true (ai_move (ai, 4, 6));
10143        assert_true (ai_move (ai, 3, 6));
10144        assert_true (ai_move (ai, 2, 7));
10145        assert_true (ai_move (ai, 2, 6));
10146        assert_true (ai_move (ai, 2, 5));
10147        assert_true (ai_move (ai, 1, 4));
10148        assert_true (ai_move (ai, 3, 7));
10149        assert_true (ai_move (ai, 4, 7));
10150        assert_true (ai_move (ai, 5, 7));
10151        assert_true (ai_move (ai, 0, 5));
10152        assert_true (ai_move (ai, 0, 3));
10153        assert_true (ai_move (ai, 4, 2));
10154        assert_true (ai_move (ai, 5, 5));
10155        assert_true (ai_move (ai, 6, 5));
10156        assert_true (ai_move (ai, 5, 4));
10157        assert_true (ai_move (ai, 0, 4));
10158        assert_true (ai_move (ai, 0, 6));
10159        assert_true (ai_move (ai, 3, 2));
10160        assert_true (ai_move (ai, 5, 3));
10161        assert_true (ai_move (ai, 6, 3));
10162        assert_true (ai_move (ai, 6, 2));
10163        assert_true (ai_move (ai, 6, 6));
10164        assert_true (ai_move (ai, 6, 4));
10165        assert_true (ai_move (ai, 7, 4));
10166        assert_true (ai_move (ai, 0, 2));
10167        assert_true (ai_move (ai, 2, 3));
10168        assert_true (ai_move (ai, 2, 1));
10169        assert_true (ai_move (ai, 5, 2));
10170        assert_true (ai_move (ai, 5, 1));
10171        assert_true (ai_move (ai, 4, 1));
10172        assert_true (ai_move (ai, 2, 0));
10173        assert_true (ai_move (ai, 7, 2));
10174        assert_true (ai_move (ai, 6, 1));
10175        assert_true (ai_move (ai, 4, 0));
10176        assert_true (ai_move (ai, 3, 0));
10177        assert_true (ai_move (ai, 1, 0));
10178        assert_true (ai_move (ai, 1, 6));
10179        assert_true (ai_move (ai, 1, 2));
10180        assert_true (ai_move (ai, 0, 1));
10181        assert_true (ai_move (ai, 5, 0));
10182        assert_true (ai_move (ai, 7, 0));
10183        assert_true (ai_move (ai, 7, 1));
10184        assert_true (ai_move (ai, 6, 0));
10185        assert_true (ai_move (ai, 0, 7));
10186        assert_true (ai_move (ai, 0, 0));
10187        assert_true (ai_move (ai, 1, 7));
10188        assert_true (ai_move (ai, 1, 1));
10189        assert_true (ai_move (ai, 6, 7));
10190        assert_true (ai_move (ai, 7, 3));
10191        assert_true (game.pass ());
10192        assert_true (ai_move (ai, 7, 5));
10193        assert_true (ai_move (ai, 7, 6));
10194        assert_true (ai_move (ai, 7, 7));
10195    }
10196
10197    private static inline void test_complete_reversi_game_118 ()
10198    {
10199                                  /* 0 1 2 3 4 5 6 7 */
10200        string [] board = {/* 0 */ " . . . . . . . .",
10201                           /* 1 */ " . . . . . . . .",
10202                           /* 2 */ " . . D . . . . .",
10203                           /* 3 */ " . . . D D . . .",
10204                           /* 4 */ " . . . L D . . .",
10205                           /* 5 */ " . . . L L L . .",
10206                           /* 6 */ " . . . . . . . .",
10207                           /* 7 */ " . . . . . . . ."};
10208
10209        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10210        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10211
10212        assert_true (ai_move (ai, 4, 6));
10213        assert_true (ai_move (ai, 5, 6));
10214        assert_true (ai_move (ai, 6, 4));
10215        assert_true (ai_move (ai, 6, 5));
10216        assert_true (ai_move (ai, 2, 6));
10217        assert_true (ai_move (ai, 2, 5));
10218        assert_true (ai_move (ai, 3, 6));
10219        assert_true (ai_move (ai, 2, 7));
10220        assert_true (ai_move (ai, 1, 5));
10221        assert_true (ai_move (ai, 1, 4));
10222        assert_true (ai_move (ai, 3, 7));
10223        assert_true (ai_move (ai, 0, 5));
10224        assert_true (ai_move (ai, 2, 4));
10225        assert_true (ai_move (ai, 4, 7));
10226        assert_true (ai_move (ai, 7, 5));
10227        assert_true (ai_move (ai, 7, 3));
10228        assert_true (ai_move (ai, 1, 6));
10229        assert_true (ai_move (ai, 2, 3));
10230        assert_true (ai_move (ai, 1, 7));
10231        assert_true (ai_move (ai, 0, 7));
10232        assert_true (ai_move (ai, 1, 3));
10233        assert_true (ai_move (ai, 0, 2));
10234        assert_true (ai_move (ai, 5, 3));
10235        assert_true (ai_move (ai, 3, 1));
10236        assert_true (ai_move (ai, 2, 1));
10237        assert_true (ai_move (ai, 1, 2));
10238        assert_true (ai_move (ai, 4, 0));
10239        assert_true (ai_move (ai, 3, 2));
10240        assert_true (ai_move (ai, 0, 6));
10241        assert_true (ai_move (ai, 2, 0));
10242        assert_true (ai_move (ai, 4, 2));
10243        assert_true (ai_move (ai, 7, 4));
10244        assert_true (ai_move (ai, 7, 2));
10245        assert_true (ai_move (ai, 3, 0));
10246        assert_true (ai_move (ai, 5, 7));
10247        assert_true (ai_move (ai, 6, 7));
10248        assert_true (ai_move (ai, 0, 3));
10249        assert_true (ai_move (ai, 0, 4));
10250        assert_true (ai_move (ai, 4, 1));
10251        assert_true (ai_move (ai, 5, 0));
10252        assert_true (ai_move (ai, 1, 1));
10253        assert_true (ai_move (ai, 6, 2));
10254        assert_true (ai_move (ai, 6, 3));
10255        assert_true (ai_move (ai, 0, 0));
10256        assert_true (ai_move (ai, 0, 1));
10257        assert_true (ai_move (ai, 5, 2));
10258        assert_true (ai_move (ai, 5, 4));
10259        assert_true (game.pass ());
10260        assert_true (ai_move (ai, 7, 1));
10261        assert_true (ai_move (ai, 6, 1));
10262        assert_true (ai_move (ai, 7, 6));
10263        assert_true (ai_move (ai, 6, 6));
10264        assert_true (ai_move (ai, 7, 7));
10265        assert_true (game.pass ());
10266        assert_true (ai_move (ai, 1, 0));
10267        assert_true (game.pass ());
10268        assert_true (ai_move (ai, 7, 0));
10269        assert_true (ai_move (ai, 5, 1));
10270        assert_true (ai_move (ai, 6, 0));
10271    }
10272
10273    private static inline void test_complete_reversi_game_119 ()
10274    {
10275                                  /* 0 1 2 3 4 5 6 7 */
10276        string [] board = {/* 0 */ " . . . . . . . .",
10277                           /* 1 */ " . . . . . . . .",
10278                           /* 2 */ " . . D . . . . .",
10279                           /* 3 */ " . . . D D . . .",
10280                           /* 4 */ " . . . L L L . .",
10281                           /* 5 */ " . . . L D . . .",
10282                           /* 6 */ " . . . . . . . .",
10283                           /* 7 */ " . . . . . . . ."};
10284
10285        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10286        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10287
10288        assert_true (ai_move (ai, 6, 5));
10289        assert_true (ai_move (ai, 4, 6));
10290        assert_true (ai_move (ai, 5, 5));
10291        assert_true (ai_move (ai, 6, 4));
10292        assert_true (ai_move (ai, 6, 3));
10293        assert_true (ai_move (ai, 7, 3));
10294        assert_true (ai_move (ai, 2, 5));
10295        assert_true (ai_move (ai, 5, 6));
10296        assert_true (ai_move (ai, 6, 6));
10297        assert_true (ai_move (ai, 2, 4));
10298        assert_true (ai_move (ai, 5, 3));
10299        assert_true (ai_move (ai, 2, 6));
10300        assert_true (ai_move (ai, 1, 5));
10301        assert_true (ai_move (ai, 7, 4));
10302        assert_true (ai_move (ai, 7, 6));
10303        assert_true (ai_move (ai, 1, 4));
10304        assert_true (ai_move (ai, 2, 7));
10305        assert_true (ai_move (ai, 3, 6));
10306        assert_true (ai_move (ai, 7, 5));
10307        assert_true (ai_move (ai, 7, 2));
10308        assert_true (ai_move (ai, 7, 1));
10309        assert_true (ai_move (ai, 7, 7));
10310        assert_true (ai_move (ai, 5, 7));
10311        assert_true (ai_move (ai, 7, 0));
10312        assert_true (ai_move (ai, 2, 3));
10313        assert_true (ai_move (ai, 6, 7));
10314        assert_true (ai_move (ai, 1, 3));
10315        assert_true (ai_move (ai, 6, 2));
10316        assert_true (ai_move (ai, 5, 2));
10317        assert_true (ai_move (ai, 0, 2));
10318        assert_true (ai_move (ai, 0, 4));
10319        assert_true (ai_move (ai, 4, 1));
10320        assert_true (ai_move (ai, 5, 1));
10321        assert_true (ai_move (ai, 6, 1));
10322        assert_true (ai_move (ai, 5, 0));
10323        assert_true (ai_move (ai, 1, 2));
10324        assert_true (ai_move (ai, 3, 2));
10325        assert_true (ai_move (ai, 4, 7));
10326        assert_true (ai_move (ai, 3, 7));
10327        assert_true (ai_move (ai, 1, 7));
10328        assert_true (ai_move (ai, 1, 6));
10329        assert_true (ai_move (ai, 3, 0));
10330        assert_true (ai_move (ai, 3, 1));
10331        assert_true (ai_move (ai, 4, 2));
10332        assert_true (ai_move (ai, 2, 1));
10333        assert_true (ai_move (ai, 0, 3));
10334        assert_true (ai_move (ai, 0, 5));
10335        assert_true (ai_move (ai, 6, 0));
10336        assert_true (ai_move (ai, 0, 1));
10337        assert_true (ai_move (ai, 4, 0));
10338        assert_true (ai_move (ai, 1, 1));
10339        assert_true (ai_move (ai, 2, 0));
10340        assert_true (ai_move (ai, 1, 0));
10341        assert_true (ai_move (ai, 0, 7));
10342        assert_true (ai_move (ai, 0, 6));
10343        assert_true (ai_move (ai, 0, 0));
10344    }
10345
10346    private static inline void test_complete_reversi_game_120 ()
10347    {
10348                                  /* 0 1 2 3 4 5 6 7 */
10349        string [] board = {/* 0 */ " . . . . . . . .",
10350                           /* 1 */ " . . . . . . . .",
10351                           /* 2 */ " . . D . . . . .",
10352                           /* 3 */ " . . . D D L . .",
10353                           /* 4 */ " . . . L L . . .",
10354                           /* 5 */ " . . . L D . . .",
10355                           /* 6 */ " . . . . . . . .",
10356                           /* 7 */ " . . . . . . . ."};
10357
10358        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10359        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10360
10361        assert_true (ai_move (ai, 5, 5));
10362        assert_true (ai_move (ai, 6, 5));
10363        assert_true (ai_move (ai, 6, 2));
10364        assert_true (ai_move (ai, 5, 4));
10365        assert_true (ai_move (ai, 5, 6));
10366        assert_true (ai_move (ai, 6, 3));
10367        assert_true (ai_move (ai, 7, 5));
10368        assert_true (ai_move (ai, 5, 7));
10369        assert_true (ai_move (ai, 7, 3));
10370        assert_true (ai_move (ai, 7, 4));
10371        assert_true (ai_move (ai, 4, 6));
10372        assert_true (ai_move (ai, 3, 6));
10373        assert_true (ai_move (ai, 6, 4));
10374        assert_true (ai_move (ai, 7, 2));
10375        assert_true (ai_move (ai, 7, 1));
10376        assert_true (ai_move (ai, 5, 2));
10377        assert_true (ai_move (ai, 2, 7));
10378        assert_true (ai_move (ai, 3, 7));
10379        assert_true (ai_move (ai, 7, 6));
10380        assert_true (ai_move (ai, 3, 2));
10381        assert_true (ai_move (ai, 4, 1));
10382        assert_true (ai_move (ai, 5, 1));
10383        assert_true (ai_move (ai, 4, 2));
10384        assert_true (ai_move (ai, 4, 0));
10385        assert_true (ai_move (ai, 3, 1));
10386        assert_true (ai_move (ai, 2, 3));
10387        assert_true (ai_move (ai, 2, 1));
10388        assert_true (ai_move (ai, 3, 0));
10389        assert_true (ai_move (ai, 2, 0));
10390        assert_true (ai_move (ai, 1, 3));
10391        assert_true (ai_move (ai, 1, 2));
10392        assert_true (ai_move (ai, 1, 0));
10393        assert_true (ai_move (ai, 2, 5));
10394        assert_true (ai_move (ai, 1, 4));
10395        assert_true (ai_move (ai, 2, 4));
10396        assert_true (ai_move (ai, 2, 6));
10397        assert_true (ai_move (ai, 0, 5));
10398        assert_true (ai_move (ai, 1, 5));
10399        assert_true (ai_move (ai, 0, 4));
10400        assert_true (ai_move (ai, 0, 2));
10401        assert_true (ai_move (ai, 1, 1));
10402        assert_true (ai_move (ai, 1, 7));
10403        assert_true (ai_move (ai, 0, 6));
10404        assert_true (ai_move (ai, 6, 1));
10405        assert_true (ai_move (ai, 4, 7));
10406        assert_true (ai_move (ai, 0, 3));
10407        assert_true (ai_move (ai, 0, 1));
10408        assert_true (ai_move (ai, 0, 0));
10409        assert_true (ai_move (ai, 0, 7));
10410        assert_true (ai_move (ai, 6, 6));
10411        assert_true (ai_move (ai, 7, 0));
10412        assert_true (ai_move (ai, 6, 0));
10413        assert_true (ai_move (ai, 5, 0));
10414        assert_true (ai_move (ai, 1, 6));
10415        assert_true (ai_move (ai, 6, 7));
10416        assert_true (ai_move (ai, 7, 7));
10417    }
10418
10419    private static inline void test_complete_reversi_game_121 ()
10420    {
10421                                  /* 0 1 2 3 4 5 6 7 */
10422        string [] board = {/* 0 */ " . . . . . . . .",
10423                           /* 1 */ " . . . . . . . .",
10424                           /* 2 */ " . . D . . L . .",
10425                           /* 3 */ " . . . D L . . .",
10426                           /* 4 */ " . . . L D . . .",
10427                           /* 5 */ " . . . L D . . .",
10428                           /* 6 */ " . . . . . . . .",
10429                           /* 7 */ " . . . . . . . ."};
10430
10431        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10432        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10433
10434        assert_true (ai_move (ai, 2, 5));
10435        assert_true (ai_move (ai, 3, 6));
10436        assert_true (ai_move (ai, 2, 6));
10437        assert_true (ai_move (ai, 1, 4));
10438        assert_true (ai_move (ai, 1, 5));
10439        assert_true (ai_move (ai, 5, 6));
10440        assert_true (ai_move (ai, 5, 5));
10441        assert_true (ai_move (ai, 2, 3));
10442        assert_true (ai_move (ai, 5, 7));
10443        assert_true (ai_move (ai, 2, 1));
10444        assert_true (ai_move (ai, 4, 7));
10445        assert_true (ai_move (ai, 5, 4));
10446        assert_true (ai_move (ai, 6, 3));
10447        assert_true (ai_move (ai, 6, 4));
10448        assert_true (ai_move (ai, 4, 1));
10449        assert_true (ai_move (ai, 4, 6));
10450        assert_true (ai_move (ai, 6, 5));
10451        assert_true (ai_move (ai, 2, 4));
10452        assert_true (ai_move (ai, 5, 3));
10453        assert_true (ai_move (ai, 3, 7));
10454        assert_true (ai_move (ai, 2, 7));
10455        assert_true (ai_move (ai, 7, 5));
10456        assert_true (ai_move (ai, 1, 2));
10457        assert_true (ai_move (ai, 3, 2));
10458        assert_true (ai_move (ai, 7, 4));
10459        assert_true (ai_move (ai, 0, 5));
10460        assert_true (ai_move (ai, 2, 0));
10461        assert_true (ai_move (ai, 0, 2));
10462        assert_true (ai_move (ai, 3, 1));
10463        assert_true (ai_move (ai, 5, 1));
10464        assert_true (ai_move (ai, 5, 0));
10465        assert_true (ai_move (ai, 1, 3));
10466        assert_true (ai_move (ai, 4, 2));
10467        assert_true (ai_move (ai, 6, 2));
10468        assert_true (ai_move (ai, 7, 3));
10469        assert_true (ai_move (ai, 7, 2));
10470        assert_true (ai_move (ai, 0, 4));
10471        assert_true (ai_move (ai, 0, 3));
10472        assert_true (ai_move (ai, 6, 1));
10473        assert_true (ai_move (ai, 7, 6));
10474        assert_true (ai_move (ai, 0, 1));
10475        assert_true (ai_move (ai, 0, 0));
10476        assert_true (ai_move (ai, 6, 6));
10477        assert_true (ai_move (ai, 0, 6));
10478        assert_true (ai_move (ai, 1, 6));
10479        assert_true (ai_move (ai, 1, 1));
10480        assert_true (ai_move (ai, 1, 0));
10481        assert_true (ai_move (ai, 3, 0));
10482        assert_true (ai_move (ai, 4, 0));
10483        assert_true (ai_move (ai, 7, 7));
10484        assert_true (ai_move (ai, 6, 7));
10485        assert_true (ai_move (ai, 7, 0));
10486        assert_true (ai_move (ai, 6, 0));
10487        assert_true (ai_move (ai, 7, 1));
10488        assert_true (game.pass ());
10489        assert_true (ai_move (ai, 1, 7));
10490        assert_true (ai_move (ai, 0, 7));
10491    }
10492
10493    private static inline void test_complete_reversi_game_122 ()
10494    {
10495                                  /* 0 1 2 3 4 5 6 7 */
10496        string [] board = {/* 0 */ " . . . . . . . .",
10497                           /* 1 */ " . . . . . . . .",
10498                           /* 2 */ " . . D L . . . .",
10499                           /* 3 */ " . . . L D . . .",
10500                           /* 4 */ " . . . L D . . .",
10501                           /* 5 */ " . . . L D . . .",
10502                           /* 6 */ " . . . . . . . .",
10503                           /* 7 */ " . . . . . . . ."};
10504
10505        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10506        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10507
10508        assert_true (ai_move (ai, 4, 2));
10509        assert_true (ai_move (ai, 5, 6));
10510        assert_true (ai_move (ai, 4, 6));
10511        assert_true (ai_move (ai, 3, 1));
10512        assert_true (ai_move (ai, 2, 1));
10513        assert_true (ai_move (ai, 1, 3));
10514        assert_true (ai_move (ai, 1, 2));
10515        assert_true (ai_move (ai, 5, 7));
10516        assert_true (ai_move (ai, 4, 0));
10517        assert_true (ai_move (ai, 5, 5));
10518        assert_true (ai_move (ai, 2, 3));
10519        assert_true (ai_move (ai, 5, 2));
10520        assert_true (ai_move (ai, 6, 2));
10521        assert_true (ai_move (ai, 4, 1));
10522        assert_true (ai_move (ai, 5, 1));
10523        assert_true (ai_move (ai, 1, 0));
10524        assert_true (ai_move (ai, 3, 0));
10525        assert_true (ai_move (ai, 0, 2));
10526        assert_true (ai_move (ai, 0, 4));
10527        assert_true (ai_move (ai, 7, 2));
10528        assert_true (ai_move (ai, 6, 3));
10529        assert_true (ai_move (ai, 5, 0));
10530        assert_true (ai_move (ai, 6, 0));
10531        assert_true (ai_move (ai, 7, 4));
10532        assert_true (ai_move (ai, 0, 3));
10533        assert_true (ai_move (ai, 0, 5));
10534        assert_true (ai_move (ai, 5, 3));
10535        assert_true (ai_move (ai, 5, 4));
10536        assert_true (ai_move (ai, 6, 5));
10537        assert_true (ai_move (ai, 1, 4));
10538        assert_true (ai_move (ai, 2, 4));
10539        assert_true (ai_move (ai, 7, 5));
10540        assert_true (ai_move (ai, 6, 6));
10541        assert_true (ai_move (ai, 6, 4));
10542        assert_true (ai_move (ai, 2, 5));
10543        assert_true (ai_move (ai, 1, 5));
10544        assert_true (ai_move (ai, 2, 6));
10545        assert_true (ai_move (ai, 0, 1));
10546        assert_true (ai_move (ai, 7, 6));
10547        assert_true (ai_move (ai, 3, 6));
10548        assert_true (ai_move (ai, 2, 7));
10549        assert_true (ai_move (ai, 4, 7));
10550        assert_true (ai_move (ai, 7, 3));
10551        assert_true (ai_move (ai, 7, 7));
10552        assert_true (ai_move (ai, 1, 6));
10553        assert_true (ai_move (ai, 7, 1));
10554        assert_true (ai_move (ai, 3, 7));
10555        assert_true (ai_move (ai, 1, 7));
10556        assert_true (ai_move (ai, 0, 7));
10557        assert_true (ai_move (ai, 2, 0));
10558        assert_true (ai_move (ai, 0, 0));
10559        assert_true (ai_move (ai, 0, 6));
10560        assert_true (ai_move (ai, 6, 7));
10561        assert_true (ai_move (ai, 6, 1));
10562        assert_true (ai_move (ai, 7, 0));
10563        assert_true (game.pass ());
10564        assert_true (ai_move (ai, 1, 1));
10565    }
10566
10567    private static inline void test_complete_reversi_game_123 ()
10568    {
10569                                  /* 0 1 2 3 4 5 6 7 */
10570        string [] board = {/* 0 */ " . . . . . . . .",
10571                           /* 1 */ " . . . . . . . .",
10572                           /* 2 */ " . . . D L . . .",
10573                           /* 3 */ " . . . D L . . .",
10574                           /* 4 */ " . . . D L . . .",
10575                           /* 5 */ " . . . . L D . .",
10576                           /* 6 */ " . . . . . . . .",
10577                           /* 7 */ " . . . . . . . ."};
10578
10579        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10580        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10581
10582        assert_true (ai_move (ai, 3, 5));
10583        assert_true (ai_move (ai, 2, 1));
10584        assert_true (ai_move (ai, 3, 1));
10585        assert_true (ai_move (ai, 4, 6));
10586        assert_true (ai_move (ai, 5, 6));
10587        assert_true (ai_move (ai, 6, 4));
10588        assert_true (ai_move (ai, 6, 5));
10589        assert_true (ai_move (ai, 2, 0));
10590        assert_true (ai_move (ai, 3, 7));
10591        assert_true (ai_move (ai, 2, 2));
10592        assert_true (ai_move (ai, 5, 4));
10593        assert_true (ai_move (ai, 2, 5));
10594        assert_true (ai_move (ai, 1, 5));
10595        assert_true (ai_move (ai, 3, 6));
10596        assert_true (ai_move (ai, 2, 6));
10597        assert_true (ai_move (ai, 6, 7));
10598        assert_true (ai_move (ai, 4, 7));
10599        assert_true (ai_move (ai, 7, 5));
10600        assert_true (ai_move (ai, 7, 3));
10601        assert_true (ai_move (ai, 0, 5));
10602        assert_true (ai_move (ai, 1, 4));
10603        assert_true (ai_move (ai, 2, 7));
10604        assert_true (ai_move (ai, 1, 7));
10605        assert_true (ai_move (ai, 0, 3));
10606        assert_true (ai_move (ai, 7, 4));
10607        assert_true (ai_move (ai, 7, 2));
10608        assert_true (ai_move (ai, 2, 4));
10609        assert_true (ai_move (ai, 2, 3));
10610        assert_true (ai_move (ai, 1, 2));
10611        assert_true (ai_move (ai, 6, 3));
10612        assert_true (ai_move (ai, 5, 3));
10613        assert_true (ai_move (ai, 0, 2));
10614        assert_true (ai_move (ai, 1, 1));
10615        assert_true (ai_move (ai, 1, 3));
10616        assert_true (ai_move (ai, 5, 2));
10617        assert_true (ai_move (ai, 6, 2));
10618        assert_true (ai_move (ai, 5, 1));
10619        assert_true (ai_move (ai, 7, 6));
10620        assert_true (ai_move (ai, 0, 1));
10621        assert_true (ai_move (ai, 4, 1));
10622        assert_true (ai_move (ai, 5, 0));
10623        assert_true (ai_move (ai, 3, 0));
10624        assert_true (ai_move (ai, 0, 4));
10625        assert_true (ai_move (ai, 0, 0));
10626        assert_true (ai_move (ai, 6, 1));
10627        assert_true (ai_move (ai, 0, 6));
10628        assert_true (ai_move (ai, 4, 0));
10629        assert_true (ai_move (ai, 6, 0));
10630        assert_true (ai_move (ai, 7, 0));
10631        assert_true (ai_move (ai, 5, 7));
10632        assert_true (ai_move (ai, 7, 7));
10633        assert_true (ai_move (ai, 7, 1));
10634        assert_true (ai_move (ai, 1, 0));
10635        assert_true (ai_move (ai, 1, 6));
10636        assert_true (ai_move (ai, 0, 7));
10637        assert_true (game.pass ());
10638        assert_true (ai_move (ai, 6, 6));
10639    }
10640
10641    private static inline void test_complete_reversi_game_124 ()
10642    {
10643                                  /* 0 1 2 3 4 5 6 7 */
10644        string [] board = {/* 0 */ " . . . . . . . .",
10645                           /* 1 */ " . . . . . . . .",
10646                           /* 2 */ " . . . D L . . .",
10647                           /* 3 */ " . . . D L . . .",
10648                           /* 4 */ " . . . L D . . .",
10649                           /* 5 */ " . . L . . D . .",
10650                           /* 6 */ " . . . . . . . .",
10651                           /* 7 */ " . . . . . . . ."};
10652
10653        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10654        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10655
10656        assert_true (ai_move (ai, 5, 2));
10657        assert_true (ai_move (ai, 4, 1));
10658        assert_true (ai_move (ai, 5, 1));
10659        assert_true (ai_move (ai, 6, 3));
10660        assert_true (ai_move (ai, 6, 2));
10661        assert_true (ai_move (ai, 2, 1));
10662        assert_true (ai_move (ai, 2, 2));
10663        assert_true (ai_move (ai, 5, 4));
10664        assert_true (ai_move (ai, 2, 0));
10665        assert_true (ai_move (ai, 5, 6));
10666        assert_true (ai_move (ai, 3, 0));
10667        assert_true (ai_move (ai, 2, 3));
10668        assert_true (ai_move (ai, 1, 4));
10669        assert_true (ai_move (ai, 1, 3));
10670        assert_true (ai_move (ai, 3, 6));
10671        assert_true (ai_move (ai, 3, 1));
10672        assert_true (ai_move (ai, 1, 2));
10673        assert_true (ai_move (ai, 5, 3));
10674        assert_true (ai_move (ai, 2, 4));
10675        assert_true (ai_move (ai, 4, 0));
10676        assert_true (ai_move (ai, 5, 0));
10677        assert_true (ai_move (ai, 0, 2));
10678        assert_true (ai_move (ai, 6, 5));
10679        assert_true (ai_move (ai, 4, 5));
10680        assert_true (ai_move (ai, 0, 3));
10681        assert_true (ai_move (ai, 7, 2));
10682        assert_true (ai_move (ai, 5, 7));
10683        assert_true (ai_move (ai, 7, 5));
10684        assert_true (ai_move (ai, 4, 6));
10685        assert_true (ai_move (ai, 2, 6));
10686        assert_true (ai_move (ai, 2, 7));
10687        assert_true (ai_move (ai, 6, 4));
10688        assert_true (ai_move (ai, 3, 5));
10689        assert_true (ai_move (ai, 1, 5));
10690        assert_true (ai_move (ai, 0, 4));
10691        assert_true (ai_move (ai, 0, 5));
10692        assert_true (ai_move (ai, 7, 3));
10693        assert_true (ai_move (ai, 7, 4));
10694        assert_true (ai_move (ai, 1, 6));
10695        assert_true (ai_move (ai, 0, 1));
10696        assert_true (ai_move (ai, 7, 6));
10697        assert_true (ai_move (ai, 7, 7));
10698        assert_true (ai_move (ai, 1, 1));
10699        assert_true (ai_move (ai, 7, 1));
10700        assert_true (ai_move (ai, 6, 1));
10701        assert_true (ai_move (ai, 6, 6));
10702        assert_true (ai_move (ai, 6, 7));
10703        assert_true (ai_move (ai, 4, 7));
10704        assert_true (ai_move (ai, 3, 7));
10705        assert_true (ai_move (ai, 0, 0));
10706        assert_true (ai_move (ai, 1, 0));
10707        assert_true (ai_move (ai, 0, 7));
10708        assert_true (ai_move (ai, 1, 7));
10709        assert_true (ai_move (ai, 0, 6));
10710        assert_true (game.pass ());
10711        assert_true (ai_move (ai, 6, 0));
10712        assert_true (ai_move (ai, 7, 0));
10713    }
10714
10715    private static inline void test_complete_reversi_game_125 ()
10716    {
10717                                  /* 0 1 2 3 4 5 6 7 */
10718        string [] board = {/* 0 */ " . . . . . . . .",
10719                           /* 1 */ " . . . . . . . .",
10720                           /* 2 */ " . . . D L . . .",
10721                           /* 3 */ " . . . L L . . .",
10722                           /* 4 */ " . . L D D . . .",
10723                           /* 5 */ " . . . . . D . .",
10724                           /* 6 */ " . . . . . . . .",
10725                           /* 7 */ " . . . . . . . ."};
10726
10727        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10728        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10729
10730        assert_true (ai_move (ai, 2, 2));
10731        assert_true (ai_move (ai, 1, 2));
10732        assert_true (ai_move (ai, 1, 5));
10733        assert_true (ai_move (ai, 2, 3));
10734        assert_true (ai_move (ai, 2, 1));
10735        assert_true (ai_move (ai, 1, 4));
10736        assert_true (ai_move (ai, 0, 2));
10737        assert_true (ai_move (ai, 2, 0));
10738        assert_true (ai_move (ai, 0, 4));
10739        assert_true (ai_move (ai, 0, 3));
10740        assert_true (ai_move (ai, 3, 1));
10741        assert_true (ai_move (ai, 4, 1));
10742        assert_true (ai_move (ai, 1, 3));
10743        assert_true (ai_move (ai, 0, 5));
10744        assert_true (ai_move (ai, 0, 6));
10745        assert_true (ai_move (ai, 2, 5));
10746        assert_true (ai_move (ai, 5, 0));
10747        assert_true (ai_move (ai, 4, 0));
10748        assert_true (ai_move (ai, 0, 1));
10749        assert_true (ai_move (ai, 5, 4));
10750        assert_true (ai_move (ai, 3, 6));
10751        assert_true (ai_move (ai, 2, 6));
10752        assert_true (ai_move (ai, 2, 7));
10753        assert_true (ai_move (ai, 5, 6));
10754        assert_true (ai_move (ai, 3, 5));
10755        assert_true (ai_move (ai, 3, 7));
10756        assert_true (ai_move (ai, 4, 7));
10757        assert_true (ai_move (ai, 6, 0));
10758        assert_true (ai_move (ai, 4, 6));
10759        assert_true (ai_move (ai, 1, 6));
10760        assert_true (ai_move (ai, 4, 5));
10761        assert_true (ai_move (ai, 1, 1));
10762        assert_true (ai_move (ai, 3, 0));
10763        assert_true (ai_move (ai, 5, 7));
10764        assert_true (ai_move (ai, 6, 7));
10765        assert_true (ai_move (ai, 1, 0));
10766        assert_true (ai_move (ai, 7, 0));
10767        assert_true (ai_move (ai, 6, 6));
10768        assert_true (ai_move (ai, 0, 7));
10769        assert_true (ai_move (ai, 1, 7));
10770        assert_true (ai_move (ai, 7, 7));
10771        assert_true (ai_move (ai, 6, 5));
10772        assert_true (ai_move (ai, 0, 0));
10773        assert_true (ai_move (ai, 5, 3));
10774        assert_true (ai_move (ai, 7, 5));
10775        assert_true (ai_move (ai, 6, 4));
10776        assert_true (ai_move (ai, 7, 3));
10777        assert_true (ai_move (ai, 7, 6));
10778        assert_true (ai_move (ai, 7, 4));
10779        assert_true (ai_move (ai, 6, 3));
10780        assert_true (ai_move (ai, 7, 2));
10781        assert_true (ai_move (ai, 7, 1));
10782        assert_true (ai_move (ai, 5, 1));
10783        assert_true (ai_move (ai, 6, 1));
10784        assert_true (ai_move (ai, 6, 2));
10785        assert_true (ai_move (ai, 5, 2));
10786    }
10787
10788    private static inline void test_complete_reversi_game_126 ()
10789    {
10790                                  /* 0 1 2 3 4 5 6 7 */
10791        string [] board = {/* 0 */ " . . . . . . . .",
10792                           /* 1 */ " . . . . . . . .",
10793                           /* 2 */ " . . . D L . . .",
10794                           /* 3 */ " . . L L L . . .",
10795                           /* 4 */ " . . . D D . . .",
10796                           /* 5 */ " . . . . . D . .",
10797                           /* 6 */ " . . . . . . . .",
10798                           /* 7 */ " . . . . . . . ."};
10799
10800        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10801        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10802
10803        assert_true (ai_move (ai, 1, 2));
10804        assert_true (ai_move (ai, 3, 1));
10805        assert_true (ai_move (ai, 2, 2));
10806        assert_true (ai_move (ai, 1, 3));
10807        assert_true (ai_move (ai, 1, 4));
10808        assert_true (ai_move (ai, 0, 4));
10809        assert_true (ai_move (ai, 5, 2));
10810        assert_true (ai_move (ai, 2, 1));
10811        assert_true (ai_move (ai, 1, 1));
10812        assert_true (ai_move (ai, 5, 3));
10813        assert_true (ai_move (ai, 2, 4));
10814        assert_true (ai_move (ai, 5, 1));
10815        assert_true (ai_move (ai, 6, 2));
10816        assert_true (ai_move (ai, 0, 3));
10817        assert_true (ai_move (ai, 0, 1));
10818        assert_true (ai_move (ai, 6, 3));
10819        assert_true (ai_move (ai, 5, 0));
10820        assert_true (ai_move (ai, 4, 1));
10821        assert_true (ai_move (ai, 0, 2));
10822        assert_true (ai_move (ai, 0, 5));
10823        assert_true (ai_move (ai, 0, 6));
10824        assert_true (ai_move (ai, 0, 0));
10825        assert_true (ai_move (ai, 2, 0));
10826        assert_true (ai_move (ai, 0, 7));
10827        assert_true (ai_move (ai, 5, 4));
10828        assert_true (ai_move (ai, 1, 0));
10829        assert_true (ai_move (ai, 6, 4));
10830        assert_true (ai_move (ai, 1, 5));
10831        assert_true (ai_move (ai, 2, 5));
10832        assert_true (ai_move (ai, 7, 5));
10833        assert_true (ai_move (ai, 7, 3));
10834        assert_true (ai_move (ai, 3, 6));
10835        assert_true (ai_move (ai, 2, 6));
10836        assert_true (ai_move (ai, 1, 6));
10837        assert_true (ai_move (ai, 2, 7));
10838        assert_true (ai_move (ai, 6, 5));
10839        assert_true (ai_move (ai, 4, 5));
10840        assert_true (ai_move (ai, 3, 0));
10841        assert_true (ai_move (ai, 4, 0));
10842        assert_true (ai_move (ai, 6, 0));
10843        assert_true (ai_move (ai, 6, 1));
10844        assert_true (ai_move (ai, 4, 7));
10845        assert_true (ai_move (ai, 4, 6));
10846        assert_true (ai_move (ai, 3, 5));
10847        assert_true (ai_move (ai, 5, 6));
10848        assert_true (ai_move (ai, 7, 4));
10849        assert_true (ai_move (ai, 7, 2));
10850        assert_true (ai_move (ai, 1, 7));
10851        assert_true (ai_move (ai, 7, 6));
10852        assert_true (ai_move (ai, 3, 7));
10853        assert_true (ai_move (ai, 6, 6));
10854        assert_true (ai_move (ai, 5, 7));
10855        assert_true (ai_move (ai, 6, 7));
10856        assert_true (ai_move (ai, 7, 0));
10857        assert_true (ai_move (ai, 7, 1));
10858        assert_true (ai_move (ai, 7, 7));
10859    }
10860
10861    private static inline void test_complete_reversi_game_127 ()
10862    {
10863                                  /* 0 1 2 3 4 5 6 7 */
10864        string [] board = {/* 0 */ " . . . . . . . .",
10865                           /* 1 */ " . . . . . . . .",
10866                           /* 2 */ " . . L L L . . .",
10867                           /* 3 */ " . . . D L . . .",
10868                           /* 4 */ " . . . D D . . .",
10869                           /* 5 */ " . . . . . D . .",
10870                           /* 6 */ " . . . . . . . .",
10871                           /* 7 */ " . . . . . . . ."};
10872
10873        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10874        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10875
10876        assert_true (ai_move (ai, 3, 1));
10877        assert_true (ai_move (ai, 2, 1));
10878        assert_true (ai_move (ai, 1, 3));
10879        assert_true (ai_move (ai, 1, 2));
10880        assert_true (ai_move (ai, 5, 1));
10881        assert_true (ai_move (ai, 5, 2));
10882        assert_true (ai_move (ai, 4, 1));
10883        assert_true (ai_move (ai, 5, 0));
10884        assert_true (ai_move (ai, 6, 2));
10885        assert_true (ai_move (ai, 6, 3));
10886        assert_true (ai_move (ai, 4, 0));
10887        assert_true (ai_move (ai, 7, 2));
10888        assert_true (ai_move (ai, 5, 3));
10889        assert_true (ai_move (ai, 3, 0));
10890        assert_true (ai_move (ai, 0, 2));
10891        assert_true (ai_move (ai, 0, 4));
10892        assert_true (ai_move (ai, 6, 1));
10893        assert_true (ai_move (ai, 5, 4));
10894        assert_true (ai_move (ai, 6, 0));
10895        assert_true (ai_move (ai, 7, 0));
10896        assert_true (ai_move (ai, 6, 4));
10897        assert_true (ai_move (ai, 7, 5));
10898        assert_true (ai_move (ai, 2, 4));
10899        assert_true (ai_move (ai, 4, 6));
10900        assert_true (ai_move (ai, 5, 6));
10901        assert_true (ai_move (ai, 6, 5));
10902        assert_true (ai_move (ai, 3, 7));
10903        assert_true (ai_move (ai, 4, 5));
10904        assert_true (ai_move (ai, 7, 1));
10905        assert_true (ai_move (ai, 5, 7));
10906        assert_true (ai_move (ai, 3, 5));
10907        assert_true (ai_move (ai, 0, 3));
10908        assert_true (ai_move (ai, 0, 5));
10909        assert_true (ai_move (ai, 4, 7));
10910        assert_true (ai_move (ai, 2, 0));
10911        assert_true (ai_move (ai, 1, 0));
10912        assert_true (ai_move (ai, 7, 4));
10913        assert_true (ai_move (ai, 7, 3));
10914        assert_true (ai_move (ai, 3, 6));
10915        assert_true (ai_move (ai, 2, 7));
10916        assert_true (ai_move (ai, 6, 6));
10917        assert_true (ai_move (ai, 1, 5));
10918        assert_true (ai_move (ai, 1, 4));
10919        assert_true (ai_move (ai, 7, 7));
10920        assert_true (ai_move (ai, 7, 6));
10921        assert_true (ai_move (ai, 2, 5));
10922        assert_true (ai_move (ai, 2, 3));
10923        assert_true (game.pass ());
10924        assert_true (ai_move (ai, 0, 6));
10925        assert_true (ai_move (ai, 1, 6));
10926        assert_true (ai_move (ai, 0, 1));
10927        assert_true (ai_move (ai, 1, 1));
10928        assert_true (ai_move (ai, 0, 0));
10929        assert_true (game.pass ());
10930        assert_true (ai_move (ai, 6, 7));
10931        assert_true (game.pass ());
10932        assert_true (ai_move (ai, 0, 7));
10933        assert_true (ai_move (ai, 2, 6));
10934        assert_true (ai_move (ai, 1, 7));
10935    }
10936
10937    private static inline void test_complete_reversi_game_128 ()
10938    {
10939                                  /* 0 1 2 3 4 5 6 7 */
10940        string [] board = {/* 0 */ " . . . . . . . .",
10941                           /* 1 */ " . . L . . . . .",
10942                           /* 2 */ " . . . L L . . .",
10943                           /* 3 */ " . . . D L . . .",
10944                           /* 4 */ " . . . D D . . .",
10945                           /* 5 */ " . . . . . D . .",
10946                           /* 6 */ " . . . . . . . .",
10947                           /* 7 */ " . . . . . . . ."};
10948
10949        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
10950        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
10951
10952        assert_true (ai_move (ai, 5, 3));
10953        assert_true (ai_move (ai, 6, 4));
10954        assert_true (ai_move (ai, 6, 2));
10955        assert_true (ai_move (ai, 4, 6));
10956        assert_true (ai_move (ai, 3, 1));
10957        assert_true (ai_move (ai, 4, 1));
10958        assert_true (ai_move (ai, 5, 0));
10959        assert_true (ai_move (ai, 5, 1));
10960        assert_true (ai_move (ai, 5, 2));
10961        assert_true (ai_move (ai, 6, 3));
10962        assert_true (ai_move (ai, 4, 0));
10963        assert_true (ai_move (ai, 3, 0));
10964        assert_true (ai_move (ai, 2, 0));
10965        assert_true (ai_move (ai, 7, 2));
10966        assert_true (ai_move (ai, 7, 4));
10967        assert_true (ai_move (ai, 3, 5));
10968        assert_true (ai_move (ai, 2, 2));
10969        assert_true (ai_move (ai, 1, 2));
10970        assert_true (ai_move (ai, 2, 3));
10971        assert_true (ai_move (ai, 7, 3));
10972        assert_true (ai_move (ai, 7, 1));
10973        assert_true (ai_move (ai, 4, 5));
10974        assert_true (ai_move (ai, 2, 4));
10975        assert_true (ai_move (ai, 1, 4));
10976        assert_true (ai_move (ai, 1, 5));
10977        assert_true (ai_move (ai, 1, 1));
10978        assert_true (ai_move (ai, 1, 3));
10979        assert_true (ai_move (ai, 0, 3));
10980        assert_true (ai_move (ai, 7, 5));
10981        assert_true (ai_move (ai, 5, 4));
10982        assert_true (ai_move (ai, 5, 6));
10983        assert_true (ai_move (ai, 2, 5));
10984        assert_true (ai_move (ai, 2, 6));
10985        assert_true (ai_move (ai, 3, 6));
10986        assert_true (ai_move (ai, 5, 7));
10987        assert_true (ai_move (ai, 0, 5));
10988        assert_true (ai_move (ai, 1, 6));
10989        assert_true (ai_move (ai, 3, 7));
10990        assert_true (ai_move (ai, 4, 7));
10991        assert_true (ai_move (ai, 6, 7));
10992        assert_true (ai_move (ai, 6, 1));
10993        assert_true (ai_move (ai, 6, 5));
10994        assert_true (ai_move (ai, 7, 6));
10995        assert_true (ai_move (ai, 2, 7));
10996        assert_true (ai_move (ai, 0, 7));
10997        assert_true (ai_move (ai, 0, 6));
10998        assert_true (ai_move (ai, 1, 7));
10999        assert_true (ai_move (ai, 7, 0));
11000        assert_true (ai_move (ai, 7, 7));
11001        assert_true (ai_move (ai, 6, 0));
11002        assert_true (ai_move (ai, 6, 6));
11003        assert_true (ai_move (ai, 1, 0));
11004        assert_true (ai_move (ai, 0, 4));
11005        assert_true (game.pass ());
11006        assert_true (ai_move (ai, 0, 2));
11007        assert_true (ai_move (ai, 0, 1));
11008        assert_true (ai_move (ai, 0, 0));
11009    }
11010
11011    private static inline void test_complete_reversi_game_129 ()
11012    {
11013                                  /* 0 1 2 3 4 5 6 7 */
11014        string [] board = {/* 0 */ " . . . . . . . .",
11015                           /* 1 */ " . . . . . . . .",
11016                           /* 2 */ " . . . D L . . .",
11017                           /* 3 */ " . . . D L . . .",
11018                           /* 4 */ " . . . D L D . .",
11019                           /* 5 */ " . . . . L . . .",
11020                           /* 6 */ " . . . . . . . .",
11021                           /* 7 */ " . . . . . . . ."};
11022
11023        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11024        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11025
11026        assert_true (ai_move (ai, 5, 1));
11027        assert_true (ai_move (ai, 6, 5));
11028        assert_true (ai_move (ai, 5, 6));
11029        assert_true (ai_move (ai, 3, 6));
11030        assert_true (ai_move (ai, 7, 4));
11031        assert_true (ai_move (ai, 4, 1));
11032        assert_true (ai_move (ai, 5, 0));
11033        assert_true (ai_move (ai, 2, 1));
11034        assert_true (ai_move (ai, 2, 3));
11035        assert_true (ai_move (ai, 2, 2));
11036        assert_true (ai_move (ai, 2, 0));
11037        assert_true (ai_move (ai, 1, 4));
11038        assert_true (ai_move (ai, 1, 2));
11039        assert_true (ai_move (ai, 1, 3));
11040        assert_true (ai_move (ai, 0, 4));
11041        assert_true (ai_move (ai, 0, 2));
11042        assert_true (ai_move (ai, 3, 1));
11043        assert_true (ai_move (ai, 0, 3));
11044        assert_true (ai_move (ai, 0, 1));
11045        assert_true (ai_move (ai, 2, 5));
11046        assert_true (ai_move (ai, 0, 5));
11047        assert_true (ai_move (ai, 2, 4));
11048        assert_true (ai_move (ai, 5, 2));
11049        assert_true (ai_move (ai, 1, 5));
11050        assert_true (ai_move (ai, 5, 3));
11051        assert_true (ai_move (ai, 6, 2));
11052        assert_true (ai_move (ai, 6, 3));
11053        assert_true (ai_move (ai, 7, 2));
11054        assert_true (ai_move (ai, 3, 5));
11055        assert_true (ai_move (ai, 2, 6));
11056        assert_true (ai_move (ai, 2, 7));
11057        assert_true (ai_move (ai, 7, 6));
11058        assert_true (ai_move (ai, 4, 7));
11059        assert_true (ai_move (ai, 3, 7));
11060        assert_true (ai_move (ai, 5, 5));
11061        assert_true (ai_move (ai, 5, 7));
11062        assert_true (ai_move (ai, 6, 7));
11063        assert_true (ai_move (ai, 6, 4));
11064        assert_true (ai_move (ai, 4, 6));
11065        assert_true (ai_move (ai, 3, 0));
11066        assert_true (ai_move (ai, 4, 0));
11067        assert_true (ai_move (ai, 6, 6));
11068        assert_true (ai_move (ai, 7, 7));
11069        assert_true (ai_move (ai, 1, 7));
11070        assert_true (ai_move (ai, 7, 5));
11071        assert_true (ai_move (ai, 1, 6));
11072        assert_true (ai_move (ai, 7, 3));
11073        assert_true (ai_move (ai, 1, 1));
11074        assert_true (ai_move (ai, 7, 1));
11075        assert_true (ai_move (ai, 1, 0));
11076        assert_true (ai_move (ai, 0, 0));
11077        assert_true (ai_move (ai, 6, 1));
11078        assert_true (ai_move (ai, 7, 0));
11079        assert_true (game.pass ());
11080        assert_true (ai_move (ai, 6, 0));
11081        assert_true (game.pass ());
11082        assert_true (ai_move (ai, 0, 7));
11083        assert_true (ai_move (ai, 0, 6));
11084    }
11085
11086    private static inline void test_complete_reversi_game_130 ()
11087    {
11088                                  /* 0 1 2 3 4 5 6 7 */
11089        string [] board = {/* 0 */ " . . . . . . . .",
11090                           /* 1 */ " . . . . . . . .",
11091                           /* 2 */ " . . . D L . . .",
11092                           /* 3 */ " . . . L D . . .",
11093                           /* 4 */ " . . L D D D . .",
11094                           /* 5 */ " . . . . . . . .",
11095                           /* 6 */ " . . . . . . . .",
11096                           /* 7 */ " . . . . . . . ."};
11097
11098        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11099        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11100
11101        assert_true (ai_move (ai, 5, 2));
11102        assert_true (ai_move (ai, 5, 1));
11103        assert_true (ai_move (ai, 4, 1));
11104        assert_true (ai_move (ai, 5, 3));
11105        assert_true (ai_move (ai, 6, 3));
11106        assert_true (ai_move (ai, 2, 1));
11107        assert_true (ai_move (ai, 6, 4));
11108        assert_true (ai_move (ai, 6, 2));
11109        assert_true (ai_move (ai, 5, 0));
11110        assert_true (ai_move (ai, 7, 3));
11111        assert_true (ai_move (ai, 7, 4));
11112        assert_true (ai_move (ai, 7, 5));
11113        assert_true (ai_move (ai, 6, 5));
11114        assert_true (ai_move (ai, 5, 6));
11115        assert_true (ai_move (ai, 1, 4));
11116        assert_true (ai_move (ai, 1, 5));
11117        assert_true (ai_move (ai, 7, 2));
11118        assert_true (ai_move (ai, 7, 1));
11119        assert_true (ai_move (ai, 2, 3));
11120        assert_true (ai_move (ai, 5, 5));
11121        assert_true (ai_move (ai, 2, 5));
11122        assert_true (ai_move (ai, 3, 0));
11123        assert_true (ai_move (ai, 5, 7));
11124        assert_true (ai_move (ai, 4, 6));
11125        assert_true (ai_move (ai, 0, 5));
11126        assert_true (ai_move (ai, 4, 5));
11127        assert_true (ai_move (ai, 3, 6));
11128        assert_true (ai_move (ai, 3, 7));
11129        assert_true (ai_move (ai, 3, 1));
11130        assert_true (ai_move (ai, 2, 0));
11131        assert_true (ai_move (ai, 3, 5));
11132        assert_true (ai_move (ai, 2, 2));
11133        assert_true (ai_move (ai, 6, 1));
11134        assert_true (ai_move (ai, 1, 2));
11135        assert_true (ai_move (ai, 0, 2));
11136        assert_true (ai_move (ai, 1, 3));
11137        assert_true (ai_move (ai, 0, 3));
11138        assert_true (ai_move (ai, 0, 4));
11139        assert_true (ai_move (ai, 6, 6));
11140        assert_true (ai_move (ai, 7, 6));
11141        assert_true (ai_move (ai, 1, 1));
11142        assert_true (ai_move (ai, 4, 0));
11143        assert_true (ai_move (ai, 1, 0));
11144        assert_true (ai_move (ai, 7, 0));
11145        assert_true (ai_move (ai, 6, 0));
11146        assert_true (ai_move (ai, 0, 0));
11147        assert_true (ai_move (ai, 0, 1));
11148        assert_true (ai_move (ai, 7, 7));
11149        assert_true (ai_move (ai, 6, 7));
11150        assert_true (ai_move (ai, 4, 7));
11151        assert_true (ai_move (ai, 2, 7));
11152        assert_true (ai_move (ai, 2, 6));
11153        assert_true (ai_move (ai, 1, 7));
11154        assert_true (ai_move (ai, 0, 7));
11155        assert_true (ai_move (ai, 1, 6));
11156        assert_true (ai_move (ai, 0, 6));
11157    }
11158
11159    private static inline void test_complete_reversi_game_131 ()
11160    {
11161                                  /* 0 1 2 3 4 5 6 7 */
11162        string [] board = {/* 0 */ " . . . . . . . .",
11163                           /* 1 */ " . . . . . . . .",
11164                           /* 2 */ " . . L L L . . .",
11165                           /* 3 */ " . . . D D . . .",
11166                           /* 4 */ " . . . D D D . .",
11167                           /* 5 */ " . . . . . . . .",
11168                           /* 6 */ " . . . . . . . .",
11169                           /* 7 */ " . . . . . . . ."};
11170
11171        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11172        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11173
11174        assert_true (ai_move (ai, 3, 1));
11175        assert_true (ai_move (ai, 2, 0));
11176        assert_true (ai_move (ai, 1, 2));
11177        assert_true (ai_move (ai, 1, 3));
11178        assert_true (ai_move (ai, 5, 2));
11179        assert_true (ai_move (ai, 0, 2));
11180        assert_true (ai_move (ai, 3, 0));
11181        assert_true (ai_move (ai, 4, 0));
11182        assert_true (ai_move (ai, 1, 1));
11183        assert_true (ai_move (ai, 6, 2));
11184        assert_true (ai_move (ai, 5, 1));
11185        assert_true (ai_move (ai, 5, 0));
11186        assert_true (ai_move (ai, 2, 1));
11187        assert_true (ai_move (ai, 5, 3));
11188        assert_true (ai_move (ai, 2, 3));
11189        assert_true (ai_move (ai, 2, 4));
11190        assert_true (ai_move (ai, 7, 2));
11191        assert_true (ai_move (ai, 4, 1));
11192        assert_true (ai_move (ai, 1, 0));
11193        assert_true (ai_move (ai, 0, 0));
11194        assert_true (ai_move (ai, 2, 5));
11195        assert_true (ai_move (ai, 2, 6));
11196        assert_true (ai_move (ai, 6, 3));
11197        assert_true (ai_move (ai, 7, 4));
11198        assert_true (ai_move (ai, 7, 3));
11199        assert_true (ai_move (ai, 6, 5));
11200        assert_true (ai_move (ai, 4, 5));
11201        assert_true (ai_move (ai, 7, 1));
11202        assert_true (ai_move (ai, 7, 6));
11203        assert_true (ai_move (ai, 5, 5));
11204        assert_true (ai_move (ai, 1, 4));
11205        assert_true (ai_move (ai, 3, 5));
11206        assert_true (ai_move (ai, 1, 5));
11207        assert_true (ai_move (ai, 4, 6));
11208        assert_true (ai_move (ai, 0, 3));
11209        assert_true (ai_move (ai, 6, 4));
11210        assert_true (ai_move (ai, 3, 6));
11211        assert_true (ai_move (ai, 2, 7));
11212        assert_true (ai_move (ai, 5, 6));
11213        assert_true (ai_move (ai, 0, 5));
11214        assert_true (ai_move (ai, 0, 4));
11215        assert_true (ai_move (ai, 5, 7));
11216        assert_true (ai_move (ai, 6, 6));
11217        assert_true (ai_move (ai, 6, 1));
11218        assert_true (ai_move (ai, 0, 1));
11219        assert_true (ai_move (ai, 7, 7));
11220        assert_true (ai_move (ai, 7, 5));
11221        assert_true (game.pass ());
11222        assert_true (ai_move (ai, 7, 0));
11223        assert_true (ai_move (ai, 6, 0));
11224        assert_true (ai_move (ai, 6, 7));
11225        assert_true (game.pass ());
11226        assert_true (ai_move (ai, 3, 7));
11227        assert_true (ai_move (ai, 4, 7));
11228        assert_true (ai_move (ai, 1, 6));
11229        assert_true (ai_move (ai, 0, 7));
11230        assert_true (ai_move (ai, 1, 7));
11231        assert_true (ai_move (ai, 0, 6));
11232    }
11233
11234    private static inline void test_complete_reversi_game_132 ()
11235    {
11236                                  /* 0 1 2 3 4 5 6 7 */
11237        string [] board = {/* 0 */ " . . . . . . . .",
11238                           /* 1 */ " . . . . . . . .",
11239                           /* 2 */ " . . . D L . . .",
11240                           /* 3 */ " . . . D D L . .",
11241                           /* 4 */ " . . . D L . L .",
11242                           /* 5 */ " . . . . . . . .",
11243                           /* 6 */ " . . . . . . . .",
11244                           /* 7 */ " . . . . . . . ."};
11245
11246        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11247        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11248
11249        assert_true (ai_move (ai, 6, 3));
11250        assert_true (ai_move (ai, 2, 2));
11251        assert_true (ai_move (ai, 2, 1));
11252        assert_true (ai_move (ai, 3, 1));
11253        assert_true (ai_move (ai, 7, 5));
11254        assert_true (ai_move (ai, 6, 2));
11255        assert_true (ai_move (ai, 5, 4));
11256        assert_true (ai_move (ai, 5, 5));
11257        assert_true (ai_move (ai, 6, 5));
11258        assert_true (ai_move (ai, 7, 4));
11259        assert_true (ai_move (ai, 7, 3));
11260        assert_true (ai_move (ai, 2, 0));
11261        assert_true (ai_move (ai, 4, 6));
11262        assert_true (ai_move (ai, 5, 6));
11263        assert_true (ai_move (ai, 4, 5));
11264        assert_true (ai_move (ai, 3, 6));
11265        assert_true (ai_move (ai, 2, 7));
11266        assert_true (ai_move (ai, 2, 6));
11267        assert_true (ai_move (ai, 5, 7));
11268        assert_true (ai_move (ai, 7, 2));
11269        assert_true (ai_move (ai, 5, 2));
11270        assert_true (ai_move (ai, 7, 6));
11271        assert_true (ai_move (ai, 1, 2));
11272        assert_true (ai_move (ai, 1, 3));
11273        assert_true (ai_move (ai, 3, 5));
11274        assert_true (ai_move (ai, 2, 5));
11275        assert_true (ai_move (ai, 1, 4));
11276        assert_true (ai_move (ai, 4, 1));
11277        assert_true (ai_move (ai, 5, 0));
11278        assert_true (ai_move (ai, 5, 1));
11279        assert_true (ai_move (ai, 4, 7));
11280        assert_true (ai_move (ai, 2, 4));
11281        assert_true (ai_move (ai, 2, 3));
11282        assert_true (ai_move (ai, 0, 5));
11283        assert_true (ai_move (ai, 1, 5));
11284        assert_true (ai_move (ai, 3, 7));
11285        assert_true (ai_move (ai, 4, 0));
11286        assert_true (ai_move (ai, 0, 2));
11287        assert_true (ai_move (ai, 0, 3));
11288        assert_true (ai_move (ai, 0, 4));
11289        assert_true (ai_move (ai, 6, 0));
11290        assert_true (ai_move (ai, 1, 6));
11291        assert_true (ai_move (ai, 6, 1));
11292        assert_true (ai_move (ai, 7, 0));
11293        assert_true (ai_move (ai, 7, 1));
11294        assert_true (ai_move (ai, 3, 0));
11295        assert_true (ai_move (ai, 7, 7));
11296        assert_true (ai_move (ai, 6, 7));
11297        assert_true (ai_move (ai, 0, 7));
11298        assert_true (ai_move (ai, 1, 7));
11299        assert_true (ai_move (ai, 6, 6));
11300        assert_true (game.pass ());
11301        assert_true (ai_move (ai, 1, 1));
11302        assert_true (ai_move (ai, 1, 0));
11303        assert_true (ai_move (ai, 0, 6));
11304        assert_true (game.pass ());
11305        assert_true (ai_move (ai, 0, 1));
11306    }
11307
11308    private static inline void test_complete_reversi_game_133 ()
11309    {
11310                                  /* 0 1 2 3 4 5 6 7 */
11311        string [] board = {/* 0 */ " . . . . . . . .",
11312                           /* 1 */ " . . . . . . . .",
11313                           /* 2 */ " . . . D L . L .",
11314                           /* 3 */ " . . . D D L . .",
11315                           /* 4 */ " . . . D L . . .",
11316                           /* 5 */ " . . . . . . . .",
11317                           /* 6 */ " . . . . . . . .",
11318                           /* 7 */ " . . . . . . . ."};
11319
11320        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11321        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11322
11323        assert_true (ai_move (ai, 6, 3));
11324        assert_true (ai_move (ai, 2, 2));
11325        assert_true (ai_move (ai, 2, 1));
11326        assert_true (ai_move (ai, 3, 1));
11327        assert_true (ai_move (ai, 5, 4));
11328        assert_true (ai_move (ai, 2, 0));
11329        assert_true (ai_move (ai, 2, 3));
11330        assert_true (ai_move (ai, 1, 4));
11331        assert_true (ai_move (ai, 1, 3));
11332        assert_true (ai_move (ai, 0, 4));
11333        assert_true (ai_move (ai, 0, 5));
11334        assert_true (ai_move (ai, 1, 5));
11335        assert_true (ai_move (ai, 2, 5));
11336        assert_true (ai_move (ai, 2, 4));
11337        assert_true (ai_move (ai, 5, 1));
11338        assert_true (ai_move (ai, 4, 0));
11339        assert_true (ai_move (ai, 3, 0));
11340        assert_true (ai_move (ai, 2, 6));
11341        assert_true (ai_move (ai, 1, 2));
11342        assert_true (ai_move (ai, 4, 1));
11343        assert_true (ai_move (ai, 0, 3));
11344        assert_true (ai_move (ai, 0, 2));
11345        assert_true (ai_move (ai, 0, 1));
11346        assert_true (ai_move (ai, 6, 5));
11347        assert_true (ai_move (ai, 3, 5));
11348        assert_true (ai_move (ai, 5, 2));
11349        assert_true (ai_move (ai, 7, 2));
11350        assert_true (ai_move (ai, 3, 6));
11351        assert_true (ai_move (ai, 4, 5));
11352        assert_true (ai_move (ai, 7, 4));
11353        assert_true (ai_move (ai, 4, 7));
11354        assert_true (ai_move (ai, 5, 5));
11355        assert_true (ai_move (ai, 7, 5));
11356        assert_true (ai_move (ai, 7, 3));
11357        assert_true (ai_move (ai, 2, 7));
11358        assert_true (ai_move (ai, 5, 6));
11359        assert_true (ai_move (ai, 6, 4));
11360        assert_true (ai_move (ai, 4, 6));
11361        assert_true (ai_move (ai, 3, 7));
11362        assert_true (ai_move (ai, 1, 6));
11363        assert_true (ai_move (ai, 5, 7));
11364        assert_true (ai_move (ai, 6, 6));
11365        assert_true (ai_move (ai, 5, 0));
11366        assert_true (ai_move (ai, 6, 1));
11367        assert_true (ai_move (ai, 1, 0));
11368        assert_true (ai_move (ai, 1, 1));
11369        assert_true (ai_move (ai, 6, 7));
11370        assert_true (ai_move (ai, 7, 7));
11371        assert_true (ai_move (ai, 7, 6));
11372        assert_true (ai_move (ai, 1, 7));
11373        assert_true (ai_move (ai, 0, 0));
11374        assert_true (ai_move (ai, 7, 1));
11375        assert_true (ai_move (ai, 7, 0));
11376        assert_true (ai_move (ai, 6, 0));
11377        assert_true (ai_move (ai, 0, 6));
11378        assert_true (ai_move (ai, 0, 7));
11379    }
11380
11381    private static inline void test_complete_reversi_game_134 ()
11382    {
11383                                  /* 0 1 2 3 4 5 6 7 */
11384        string [] board = {/* 0 */ " . . . . . . . .",
11385                           /* 1 */ " . . . . . . . .",
11386                           /* 2 */ " . . . D L . . .",
11387                           /* 3 */ " . . . L D D . .",
11388                           /* 4 */ " . . L L L . . .",
11389                           /* 5 */ " . . . . . . . .",
11390                           /* 6 */ " . . . . . . . .",
11391                           /* 7 */ " . . . . . . . ."};
11392
11393        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11394        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11395
11396        assert_true (ai_move (ai, 5, 2));
11397        assert_true (ai_move (ai, 5, 1));
11398        assert_true (ai_move (ai, 3, 1));
11399        assert_true (ai_move (ai, 5, 4));
11400        assert_true (ai_move (ai, 6, 2));
11401        assert_true (ai_move (ai, 7, 3));
11402        assert_true (ai_move (ai, 7, 2));
11403        assert_true (ai_move (ai, 4, 1));
11404        assert_true (ai_move (ai, 6, 4));
11405        assert_true (ai_move (ai, 6, 3));
11406        assert_true (ai_move (ai, 7, 4));
11407        assert_true (ai_move (ai, 2, 2));
11408        assert_true (ai_move (ai, 1, 2));
11409        assert_true (ai_move (ai, 2, 3));
11410        assert_true (ai_move (ai, 1, 3));
11411        assert_true (ai_move (ai, 2, 1));
11412        assert_true (ai_move (ai, 2, 0));
11413        assert_true (ai_move (ai, 3, 0));
11414        assert_true (ai_move (ai, 1, 5));
11415        assert_true (ai_move (ai, 2, 5));
11416        assert_true (ai_move (ai, 2, 6));
11417        assert_true (ai_move (ai, 1, 4));
11418        assert_true (ai_move (ai, 5, 0));
11419        assert_true (ai_move (ai, 3, 6));
11420        assert_true (ai_move (ai, 4, 0));
11421        assert_true (ai_move (ai, 0, 5));
11422        assert_true (ai_move (ai, 6, 5));
11423        assert_true (ai_move (ai, 2, 7));
11424        assert_true (ai_move (ai, 5, 5));
11425        assert_true (ai_move (ai, 0, 3));
11426        assert_true (ai_move (ai, 4, 5));
11427        assert_true (ai_move (ai, 0, 2));
11428        assert_true (ai_move (ai, 0, 4));
11429        assert_true (ai_move (ai, 5, 6));
11430        assert_true (ai_move (ai, 3, 5));
11431        assert_true (ai_move (ai, 4, 6));
11432        assert_true (ai_move (ai, 5, 7));
11433        assert_true (ai_move (ai, 7, 5));
11434        assert_true (ai_move (ai, 7, 6));
11435        assert_true (ai_move (ai, 1, 1));
11436        assert_true (ai_move (ai, 4, 7));
11437        assert_true (ai_move (ai, 7, 1));
11438        assert_true (ai_move (ai, 7, 0));
11439        assert_true (ai_move (ai, 6, 0));
11440        assert_true (ai_move (ai, 1, 7));
11441        assert_true (ai_move (ai, 1, 0));
11442        assert_true (ai_move (ai, 3, 7));
11443        assert_true (ai_move (ai, 6, 7));
11444        assert_true (ai_move (ai, 7, 7));
11445        assert_true (ai_move (ai, 1, 6));
11446        assert_true (ai_move (ai, 6, 1));
11447        assert_true (ai_move (ai, 6, 6));
11448        assert_true (ai_move (ai, 0, 0));
11449        assert_true (ai_move (ai, 0, 1));
11450        assert_true (ai_move (ai, 0, 6));
11451        assert_true (ai_move (ai, 0, 7));
11452    }
11453
11454    private static inline void test_complete_reversi_game_135 ()
11455    {
11456                                  /* 0 1 2 3 4 5 6 7 */
11457        string [] board = {/* 0 */ " . . . . . . . .",
11458                           /* 1 */ " . . . . . . . .",
11459                           /* 2 */ " . . L L L . . .",
11460                           /* 3 */ " . . . L D D . .",
11461                           /* 4 */ " . . . D L . . .",
11462                           /* 5 */ " . . . . . . . .",
11463                           /* 6 */ " . . . . . . . .",
11464                           /* 7 */ " . . . . . . . ."};
11465
11466        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11467        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11468
11469        assert_true (ai_move (ai, 2, 1));
11470        assert_true (ai_move (ai, 3, 1));
11471        assert_true (ai_move (ai, 5, 4));
11472        assert_true (ai_move (ai, 2, 0));
11473        assert_true (ai_move (ai, 2, 3));
11474        assert_true (ai_move (ai, 1, 4));
11475        assert_true (ai_move (ai, 1, 3));
11476        assert_true (ai_move (ai, 0, 4));
11477        assert_true (ai_move (ai, 0, 5));
11478        assert_true (ai_move (ai, 1, 5));
11479        assert_true (ai_move (ai, 2, 5));
11480        assert_true (ai_move (ai, 2, 4));
11481        assert_true (ai_move (ai, 5, 1));
11482        assert_true (ai_move (ai, 5, 2));
11483        assert_true (ai_move (ai, 4, 1));
11484        assert_true (ai_move (ai, 6, 5));
11485        assert_true (ai_move (ai, 6, 2));
11486        assert_true (ai_move (ai, 7, 2));
11487        assert_true (ai_move (ai, 6, 3));
11488        assert_true (ai_move (ai, 5, 0));
11489        assert_true (ai_move (ai, 4, 5));
11490        assert_true (ai_move (ai, 2, 6));
11491        assert_true (ai_move (ai, 3, 6));
11492        assert_true (ai_move (ai, 0, 6));
11493        assert_true (ai_move (ai, 2, 7));
11494        assert_true (ai_move (ai, 3, 5));
11495        assert_true (ai_move (ai, 1, 2));
11496        assert_true (ai_move (ai, 0, 3));
11497        assert_true (ai_move (ai, 3, 0));
11498        assert_true (ai_move (ai, 4, 0));
11499        assert_true (ai_move (ai, 5, 5));
11500        assert_true (ai_move (ai, 5, 6));
11501        assert_true (ai_move (ai, 6, 4));
11502        assert_true (ai_move (ai, 6, 1));
11503        assert_true (ai_move (ai, 4, 6));
11504        assert_true (ai_move (ai, 7, 3));
11505        assert_true (ai_move (ai, 0, 2));
11506        assert_true (ai_move (ai, 0, 1));
11507        assert_true (ai_move (ai, 5, 7));
11508        assert_true (ai_move (ai, 7, 5));
11509        assert_true (ai_move (ai, 7, 4));
11510        assert_true (ai_move (ai, 3, 7));
11511        assert_true (ai_move (ai, 6, 6));
11512        assert_true (ai_move (ai, 1, 7));
11513        assert_true (ai_move (ai, 1, 1));
11514        assert_true (ai_move (ai, 1, 0));
11515        assert_true (ai_move (ai, 0, 0));
11516        assert_true (ai_move (ai, 6, 7));
11517        assert_true (ai_move (ai, 4, 7));
11518        assert_true (ai_move (ai, 7, 6));
11519        assert_true (ai_move (ai, 0, 7));
11520        assert_true (game.pass ());
11521        assert_true (ai_move (ai, 6, 0));
11522        assert_true (game.pass ());
11523        assert_true (ai_move (ai, 1, 6));
11524        assert_true (game.pass ());
11525        assert_true (ai_move (ai, 7, 0));
11526        assert_true (ai_move (ai, 7, 1));
11527        assert_true (ai_move (ai, 7, 7));
11528    }
11529
11530    private static inline void test_complete_reversi_game_136 ()
11531    {
11532                                  /* 0 1 2 3 4 5 6 7 */
11533        string [] board = {/* 0 */ " . . . . . . . .",
11534                           /* 1 */ " . . . . L . . .",
11535                           /* 2 */ " . . . D L D . .",
11536                           /* 3 */ " . . . D L . . .",
11537                           /* 4 */ " . . . D L . . .",
11538                           /* 5 */ " . . . . . . . .",
11539                           /* 6 */ " . . . . . . . .",
11540                           /* 7 */ " . . . . . . . ."};
11541
11542        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11543        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11544
11545        assert_true (ai_move (ai, 5, 1));
11546        assert_true (ai_move (ai, 6, 3));
11547        assert_true (ai_move (ai, 6, 2));
11548        assert_true (ai_move (ai, 2, 1));
11549        assert_true (ai_move (ai, 2, 2));
11550        assert_true (ai_move (ai, 2, 5));
11551        assert_true (ai_move (ai, 2, 0));
11552        assert_true (ai_move (ai, 2, 3));
11553        assert_true (ai_move (ai, 3, 0));
11554        assert_true (ai_move (ai, 1, 2));
11555        assert_true (ai_move (ai, 0, 2));
11556        assert_true (ai_move (ai, 5, 0));
11557        assert_true (ai_move (ai, 3, 1));
11558        assert_true (ai_move (ai, 7, 2));
11559        assert_true (ai_move (ai, 1, 4));
11560        assert_true (ai_move (ai, 6, 0));
11561        assert_true (ai_move (ai, 3, 6));
11562        assert_true (ai_move (ai, 1, 3));
11563        assert_true (ai_move (ai, 0, 4));
11564        assert_true (ai_move (ai, 0, 3));
11565        assert_true (ai_move (ai, 2, 4));
11566        assert_true (ai_move (ai, 1, 5));
11567        assert_true (ai_move (ai, 0, 5));
11568        assert_true (ai_move (ai, 2, 6));
11569        assert_true (ai_move (ai, 2, 7));
11570        assert_true (ai_move (ai, 4, 7));
11571        assert_true (ai_move (ai, 4, 6));
11572        assert_true (ai_move (ai, 4, 5));
11573        assert_true (ai_move (ai, 3, 5));
11574        assert_true (ai_move (ai, 1, 6));
11575        assert_true (ai_move (ai, 5, 6));
11576        assert_true (ai_move (ai, 5, 5));
11577        assert_true (ai_move (ai, 6, 5));
11578        assert_true (ai_move (ai, 5, 4));
11579        assert_true (ai_move (ai, 5, 7));
11580        assert_true (ai_move (ai, 7, 5));
11581        assert_true (ai_move (ai, 3, 7));
11582        assert_true (ai_move (ai, 1, 7));
11583        assert_true (ai_move (ai, 0, 7));
11584        assert_true (ai_move (ai, 0, 6));
11585        assert_true (ai_move (ai, 5, 3));
11586        assert_true (ai_move (ai, 6, 4));
11587        assert_true (ai_move (ai, 7, 3));
11588        assert_true (ai_move (ai, 7, 4));
11589        assert_true (ai_move (ai, 7, 6));
11590        assert_true (ai_move (ai, 7, 7));
11591        assert_true (ai_move (ai, 6, 1));
11592        assert_true (ai_move (ai, 7, 1));
11593        assert_true (game.pass ());
11594        assert_true (ai_move (ai, 7, 0));
11595        assert_true (game.pass ());
11596        assert_true (ai_move (ai, 4, 0));
11597        assert_true (ai_move (ai, 1, 1));
11598        assert_true (ai_move (ai, 6, 7));
11599        assert_true (ai_move (ai, 6, 6));
11600        assert_true (ai_move (ai, 0, 0));
11601        assert_true (ai_move (ai, 1, 0));
11602        assert_true (ai_move (ai, 0, 1));
11603    }
11604
11605    private static inline void test_complete_reversi_game_137 ()
11606    {
11607                                  /* 0 1 2 3 4 5 6 7 */
11608        string [] board = {/* 0 */ " . . . . . . . .",
11609                           /* 1 */ " . . . . . . . .",
11610                           /* 2 */ " . . . D D D . .",
11611                           /* 3 */ " . . . D D . . .",
11612                           /* 4 */ " . . L L L . . .",
11613                           /* 5 */ " . . . . . . . .",
11614                           /* 6 */ " . . . . . . . .",
11615                           /* 7 */ " . . . . . . . ."};
11616
11617        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11618        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11619
11620        assert_true (ai_move (ai, 1, 5));
11621        assert_true (ai_move (ai, 1, 4));
11622        assert_true (ai_move (ai, 5, 5));
11623        assert_true (ai_move (ai, 0, 6));
11624        assert_true (ai_move (ai, 3, 5));
11625        assert_true (ai_move (ai, 4, 6));
11626        assert_true (ai_move (ai, 3, 6));
11627        assert_true (ai_move (ai, 6, 4));
11628        assert_true (ai_move (ai, 1, 3));
11629        assert_true (ai_move (ai, 1, 2));
11630        assert_true (ai_move (ai, 0, 2));
11631        assert_true (ai_move (ai, 2, 6));
11632        assert_true (ai_move (ai, 2, 2));
11633        assert_true (ai_move (ai, 5, 3));
11634        assert_true (ai_move (ai, 6, 3));
11635        assert_true (ai_move (ai, 6, 2));
11636        assert_true (ai_move (ai, 7, 3));
11637        assert_true (ai_move (ai, 4, 1));
11638        assert_true (ai_move (ai, 3, 1));
11639        assert_true (ai_move (ai, 2, 3));
11640        assert_true (ai_move (ai, 7, 2));
11641        assert_true (ai_move (ai, 5, 1));
11642        assert_true (ai_move (ai, 4, 0));
11643        assert_true (ai_move (ai, 7, 4));
11644        assert_true (ai_move (ai, 5, 4));
11645        assert_true (ai_move (ai, 2, 0));
11646        assert_true (ai_move (ai, 5, 6));
11647        assert_true (ai_move (ai, 2, 1));
11648        assert_true (ai_move (ai, 7, 5));
11649        assert_true (ai_move (ai, 5, 7));
11650        assert_true (ai_move (ai, 4, 5));
11651        assert_true (ai_move (ai, 2, 5));
11652        assert_true (ai_move (ai, 6, 5));
11653        assert_true (ai_move (ai, 5, 0));
11654        assert_true (ai_move (ai, 3, 0));
11655        assert_true (ai_move (ai, 0, 3));
11656        assert_true (ai_move (ai, 2, 7));
11657        assert_true (ai_move (ai, 4, 7));
11658        assert_true (ai_move (ai, 3, 7));
11659        assert_true (ai_move (ai, 1, 7));
11660        assert_true (ai_move (ai, 0, 5));
11661        assert_true (ai_move (ai, 1, 6));
11662        assert_true (ai_move (ai, 0, 7));
11663        assert_true (ai_move (ai, 6, 6));
11664        assert_true (ai_move (ai, 7, 7));
11665        assert_true (ai_move (ai, 0, 1));
11666        assert_true (ai_move (ai, 6, 7));
11667        assert_true (ai_move (ai, 1, 1));
11668        assert_true (ai_move (ai, 0, 4));
11669        assert_true (ai_move (ai, 7, 6));
11670        assert_true (ai_move (ai, 0, 0));
11671        assert_true (ai_move (ai, 1, 0));
11672        assert_true (ai_move (ai, 6, 1));
11673        assert_true (ai_move (ai, 7, 0));
11674        assert_true (ai_move (ai, 6, 0));
11675        assert_true (ai_move (ai, 7, 1));
11676    }
11677
11678    private static inline void test_complete_reversi_game_138 ()
11679    {
11680                                  /* 0 1 2 3 4 5 6 7 */
11681        string [] board = {/* 0 */ " . . . . . . . .",
11682                           /* 1 */ " . . . . . . . .",
11683                           /* 2 */ " . . L D D D . .",
11684                           /* 3 */ " . . . L D . . .",
11685                           /* 4 */ " . . . D L . . .",
11686                           /* 5 */ " . . . . . . . .",
11687                           /* 6 */ " . . . . . . . .",
11688                           /* 7 */ " . . . . . . . ."};
11689
11690        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11691        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11692
11693        assert_true (ai_move (ai, 1, 2));
11694        assert_true (ai_move (ai, 5, 1));
11695        assert_true (ai_move (ai, 4, 1));
11696        assert_true (ai_move (ai, 5, 3));
11697        assert_true (ai_move (ai, 6, 2));
11698        assert_true (ai_move (ai, 4, 0));
11699        assert_true (ai_move (ai, 3, 0));
11700        assert_true (ai_move (ai, 2, 0));
11701        assert_true (ai_move (ai, 5, 0));
11702        assert_true (ai_move (ai, 6, 0));
11703        assert_true (ai_move (ai, 3, 5));
11704        assert_true (ai_move (ai, 3, 1));
11705        assert_true (ai_move (ai, 2, 3));
11706        assert_true (ai_move (ai, 6, 3));
11707        assert_true (ai_move (ai, 7, 3));
11708        assert_true (ai_move (ai, 1, 3));
11709        assert_true (ai_move (ai, 0, 3));
11710        assert_true (ai_move (ai, 1, 4));
11711        assert_true (ai_move (ai, 2, 1));
11712        assert_true (ai_move (ai, 2, 4));
11713        assert_true (ai_move (ai, 0, 5));
11714        assert_true (ai_move (ai, 6, 4));
11715        assert_true (ai_move (ai, 2, 5));
11716        assert_true (ai_move (ai, 1, 5));
11717        assert_true (ai_move (ai, 5, 5));
11718        assert_true (ai_move (ai, 7, 2));
11719        assert_true (ai_move (ai, 7, 1));
11720        assert_true (ai_move (ai, 2, 6));
11721        assert_true (ai_move (ai, 3, 6));
11722        assert_true (ai_move (ai, 7, 5));
11723        assert_true (ai_move (ai, 2, 7));
11724        assert_true (ai_move (ai, 4, 6));
11725        assert_true (ai_move (ai, 4, 5));
11726        assert_true (ai_move (ai, 3, 7));
11727        assert_true (ai_move (ai, 5, 7));
11728        assert_true (ai_move (ai, 1, 7));
11729        assert_true (ai_move (ai, 6, 5));
11730        assert_true (ai_move (ai, 0, 2));
11731        assert_true (ai_move (ai, 4, 7));
11732        assert_true (ai_move (ai, 6, 7));
11733        assert_true (ai_move (ai, 6, 1));
11734        assert_true (ai_move (ai, 0, 4));
11735        assert_true (ai_move (ai, 0, 1));
11736        assert_true (ai_move (ai, 5, 6));
11737        assert_true (ai_move (ai, 5, 4));
11738        assert_true (ai_move (ai, 7, 4));
11739        assert_true (ai_move (ai, 7, 6));
11740        assert_true (ai_move (ai, 6, 6));
11741        assert_true (ai_move (ai, 0, 6));
11742        assert_true (ai_move (ai, 1, 0));
11743        assert_true (ai_move (ai, 7, 7));
11744        assert_true (ai_move (ai, 7, 0));
11745        assert_true (ai_move (ai, 0, 7));
11746        assert_true (ai_move (ai, 1, 1));
11747        assert_true (ai_move (ai, 0, 0));
11748        assert_true (ai_move (ai, 1, 6));
11749    }
11750
11751    private static inline void test_complete_reversi_game_139 ()
11752    {
11753                                  /* 0 1 2 3 4 5 6 7 */
11754        string [] board = {/* 0 */ " . . . . . . . .",
11755                           /* 1 */ " . . . . L D . .",
11756                           /* 2 */ " . . . D L . . .",
11757                           /* 3 */ " . . . D L . . .",
11758                           /* 4 */ " . . . D L . . .",
11759                           /* 5 */ " . . . . . . . .",
11760                           /* 6 */ " . . . . . . . .",
11761                           /* 7 */ " . . . . . . . ."};
11762
11763        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11764        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11765
11766        assert_true (ai_move (ai, 5, 0));
11767        assert_true (ai_move (ai, 2, 1));
11768        assert_true (ai_move (ai, 2, 3));
11769        assert_true (ai_move (ai, 2, 2));
11770        assert_true (ai_move (ai, 2, 0));
11771        assert_true (ai_move (ai, 1, 2));
11772        assert_true (ai_move (ai, 0, 3));
11773        assert_true (ai_move (ai, 1, 4));
11774        assert_true (ai_move (ai, 2, 5));
11775        assert_true (ai_move (ai, 2, 4));
11776        assert_true (ai_move (ai, 1, 5));
11777        assert_true (ai_move (ai, 2, 6));
11778        assert_true (ai_move (ai, 1, 3));
11779        assert_true (ai_move (ai, 5, 2));
11780        assert_true (ai_move (ai, 6, 2));
11781        assert_true (ai_move (ai, 0, 5));
11782        assert_true (ai_move (ai, 3, 6));
11783        assert_true (ai_move (ai, 0, 4));
11784        assert_true (ai_move (ai, 0, 6));
11785        assert_true (ai_move (ai, 3, 1));
11786        assert_true (ai_move (ai, 4, 0));
11787        assert_true (ai_move (ai, 7, 2));
11788        assert_true (ai_move (ai, 6, 3));
11789        assert_true (ai_move (ai, 5, 4));
11790        assert_true (ai_move (ai, 2, 7));
11791        assert_true (ai_move (ai, 3, 0));
11792        assert_true (ai_move (ai, 5, 3));
11793        assert_true (ai_move (ai, 4, 7));
11794        assert_true (ai_move (ai, 6, 5));
11795        assert_true (ai_move (ai, 4, 5));
11796        assert_true (ai_move (ai, 7, 4));
11797        assert_true (ai_move (ai, 6, 1));
11798        assert_true (ai_move (ai, 5, 6));
11799        assert_true (ai_move (ai, 3, 5));
11800        assert_true (ai_move (ai, 3, 7));
11801        assert_true (ai_move (ai, 5, 5));
11802        assert_true (ai_move (ai, 6, 4));
11803        assert_true (ai_move (ai, 0, 2));
11804        assert_true (ai_move (ai, 0, 1));
11805        assert_true (ai_move (ai, 6, 0));
11806        assert_true (ai_move (ai, 4, 6));
11807        assert_true (ai_move (ai, 1, 0));
11808        assert_true (ai_move (ai, 5, 7));
11809        assert_true (ai_move (ai, 7, 3));
11810        assert_true (ai_move (ai, 1, 1));
11811        assert_true (ai_move (ai, 7, 5));
11812        assert_true (ai_move (ai, 6, 6));
11813        assert_true (ai_move (ai, 1, 6));
11814        assert_true (ai_move (ai, 0, 7));
11815        assert_true (ai_move (ai, 1, 7));
11816        assert_true (ai_move (ai, 7, 0));
11817        assert_true (ai_move (ai, 6, 7));
11818        assert_true (ai_move (ai, 0, 0));
11819        assert_true (ai_move (ai, 7, 1));
11820        assert_true (ai_move (ai, 7, 7));
11821        assert_true (ai_move (ai, 7, 6));
11822    }
11823
11824    private static inline void test_complete_reversi_game_140 ()
11825    {
11826                                  /* 0 1 2 3 4 5 6 7 */
11827        string [] board = {/* 0 */ " . . . . . . . .",
11828                           /* 1 */ " . . . . . D . .",
11829                           /* 2 */ " . . . D D . . .",
11830                           /* 3 */ " . . . D L . . .",
11831                           /* 4 */ " . . . L L . . .",
11832                           /* 5 */ " . . L . . . . .",
11833                           /* 6 */ " . . . . . . . .",
11834                           /* 7 */ " . . . . . . . ."};
11835
11836        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11837        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11838
11839        assert_true (ai_move (ai, 5, 4));
11840        assert_true (ai_move (ai, 6, 4));
11841        assert_true (ai_move (ai, 6, 5));
11842        assert_true (ai_move (ai, 2, 2));
11843        assert_true (ai_move (ai, 1, 2));
11844        assert_true (ai_move (ai, 3, 1));
11845        assert_true (ai_move (ai, 2, 1));
11846        assert_true (ai_move (ai, 1, 3));
11847        assert_true (ai_move (ai, 2, 3));
11848        assert_true (ai_move (ai, 5, 2));
11849        assert_true (ai_move (ai, 5, 3));
11850        assert_true (ai_move (ai, 6, 2));
11851        assert_true (ai_move (ai, 7, 2));
11852        assert_true (ai_move (ai, 5, 5));
11853        assert_true (ai_move (ai, 5, 6));
11854        assert_true (ai_move (ai, 4, 6));
11855        assert_true (ai_move (ai, 4, 5));
11856        assert_true (ai_move (ai, 4, 1));
11857        assert_true (ai_move (ai, 2, 0));
11858        assert_true (ai_move (ai, 6, 3));
11859        assert_true (ai_move (ai, 7, 5));
11860        assert_true (ai_move (ai, 0, 2));
11861        assert_true (ai_move (ai, 5, 0));
11862        assert_true (ai_move (ai, 5, 7));
11863        assert_true (ai_move (ai, 7, 3));
11864        assert_true (ai_move (ai, 7, 4));
11865        assert_true (ai_move (ai, 0, 4));
11866        assert_true (ai_move (ai, 1, 4));
11867        assert_true (ai_move (ai, 3, 7));
11868        assert_true (ai_move (ai, 4, 7));
11869        assert_true (ai_move (ai, 2, 4));
11870        assert_true (ai_move (ai, 0, 3));
11871        assert_true (ai_move (ai, 2, 6));
11872        assert_true (ai_move (ai, 0, 5));
11873        assert_true (ai_move (ai, 3, 6));
11874        assert_true (ai_move (ai, 3, 5));
11875        assert_true (ai_move (ai, 1, 5));
11876        assert_true (ai_move (ai, 2, 7));
11877        assert_true (ai_move (ai, 6, 1));
11878        assert_true (ai_move (ai, 1, 1));
11879        assert_true (ai_move (ai, 6, 7));
11880        assert_true (ai_move (ai, 7, 7));
11881        assert_true (ai_move (ai, 7, 6));
11882        assert_true (ai_move (ai, 0, 6));
11883        assert_true (ai_move (ai, 0, 1));
11884        assert_true (ai_move (ai, 0, 0));
11885        assert_true (ai_move (ai, 1, 0));
11886        assert_true (ai_move (ai, 3, 0));
11887        assert_true (ai_move (ai, 6, 6));
11888        assert_true (ai_move (ai, 1, 7));
11889        assert_true (ai_move (ai, 4, 0));
11890        assert_true (ai_move (ai, 7, 0));
11891        assert_true (ai_move (ai, 6, 0));
11892        assert_true (ai_move (ai, 7, 1));
11893        assert_true (ai_move (ai, 1, 6));
11894        assert_true (ai_move (ai, 0, 7));
11895    }
11896
11897    private static inline void test_complete_reversi_game_141 ()
11898    {
11899                                  /* 0 1 2 3 4 5 6 7 */
11900        string [] board = {/* 0 */ " . . . . . . . .",
11901                           /* 1 */ " . . . . . D . .",
11902                           /* 2 */ " . . . D D . . .",
11903                           /* 3 */ " . . . D L . . .",
11904                           /* 4 */ " . . L L L . . .",
11905                           /* 5 */ " . . . . . . . .",
11906                           /* 6 */ " . . . . . . . .",
11907                           /* 7 */ " . . . . . . . ."};
11908
11909        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11910        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11911
11912        assert_true (ai_move (ai, 1, 5));
11913        assert_true (ai_move (ai, 1, 4));
11914        assert_true (ai_move (ai, 5, 4));
11915        assert_true (ai_move (ai, 6, 4));
11916        assert_true (ai_move (ai, 6, 5));
11917        assert_true (ai_move (ai, 2, 2));
11918        assert_true (ai_move (ai, 1, 2));
11919        assert_true (ai_move (ai, 3, 1));
11920        assert_true (ai_move (ai, 2, 1));
11921        assert_true (ai_move (ai, 1, 3));
11922        assert_true (ai_move (ai, 2, 0));
11923        assert_true (ai_move (ai, 0, 2));
11924        assert_true (ai_move (ai, 2, 3));
11925        assert_true (ai_move (ai, 4, 0));
11926        assert_true (ai_move (ai, 3, 0));
11927        assert_true (ai_move (ai, 1, 0));
11928        assert_true (ai_move (ai, 0, 5));
11929        assert_true (ai_move (ai, 6, 2));
11930        assert_true (ai_move (ai, 0, 4));
11931        assert_true (ai_move (ai, 5, 2));
11932        assert_true (ai_move (ai, 2, 5));
11933        assert_true (ai_move (ai, 2, 6));
11934        assert_true (ai_move (ai, 4, 1));
11935        assert_true (ai_move (ai, 0, 3));
11936        assert_true (ai_move (ai, 0, 1));
11937        assert_true (ai_move (ai, 5, 0));
11938        assert_true (ai_move (ai, 3, 6));
11939        assert_true (ai_move (ai, 4, 6));
11940        assert_true (ai_move (ai, 2, 7));
11941        assert_true (ai_move (ai, 7, 6));
11942        assert_true (ai_move (ai, 5, 3));
11943        assert_true (ai_move (ai, 1, 6));
11944        assert_true (ai_move (ai, 0, 6));
11945        assert_true (ai_move (ai, 3, 5));
11946        assert_true (ai_move (ai, 4, 7));
11947        assert_true (ai_move (ai, 6, 3));
11948        assert_true (ai_move (ai, 3, 7));
11949        assert_true (ai_move (ai, 1, 1));
11950        assert_true (ai_move (ai, 7, 3));
11951        assert_true (ai_move (ai, 7, 2));
11952        assert_true (ai_move (ai, 5, 7));
11953        assert_true (ai_move (ai, 7, 4));
11954        assert_true (ai_move (ai, 0, 0));
11955        assert_true (ai_move (ai, 1, 7));
11956        assert_true (ai_move (ai, 0, 7));
11957        assert_true (ai_move (ai, 5, 6));
11958        assert_true (ai_move (ai, 6, 0));
11959        assert_true (ai_move (ai, 6, 1));
11960        assert_true (ai_move (ai, 7, 0));
11961        assert_true (ai_move (ai, 7, 1));
11962        assert_true (ai_move (ai, 7, 5));
11963        assert_true (game.pass ());
11964        assert_true (ai_move (ai, 6, 6));
11965        assert_true (ai_move (ai, 6, 7));
11966        assert_true (ai_move (ai, 5, 5));
11967        assert_true (ai_move (ai, 4, 5));
11968        assert_true (ai_move (ai, 7, 7));
11969    }
11970
11971    private static inline void test_complete_reversi_game_142 ()
11972    {
11973                                  /* 0 1 2 3 4 5 6 7 */
11974        string [] board = {/* 0 */ " . . . . . . . .",
11975                           /* 1 */ " . . . . . D . .",
11976                           /* 2 */ " . . . D D . . .",
11977                           /* 3 */ " . . L L L . . .",
11978                           /* 4 */ " . . . D L . . .",
11979                           /* 5 */ " . . . . . . . .",
11980                           /* 6 */ " . . . . . . . .",
11981                           /* 7 */ " . . . . . . . ."};
11982
11983        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
11984        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
11985
11986        assert_true (ai_move (ai, 1, 2));
11987        assert_true (ai_move (ai, 1, 3));
11988        assert_true (ai_move (ai, 5, 2));
11989        assert_true (ai_move (ai, 2, 4));
11990        assert_true (ai_move (ai, 2, 5));
11991        assert_true (ai_move (ai, 2, 6));
11992        assert_true (ai_move (ai, 5, 4));
11993        assert_true (ai_move (ai, 3, 1));
11994        assert_true (ai_move (ai, 2, 1));
11995        assert_true (ai_move (ai, 4, 1));
11996        assert_true (ai_move (ai, 4, 0));
11997        assert_true (ai_move (ai, 5, 0));
11998        assert_true (ai_move (ai, 6, 0));
11999        assert_true (ai_move (ai, 6, 2));
12000        assert_true (ai_move (ai, 5, 3));
12001        assert_true (ai_move (ai, 6, 3));
12002        assert_true (ai_move (ai, 7, 2));
12003        assert_true (ai_move (ai, 7, 4));
12004        assert_true (ai_move (ai, 7, 3));
12005        assert_true (ai_move (ai, 7, 1));
12006        assert_true (ai_move (ai, 1, 5));
12007        assert_true (ai_move (ai, 5, 5));
12008        assert_true (ai_move (ai, 3, 5));
12009        assert_true (ai_move (ai, 0, 4));
12010        assert_true (ai_move (ai, 0, 5));
12011        assert_true (ai_move (ai, 4, 6));
12012        assert_true (ai_move (ai, 4, 5));
12013        assert_true (ai_move (ai, 2, 2));
12014        assert_true (ai_move (ai, 0, 3));
12015        assert_true (ai_move (ai, 5, 6));
12016        assert_true (ai_move (ai, 1, 4));
12017        assert_true (ai_move (ai, 3, 6));
12018        assert_true (ai_move (ai, 3, 0));
12019        assert_true (ai_move (ai, 2, 0));
12020        assert_true (ai_move (ai, 1, 0));
12021        assert_true (ai_move (ai, 0, 2));
12022        assert_true (ai_move (ai, 0, 1));
12023        assert_true (ai_move (ai, 1, 1));
12024        assert_true (ai_move (ai, 6, 4));
12025        assert_true (ai_move (ai, 6, 5));
12026        assert_true (ai_move (ai, 6, 1));
12027        assert_true (ai_move (ai, 0, 6));
12028        assert_true (ai_move (ai, 0, 7));
12029        assert_true (game.pass ());
12030        assert_true (ai_move (ai, 1, 6));
12031        assert_true (ai_move (ai, 1, 7));
12032        assert_true (ai_move (ai, 2, 7));
12033        assert_true (ai_move (ai, 3, 7));
12034        assert_true (ai_move (ai, 4, 7));
12035        assert_true (ai_move (ai, 5, 7));
12036        assert_true (ai_move (ai, 6, 7));
12037        assert_true (ai_move (ai, 6, 6));
12038        assert_true (ai_move (ai, 7, 7));
12039        assert_true (ai_move (ai, 7, 6));
12040        assert_true (ai_move (ai, 0, 0));
12041        assert_true (game.pass ());
12042        assert_true (ai_move (ai, 7, 5));
12043        assert_true (game.pass ());
12044        assert_true (ai_move (ai, 7, 0));
12045    }
12046
12047    private static inline void test_complete_reversi_game_143 ()
12048    {
12049                                  /* 0 1 2 3 4 5 6 7 */
12050        string [] board = {/* 0 */ " . . . . . . . .",
12051                           /* 1 */ " . . . . . D . .",
12052                           /* 2 */ " . . L D D . . .",
12053                           /* 3 */ " . . . L L . . .",
12054                           /* 4 */ " . . . D L . . .",
12055                           /* 5 */ " . . . . . . . .",
12056                           /* 6 */ " . . . . . . . .",
12057                           /* 7 */ " . . . . . . . ."};
12058
12059        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12060        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12061
12062        assert_true (ai_move (ai, 1, 2));
12063        assert_true (ai_move (ai, 3, 1));
12064        assert_true (ai_move (ai, 5, 2));
12065        assert_true (ai_move (ai, 1, 3));
12066        assert_true (ai_move (ai, 2, 1));
12067        assert_true (ai_move (ai, 2, 0));
12068        assert_true (ai_move (ai, 1, 4));
12069        assert_true (ai_move (ai, 0, 4));
12070        assert_true (ai_move (ai, 3, 0));
12071        assert_true (ai_move (ai, 4, 0));
12072        assert_true (ai_move (ai, 2, 3));
12073        assert_true (ai_move (ai, 6, 2));
12074        assert_true (ai_move (ai, 7, 2));
12075        assert_true (ai_move (ai, 0, 3));
12076        assert_true (ai_move (ai, 0, 2));
12077        assert_true (ai_move (ai, 0, 1));
12078        assert_true (ai_move (ai, 5, 0));
12079        assert_true (ai_move (ai, 6, 0));
12080        assert_true (ai_move (ai, 5, 5));
12081        assert_true (ai_move (ai, 1, 5));
12082        assert_true (ai_move (ai, 0, 5));
12083        assert_true (ai_move (ai, 0, 6));
12084        assert_true (ai_move (ai, 1, 6));
12085        assert_true (ai_move (ai, 2, 5));
12086        assert_true (ai_move (ai, 1, 0));
12087        assert_true (ai_move (ai, 0, 0));
12088        assert_true (ai_move (ai, 4, 1));
12089        assert_true (ai_move (ai, 0, 7));
12090        assert_true (ai_move (ai, 1, 7));
12091        assert_true (ai_move (ai, 2, 7));
12092        assert_true (ai_move (ai, 3, 5));
12093        assert_true (ai_move (ai, 2, 6));
12094        assert_true (game.pass ());
12095        assert_true (ai_move (ai, 5, 4));
12096        assert_true (ai_move (ai, 1, 1));
12097        assert_true (ai_move (ai, 6, 3));
12098        assert_true (ai_move (ai, 4, 5));
12099        assert_true (ai_move (ai, 5, 3));
12100        assert_true (ai_move (ai, 3, 6));
12101        assert_true (ai_move (ai, 6, 4));
12102        assert_true (ai_move (ai, 6, 5));
12103        assert_true (ai_move (ai, 2, 4));
12104        assert_true (ai_move (ai, 6, 1));
12105        assert_true (ai_move (ai, 7, 4));
12106        assert_true (ai_move (ai, 7, 3));
12107        assert_true (ai_move (ai, 5, 6));
12108        assert_true (ai_move (ai, 7, 5));
12109        assert_true (ai_move (ai, 3, 7));
12110        assert_true (ai_move (ai, 5, 7));
12111        assert_true (ai_move (ai, 4, 6));
12112        assert_true (ai_move (ai, 4, 7));
12113        assert_true (ai_move (ai, 6, 7));
12114        assert_true (ai_move (ai, 6, 6));
12115        assert_true (ai_move (ai, 7, 7));
12116        assert_true (ai_move (ai, 7, 6));
12117        assert_true (ai_move (ai, 7, 1));
12118        assert_true (ai_move (ai, 7, 0));
12119    }
12120
12121    private static inline void test_complete_reversi_game_144 ()
12122    {
12123                                  /* 0 1 2 3 4 5 6 7 */
12124        string [] board = {/* 0 */ " . . . . . . . .",
12125                           /* 1 */ " . . L . . D . .",
12126                           /* 2 */ " . . . L D . . .",
12127                           /* 3 */ " . . . D L . . .",
12128                           /* 4 */ " . . . D L . . .",
12129                           /* 5 */ " . . . . . . . .",
12130                           /* 6 */ " . . . . . . . .",
12131                           /* 7 */ " . . . . . . . ."};
12132
12133        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12134        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12135
12136        assert_true (ai_move (ai, 2, 2));
12137        assert_true (ai_move (ai, 4, 1));
12138        assert_true (ai_move (ai, 2, 0));
12139        assert_true (ai_move (ai, 1, 2));
12140        assert_true (ai_move (ai, 2, 3));
12141        assert_true (ai_move (ai, 1, 4));
12142        assert_true (ai_move (ai, 2, 4));
12143        assert_true (ai_move (ai, 1, 3));
12144        assert_true (ai_move (ai, 0, 2));
12145        assert_true (ai_move (ai, 0, 3));
12146        assert_true (ai_move (ai, 0, 4));
12147        assert_true (ai_move (ai, 0, 5));
12148        assert_true (ai_move (ai, 0, 6));
12149        assert_true (ai_move (ai, 1, 5));
12150        assert_true (ai_move (ai, 2, 5));
12151        assert_true (ai_move (ai, 3, 5));
12152        assert_true (ai_move (ai, 4, 6));
12153        assert_true (ai_move (ai, 3, 6));
12154        assert_true (ai_move (ai, 4, 7));
12155        assert_true (ai_move (ai, 5, 7));
12156        assert_true (ai_move (ai, 6, 7));
12157        assert_true (ai_move (ai, 1, 1));
12158        assert_true (ai_move (ai, 5, 2));
12159        assert_true (ai_move (ai, 6, 3));
12160        assert_true (ai_move (ai, 6, 2));
12161        assert_true (ai_move (ai, 3, 1));
12162        assert_true (ai_move (ai, 3, 0));
12163        assert_true (ai_move (ai, 3, 7));
12164        assert_true (ai_move (ai, 2, 7));
12165        assert_true (ai_move (ai, 4, 0));
12166        assert_true (ai_move (ai, 5, 0));
12167        assert_true (ai_move (ai, 1, 0));
12168        assert_true (ai_move (ai, 0, 0));
12169        assert_true (ai_move (ai, 2, 6));
12170        assert_true (ai_move (ai, 7, 4));
12171        assert_true (ai_move (ai, 7, 2));
12172        assert_true (ai_move (ai, 7, 3));
12173        assert_true (ai_move (ai, 7, 5));
12174        assert_true (ai_move (ai, 5, 3));
12175        assert_true (ai_move (ai, 4, 5));
12176        assert_true (ai_move (ai, 5, 4));
12177        assert_true (ai_move (ai, 6, 5));
12178        assert_true (ai_move (ai, 1, 7));
12179        assert_true (ai_move (ai, 5, 5));
12180        assert_true (ai_move (ai, 5, 6));
12181        assert_true (ai_move (ai, 6, 4));
12182        assert_true (ai_move (ai, 1, 6));
12183        assert_true (ai_move (ai, 0, 7));
12184        assert_true (ai_move (ai, 7, 6));
12185        assert_true (ai_move (ai, 7, 7));
12186        assert_true (game.pass ());
12187        assert_true (ai_move (ai, 6, 6));
12188        assert_true (game.pass ());
12189        assert_true (ai_move (ai, 6, 1));
12190        assert_true (ai_move (ai, 7, 1));
12191        assert_true (ai_move (ai, 0, 1));
12192        assert_true (game.pass ());
12193        assert_true (ai_move (ai, 6, 0));
12194        assert_true (ai_move (ai, 7, 0));
12195    }
12196
12197    private static inline void test_complete_reversi_game_145 ()
12198    {
12199                                  /* 0 1 2 3 4 5 6 7 */
12200        string [] board = {/* 0 */ " . . . . . . . .",
12201                           /* 1 */ " . . . . . . . .",
12202                           /* 2 */ " . . . D . . . .",
12203                           /* 3 */ " . . . D D . . .",
12204                           /* 4 */ " . . L L L L . .",
12205                           /* 5 */ " . . . . . D . .",
12206                           /* 6 */ " . . . . . . . .",
12207                           /* 7 */ " . . . . . . . ."};
12208
12209        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12210        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12211
12212        assert_true (ai_move (ai, 6, 5));
12213        assert_true (ai_move (ai, 5, 2));
12214        assert_true (ai_move (ai, 1, 5));
12215        assert_true (ai_move (ai, 1, 4));
12216        assert_true (ai_move (ai, 1, 3));
12217        assert_true (ai_move (ai, 2, 1));
12218        assert_true (ai_move (ai, 3, 1));
12219        assert_true (ai_move (ai, 6, 4));
12220        assert_true (ai_move (ai, 7, 3));
12221        assert_true (ai_move (ai, 0, 2));
12222        assert_true (ai_move (ai, 1, 2));
12223        assert_true (ai_move (ai, 0, 3));
12224        assert_true (ai_move (ai, 5, 3));
12225        assert_true (ai_move (ai, 0, 4));
12226        assert_true (ai_move (ai, 5, 1));
12227        assert_true (ai_move (ai, 2, 6));
12228        assert_true (ai_move (ai, 4, 5));
12229        assert_true (ai_move (ai, 2, 2));
12230        assert_true (ai_move (ai, 3, 5));
12231        assert_true (ai_move (ai, 4, 1));
12232        assert_true (ai_move (ai, 5, 0));
12233        assert_true (ai_move (ai, 4, 6));
12234        assert_true (ai_move (ai, 3, 6));
12235        assert_true (ai_move (ai, 6, 2));
12236        assert_true (ai_move (ai, 4, 2));
12237        assert_true (ai_move (ai, 7, 5));
12238        assert_true (ai_move (ai, 6, 3));
12239        assert_true (ai_move (ai, 7, 2));
12240        assert_true (ai_move (ai, 7, 4));
12241        assert_true (ai_move (ai, 3, 7));
12242        assert_true (ai_move (ai, 5, 6));
12243        assert_true (ai_move (ai, 4, 0));
12244        assert_true (ai_move (ai, 2, 5));
12245        assert_true (ai_move (ai, 5, 7));
12246        assert_true (ai_move (ai, 2, 3));
12247        assert_true (ai_move (ai, 6, 0));
12248        assert_true (ai_move (ai, 6, 1));
12249        assert_true (ai_move (ai, 7, 1));
12250        assert_true (ai_move (ai, 7, 0));
12251        assert_true (ai_move (ai, 6, 6));
12252        assert_true (ai_move (ai, 3, 0));
12253        assert_true (ai_move (ai, 2, 0));
12254        assert_true (ai_move (ai, 1, 0));
12255        assert_true (ai_move (ai, 1, 1));
12256        assert_true (ai_move (ai, 0, 5));
12257        assert_true (ai_move (ai, 0, 6));
12258        assert_true (ai_move (ai, 1, 6));
12259        assert_true (ai_move (ai, 2, 7));
12260        assert_true (ai_move (ai, 7, 6));
12261        assert_true (game.pass ());
12262        assert_true (ai_move (ai, 4, 7));
12263        assert_true (ai_move (ai, 6, 7));
12264        assert_true (ai_move (ai, 0, 0));
12265        assert_true (ai_move (ai, 0, 1));
12266        assert_true (ai_move (ai, 0, 7));
12267        assert_true (ai_move (ai, 1, 7));
12268        assert_true (ai_move (ai, 7, 7));
12269    }
12270
12271    private static inline void test_complete_reversi_game_146 ()
12272    {
12273                                  /* 0 1 2 3 4 5 6 7 */
12274        string [] board = {/* 0 */ " . . . . . . . .",
12275                           /* 1 */ " . . . . . . . .",
12276                           /* 2 */ " . . . D . L . .",
12277                           /* 3 */ " . . . D L . . .",
12278                           /* 4 */ " . . L L D . . .",
12279                           /* 5 */ " . . . . . D . .",
12280                           /* 6 */ " . . . . . . . .",
12281                           /* 7 */ " . . . . . . . ."};
12282
12283        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12284        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12285
12286        assert_true (ai_move (ai, 1, 5));
12287        assert_true (ai_move (ai, 1, 4));
12288        assert_true (ai_move (ai, 5, 4));
12289        assert_true (ai_move (ai, 4, 2));
12290        assert_true (ai_move (ai, 6, 2));
12291        assert_true (ai_move (ai, 3, 1));
12292        assert_true (ai_move (ai, 2, 1));
12293        assert_true (ai_move (ai, 5, 1));
12294        assert_true (ai_move (ai, 4, 1));
12295        assert_true (ai_move (ai, 7, 3));
12296        assert_true (ai_move (ai, 7, 2));
12297        assert_true (ai_move (ai, 7, 1));
12298        assert_true (ai_move (ai, 2, 2));
12299        assert_true (ai_move (ai, 5, 3));
12300        assert_true (ai_move (ai, 6, 4));
12301        assert_true (ai_move (ai, 1, 2));
12302        assert_true (ai_move (ai, 5, 0));
12303        assert_true (ai_move (ai, 6, 5));
12304        assert_true (ai_move (ai, 2, 3));
12305        assert_true (ai_move (ai, 5, 6));
12306        assert_true (ai_move (ai, 4, 6));
12307        assert_true (ai_move (ai, 7, 4));
12308        assert_true (ai_move (ai, 2, 5));
12309        assert_true (ai_move (ai, 3, 0));
12310        assert_true (ai_move (ai, 2, 0));
12311        assert_true (ai_move (ai, 4, 0));
12312        assert_true (ai_move (ai, 5, 7));
12313        assert_true (ai_move (ai, 6, 3));
12314        assert_true (ai_move (ai, 0, 2));
12315        assert_true (ai_move (ai, 1, 3));
12316        assert_true (ai_move (ai, 1, 1));
12317        assert_true (ai_move (ai, 0, 6));
12318        assert_true (ai_move (ai, 7, 5));
12319        assert_true (ai_move (ai, 7, 6));
12320        assert_true (ai_move (ai, 0, 3));
12321        assert_true (ai_move (ai, 4, 5));
12322        assert_true (ai_move (ai, 3, 5));
12323        assert_true (ai_move (ai, 3, 6));
12324        assert_true (ai_move (ai, 0, 5));
12325        assert_true (ai_move (ai, 1, 6));
12326        assert_true (ai_move (ai, 2, 6));
12327        assert_true (ai_move (ai, 2, 7));
12328        assert_true (ai_move (ai, 4, 7));
12329        assert_true (ai_move (ai, 3, 7));
12330        assert_true (ai_move (ai, 6, 6));
12331        assert_true (ai_move (ai, 0, 4));
12332        assert_true (ai_move (ai, 0, 7));
12333        assert_true (ai_move (ai, 1, 7));
12334        assert_true (ai_move (ai, 6, 1));
12335        assert_true (ai_move (ai, 7, 0));
12336        assert_true (ai_move (ai, 6, 0));
12337        assert_true (ai_move (ai, 7, 7));
12338        assert_true (ai_move (ai, 6, 7));
12339        assert_true (ai_move (ai, 0, 0));
12340        assert_true (ai_move (ai, 0, 1));
12341        assert_true (ai_move (ai, 1, 0));
12342    }
12343
12344    private static inline void test_complete_reversi_game_147 ()
12345    {
12346                                  /* 0 1 2 3 4 5 6 7 */
12347        string [] board = {/* 0 */ " . . . . . . . .",
12348                           /* 1 */ " . . . . . . . .",
12349                           /* 2 */ " . . . D L . . .",
12350                           /* 3 */ " . . . L D . . .",
12351                           /* 4 */ " . . L L D . . .",
12352                           /* 5 */ " . . . . . D . .",
12353                           /* 6 */ " . . . . . . . .",
12354                           /* 7 */ " . . . . . . . ."};
12355
12356        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12357        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12358
12359        assert_true (ai_move (ai, 5, 2));
12360        assert_true (ai_move (ai, 5, 1));
12361        assert_true (ai_move (ai, 4, 1));
12362        assert_true (ai_move (ai, 5, 3));
12363        assert_true (ai_move (ai, 6, 3));
12364        assert_true (ai_move (ai, 2, 1));
12365        assert_true (ai_move (ai, 6, 2));
12366        assert_true (ai_move (ai, 5, 0));
12367        assert_true (ai_move (ai, 2, 2));
12368        assert_true (ai_move (ai, 7, 4));
12369        assert_true (ai_move (ai, 1, 5));
12370        assert_true (ai_move (ai, 1, 2));
12371        assert_true (ai_move (ai, 3, 1));
12372        assert_true (ai_move (ai, 1, 4));
12373        assert_true (ai_move (ai, 5, 4));
12374        assert_true (ai_move (ai, 5, 6));
12375        assert_true (ai_move (ai, 6, 5));
12376        assert_true (ai_move (ai, 7, 5));
12377        assert_true (ai_move (ai, 0, 2));
12378        assert_true (ai_move (ai, 2, 0));
12379        assert_true (ai_move (ai, 5, 7));
12380        assert_true (ai_move (ai, 1, 3));
12381        assert_true (ai_move (ai, 7, 2));
12382        assert_true (ai_move (ai, 0, 3));
12383        assert_true (ai_move (ai, 2, 5));
12384        assert_true (ai_move (ai, 2, 6));
12385        assert_true (ai_move (ai, 3, 5));
12386        assert_true (ai_move (ai, 4, 7));
12387        assert_true (ai_move (ai, 0, 4));
12388        assert_true (ai_move (ai, 2, 3));
12389        assert_true (ai_move (ai, 3, 6));
12390        assert_true (ai_move (ai, 7, 3));
12391        assert_true (ai_move (ai, 7, 6));
12392        assert_true (ai_move (ai, 0, 5));
12393        assert_true (ai_move (ai, 0, 6));
12394        assert_true (ai_move (ai, 6, 7));
12395        assert_true (ai_move (ai, 0, 1));
12396        assert_true (ai_move (ai, 4, 5));
12397        assert_true (ai_move (ai, 6, 4));
12398        assert_true (ai_move (ai, 4, 6));
12399        assert_true (ai_move (ai, 1, 1));
12400        assert_true (ai_move (ai, 1, 6));
12401        assert_true (ai_move (ai, 7, 1));
12402        assert_true (ai_move (ai, 6, 6));
12403        assert_true (ai_move (ai, 7, 7));
12404        assert_true (ai_move (ai, 6, 1));
12405        assert_true (ai_move (ai, 3, 0));
12406        assert_true (ai_move (ai, 4, 0));
12407        assert_true (ai_move (ai, 3, 7));
12408        assert_true (ai_move (ai, 1, 7));
12409        assert_true (ai_move (ai, 0, 7));
12410        assert_true (ai_move (ai, 2, 7));
12411        assert_true (ai_move (ai, 7, 0));
12412        assert_true (ai_move (ai, 0, 0));
12413        assert_true (ai_move (ai, 6, 0));
12414        assert_true (ai_move (ai, 1, 0));
12415    }
12416
12417    private static inline void test_complete_reversi_game_148 ()
12418    {
12419                                  /* 0 1 2 3 4 5 6 7 */
12420        string [] board = {/* 0 */ " . . . . . . . .",
12421                           /* 1 */ " . . . L . . . .",
12422                           /* 2 */ " . . . L . . . .",
12423                           /* 3 */ " . . . L D . . .",
12424                           /* 4 */ " . . L L D . . .",
12425                           /* 5 */ " . . . . . D . .",
12426                           /* 6 */ " . . . . . . . .",
12427                           /* 7 */ " . . . . . . . ."};
12428
12429        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12430        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12431
12432        assert_true (ai_move (ai, 2, 1));
12433        assert_true (ai_move (ai, 5, 2));
12434        assert_true (ai_move (ai, 3, 0));
12435        assert_true (ai_move (ai, 4, 5));
12436        assert_true (ai_move (ai, 5, 4));
12437        assert_true (ai_move (ai, 6, 5));
12438        assert_true (ai_move (ai, 5, 6));
12439        assert_true (ai_move (ai, 6, 3));
12440        assert_true (ai_move (ai, 5, 3));
12441        assert_true (ai_move (ai, 6, 4));
12442        assert_true (ai_move (ai, 5, 1));
12443        assert_true (ai_move (ai, 4, 6));
12444        assert_true (ai_move (ai, 7, 5));
12445        assert_true (ai_move (ai, 4, 1));
12446        assert_true (ai_move (ai, 5, 0));
12447        assert_true (ai_move (ai, 7, 3));
12448        assert_true (ai_move (ai, 7, 6));
12449        assert_true (ai_move (ai, 5, 7));
12450        assert_true (ai_move (ai, 7, 2));
12451        assert_true (ai_move (ai, 7, 4));
12452        assert_true (ai_move (ai, 3, 6));
12453        assert_true (ai_move (ai, 3, 5));
12454        assert_true (ai_move (ai, 2, 5));
12455        assert_true (ai_move (ai, 2, 7));
12456        assert_true (ai_move (ai, 6, 1));
12457        assert_true (ai_move (ai, 2, 3));
12458        assert_true (ai_move (ai, 1, 4));
12459        assert_true (ai_move (ai, 1, 2));
12460        assert_true (ai_move (ai, 6, 2));
12461        assert_true (ai_move (ai, 7, 7));
12462        assert_true (ai_move (ai, 0, 3));
12463        assert_true (ai_move (ai, 0, 1));
12464        assert_true (ai_move (ai, 2, 2));
12465        assert_true (ai_move (ai, 1, 5));
12466        assert_true (ai_move (ai, 6, 7));
12467        assert_true (ai_move (ai, 2, 0));
12468        assert_true (ai_move (ai, 1, 3));
12469        assert_true (ai_move (ai, 4, 0));
12470        assert_true (ai_move (ai, 1, 0));
12471        assert_true (ai_move (ai, 4, 2));
12472        assert_true (ai_move (ai, 0, 2));
12473        assert_true (ai_move (ai, 0, 4));
12474        assert_true (ai_move (ai, 6, 0));
12475        assert_true (ai_move (ai, 7, 1));
12476        assert_true (ai_move (ai, 4, 7));
12477        assert_true (ai_move (ai, 7, 0));
12478        assert_true (ai_move (ai, 2, 6));
12479        assert_true (ai_move (ai, 0, 0));
12480        assert_true (ai_move (ai, 0, 5));
12481        assert_true (ai_move (ai, 1, 6));
12482        assert_true (ai_move (ai, 0, 6));
12483        assert_true (ai_move (ai, 1, 1));
12484        assert_true (game.pass ());
12485        assert_true (ai_move (ai, 3, 7));
12486        assert_true (ai_move (ai, 6, 6));
12487        assert_true (ai_move (ai, 0, 7));
12488        assert_true (ai_move (ai, 1, 7));
12489    }
12490
12491    private static inline void test_complete_reversi_game_149 ()
12492    {
12493                                  /* 0 1 2 3 4 5 6 7 */
12494        string [] board = {/* 0 */ " . . . . . . . .",
12495                           /* 1 */ " . . . . . . . .",
12496                           /* 2 */ " . . . D . . . .",
12497                           /* 3 */ " . . . D D . . .",
12498                           /* 4 */ " . . L L D . . .",
12499                           /* 5 */ " . . . . L . . .",
12500                           /* 6 */ " . . . . . L . .",
12501                           /* 7 */ " . . . . . . . ."};
12502
12503        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12504        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12505
12506        assert_true (ai_move (ai, 4, 6));
12507        assert_true (ai_move (ai, 5, 2));
12508        assert_true (ai_move (ai, 1, 5));
12509        assert_true (ai_move (ai, 1, 4));
12510        assert_true (ai_move (ai, 5, 4));
12511        assert_true (ai_move (ai, 3, 6));
12512        assert_true (ai_move (ai, 2, 7));
12513        assert_true (ai_move (ai, 2, 6));
12514        assert_true (ai_move (ai, 3, 7));
12515        assert_true (ai_move (ai, 6, 3));
12516        assert_true (ai_move (ai, 6, 4));
12517        assert_true (ai_move (ai, 6, 5));
12518        assert_true (ai_move (ai, 7, 4));
12519        assert_true (ai_move (ai, 2, 1));
12520        assert_true (ai_move (ai, 5, 3));
12521        assert_true (ai_move (ai, 2, 3));
12522        assert_true (ai_move (ai, 4, 1));
12523        assert_true (ai_move (ai, 5, 1));
12524        assert_true (ai_move (ai, 6, 2));
12525        assert_true (ai_move (ai, 7, 3));
12526        assert_true (ai_move (ai, 7, 2));
12527        assert_true (ai_move (ai, 7, 5));
12528        assert_true (ai_move (ai, 7, 6));
12529        assert_true (ai_move (ai, 5, 5));
12530        assert_true (ai_move (ai, 4, 7));
12531        assert_true (ai_move (ai, 5, 0));
12532        assert_true (ai_move (ai, 1, 2));
12533        assert_true (ai_move (ai, 2, 2));
12534        assert_true (ai_move (ai, 0, 4));
12535        assert_true (ai_move (ai, 0, 2));
12536        assert_true (ai_move (ai, 2, 0));
12537        assert_true (ai_move (ai, 1, 3));
12538        assert_true (ai_move (ai, 4, 0));
12539        assert_true (ai_move (ai, 3, 1));
12540        assert_true (ai_move (ai, 6, 0));
12541        assert_true (ai_move (ai, 3, 0));
12542        assert_true (ai_move (ai, 3, 5));
12543        assert_true (ai_move (ai, 4, 2));
12544        assert_true (ai_move (ai, 6, 1));
12545        assert_true (ai_move (ai, 2, 5));
12546        assert_true (ai_move (ai, 0, 3));
12547        assert_true (ai_move (ai, 0, 5));
12548        assert_true (ai_move (ai, 1, 6));
12549        assert_true (ai_move (ai, 7, 0));
12550        assert_true (ai_move (ai, 6, 6));
12551        assert_true (ai_move (ai, 0, 6));
12552        assert_true (ai_move (ai, 1, 0));
12553        assert_true (ai_move (ai, 5, 7));
12554        assert_true (ai_move (ai, 6, 7));
12555        assert_true (ai_move (ai, 7, 1));
12556        assert_true (ai_move (ai, 0, 1));
12557        assert_true (ai_move (ai, 0, 7));
12558        assert_true (ai_move (ai, 1, 1));
12559        assert_true (ai_move (ai, 1, 7));
12560        assert_true (game.pass ());
12561        assert_true (ai_move (ai, 7, 7));
12562        assert_true (game.pass ());
12563        assert_true (ai_move (ai, 0, 0));
12564    }
12565
12566    private static inline void test_complete_reversi_game_150 ()
12567    {
12568                                  /* 0 1 2 3 4 5 6 7 */
12569        string [] board = {/* 0 */ " . . . . . . . .",
12570                           /* 1 */ " . . . . . . . .",
12571                           /* 2 */ " . . . D . . . .",
12572                           /* 3 */ " . . . D D . . .",
12573                           /* 4 */ " . . L L L L . .",
12574                           /* 5 */ " . . . . D . . .",
12575                           /* 6 */ " . . . . . . . .",
12576                           /* 7 */ " . . . . . . . ."};
12577
12578        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12579        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12580
12581        assert_true (ai_move (ai, 6, 5));
12582        assert_true (ai_move (ai, 6, 4));
12583        assert_true (ai_move (ai, 1, 5));
12584        assert_true (ai_move (ai, 4, 6));
12585        assert_true (ai_move (ai, 2, 5));
12586        assert_true (ai_move (ai, 2, 2));
12587        assert_true (ai_move (ai, 1, 2));
12588        assert_true (ai_move (ai, 3, 5));
12589        assert_true (ai_move (ai, 4, 2));
12590        assert_true (ai_move (ai, 0, 5));
12591        assert_true (ai_move (ai, 2, 6));
12592        assert_true (ai_move (ai, 3, 7));
12593        assert_true (ai_move (ai, 2, 7));
12594        assert_true (ai_move (ai, 1, 4));
12595        assert_true (ai_move (ai, 0, 3));
12596        assert_true (ai_move (ai, 2, 3));
12597        assert_true (ai_move (ai, 1, 3));
12598        assert_true (ai_move (ai, 3, 6));
12599        assert_true (ai_move (ai, 5, 7));
12600        assert_true (ai_move (ai, 4, 7));
12601        assert_true (ai_move (ai, 5, 3));
12602        assert_true (ai_move (ai, 0, 2));
12603        assert_true (ai_move (ai, 0, 1));
12604        assert_true (ai_move (ai, 5, 2));
12605        assert_true (ai_move (ai, 6, 2));
12606        assert_true (ai_move (ai, 4, 1));
12607        assert_true (ai_move (ai, 5, 5));
12608        assert_true (ai_move (ai, 7, 5));
12609        assert_true (ai_move (ai, 2, 1));
12610        assert_true (ai_move (ai, 5, 1));
12611        assert_true (ai_move (ai, 5, 0));
12612        assert_true (ai_move (ai, 3, 1));
12613        assert_true (ai_move (ai, 5, 6));
12614        assert_true (ai_move (ai, 6, 3));
12615        assert_true (ai_move (ai, 4, 0));
12616        assert_true (ai_move (ai, 7, 2));
12617        assert_true (ai_move (ai, 3, 0));
12618        assert_true (ai_move (ai, 2, 0));
12619        assert_true (ai_move (ai, 1, 0));
12620        assert_true (ai_move (ai, 6, 6));
12621        assert_true (ai_move (ai, 7, 3));
12622        assert_true (ai_move (ai, 7, 4));
12623        assert_true (ai_move (ai, 6, 1));
12624        assert_true (ai_move (ai, 7, 0));
12625        assert_true (ai_move (ai, 7, 1));
12626        assert_true (ai_move (ai, 6, 0));
12627        assert_true (ai_move (ai, 0, 4));
12628        assert_true (ai_move (ai, 0, 0));
12629        assert_true (ai_move (ai, 7, 7));
12630        assert_true (ai_move (ai, 1, 1));
12631        assert_true (ai_move (ai, 7, 6));
12632        assert_true (ai_move (ai, 0, 6));
12633        assert_true (ai_move (ai, 1, 6));
12634        assert_true (ai_move (ai, 6, 7));
12635        assert_true (game.pass ());
12636        assert_true (ai_move (ai, 1, 7));
12637        assert_true (ai_move (ai, 0, 7));
12638    }
12639
12640    private static inline void test_complete_reversi_game_151 ()
12641    {
12642                                  /* 0 1 2 3 4 5 6 7 */
12643        string [] board = {/* 0 */ " . . . . . . . .",
12644                           /* 1 */ " . . . . . . . .",
12645                           /* 2 */ " . . . D . L . .",
12646                           /* 3 */ " . . . D L . . .",
12647                           /* 4 */ " . . L L D . . .",
12648                           /* 5 */ " . . . . D . . .",
12649                           /* 6 */ " . . . . . . . .",
12650                           /* 7 */ " . . . . . . . ."};
12651
12652        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12653        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12654
12655        assert_true (ai_move (ai, 1, 5));
12656        assert_true (ai_move (ai, 1, 4));
12657        assert_true (ai_move (ai, 5, 4));
12658        assert_true (ai_move (ai, 5, 6));
12659        assert_true (ai_move (ai, 3, 6));
12660        assert_true (ai_move (ai, 4, 2));
12661        assert_true (ai_move (ai, 6, 2));
12662        assert_true (ai_move (ai, 3, 1));
12663        assert_true (ai_move (ai, 2, 1));
12664        assert_true (ai_move (ai, 5, 1));
12665        assert_true (ai_move (ai, 4, 1));
12666        assert_true (ai_move (ai, 7, 3));
12667        assert_true (ai_move (ai, 7, 2));
12668        assert_true (ai_move (ai, 7, 1));
12669        assert_true (ai_move (ai, 2, 2));
12670        assert_true (ai_move (ai, 5, 3));
12671        assert_true (ai_move (ai, 6, 4));
12672        assert_true (ai_move (ai, 1, 2));
12673        assert_true (ai_move (ai, 6, 3));
12674        assert_true (ai_move (ai, 3, 5));
12675        assert_true (ai_move (ai, 0, 2));
12676        assert_true (ai_move (ai, 4, 6));
12677        assert_true (ai_move (ai, 5, 0));
12678        assert_true (ai_move (ai, 2, 0));
12679        assert_true (ai_move (ai, 4, 0));
12680        assert_true (ai_move (ai, 6, 1));
12681        assert_true (ai_move (ai, 5, 5));
12682        assert_true (ai_move (ai, 3, 7));
12683        assert_true (ai_move (ai, 5, 7));
12684        assert_true (ai_move (ai, 6, 5));
12685        assert_true (ai_move (ai, 4, 7));
12686        assert_true (ai_move (ai, 6, 7));
12687        assert_true (ai_move (ai, 7, 4));
12688        assert_true (ai_move (ai, 7, 5));
12689        assert_true (ai_move (ai, 2, 7));
12690        assert_true (ai_move (ai, 1, 7));
12691        assert_true (ai_move (ai, 2, 6));
12692        assert_true (ai_move (ai, 2, 5));
12693        assert_true (ai_move (ai, 7, 0));
12694        assert_true (ai_move (ai, 0, 5));
12695        assert_true (ai_move (ai, 7, 6));
12696        assert_true (ai_move (ai, 6, 0));
12697        assert_true (ai_move (ai, 1, 3));
12698        assert_true (ai_move (ai, 2, 3));
12699        assert_true (ai_move (ai, 3, 0));
12700        assert_true (ai_move (ai, 0, 4));
12701        assert_true (ai_move (ai, 0, 3));
12702        assert_true (ai_move (ai, 0, 1));
12703        assert_true (ai_move (ai, 1, 1));
12704        assert_true (ai_move (ai, 0, 0));
12705        assert_true (ai_move (ai, 1, 0));
12706        assert_true (ai_move (ai, 6, 6));
12707        assert_true (ai_move (ai, 7, 7));
12708        assert_true (game.pass ());
12709        assert_true (ai_move (ai, 0, 7));
12710        assert_true (game.pass ());
12711        assert_true (ai_move (ai, 0, 6));
12712        assert_true (ai_move (ai, 1, 6));
12713    }
12714
12715    private static inline void test_complete_reversi_game_152 ()
12716    {
12717                                  /* 0 1 2 3 4 5 6 7 */
12718        string [] board = {/* 0 */ " . . . . . . . .",
12719                           /* 1 */ " . . . . . . . .",
12720                           /* 2 */ " . . . D L . . .",
12721                           /* 3 */ " . . . L D . . .",
12722                           /* 4 */ " . . L L D . . .",
12723                           /* 5 */ " . . . . D . . .",
12724                           /* 6 */ " . . . . . . . .",
12725                           /* 7 */ " . . . . . . . ."};
12726
12727        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12728        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12729
12730        assert_true (ai_move (ai, 5, 2));
12731        assert_true (ai_move (ai, 5, 6));
12732        assert_true (ai_move (ai, 2, 2));
12733        assert_true (ai_move (ai, 5, 4));
12734        assert_true (ai_move (ai, 1, 5));
12735        assert_true (ai_move (ai, 1, 4));
12736        assert_true (ai_move (ai, 6, 5));
12737        assert_true (ai_move (ai, 6, 4));
12738        assert_true (ai_move (ai, 4, 7));
12739        assert_true (ai_move (ai, 5, 1));
12740        assert_true (ai_move (ai, 4, 1));
12741        assert_true (ai_move (ai, 5, 3));
12742        assert_true (ai_move (ai, 6, 2));
12743        assert_true (ai_move (ai, 2, 1));
12744        assert_true (ai_move (ai, 2, 0));
12745        assert_true (ai_move (ai, 7, 2));
12746        assert_true (ai_move (ai, 1, 3));
12747        assert_true (ai_move (ai, 1, 2));
12748        assert_true (ai_move (ai, 3, 1));
12749        assert_true (ai_move (ai, 4, 0));
12750        assert_true (ai_move (ai, 7, 5));
12751        assert_true (ai_move (ai, 6, 3));
12752        assert_true (ai_move (ai, 0, 3));
12753        assert_true (ai_move (ai, 6, 7));
12754        assert_true (ai_move (ai, 6, 0));
12755        assert_true (ai_move (ai, 6, 1));
12756        assert_true (ai_move (ai, 4, 6));
12757        assert_true (ai_move (ai, 3, 0));
12758        assert_true (ai_move (ai, 5, 0));
12759        assert_true (ai_move (ai, 3, 5));
12760        assert_true (ai_move (ai, 5, 5));
12761        assert_true (ai_move (ai, 3, 6));
12762        assert_true (ai_move (ai, 2, 3));
12763        assert_true (ai_move (ai, 0, 2));
12764        assert_true (ai_move (ai, 0, 4));
12765        assert_true (ai_move (ai, 0, 5));
12766        assert_true (ai_move (ai, 1, 1));
12767        assert_true (ai_move (ai, 7, 3));
12768        assert_true (ai_move (ai, 6, 6));
12769        assert_true (ai_move (ai, 7, 4));
12770        assert_true (ai_move (ai, 7, 0));
12771        assert_true (ai_move (ai, 7, 6));
12772        assert_true (ai_move (ai, 7, 7));
12773        assert_true (ai_move (ai, 2, 5));
12774        assert_true (ai_move (ai, 7, 1));
12775        assert_true (ai_move (ai, 0, 1));
12776        assert_true (ai_move (ai, 2, 7));
12777        assert_true (ai_move (ai, 2, 6));
12778        assert_true (ai_move (ai, 3, 7));
12779        assert_true (ai_move (ai, 5, 7));
12780        assert_true (ai_move (ai, 1, 6));
12781        assert_true (ai_move (ai, 0, 6));
12782        assert_true (ai_move (ai, 0, 7));
12783        assert_true (ai_move (ai, 1, 7));
12784        assert_true (ai_move (ai, 0, 0));
12785        assert_true (ai_move (ai, 1, 0));
12786    }
12787
12788    private static inline void test_complete_reversi_game_153 ()
12789    {
12790                                  /* 0 1 2 3 4 5 6 7 */
12791        string [] board = {/* 0 */ " . . . . . . . .",
12792                           /* 1 */ " . . . L . . . .",
12793                           /* 2 */ " . . . L . . . .",
12794                           /* 3 */ " . . . L D . . .",
12795                           /* 4 */ " . . L L D . . .",
12796                           /* 5 */ " . . . . D . . .",
12797                           /* 6 */ " . . . . . . . .",
12798                           /* 7 */ " . . . . . . . ."};
12799
12800        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12801        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12802
12803        assert_true (ai_move (ai, 2, 1));
12804        assert_true (ai_move (ai, 5, 6));
12805        assert_true (ai_move (ai, 4, 6));
12806        assert_true (ai_move (ai, 5, 2));
12807        assert_true (ai_move (ai, 3, 0));
12808        assert_true (ai_move (ai, 5, 4));
12809        assert_true (ai_move (ai, 6, 3));
12810        assert_true (ai_move (ai, 6, 5));
12811        assert_true (ai_move (ai, 4, 1));
12812        assert_true (ai_move (ai, 3, 6));
12813        assert_true (ai_move (ai, 2, 7));
12814        assert_true (ai_move (ai, 6, 4));
12815        assert_true (ai_move (ai, 4, 7));
12816        assert_true (ai_move (ai, 7, 2));
12817        assert_true (ai_move (ai, 6, 6));
12818        assert_true (ai_move (ai, 1, 0));
12819        assert_true (ai_move (ai, 1, 2));
12820        assert_true (ai_move (ai, 5, 0));
12821        assert_true (ai_move (ai, 7, 4));
12822        assert_true (ai_move (ai, 6, 2));
12823        assert_true (ai_move (ai, 5, 1));
12824        assert_true (ai_move (ai, 5, 3));
12825        assert_true (ai_move (ai, 2, 3));
12826        assert_true (ai_move (ai, 1, 3));
12827        assert_true (ai_move (ai, 1, 4));
12828        assert_true (ai_move (ai, 7, 6));
12829        assert_true (ai_move (ai, 4, 2));
12830        assert_true (ai_move (ai, 2, 2));
12831        assert_true (ai_move (ai, 1, 1));
12832        assert_true (ai_move (ai, 0, 2));
12833        assert_true (ai_move (ai, 0, 3));
12834        assert_true (ai_move (ai, 0, 5));
12835        assert_true (ai_move (ai, 0, 1));
12836        assert_true (ai_move (ai, 4, 0));
12837        assert_true (ai_move (ai, 6, 0));
12838        assert_true (ai_move (ai, 0, 4));
12839        assert_true (ai_move (ai, 5, 5));
12840        assert_true (ai_move (ai, 3, 7));
12841        assert_true (ai_move (ai, 0, 6));
12842        assert_true (ai_move (ai, 5, 7));
12843        assert_true (ai_move (ai, 6, 7));
12844        assert_true (ai_move (ai, 2, 5));
12845        assert_true (ai_move (ai, 2, 6));
12846        assert_true (ai_move (ai, 0, 0));
12847        assert_true (ai_move (ai, 2, 0));
12848        assert_true (ai_move (ai, 7, 0));
12849        assert_true (ai_move (ai, 7, 5));
12850        assert_true (ai_move (ai, 7, 3));
12851        assert_true (ai_move (ai, 7, 1));
12852        assert_true (ai_move (ai, 7, 7));
12853        assert_true (ai_move (ai, 3, 5));
12854        assert_true (ai_move (ai, 0, 7));
12855        assert_true (ai_move (ai, 1, 5));
12856        assert_true (ai_move (ai, 1, 7));
12857        assert_true (game.pass ());
12858        assert_true (ai_move (ai, 1, 6));
12859        assert_true (game.pass ());
12860        assert_true (ai_move (ai, 6, 1));
12861    }
12862
12863    private static inline void test_complete_reversi_game_154 ()
12864    {
12865                                  /* 0 1 2 3 4 5 6 7 */
12866        string [] board = {/* 0 */ " . . . . . . . .",
12867                           /* 1 */ " . . . . . . . .",
12868                           /* 2 */ " . . . D . . . .",
12869                           /* 3 */ " . . . D D . . .",
12870                           /* 4 */ " . . L D L . . .",
12871                           /* 5 */ " . . . L . . . .",
12872                           /* 6 */ " . . . . L . . .",
12873                           /* 7 */ " . . . . . . . ."};
12874
12875        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12876        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12877
12878        assert_true (ai_move (ai, 3, 6));
12879        assert_true (ai_move (ai, 2, 6));
12880        assert_true (ai_move (ai, 1, 4));
12881        assert_true (ai_move (ai, 1, 3));
12882        assert_true (ai_move (ai, 1, 5));
12883        assert_true (ai_move (ai, 2, 2));
12884        assert_true (ai_move (ai, 1, 2));
12885        assert_true (ai_move (ai, 5, 3));
12886        assert_true (ai_move (ai, 5, 7));
12887        assert_true (ai_move (ai, 3, 1));
12888        assert_true (ai_move (ai, 4, 0));
12889        assert_true (ai_move (ai, 0, 2));
12890        assert_true (ai_move (ai, 5, 4));
12891        assert_true (ai_move (ai, 6, 5));
12892        assert_true (ai_move (ai, 6, 4));
12893        assert_true (ai_move (ai, 7, 5));
12894        assert_true (ai_move (ai, 6, 2));
12895        assert_true (ai_move (ai, 4, 2));
12896        assert_true (ai_move (ai, 5, 2));
12897        assert_true (ai_move (ai, 6, 3));
12898        assert_true (ai_move (ai, 7, 2));
12899        assert_true (ai_move (ai, 5, 1));
12900        assert_true (ai_move (ai, 5, 0));
12901        assert_true (ai_move (ai, 7, 3));
12902        assert_true (ai_move (ai, 4, 1));
12903        assert_true (ai_move (ai, 2, 0));
12904        assert_true (ai_move (ai, 2, 1));
12905        assert_true (ai_move (ai, 3, 0));
12906        assert_true (ai_move (ai, 6, 1));
12907        assert_true (ai_move (ai, 4, 5));
12908        assert_true (ai_move (ai, 1, 0));
12909        assert_true (ai_move (ai, 4, 7));
12910        assert_true (ai_move (ai, 5, 5));
12911        assert_true (ai_move (ai, 2, 5));
12912        assert_true (ai_move (ai, 5, 6));
12913        assert_true (ai_move (ai, 2, 3));
12914        assert_true (ai_move (ai, 2, 7));
12915        assert_true (ai_move (ai, 3, 7));
12916        assert_true (ai_move (ai, 0, 3));
12917        assert_true (ai_move (ai, 0, 5));
12918        assert_true (ai_move (ai, 0, 4));
12919        assert_true (ai_move (ai, 7, 0));
12920        assert_true (ai_move (ai, 7, 1));
12921        assert_true (ai_move (ai, 6, 0));
12922        assert_true (ai_move (ai, 7, 4));
12923        assert_true (ai_move (ai, 0, 0));
12924        assert_true (ai_move (ai, 0, 1));
12925        assert_true (ai_move (ai, 1, 1));
12926        assert_true (ai_move (ai, 1, 6));
12927        assert_true (ai_move (ai, 0, 7));
12928        assert_true (ai_move (ai, 0, 6));
12929        assert_true (ai_move (ai, 6, 6));
12930        assert_true (ai_move (ai, 6, 7));
12931        assert_true (ai_move (ai, 1, 7));
12932        assert_true (ai_move (ai, 7, 6));
12933        assert_true (ai_move (ai, 7, 7));
12934    }
12935
12936    private static inline void test_complete_reversi_game_155 ()
12937    {
12938                                  /* 0 1 2 3 4 5 6 7 */
12939        string [] board = {/* 0 */ " . . . . . . . .",
12940                           /* 1 */ " . . . . . . . .",
12941                           /* 2 */ " . . . D L . . .",
12942                           /* 3 */ " . . . L L . . .",
12943                           /* 4 */ " . . L D L . . .",
12944                           /* 5 */ " . . . D . . . .",
12945                           /* 6 */ " . . . . . . . .",
12946                           /* 7 */ " . . . . . . . ."};
12947
12948        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
12949        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
12950
12951        assert_true (ai_move (ai, 1, 4));
12952        assert_true (ai_move (ai, 2, 2));
12953        assert_true (ai_move (ai, 5, 4));
12954        assert_true (ai_move (ai, 6, 5));
12955        assert_true (ai_move (ai, 6, 4));
12956        assert_true (ai_move (ai, 1, 5));
12957        assert_true (ai_move (ai, 1, 3));
12958        assert_true (ai_move (ai, 0, 4));
12959        assert_true (ai_move (ai, 0, 2));
12960        assert_true (ai_move (ai, 1, 2));
12961        assert_true (ai_move (ai, 0, 6));
12962        assert_true (ai_move (ai, 2, 6));
12963        assert_true (ai_move (ai, 2, 1));
12964        assert_true (ai_move (ai, 3, 1));
12965        assert_true (ai_move (ai, 5, 2));
12966        assert_true (ai_move (ai, 5, 1));
12967        assert_true (ai_move (ai, 5, 0));
12968        assert_true (ai_move (ai, 4, 6));
12969        assert_true (ai_move (ai, 3, 6));
12970        assert_true (ai_move (ai, 6, 2));
12971        assert_true (ai_move (ai, 5, 3));
12972        assert_true (ai_move (ai, 4, 0));
12973        assert_true (ai_move (ai, 2, 0));
12974        assert_true (ai_move (ai, 3, 0));
12975        assert_true (ai_move (ai, 7, 2));
12976        assert_true (ai_move (ai, 7, 3));
12977        assert_true (ai_move (ai, 7, 4));
12978        assert_true (ai_move (ai, 6, 3));
12979        assert_true (ai_move (ai, 4, 1));
12980        assert_true (ai_move (ai, 2, 5));
12981        assert_true (ai_move (ai, 7, 5));
12982        assert_true (ai_move (ai, 5, 5));
12983        assert_true (ai_move (ai, 7, 1));
12984        assert_true (ai_move (ai, 4, 5));
12985        assert_true (ai_move (ai, 7, 6));
12986        assert_true (ai_move (ai, 3, 7));
12987        assert_true (ai_move (ai, 2, 7));
12988        assert_true (ai_move (ai, 4, 7));
12989        assert_true (ai_move (ai, 2, 3));
12990        assert_true (ai_move (ai, 1, 6));
12991        assert_true (ai_move (ai, 5, 7));
12992        assert_true (ai_move (ai, 0, 3));
12993        assert_true (ai_move (ai, 5, 6));
12994        assert_true (ai_move (ai, 0, 1));
12995        assert_true (ai_move (ai, 1, 7));
12996        assert_true (ai_move (ai, 6, 1));
12997        assert_true (ai_move (ai, 6, 0));
12998        assert_true (ai_move (ai, 7, 0));
12999        assert_true (ai_move (ai, 1, 0));
13000        assert_true (ai_move (ai, 7, 7));
13001        assert_true (ai_move (ai, 0, 5));
13002        assert_true (ai_move (ai, 0, 7));
13003        assert_true (ai_move (ai, 1, 1));
13004        assert_true (ai_move (ai, 6, 7));
13005        assert_true (ai_move (ai, 6, 6));
13006        assert_true (ai_move (ai, 0, 0));
13007    }
13008
13009    private static inline void test_complete_reversi_game_156 ()
13010    {
13011                                  /* 0 1 2 3 4 5 6 7 */
13012        string [] board = {/* 0 */ " . . . . . . . .",
13013                           /* 1 */ " . . . . . . . .",
13014                           /* 2 */ " . . . D . . . .",
13015                           /* 3 */ " . . . D D . . .",
13016                           /* 4 */ " . . L D L . . .",
13017                           /* 5 */ " . . . L . . . .",
13018                           /* 6 */ " . . L . . . . .",
13019                           /* 7 */ " . . . . . . . ."};
13020
13021        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13022        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13023
13024        assert_true (ai_move (ai, 3, 6));
13025        assert_true (ai_move (ai, 4, 6));
13026        assert_true (ai_move (ai, 1, 4));
13027        assert_true (ai_move (ai, 1, 3));
13028        assert_true (ai_move (ai, 1, 5));
13029        assert_true (ai_move (ai, 2, 2));
13030        assert_true (ai_move (ai, 1, 2));
13031        assert_true (ai_move (ai, 5, 3));
13032        assert_true (ai_move (ai, 5, 7));
13033        assert_true (ai_move (ai, 3, 1));
13034        assert_true (ai_move (ai, 4, 0));
13035        assert_true (ai_move (ai, 0, 2));
13036        assert_true (ai_move (ai, 5, 4));
13037        assert_true (ai_move (ai, 6, 5));
13038        assert_true (ai_move (ai, 6, 4));
13039        assert_true (ai_move (ai, 7, 5));
13040        assert_true (ai_move (ai, 6, 2));
13041        assert_true (ai_move (ai, 4, 2));
13042        assert_true (ai_move (ai, 5, 2));
13043        assert_true (ai_move (ai, 6, 3));
13044        assert_true (ai_move (ai, 7, 2));
13045        assert_true (ai_move (ai, 5, 1));
13046        assert_true (ai_move (ai, 5, 0));
13047        assert_true (ai_move (ai, 7, 3));
13048        assert_true (ai_move (ai, 4, 1));
13049        assert_true (ai_move (ai, 2, 0));
13050        assert_true (ai_move (ai, 2, 1));
13051        assert_true (ai_move (ai, 3, 0));
13052        assert_true (ai_move (ai, 6, 1));
13053        assert_true (ai_move (ai, 4, 5));
13054        assert_true (ai_move (ai, 1, 0));
13055        assert_true (ai_move (ai, 4, 7));
13056        assert_true (ai_move (ai, 5, 5));
13057        assert_true (ai_move (ai, 2, 5));
13058        assert_true (ai_move (ai, 5, 6));
13059        assert_true (ai_move (ai, 2, 3));
13060        assert_true (ai_move (ai, 2, 7));
13061        assert_true (ai_move (ai, 3, 7));
13062        assert_true (ai_move (ai, 0, 3));
13063        assert_true (ai_move (ai, 0, 5));
13064        assert_true (ai_move (ai, 0, 4));
13065        assert_true (ai_move (ai, 7, 0));
13066        assert_true (ai_move (ai, 7, 1));
13067        assert_true (ai_move (ai, 6, 0));
13068        assert_true (ai_move (ai, 7, 4));
13069        assert_true (ai_move (ai, 0, 0));
13070        assert_true (ai_move (ai, 0, 1));
13071        assert_true (ai_move (ai, 1, 1));
13072        assert_true (ai_move (ai, 1, 6));
13073        assert_true (ai_move (ai, 0, 7));
13074        assert_true (ai_move (ai, 0, 6));
13075        assert_true (ai_move (ai, 6, 6));
13076        assert_true (ai_move (ai, 6, 7));
13077        assert_true (ai_move (ai, 1, 7));
13078        assert_true (ai_move (ai, 7, 6));
13079        assert_true (ai_move (ai, 7, 7));
13080    }
13081
13082    private static inline void test_complete_reversi_game_157 ()
13083    {
13084                                  /* 0 1 2 3 4 5 6 7 */
13085        string [] board = {/* 0 */ " . . . . . . . .",
13086                           /* 1 */ " . . . . . . . .",
13087                           /* 2 */ " . . L D . . . .",
13088                           /* 3 */ " . . . L D . . .",
13089                           /* 4 */ " . . L D L . . .",
13090                           /* 5 */ " . . . D . . . .",
13091                           /* 6 */ " . . . . . . . .",
13092                           /* 7 */ " . . . . . . . ."};
13093
13094        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13095        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13096
13097        assert_true (ai_move (ai, 1, 2));
13098        assert_true (ai_move (ai, 2, 6));
13099        assert_true (ai_move (ai, 3, 6));
13100        assert_true (ai_move (ai, 3, 1));
13101        assert_true (ai_move (ai, 4, 2));
13102        assert_true (ai_move (ai, 1, 3));
13103        assert_true (ai_move (ai, 2, 3));
13104        assert_true (ai_move (ai, 5, 2));
13105        assert_true (ai_move (ai, 2, 5));
13106        assert_true (ai_move (ai, 0, 2));
13107        assert_true (ai_move (ai, 5, 1));
13108        assert_true (ai_move (ai, 5, 0));
13109        assert_true (ai_move (ai, 6, 2));
13110        assert_true (ai_move (ai, 7, 3));
13111        assert_true (ai_move (ai, 4, 1));
13112        assert_true (ai_move (ai, 4, 5));
13113        assert_true (ai_move (ai, 1, 4));
13114        assert_true (ai_move (ai, 2, 7));
13115        assert_true (ai_move (ai, 4, 7));
13116        assert_true (ai_move (ai, 3, 7));
13117        assert_true (ai_move (ai, 7, 2));
13118        assert_true (ai_move (ai, 5, 7));
13119        assert_true (ai_move (ai, 7, 4));
13120        assert_true (ai_move (ai, 0, 3));
13121        assert_true (ai_move (ai, 3, 0));
13122        assert_true (ai_move (ai, 1, 5));
13123        assert_true (ai_move (ai, 5, 3));
13124        assert_true (ai_move (ai, 5, 4));
13125        assert_true (ai_move (ai, 6, 3));
13126        assert_true (ai_move (ai, 4, 0));
13127        assert_true (ai_move (ai, 2, 0));
13128        assert_true (ai_move (ai, 1, 0));
13129        assert_true (ai_move (ai, 2, 1));
13130        assert_true (ai_move (ai, 6, 4));
13131        assert_true (ai_move (ai, 1, 6));
13132        assert_true (ai_move (ai, 1, 1));
13133        assert_true (ai_move (ai, 0, 4));
13134        assert_true (ai_move (ai, 0, 5));
13135        assert_true (ai_move (ai, 0, 7));
13136        assert_true (ai_move (ai, 1, 7));
13137        assert_true (ai_move (ai, 6, 7));
13138        assert_true (ai_move (ai, 6, 1));
13139        assert_true (ai_move (ai, 4, 6));
13140        assert_true (ai_move (ai, 5, 6));
13141        assert_true (ai_move (ai, 6, 5));
13142        assert_true (ai_move (ai, 7, 6));
13143        assert_true (ai_move (ai, 7, 0));
13144        assert_true (ai_move (ai, 0, 6));
13145        assert_true (ai_move (ai, 6, 0));
13146        assert_true (ai_move (ai, 7, 1));
13147        assert_true (ai_move (ai, 7, 5));
13148        assert_true (ai_move (ai, 6, 6));
13149        assert_true (ai_move (ai, 0, 1));
13150        assert_true (game.pass ());
13151        assert_true (ai_move (ai, 0, 0));
13152        assert_true (game.pass ());
13153        assert_true (ai_move (ai, 5, 5));
13154        assert_true (game.pass ());
13155        assert_true (ai_move (ai, 7, 7));
13156    }
13157
13158    private static inline void test_complete_reversi_game_158 ()
13159    {
13160                                  /* 0 1 2 3 4 5 6 7 */
13161        string [] board = {/* 0 */ " . . . . . . . .",
13162                           /* 1 */ " . . . . . . . .",
13163                           /* 2 */ " . . . D L . . .",
13164                           /* 3 */ " . . . L L . . .",
13165                           /* 4 */ " . . L D L . . .",
13166                           /* 5 */ " . . D . . . . .",
13167                           /* 6 */ " . . . . . . . .",
13168                           /* 7 */ " . . . . . . . ."};
13169
13170        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13171        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13172
13173        assert_true (ai_move (ai, 1, 4));
13174        assert_true (ai_move (ai, 2, 2));
13175        assert_true (ai_move (ai, 5, 2));
13176        assert_true (ai_move (ai, 6, 2));
13177        assert_true (ai_move (ai, 2, 1));
13178        assert_true (ai_move (ai, 3, 1));
13179        assert_true (ai_move (ai, 2, 3));
13180        assert_true (ai_move (ai, 1, 2));
13181        assert_true (ai_move (ai, 3, 0));
13182        assert_true (ai_move (ai, 2, 6));
13183        assert_true (ai_move (ai, 1, 3));
13184        assert_true (ai_move (ai, 4, 5));
13185        assert_true (ai_move (ai, 2, 7));
13186        assert_true (ai_move (ai, 2, 0));
13187        assert_true (ai_move (ai, 1, 0));
13188        assert_true (ai_move (ai, 0, 4));
13189        assert_true (ai_move (ai, 5, 1));
13190        assert_true (ai_move (ai, 3, 6));
13191        assert_true (ai_move (ai, 5, 3));
13192        assert_true (ai_move (ai, 6, 4));
13193        assert_true (ai_move (ai, 4, 1));
13194        assert_true (ai_move (ai, 5, 0));
13195        assert_true (ai_move (ai, 0, 2));
13196        assert_true (ai_move (ai, 4, 0));
13197        assert_true (ai_move (ai, 6, 0));
13198        assert_true (ai_move (ai, 6, 1));
13199        assert_true (ai_move (ai, 0, 3));
13200        assert_true (ai_move (ai, 0, 1));
13201        assert_true (ai_move (ai, 7, 3));
13202        assert_true (ai_move (ai, 7, 2));
13203        assert_true (ai_move (ai, 0, 5));
13204        assert_true (ai_move (ai, 0, 6));
13205        assert_true (ai_move (ai, 4, 7));
13206        assert_true (ai_move (ai, 7, 4));
13207        assert_true (ai_move (ai, 1, 5));
13208        assert_true (ai_move (ai, 3, 5));
13209        assert_true (ai_move (ai, 5, 5));
13210        assert_true (ai_move (ai, 4, 6));
13211        assert_true (ai_move (ai, 5, 6));
13212        assert_true (ai_move (ai, 5, 7));
13213        assert_true (ai_move (ai, 5, 4));
13214        assert_true (ai_move (ai, 6, 3));
13215        assert_true (ai_move (ai, 7, 5));
13216        assert_true (ai_move (ai, 6, 5));
13217        assert_true (ai_move (ai, 7, 0));
13218        assert_true (ai_move (ai, 7, 1));
13219        assert_true (ai_move (ai, 6, 7));
13220        assert_true (ai_move (ai, 3, 7));
13221        assert_true (ai_move (ai, 6, 6));
13222        assert_true (ai_move (ai, 7, 7));
13223        assert_true (ai_move (ai, 7, 6));
13224        assert_true (ai_move (ai, 1, 7));
13225        assert_true (ai_move (ai, 1, 6));
13226        assert_true (ai_move (ai, 1, 1));
13227        assert_true (ai_move (ai, 0, 0));
13228        assert_true (game.pass ());
13229        assert_true (ai_move (ai, 0, 7));
13230    }
13231
13232    private static inline void test_complete_reversi_game_159 ()
13233    {
13234                                  /* 0 1 2 3 4 5 6 7 */
13235        string [] board = {/* 0 */ " . . . . . . . .",
13236                           /* 1 */ " . . . . . . . .",
13237                           /* 2 */ " . . . D . . . .",
13238                           /* 3 */ " . . . D D . . .",
13239                           /* 4 */ " . . L D L . . .",
13240                           /* 5 */ " . . L . . . . .",
13241                           /* 6 */ " . . L . . . . .",
13242                           /* 7 */ " . . . . . . . ."};
13243
13244        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13245        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13246
13247        assert_true (ai_move (ai, 5, 5));
13248        assert_true (ai_move (ai, 4, 2));
13249        assert_true (ai_move (ai, 5, 2));
13250        assert_true (ai_move (ai, 5, 1));
13251        assert_true (ai_move (ai, 4, 1));
13252        assert_true (ai_move (ai, 5, 3));
13253        assert_true (ai_move (ai, 6, 3));
13254        assert_true (ai_move (ai, 2, 1));
13255        assert_true (ai_move (ai, 6, 2));
13256        assert_true (ai_move (ai, 5, 0));
13257        assert_true (ai_move (ai, 2, 2));
13258        assert_true (ai_move (ai, 7, 4));
13259        assert_true (ai_move (ai, 5, 4));
13260        assert_true (ai_move (ai, 1, 2));
13261        assert_true (ai_move (ai, 3, 1));
13262        assert_true (ai_move (ai, 5, 6));
13263        assert_true (ai_move (ai, 1, 3));
13264        assert_true (ai_move (ai, 2, 0));
13265        assert_true (ai_move (ai, 3, 5));
13266        assert_true (ai_move (ai, 7, 2));
13267        assert_true (ai_move (ai, 1, 5));
13268        assert_true (ai_move (ai, 2, 3));
13269        assert_true (ai_move (ai, 1, 4));
13270        assert_true (ai_move (ai, 0, 5));
13271        assert_true (ai_move (ai, 2, 7));
13272        assert_true (ai_move (ai, 0, 4));
13273        assert_true (ai_move (ai, 6, 1));
13274        assert_true (ai_move (ai, 3, 6));
13275        assert_true (ai_move (ai, 1, 6));
13276        assert_true (ai_move (ai, 4, 5));
13277        assert_true (ai_move (ai, 0, 2));
13278        assert_true (ai_move (ai, 0, 7));
13279        assert_true (ai_move (ai, 6, 5));
13280        assert_true (ai_move (ai, 1, 7));
13281        assert_true (ai_move (ai, 4, 6));
13282        assert_true (ai_move (ai, 3, 7));
13283        assert_true (ai_move (ai, 6, 0));
13284        assert_true (ai_move (ai, 4, 0));
13285        assert_true (ai_move (ai, 6, 4));
13286        assert_true (ai_move (ai, 7, 5));
13287        assert_true (ai_move (ai, 5, 7));
13288        assert_true (ai_move (ai, 7, 3));
13289        assert_true (ai_move (ai, 7, 1));
13290        assert_true (ai_move (ai, 7, 0));
13291        assert_true (ai_move (ai, 0, 6));
13292        assert_true (ai_move (ai, 0, 3));
13293        assert_true (ai_move (ai, 3, 0));
13294        assert_true (ai_move (ai, 4, 7));
13295        assert_true (ai_move (ai, 7, 6));
13296        assert_true (ai_move (ai, 6, 7));
13297        assert_true (ai_move (ai, 6, 6));
13298        assert_true (ai_move (ai, 7, 7));
13299        assert_true (ai_move (ai, 0, 1));
13300        assert_true (ai_move (ai, 1, 1));
13301        assert_true (ai_move (ai, 1, 0));
13302        assert_true (ai_move (ai, 0, 0));
13303    }
13304
13305    private static inline void test_complete_reversi_game_160 ()
13306    {
13307                                  /* 0 1 2 3 4 5 6 7 */
13308        string [] board = {/* 0 */ " . . . . . . . .",
13309                           /* 1 */ " . . . . . . . .",
13310                           /* 2 */ " . . L D . . . .",
13311                           /* 3 */ " . . . L D . . .",
13312                           /* 4 */ " . . L D L . . .",
13313                           /* 5 */ " . . D . . . . .",
13314                           /* 6 */ " . . . . . . . .",
13315                           /* 7 */ " . . . . . . . ."};
13316
13317        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13318        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13319
13320        assert_true (ai_move (ai, 1, 2));
13321        assert_true (ai_move (ai, 2, 6));
13322        assert_true (ai_move (ai, 5, 4));
13323        assert_true (ai_move (ai, 3, 5));
13324        assert_true (ai_move (ai, 2, 3));
13325        assert_true (ai_move (ai, 2, 1));
13326        assert_true (ai_move (ai, 1, 3));
13327        assert_true (ai_move (ai, 0, 4));
13328        assert_true (ai_move (ai, 2, 0));
13329        assert_true (ai_move (ai, 3, 1));
13330        assert_true (ai_move (ai, 4, 2));
13331        assert_true (ai_move (ai, 4, 0));
13332        assert_true (ai_move (ai, 0, 3));
13333        assert_true (ai_move (ai, 5, 1));
13334        assert_true (ai_move (ai, 0, 5));
13335        assert_true (ai_move (ai, 5, 2));
13336        assert_true (ai_move (ai, 6, 2));
13337        assert_true (ai_move (ai, 7, 2));
13338        assert_true (ai_move (ai, 4, 6));
13339        assert_true (ai_move (ai, 3, 6));
13340        assert_true (ai_move (ai, 2, 7));
13341        assert_true (ai_move (ai, 1, 4));
13342        assert_true (ai_move (ai, 1, 5));
13343        assert_true (ai_move (ai, 6, 5));
13344        assert_true (ai_move (ai, 4, 5));
13345        assert_true (ai_move (ai, 5, 7));
13346        assert_true (ai_move (ai, 6, 4));
13347        assert_true (ai_move (ai, 3, 7));
13348        assert_true (ai_move (ai, 3, 0));
13349        assert_true (ai_move (ai, 5, 3));
13350        assert_true (ai_move (ai, 4, 1));
13351        assert_true (ai_move (ai, 1, 0));
13352        assert_true (ai_move (ai, 6, 3));
13353        assert_true (ai_move (ai, 5, 0));
13354        assert_true (ai_move (ai, 4, 7));
13355        assert_true (ai_move (ai, 1, 7));
13356        assert_true (ai_move (ai, 1, 6));
13357        assert_true (ai_move (ai, 7, 5));
13358        assert_true (ai_move (ai, 7, 4));
13359        assert_true (ai_move (ai, 7, 3));
13360        assert_true (ai_move (ai, 6, 1));
13361        assert_true (ai_move (ai, 0, 2));
13362        assert_true (ai_move (ai, 0, 1));
13363        assert_true (ai_move (ai, 5, 5));
13364        assert_true (ai_move (ai, 5, 6));
13365        assert_true (ai_move (ai, 6, 6));
13366        assert_true (ai_move (ai, 6, 0));
13367        assert_true (ai_move (ai, 7, 0));
13368        assert_true (ai_move (ai, 7, 7));
13369        assert_true (ai_move (ai, 7, 1));
13370        assert_true (ai_move (ai, 7, 6));
13371        assert_true (ai_move (ai, 0, 7));
13372        assert_true (ai_move (ai, 1, 1));
13373        assert_true (ai_move (ai, 0, 6));
13374        assert_true (game.pass ());
13375        assert_true (ai_move (ai, 0, 0));
13376        assert_true (game.pass ());
13377        assert_true (ai_move (ai, 6, 7));
13378    }
13379
13380    private static inline void test_complete_reversi_game_161 ()
13381    {
13382                                  /* 0 1 2 3 4 5 6 7 */
13383        string [] board = {/* 0 */ " . . . . . . . .",
13384                           /* 1 */ " . . . . . . . .",
13385                           /* 2 */ " . . . D . L . .",
13386                           /* 3 */ " . . . D L . . .",
13387                           /* 4 */ " . . D L L . . .",
13388                           /* 5 */ " . D . . . . . .",
13389                           /* 6 */ " . . . . . . . .",
13390                           /* 7 */ " . . . . . . . ."};
13391
13392        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13393        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13394
13395        assert_true (ai_move (ai, 5, 5));
13396        assert_true (ai_move (ai, 1, 4));
13397        assert_true (ai_move (ai, 5, 4));
13398        assert_true (ai_move (ai, 4, 2));
13399        assert_true (ai_move (ai, 6, 2));
13400        assert_true (ai_move (ai, 3, 1));
13401        assert_true (ai_move (ai, 2, 1));
13402        assert_true (ai_move (ai, 5, 1));
13403        assert_true (ai_move (ai, 4, 1));
13404        assert_true (ai_move (ai, 7, 3));
13405        assert_true (ai_move (ai, 7, 2));
13406        assert_true (ai_move (ai, 7, 1));
13407        assert_true (ai_move (ai, 2, 2));
13408        assert_true (ai_move (ai, 5, 3));
13409        assert_true (ai_move (ai, 6, 4));
13410        assert_true (ai_move (ai, 1, 2));
13411        assert_true (ai_move (ai, 5, 0));
13412        assert_true (ai_move (ai, 6, 5));
13413        assert_true (ai_move (ai, 2, 3));
13414        assert_true (ai_move (ai, 5, 6));
13415        assert_true (ai_move (ai, 4, 6));
13416        assert_true (ai_move (ai, 7, 4));
13417        assert_true (ai_move (ai, 2, 5));
13418        assert_true (ai_move (ai, 3, 0));
13419        assert_true (ai_move (ai, 2, 0));
13420        assert_true (ai_move (ai, 4, 0));
13421        assert_true (ai_move (ai, 5, 7));
13422        assert_true (ai_move (ai, 6, 3));
13423        assert_true (ai_move (ai, 0, 2));
13424        assert_true (ai_move (ai, 1, 3));
13425        assert_true (ai_move (ai, 1, 1));
13426        assert_true (ai_move (ai, 0, 6));
13427        assert_true (ai_move (ai, 7, 5));
13428        assert_true (ai_move (ai, 7, 6));
13429        assert_true (ai_move (ai, 0, 3));
13430        assert_true (ai_move (ai, 4, 5));
13431        assert_true (ai_move (ai, 3, 5));
13432        assert_true (ai_move (ai, 3, 6));
13433        assert_true (ai_move (ai, 0, 5));
13434        assert_true (ai_move (ai, 1, 6));
13435        assert_true (ai_move (ai, 2, 6));
13436        assert_true (ai_move (ai, 2, 7));
13437        assert_true (ai_move (ai, 4, 7));
13438        assert_true (ai_move (ai, 3, 7));
13439        assert_true (ai_move (ai, 6, 6));
13440        assert_true (ai_move (ai, 0, 4));
13441        assert_true (ai_move (ai, 0, 7));
13442        assert_true (ai_move (ai, 1, 7));
13443        assert_true (ai_move (ai, 6, 1));
13444        assert_true (ai_move (ai, 7, 0));
13445        assert_true (ai_move (ai, 6, 0));
13446        assert_true (ai_move (ai, 7, 7));
13447        assert_true (ai_move (ai, 6, 7));
13448        assert_true (ai_move (ai, 0, 0));
13449        assert_true (ai_move (ai, 0, 1));
13450        assert_true (ai_move (ai, 1, 0));
13451    }
13452
13453    private static inline void test_complete_reversi_game_162 ()
13454    {
13455                                  /* 0 1 2 3 4 5 6 7 */
13456        string [] board = {/* 0 */ " . . . . . . . .",
13457                           /* 1 */ " . . . . . . . .",
13458                           /* 2 */ " . . . D L . . .",
13459                           /* 3 */ " . . . D L . . .",
13460                           /* 4 */ " . . D L L . . .",
13461                           /* 5 */ " . D . . . . . .",
13462                           /* 6 */ " . . . . . . . .",
13463                           /* 7 */ " . . . . . . . ."};
13464
13465        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13466        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13467
13468        assert_true (ai_move (ai, 5, 2));
13469        assert_true (ai_move (ai, 1, 4));
13470        assert_true (ai_move (ai, 5, 4));
13471        assert_true (ai_move (ai, 6, 4));
13472        assert_true (ai_move (ai, 6, 5));
13473        assert_true (ai_move (ai, 2, 2));
13474        assert_true (ai_move (ai, 1, 2));
13475        assert_true (ai_move (ai, 5, 1));
13476        assert_true (ai_move (ai, 4, 1));
13477        assert_true (ai_move (ai, 5, 3));
13478        assert_true (ai_move (ai, 5, 0));
13479        assert_true (ai_move (ai, 6, 3));
13480        assert_true (ai_move (ai, 7, 5));
13481        assert_true (ai_move (ai, 6, 2));
13482        assert_true (ai_move (ai, 7, 3));
13483        assert_true (ai_move (ai, 7, 4));
13484        assert_true (ai_move (ai, 2, 3));
13485        assert_true (ai_move (ai, 3, 1));
13486        assert_true (ai_move (ai, 2, 1));
13487        assert_true (ai_move (ai, 1, 3));
13488        assert_true (ai_move (ai, 0, 3));
13489        assert_true (ai_move (ai, 5, 6));
13490        assert_true (ai_move (ai, 0, 5));
13491        assert_true (ai_move (ai, 0, 4));
13492        assert_true (ai_move (ai, 5, 5));
13493        assert_true (ai_move (ai, 2, 6));
13494        assert_true (ai_move (ai, 5, 7));
13495        assert_true (ai_move (ai, 2, 0));
13496        assert_true (ai_move (ai, 4, 5));
13497        assert_true (ai_move (ai, 4, 0));
13498        assert_true (ai_move (ai, 2, 5));
13499        assert_true (ai_move (ai, 4, 7));
13500        assert_true (ai_move (ai, 2, 7));
13501        assert_true (ai_move (ai, 3, 7));
13502        assert_true (ai_move (ai, 1, 6));
13503        assert_true (ai_move (ai, 3, 5));
13504        assert_true (ai_move (ai, 4, 6));
13505        assert_true (ai_move (ai, 3, 6));
13506        assert_true (ai_move (ai, 1, 7));
13507        assert_true (ai_move (ai, 7, 2));
13508        assert_true (ai_move (ai, 7, 1));
13509        assert_true (ai_move (ai, 0, 2));
13510        assert_true (ai_move (ai, 0, 1));
13511        assert_true (ai_move (ai, 6, 6));
13512        assert_true (ai_move (ai, 6, 1));
13513        assert_true (ai_move (ai, 1, 1));
13514        assert_true (ai_move (ai, 3, 0));
13515        assert_true (ai_move (ai, 0, 7));
13516        assert_true (ai_move (ai, 1, 0));
13517        assert_true (ai_move (ai, 0, 0));
13518        assert_true (ai_move (ai, 0, 6));
13519        assert_true (ai_move (ai, 6, 7));
13520        assert_true (ai_move (ai, 7, 6));
13521        assert_true (ai_move (ai, 7, 7));
13522        assert_true (game.pass ());
13523        assert_true (ai_move (ai, 7, 0));
13524        assert_true (ai_move (ai, 6, 0));
13525    }
13526
13527    private static inline void test_complete_reversi_game_163 ()
13528    {
13529                                  /* 0 1 2 3 4 5 6 7 */
13530        string [] board = {/* 0 */ " . . . . . . . .",
13531                           /* 1 */ " . . . L . . . .",
13532                           /* 2 */ " . . . L . . . .",
13533                           /* 3 */ " . . . L D . . .",
13534                           /* 4 */ " . . D L L . . .",
13535                           /* 5 */ " . D . . . . . .",
13536                           /* 6 */ " . . . . . . . .",
13537                           /* 7 */ " . . . . . . . ."};
13538
13539        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13540        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13541
13542        assert_true (ai_move (ai, 2, 1));
13543        assert_true (ai_move (ai, 1, 4));
13544        assert_true (ai_move (ai, 3, 0));
13545        assert_true (ai_move (ai, 5, 2));
13546        assert_true (ai_move (ai, 5, 4));
13547        assert_true (ai_move (ai, 6, 4));
13548        assert_true (ai_move (ai, 6, 5));
13549        assert_true (ai_move (ai, 5, 3));
13550        assert_true (ai_move (ai, 5, 1));
13551        assert_true (ai_move (ai, 4, 2));
13552        assert_true (ai_move (ai, 7, 5));
13553        assert_true (ai_move (ai, 4, 1));
13554        assert_true (ai_move (ai, 5, 0));
13555        assert_true (ai_move (ai, 4, 0));
13556        assert_true (ai_move (ai, 1, 3));
13557        assert_true (ai_move (ai, 0, 4));
13558        assert_true (ai_move (ai, 2, 3));
13559        assert_true (ai_move (ai, 2, 6));
13560        assert_true (ai_move (ai, 0, 5));
13561        assert_true (ai_move (ai, 0, 6));
13562        assert_true (ai_move (ai, 5, 5));
13563        assert_true (ai_move (ai, 6, 3));
13564        assert_true (ai_move (ai, 6, 2));
13565        assert_true (ai_move (ai, 4, 5));
13566        assert_true (ai_move (ai, 3, 6));
13567        assert_true (ai_move (ai, 5, 6));
13568        assert_true (ai_move (ai, 4, 7));
13569        assert_true (ai_move (ai, 2, 7));
13570        assert_true (ai_move (ai, 3, 5));
13571        assert_true (ai_move (ai, 2, 5));
13572        assert_true (ai_move (ai, 3, 7));
13573        assert_true (ai_move (ai, 5, 7));
13574        assert_true (ai_move (ai, 1, 6));
13575        assert_true (ai_move (ai, 0, 3));
13576        assert_true (ai_move (ai, 4, 6));
13577        assert_true (ai_move (ai, 0, 2));
13578        assert_true (ai_move (ai, 1, 2));
13579        assert_true (ai_move (ai, 7, 2));
13580        assert_true (ai_move (ai, 7, 4));
13581        assert_true (ai_move (ai, 1, 7));
13582        assert_true (ai_move (ai, 7, 3));
13583        assert_true (ai_move (ai, 7, 6));
13584        assert_true (ai_move (ai, 6, 6));
13585        assert_true (ai_move (ai, 7, 1));
13586        assert_true (ai_move (ai, 6, 1));
13587        assert_true (ai_move (ai, 0, 1));
13588        assert_true (ai_move (ai, 1, 1));
13589        assert_true (ai_move (ai, 6, 7));
13590        assert_true (game.pass ());
13591        assert_true (ai_move (ai, 0, 7));
13592        assert_true (game.pass ());
13593        assert_true (ai_move (ai, 7, 7));
13594        assert_true (game.pass ());
13595        assert_true (ai_move (ai, 7, 0));
13596        assert_true (ai_move (ai, 6, 0));
13597        assert_true (ai_move (ai, 2, 0));
13598        assert_true (ai_move (ai, 1, 0));
13599        assert_true (ai_move (ai, 0, 0));
13600        assert_true (game.pass ());
13601        assert_true (ai_move (ai, 2, 2));
13602    }
13603
13604    private static inline void test_complete_reversi_game_164 ()
13605    {
13606                                  /* 0 1 2 3 4 5 6 7 */
13607        string [] board = {/* 0 */ " . . . . . . . .",
13608                           /* 1 */ " . . . . . . . .",
13609                           /* 2 */ " . . L D . . . .",
13610                           /* 3 */ " . . . L D . . .",
13611                           /* 4 */ " . . D L L . . .",
13612                           /* 5 */ " . D . . . . . .",
13613                           /* 6 */ " . . . . . . . .",
13614                           /* 7 */ " . . . . . . . ."};
13615
13616        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13617        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13618
13619        assert_true (ai_move (ai, 1, 2));
13620        assert_true (ai_move (ai, 1, 4));
13621        assert_true (ai_move (ai, 4, 2));
13622        assert_true (ai_move (ai, 5, 2));
13623        assert_true (ai_move (ai, 6, 2));
13624        assert_true (ai_move (ai, 2, 1));
13625        assert_true (ai_move (ai, 3, 1));
13626        assert_true (ai_move (ai, 0, 3));
13627        assert_true (ai_move (ai, 2, 0));
13628        assert_true (ai_move (ai, 4, 1));
13629        assert_true (ai_move (ai, 3, 0));
13630        assert_true (ai_move (ai, 7, 2));
13631        assert_true (ai_move (ai, 6, 3));
13632        assert_true (ai_move (ai, 5, 4));
13633        assert_true (ai_move (ai, 5, 1));
13634        assert_true (ai_move (ai, 2, 3));
13635        assert_true (ai_move (ai, 0, 5));
13636        assert_true (ai_move (ai, 1, 3));
13637        assert_true (ai_move (ai, 0, 4));
13638        assert_true (ai_move (ai, 2, 5));
13639        assert_true (ai_move (ai, 0, 2));
13640        assert_true (ai_move (ai, 5, 0));
13641        assert_true (ai_move (ai, 2, 6));
13642        assert_true (ai_move (ai, 5, 3));
13643        assert_true (ai_move (ai, 6, 5));
13644        assert_true (ai_move (ai, 3, 6));
13645        assert_true (ai_move (ai, 6, 4));
13646        assert_true (ai_move (ai, 5, 5));
13647        assert_true (ai_move (ai, 7, 3));
13648        assert_true (ai_move (ai, 7, 5));
13649        assert_true (ai_move (ai, 5, 6));
13650        assert_true (ai_move (ai, 5, 7));
13651        assert_true (ai_move (ai, 7, 1));
13652        assert_true (ai_move (ai, 2, 7));
13653        assert_true (ai_move (ai, 4, 6));
13654        assert_true (ai_move (ai, 4, 5));
13655        assert_true (ai_move (ai, 4, 7));
13656        assert_true (ai_move (ai, 3, 7));
13657        assert_true (ai_move (ai, 3, 5));
13658        assert_true (ai_move (ai, 1, 6));
13659        assert_true (ai_move (ai, 6, 7));
13660        assert_true (ai_move (ai, 7, 7));
13661        assert_true (ai_move (ai, 0, 7));
13662        assert_true (ai_move (ai, 6, 6));
13663        assert_true (ai_move (ai, 1, 7));
13664        assert_true (ai_move (ai, 0, 6));
13665        assert_true (ai_move (ai, 4, 0));
13666        assert_true (ai_move (ai, 1, 0));
13667        assert_true (ai_move (ai, 6, 1));
13668        assert_true (ai_move (ai, 7, 0));
13669        assert_true (ai_move (ai, 6, 0));
13670        assert_true (ai_move (ai, 7, 4));
13671        assert_true (ai_move (ai, 0, 0));
13672        assert_true (ai_move (ai, 0, 1));
13673        assert_true (ai_move (ai, 1, 1));
13674        assert_true (game.pass ());
13675        assert_true (ai_move (ai, 7, 6));
13676    }
13677
13678    private static inline void test_complete_reversi_game_165 ()
13679    {
13680                                  /* 0 1 2 3 4 5 6 7 */
13681        string [] board = {/* 0 */ " . . . . . . . .",
13682                           /* 1 */ " . . . . . . . .",
13683                           /* 2 */ " . . . D . . . .",
13684                           /* 3 */ " . . . D D . . .",
13685                           /* 4 */ " . L L L L . . .",
13686                           /* 5 */ " . D . . . . . .",
13687                           /* 6 */ " . . . . . . . .",
13688                           /* 7 */ " . . . . . . . ."};
13689
13690        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13691        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13692
13693        assert_true (ai_move (ai, 5, 5));
13694        assert_true (ai_move (ai, 5, 2));
13695        assert_true (ai_move (ai, 5, 4));
13696        assert_true (ai_move (ai, 4, 2));
13697        assert_true (ai_move (ai, 6, 2));
13698        assert_true (ai_move (ai, 3, 1));
13699        assert_true (ai_move (ai, 2, 1));
13700        assert_true (ai_move (ai, 5, 1));
13701        assert_true (ai_move (ai, 4, 1));
13702        assert_true (ai_move (ai, 7, 3));
13703        assert_true (ai_move (ai, 7, 2));
13704        assert_true (ai_move (ai, 7, 1));
13705        assert_true (ai_move (ai, 2, 2));
13706        assert_true (ai_move (ai, 5, 3));
13707        assert_true (ai_move (ai, 6, 4));
13708        assert_true (ai_move (ai, 1, 2));
13709        assert_true (ai_move (ai, 5, 0));
13710        assert_true (ai_move (ai, 6, 5));
13711        assert_true (ai_move (ai, 2, 3));
13712        assert_true (ai_move (ai, 5, 6));
13713        assert_true (ai_move (ai, 4, 6));
13714        assert_true (ai_move (ai, 7, 4));
13715        assert_true (ai_move (ai, 2, 5));
13716        assert_true (ai_move (ai, 3, 0));
13717        assert_true (ai_move (ai, 2, 0));
13718        assert_true (ai_move (ai, 4, 0));
13719        assert_true (ai_move (ai, 5, 7));
13720        assert_true (ai_move (ai, 6, 3));
13721        assert_true (ai_move (ai, 0, 2));
13722        assert_true (ai_move (ai, 1, 3));
13723        assert_true (ai_move (ai, 1, 1));
13724        assert_true (ai_move (ai, 0, 6));
13725        assert_true (ai_move (ai, 7, 5));
13726        assert_true (ai_move (ai, 7, 6));
13727        assert_true (ai_move (ai, 0, 3));
13728        assert_true (ai_move (ai, 4, 5));
13729        assert_true (ai_move (ai, 3, 5));
13730        assert_true (ai_move (ai, 3, 6));
13731        assert_true (ai_move (ai, 0, 5));
13732        assert_true (ai_move (ai, 1, 6));
13733        assert_true (ai_move (ai, 2, 6));
13734        assert_true (ai_move (ai, 2, 7));
13735        assert_true (ai_move (ai, 4, 7));
13736        assert_true (ai_move (ai, 3, 7));
13737        assert_true (ai_move (ai, 6, 6));
13738        assert_true (ai_move (ai, 0, 4));
13739        assert_true (ai_move (ai, 0, 7));
13740        assert_true (ai_move (ai, 1, 7));
13741        assert_true (ai_move (ai, 6, 1));
13742        assert_true (ai_move (ai, 7, 0));
13743        assert_true (ai_move (ai, 6, 0));
13744        assert_true (ai_move (ai, 7, 7));
13745        assert_true (ai_move (ai, 6, 7));
13746        assert_true (ai_move (ai, 0, 0));
13747        assert_true (ai_move (ai, 0, 1));
13748        assert_true (ai_move (ai, 1, 0));
13749    }
13750
13751    private static inline void test_complete_reversi_game_166 ()
13752    {
13753                                  /* 0 1 2 3 4 5 6 7 */
13754        string [] board = {/* 0 */ " . . . . . . . .",
13755                           /* 1 */ " . . . . . . . .",
13756                           /* 2 */ " . . L D . . . .",
13757                           /* 3 */ " . . . L D . . .",
13758                           /* 4 */ " . . . D L D . .",
13759                           /* 5 */ " . . . . . L . .",
13760                           /* 6 */ " . . . . . . . .",
13761                           /* 7 */ " . . . . . . . ."};
13762
13763        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13764        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13765
13766        assert_true (ai_move (ai, 5, 6));
13767        assert_true (ai_move (ai, 3, 1));
13768        assert_true (ai_move (ai, 4, 5));
13769        assert_true (ai_move (ai, 5, 3));
13770        assert_true (ai_move (ai, 5, 2));
13771        assert_true (ai_move (ai, 6, 5));
13772        assert_true (ai_move (ai, 6, 3));
13773        assert_true (ai_move (ai, 4, 7));
13774        assert_true (ai_move (ai, 5, 7));
13775        assert_true (ai_move (ai, 6, 7));
13776        assert_true (ai_move (ai, 7, 4));
13777        assert_true (ai_move (ai, 5, 1));
13778        assert_true (ai_move (ai, 6, 4));
13779        assert_true (ai_move (ai, 7, 5));
13780        assert_true (ai_move (ai, 4, 1));
13781        assert_true (ai_move (ai, 7, 3));
13782        assert_true (ai_move (ai, 5, 0));
13783        assert_true (ai_move (ai, 3, 6));
13784        assert_true (ai_move (ai, 4, 6));
13785        assert_true (ai_move (ai, 3, 7));
13786        assert_true (ai_move (ai, 7, 2));
13787        assert_true (ai_move (ai, 7, 1));
13788        assert_true (ai_move (ai, 6, 2));
13789        assert_true (ai_move (ai, 4, 2));
13790        assert_true (ai_move (ai, 2, 4));
13791        assert_true (ai_move (ai, 4, 0));
13792        assert_true (ai_move (ai, 6, 1));
13793        assert_true (ai_move (ai, 1, 5));
13794        assert_true (ai_move (ai, 1, 4));
13795        assert_true (ai_move (ai, 1, 3));
13796        assert_true (ai_move (ai, 0, 2));
13797        assert_true (ai_move (ai, 1, 2));
13798        assert_true (ai_move (ai, 0, 4));
13799        assert_true (ai_move (ai, 2, 3));
13800        assert_true (ai_move (ai, 2, 5));
13801        assert_true (ai_move (ai, 2, 6));
13802        assert_true (ai_move (ai, 0, 3));
13803        assert_true (ai_move (ai, 3, 5));
13804        assert_true (ai_move (ai, 2, 7));
13805        assert_true (ai_move (ai, 1, 7));
13806        assert_true (ai_move (ai, 0, 5));
13807        assert_true (ai_move (ai, 7, 0));
13808        assert_true (ai_move (ai, 3, 0));
13809        assert_true (ai_move (ai, 2, 1));
13810        assert_true (ai_move (ai, 0, 1));
13811        assert_true (ai_move (ai, 1, 6));
13812        assert_true (ai_move (ai, 2, 0));
13813        assert_true (ai_move (ai, 0, 6));
13814        assert_true (ai_move (ai, 0, 7));
13815        assert_true (ai_move (ai, 1, 1));
13816        assert_true (ai_move (ai, 7, 7));
13817        assert_true (game.pass ());
13818        assert_true (ai_move (ai, 7, 6));
13819        assert_true (ai_move (ai, 6, 6));
13820        assert_true (ai_move (ai, 0, 0));
13821        assert_true (ai_move (ai, 1, 0));
13822        assert_true (ai_move (ai, 6, 0));
13823    }
13824
13825    private static inline void test_complete_reversi_game_167 ()
13826    {
13827                                  /* 0 1 2 3 4 5 6 7 */
13828        string [] board = {/* 0 */ " . . . . . . . .",
13829                           /* 1 */ " . . . . . . . .",
13830                           /* 2 */ " . . L D . . . .",
13831                           /* 3 */ " . . . L L L . .",
13832                           /* 4 */ " . . . D D D . .",
13833                           /* 5 */ " . . . . . . . .",
13834                           /* 6 */ " . . . . . . . .",
13835                           /* 7 */ " . . . . . . . ."};
13836
13837        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13838        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13839
13840        assert_true (ai_move (ai, 1, 2));
13841        assert_true (ai_move (ai, 6, 5));
13842        assert_true (ai_move (ai, 6, 4));
13843        assert_true (ai_move (ai, 3, 1));
13844        assert_true (ai_move (ai, 6, 2));
13845        assert_true (ai_move (ai, 1, 3));
13846        assert_true (ai_move (ai, 5, 2));
13847        assert_true (ai_move (ai, 0, 2));
13848        assert_true (ai_move (ai, 2, 1));
13849        assert_true (ai_move (ai, 3, 0));
13850        assert_true (ai_move (ai, 2, 3));
13851        assert_true (ai_move (ai, 2, 4));
13852        assert_true (ai_move (ai, 1, 5));
13853        assert_true (ai_move (ai, 4, 1));
13854        assert_true (ai_move (ai, 2, 0));
13855        assert_true (ai_move (ai, 1, 4));
13856        assert_true (ai_move (ai, 4, 2));
13857        assert_true (ai_move (ai, 7, 2));
13858        assert_true (ai_move (ai, 4, 0));
13859        assert_true (ai_move (ai, 5, 0));
13860        assert_true (ai_move (ai, 6, 0));
13861        assert_true (ai_move (ai, 5, 5));
13862        assert_true (ai_move (ai, 5, 1));
13863        assert_true (ai_move (ai, 6, 3));
13864        assert_true (ai_move (ai, 5, 6));
13865        assert_true (ai_move (ai, 4, 6));
13866        assert_true (ai_move (ai, 0, 5));
13867        assert_true (ai_move (ai, 2, 5));
13868        assert_true (ai_move (ai, 2, 6));
13869        assert_true (ai_move (ai, 4, 5));
13870        assert_true (ai_move (ai, 0, 4));
13871        assert_true (ai_move (ai, 3, 5));
13872        assert_true (ai_move (ai, 0, 3));
13873        assert_true (ai_move (ai, 0, 6));
13874        assert_true (ai_move (ai, 5, 7));
13875        assert_true (ai_move (ai, 3, 6));
13876        assert_true (ai_move (ai, 3, 7));
13877        assert_true (ai_move (ai, 0, 1));
13878        assert_true (ai_move (ai, 7, 5));
13879        assert_true (ai_move (ai, 4, 7));
13880        assert_true (ai_move (ai, 7, 4));
13881        assert_true (ai_move (ai, 2, 7));
13882        assert_true (ai_move (ai, 1, 7));
13883        assert_true (ai_move (ai, 7, 3));
13884        assert_true (ai_move (ai, 7, 1));
13885        assert_true (ai_move (ai, 6, 1));
13886        assert_true (ai_move (ai, 6, 6));
13887        assert_true (ai_move (ai, 1, 6));
13888        assert_true (ai_move (ai, 1, 1));
13889        assert_true (ai_move (ai, 0, 0));
13890        assert_true (ai_move (ai, 1, 0));
13891        assert_true (ai_move (ai, 7, 0));
13892        assert_true (game.pass ());
13893        assert_true (ai_move (ai, 7, 7));
13894        assert_true (ai_move (ai, 7, 6));
13895        assert_true (ai_move (ai, 6, 7));
13896        assert_true (game.pass ());
13897        assert_true (ai_move (ai, 0, 7));
13898    }
13899
13900    private static inline void test_complete_reversi_game_168 ()
13901    {
13902                                  /* 0 1 2 3 4 5 6 7 */
13903        string [] board = {/* 0 */ " . . . . . . . .",
13904                           /* 1 */ " . . . . . . . .",
13905                           /* 2 */ " . . L L L . . .",
13906                           /* 3 */ " . . . L D . . .",
13907                           /* 4 */ " . . . D D D . .",
13908                           /* 5 */ " . . . . . . . .",
13909                           /* 6 */ " . . . . . . . .",
13910                           /* 7 */ " . . . . . . . ."};
13911
13912        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13913        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13914
13915        assert_true (ai_move (ai, 2, 1));
13916        assert_true (ai_move (ai, 3, 1));
13917        assert_true (ai_move (ai, 2, 3));
13918        assert_true (ai_move (ai, 1, 3));
13919        assert_true (ai_move (ai, 3, 0));
13920        assert_true (ai_move (ai, 4, 0));
13921        assert_true (ai_move (ai, 5, 0));
13922        assert_true (ai_move (ai, 2, 0));
13923        assert_true (ai_move (ai, 1, 0));
13924        assert_true (ai_move (ai, 2, 4));
13925        assert_true (ai_move (ai, 1, 2));
13926        assert_true (ai_move (ai, 0, 2));
13927        assert_true (ai_move (ai, 2, 5));
13928        assert_true (ai_move (ai, 1, 4));
13929        assert_true (ai_move (ai, 5, 3));
13930        assert_true (ai_move (ai, 1, 5));
13931        assert_true (ai_move (ai, 0, 5));
13932        assert_true (ai_move (ai, 2, 6));
13933        assert_true (ai_move (ai, 4, 1));
13934        assert_true (ai_move (ai, 0, 3));
13935        assert_true (ai_move (ai, 3, 7));
13936        assert_true (ai_move (ai, 4, 5));
13937        assert_true (ai_move (ai, 4, 6));
13938        assert_true (ai_move (ai, 2, 7));
13939        assert_true (ai_move (ai, 0, 4));
13940        assert_true (ai_move (ai, 0, 6));
13941        assert_true (ai_move (ai, 3, 5));
13942        assert_true (ai_move (ai, 4, 7));
13943        assert_true (ai_move (ai, 3, 6));
13944        assert_true (ai_move (ai, 5, 7));
13945        assert_true (ai_move (ai, 5, 6));
13946        assert_true (ai_move (ai, 5, 2));
13947        assert_true (ai_move (ai, 5, 1));
13948        assert_true (ai_move (ai, 6, 2));
13949        assert_true (ai_move (ai, 6, 4));
13950        assert_true (ai_move (ai, 1, 6));
13951        assert_true (ai_move (ai, 6, 3));
13952        assert_true (ai_move (ai, 7, 3));
13953        assert_true (ai_move (ai, 0, 7));
13954        assert_true (ai_move (ai, 1, 7));
13955        assert_true (ai_move (ai, 0, 1));
13956        assert_true (ai_move (ai, 6, 1));
13957        assert_true (ai_move (ai, 6, 7));
13958        assert_true (ai_move (ai, 6, 0));
13959        assert_true (ai_move (ai, 7, 0));
13960        assert_true (ai_move (ai, 7, 1));
13961        assert_true (ai_move (ai, 7, 2));
13962        assert_true (ai_move (ai, 7, 5));
13963        assert_true (ai_move (ai, 6, 5));
13964        assert_true (ai_move (ai, 5, 5));
13965        assert_true (ai_move (ai, 7, 4));
13966        assert_true (ai_move (ai, 7, 6));
13967        assert_true (ai_move (ai, 7, 7));
13968        assert_true (ai_move (ai, 6, 6));
13969        assert_true (ai_move (ai, 1, 1));
13970        assert_true (ai_move (ai, 0, 0));
13971    }
13972
13973    private static inline void test_complete_reversi_game_169 ()
13974    {
13975                                  /* 0 1 2 3 4 5 6 7 */
13976        string [] board = {/* 0 */ " . . . . . . . .",
13977                           /* 1 */ " . . . . . . . .",
13978                           /* 2 */ " . . L D . . . .",
13979                           /* 3 */ " . . . L D . . .",
13980                           /* 4 */ " . . . L D D . .",
13981                           /* 5 */ " . . . L . . . .",
13982                           /* 6 */ " . . . . . . . .",
13983                           /* 7 */ " . . . . . . . ."};
13984
13985        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
13986        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
13987
13988        assert_true (ai_move (ai, 1, 2));
13989        assert_true (ai_move (ai, 5, 2));
13990        assert_true (ai_move (ai, 2, 6));
13991        assert_true (ai_move (ai, 3, 6));
13992        assert_true (ai_move (ai, 4, 6));
13993        assert_true (ai_move (ai, 6, 5));
13994        assert_true (ai_move (ai, 6, 4));
13995        assert_true (ai_move (ai, 3, 1));
13996        assert_true (ai_move (ai, 4, 0));
13997        assert_true (ai_move (ai, 5, 7));
13998        assert_true (ai_move (ai, 2, 1));
13999        assert_true (ai_move (ai, 3, 7));
14000        assert_true (ai_move (ai, 2, 3));
14001        assert_true (ai_move (ai, 1, 5));
14002        assert_true (ai_move (ai, 2, 4));
14003        assert_true (ai_move (ai, 6, 3));
14004        assert_true (ai_move (ai, 7, 2));
14005        assert_true (ai_move (ai, 7, 4));
14006        assert_true (ai_move (ai, 1, 7));
14007        assert_true (ai_move (ai, 1, 6));
14008        assert_true (ai_move (ai, 0, 6));
14009        assert_true (ai_move (ai, 0, 4));
14010        assert_true (ai_move (ai, 7, 6));
14011        assert_true (ai_move (ai, 5, 6));
14012        assert_true (ai_move (ai, 6, 1));
14013        assert_true (ai_move (ai, 4, 1));
14014        assert_true (ai_move (ai, 4, 2));
14015        assert_true (ai_move (ai, 0, 2));
14016        assert_true (ai_move (ai, 5, 3));
14017        assert_true (ai_move (ai, 5, 5));
14018        assert_true (ai_move (ai, 1, 3));
14019        assert_true (ai_move (ai, 0, 3));
14020        assert_true (ai_move (ai, 7, 3));
14021        assert_true (ai_move (ai, 1, 1));
14022        assert_true (ai_move (ai, 6, 2));
14023        assert_true (ai_move (ai, 7, 1));
14024        assert_true (ai_move (ai, 4, 5));
14025        assert_true (ai_move (ai, 2, 0));
14026        assert_true (ai_move (ai, 4, 7));
14027        assert_true (ai_move (ai, 3, 0));
14028        assert_true (ai_move (ai, 5, 1));
14029        assert_true (ai_move (ai, 5, 0));
14030        assert_true (ai_move (ai, 2, 5));
14031        assert_true (ai_move (ai, 2, 7));
14032        assert_true (ai_move (ai, 0, 7));
14033        assert_true (ai_move (ai, 1, 4));
14034        assert_true (ai_move (ai, 0, 5));
14035        assert_true (game.pass ());
14036        assert_true (ai_move (ai, 0, 1));
14037        assert_true (game.pass ());
14038        assert_true (ai_move (ai, 0, 0));
14039        assert_true (ai_move (ai, 1, 0));
14040        assert_true (ai_move (ai, 6, 0));
14041        assert_true (game.pass ());
14042        assert_true (ai_move (ai, 7, 0));
14043        assert_true (game.pass ());
14044        assert_true (ai_move (ai, 7, 5));
14045        assert_true (ai_move (ai, 6, 6));
14046        assert_true (ai_move (ai, 6, 7));
14047        assert_true (ai_move (ai, 7, 7));
14048    }
14049
14050    private static inline void test_complete_reversi_game_170 ()
14051    {
14052                                  /* 0 1 2 3 4 5 6 7 */
14053        string [] board = {/* 0 */ " . . . . . . . .",
14054                           /* 1 */ " . . . L . . . .",
14055                           /* 2 */ " . . L L . . . .",
14056                           /* 3 */ " . . . L D . . .",
14057                           /* 4 */ " . . . D D D . .",
14058                           /* 5 */ " . . . . . . . .",
14059                           /* 6 */ " . . . . . . . .",
14060                           /* 7 */ " . . . . . . . ."};
14061
14062        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14063        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14064
14065        assert_true (ai_move (ai, 2, 1));
14066        assert_true (ai_move (ai, 4, 2));
14067        assert_true (ai_move (ai, 2, 3));
14068        assert_true (ai_move (ai, 1, 3));
14069        assert_true (ai_move (ai, 3, 0));
14070        assert_true (ai_move (ai, 4, 0));
14071        assert_true (ai_move (ai, 5, 0));
14072        assert_true (ai_move (ai, 2, 0));
14073        assert_true (ai_move (ai, 1, 0));
14074        assert_true (ai_move (ai, 2, 4));
14075        assert_true (ai_move (ai, 1, 2));
14076        assert_true (ai_move (ai, 0, 2));
14077        assert_true (ai_move (ai, 2, 5));
14078        assert_true (ai_move (ai, 1, 4));
14079        assert_true (ai_move (ai, 5, 3));
14080        assert_true (ai_move (ai, 1, 5));
14081        assert_true (ai_move (ai, 0, 5));
14082        assert_true (ai_move (ai, 2, 6));
14083        assert_true (ai_move (ai, 4, 1));
14084        assert_true (ai_move (ai, 0, 3));
14085        assert_true (ai_move (ai, 3, 7));
14086        assert_true (ai_move (ai, 4, 5));
14087        assert_true (ai_move (ai, 4, 6));
14088        assert_true (ai_move (ai, 2, 7));
14089        assert_true (ai_move (ai, 0, 4));
14090        assert_true (ai_move (ai, 0, 6));
14091        assert_true (ai_move (ai, 3, 5));
14092        assert_true (ai_move (ai, 4, 7));
14093        assert_true (ai_move (ai, 3, 6));
14094        assert_true (ai_move (ai, 5, 7));
14095        assert_true (ai_move (ai, 5, 6));
14096        assert_true (ai_move (ai, 5, 2));
14097        assert_true (ai_move (ai, 5, 1));
14098        assert_true (ai_move (ai, 6, 2));
14099        assert_true (ai_move (ai, 6, 4));
14100        assert_true (ai_move (ai, 1, 6));
14101        assert_true (ai_move (ai, 6, 3));
14102        assert_true (ai_move (ai, 7, 3));
14103        assert_true (ai_move (ai, 0, 7));
14104        assert_true (ai_move (ai, 1, 7));
14105        assert_true (ai_move (ai, 0, 1));
14106        assert_true (ai_move (ai, 6, 1));
14107        assert_true (ai_move (ai, 6, 7));
14108        assert_true (ai_move (ai, 6, 0));
14109        assert_true (ai_move (ai, 7, 0));
14110        assert_true (ai_move (ai, 7, 1));
14111        assert_true (ai_move (ai, 7, 2));
14112        assert_true (ai_move (ai, 7, 5));
14113        assert_true (ai_move (ai, 6, 5));
14114        assert_true (ai_move (ai, 5, 5));
14115        assert_true (ai_move (ai, 7, 4));
14116        assert_true (ai_move (ai, 7, 6));
14117        assert_true (ai_move (ai, 7, 7));
14118        assert_true (ai_move (ai, 6, 6));
14119        assert_true (ai_move (ai, 1, 1));
14120        assert_true (ai_move (ai, 0, 0));
14121    }
14122
14123    private static inline void test_complete_reversi_game_171 ()
14124    {
14125                                  /* 0 1 2 3 4 5 6 7 */
14126        string [] board = {/* 0 */ " . . . . . . . .",
14127                           /* 1 */ " . . . . . . . .",
14128                           /* 2 */ " . . L D . . . .",
14129                           /* 3 */ " . . . L D . . .",
14130                           /* 4 */ " . . . D L . . .",
14131                           /* 5 */ " . . . . D L . .",
14132                           /* 6 */ " . . . . . . . .",
14133                           /* 7 */ " . . . . . . . ."};
14134
14135        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14136        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14137
14138        assert_true (ai_move (ai, 6, 5));
14139        assert_true (ai_move (ai, 3, 1));
14140        assert_true (ai_move (ai, 5, 4));
14141        assert_true (ai_move (ai, 5, 3));
14142        assert_true (ai_move (ai, 6, 2));
14143        assert_true (ai_move (ai, 6, 3));
14144        assert_true (ai_move (ai, 7, 2));
14145        assert_true (ai_move (ai, 5, 6));
14146        assert_true (ai_move (ai, 6, 4));
14147        assert_true (ai_move (ai, 7, 4));
14148        assert_true (ai_move (ai, 4, 6));
14149        assert_true (ai_move (ai, 5, 2));
14150        assert_true (ai_move (ai, 7, 5));
14151        assert_true (ai_move (ai, 7, 6));
14152        assert_true (ai_move (ai, 5, 1));
14153        assert_true (ai_move (ai, 5, 0));
14154        assert_true (ai_move (ai, 4, 2));
14155        assert_true (ai_move (ai, 4, 1));
14156        assert_true (ai_move (ai, 5, 7));
14157        assert_true (ai_move (ai, 3, 6));
14158        assert_true (ai_move (ai, 3, 5));
14159        assert_true (ai_move (ai, 2, 5));
14160        assert_true (ai_move (ai, 1, 2));
14161        assert_true (ai_move (ai, 1, 3));
14162        assert_true (ai_move (ai, 2, 7));
14163        assert_true (ai_move (ai, 2, 3));
14164        assert_true (ai_move (ai, 2, 1));
14165        assert_true (ai_move (ai, 2, 0));
14166        assert_true (ai_move (ai, 2, 6));
14167        assert_true (ai_move (ai, 0, 2));
14168        assert_true (ai_move (ai, 1, 5));
14169        assert_true (ai_move (ai, 0, 5));
14170        assert_true (ai_move (ai, 2, 4));
14171        assert_true (ai_move (ai, 1, 4));
14172        assert_true (ai_move (ai, 0, 3));
14173        assert_true (ai_move (ai, 0, 4));
14174        assert_true (ai_move (ai, 3, 0));
14175        assert_true (ai_move (ai, 4, 0));
14176        assert_true (ai_move (ai, 7, 3));
14177        assert_true (ai_move (ai, 7, 1));
14178        assert_true (ai_move (ai, 1, 1));
14179        assert_true (ai_move (ai, 6, 1));
14180        assert_true (ai_move (ai, 7, 0));
14181        assert_true (ai_move (ai, 6, 0));
14182        assert_true (ai_move (ai, 7, 7));
14183        assert_true (ai_move (ai, 1, 6));
14184        assert_true (ai_move (ai, 1, 0));
14185        assert_true (ai_move (ai, 1, 7));
14186        assert_true (ai_move (ai, 6, 6));
14187        assert_true (ai_move (ai, 3, 7));
14188        assert_true (ai_move (ai, 0, 7));
14189        assert_true (ai_move (ai, 4, 7));
14190        assert_true (ai_move (ai, 0, 6));
14191        assert_true (ai_move (ai, 6, 7));
14192        assert_true (ai_move (ai, 0, 1));
14193        assert_true (ai_move (ai, 0, 0));
14194    }
14195
14196    private static inline void test_complete_reversi_game_172 ()
14197    {
14198                                  /* 0 1 2 3 4 5 6 7 */
14199        string [] board = {/* 0 */ " . . . . . . . .",
14200                           /* 1 */ " . . . . . . . .",
14201                           /* 2 */ " . . L D . . . .",
14202                           /* 3 */ " . . . L L L . .",
14203                           /* 4 */ " . . . D D . . .",
14204                           /* 5 */ " . . . . D . . .",
14205                           /* 6 */ " . . . . . . . .",
14206                           /* 7 */ " . . . . . . . ."};
14207
14208        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14209        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14210
14211        assert_true (ai_move (ai, 1, 2));
14212        assert_true (ai_move (ai, 3, 1));
14213        assert_true (ai_move (ai, 6, 2));
14214        assert_true (ai_move (ai, 1, 3));
14215        assert_true (ai_move (ai, 5, 2));
14216        assert_true (ai_move (ai, 0, 2));
14217        assert_true (ai_move (ai, 2, 1));
14218        assert_true (ai_move (ai, 3, 0));
14219        assert_true (ai_move (ai, 2, 3));
14220        assert_true (ai_move (ai, 2, 4));
14221        assert_true (ai_move (ai, 1, 5));
14222        assert_true (ai_move (ai, 4, 2));
14223        assert_true (ai_move (ai, 5, 1));
14224        assert_true (ai_move (ai, 7, 2));
14225        assert_true (ai_move (ai, 4, 1));
14226        assert_true (ai_move (ai, 6, 4));
14227        assert_true (ai_move (ai, 1, 4));
14228        assert_true (ai_move (ai, 5, 0));
14229        assert_true (ai_move (ai, 6, 3));
14230        assert_true (ai_move (ai, 2, 5));
14231        assert_true (ai_move (ai, 3, 5));
14232        assert_true (ai_move (ai, 4, 0));
14233        assert_true (ai_move (ai, 2, 0));
14234        assert_true (ai_move (ai, 1, 0));
14235        assert_true (ai_move (ai, 0, 4));
14236        assert_true (ai_move (ai, 2, 6));
14237        assert_true (ai_move (ai, 4, 6));
14238        assert_true (ai_move (ai, 3, 6));
14239        assert_true (ai_move (ai, 3, 7));
14240        assert_true (ai_move (ai, 5, 5));
14241        assert_true (ai_move (ai, 5, 4));
14242        assert_true (ai_move (ai, 5, 7));
14243        assert_true (ai_move (ai, 2, 7));
14244        assert_true (ai_move (ai, 6, 5));
14245        assert_true (ai_move (ai, 5, 6));
14246        assert_true (ai_move (ai, 7, 3));
14247        assert_true (ai_move (ai, 7, 5));
14248        assert_true (ai_move (ai, 6, 6));
14249        assert_true (ai_move (ai, 1, 6));
14250        assert_true (ai_move (ai, 0, 3));
14251        assert_true (ai_move (ai, 0, 1));
14252        assert_true (ai_move (ai, 1, 1));
14253        assert_true (ai_move (ai, 7, 4));
14254        assert_true (ai_move (ai, 7, 6));
14255        assert_true (ai_move (ai, 7, 1));
14256        assert_true (ai_move (ai, 7, 0));
14257        assert_true (ai_move (ai, 6, 0));
14258        assert_true (ai_move (ai, 0, 5));
14259        assert_true (ai_move (ai, 0, 0));
14260        assert_true (ai_move (ai, 6, 1));
14261        assert_true (ai_move (ai, 7, 7));
14262        assert_true (ai_move (ai, 0, 7));
14263        assert_true (ai_move (ai, 0, 6));
14264        assert_true (ai_move (ai, 1, 7));
14265        assert_true (game.pass ());
14266        assert_true (ai_move (ai, 4, 7));
14267        assert_true (ai_move (ai, 6, 7));
14268    }
14269
14270    private static inline void test_complete_reversi_game_173 ()
14271    {
14272                                  /* 0 1 2 3 4 5 6 7 */
14273        string [] board = {/* 0 */ " . . . . . . . .",
14274                           /* 1 */ " . . . . . . . .",
14275                           /* 2 */ " . . L L L . . .",
14276                           /* 3 */ " . . . L D . . .",
14277                           /* 4 */ " . . . D D . . .",
14278                           /* 5 */ " . . . . D . . .",
14279                           /* 6 */ " . . . . . . . .",
14280                           /* 7 */ " . . . . . . . ."};
14281
14282        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14283        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14284
14285        assert_true (ai_move (ai, 2, 1));
14286        assert_true (ai_move (ai, 3, 1));
14287        assert_true (ai_move (ai, 2, 3));
14288        assert_true (ai_move (ai, 1, 3));
14289        assert_true (ai_move (ai, 3, 0));
14290        assert_true (ai_move (ai, 4, 0));
14291        assert_true (ai_move (ai, 5, 0));
14292        assert_true (ai_move (ai, 2, 0));
14293        assert_true (ai_move (ai, 1, 0));
14294        assert_true (ai_move (ai, 2, 4));
14295        assert_true (ai_move (ai, 1, 2));
14296        assert_true (ai_move (ai, 0, 2));
14297        assert_true (ai_move (ai, 2, 5));
14298        assert_true (ai_move (ai, 1, 4));
14299        assert_true (ai_move (ai, 5, 1));
14300        assert_true (ai_move (ai, 3, 6));
14301        assert_true (ai_move (ai, 4, 1));
14302        assert_true (ai_move (ai, 5, 6));
14303        assert_true (ai_move (ai, 0, 5));
14304        assert_true (ai_move (ai, 3, 5));
14305        assert_true (ai_move (ai, 1, 5));
14306        assert_true (ai_move (ai, 0, 4));
14307        assert_true (ai_move (ai, 5, 5));
14308        assert_true (ai_move (ai, 4, 6));
14309        assert_true (ai_move (ai, 2, 6));
14310        assert_true (ai_move (ai, 6, 4));
14311        assert_true (ai_move (ai, 6, 5));
14312        assert_true (ai_move (ai, 2, 7));
14313        assert_true (ai_move (ai, 7, 3));
14314        assert_true (ai_move (ai, 7, 5));
14315        assert_true (ai_move (ai, 4, 7));
14316        assert_true (ai_move (ai, 3, 7));
14317        assert_true (ai_move (ai, 1, 7));
14318        assert_true (ai_move (ai, 5, 4));
14319        assert_true (ai_move (ai, 5, 7));
14320        assert_true (ai_move (ai, 7, 4));
14321        assert_true (ai_move (ai, 6, 7));
14322        assert_true (ai_move (ai, 7, 2));
14323        assert_true (ai_move (ai, 6, 3));
14324        assert_true (ai_move (ai, 6, 2));
14325        assert_true (ai_move (ai, 1, 6));
14326        assert_true (ai_move (ai, 5, 2));
14327        assert_true (ai_move (ai, 5, 3));
14328        assert_true (ai_move (ai, 0, 6));
14329        assert_true (ai_move (ai, 6, 6));
14330        assert_true (ai_move (ai, 7, 7));
14331        assert_true (ai_move (ai, 0, 7));
14332        assert_true (ai_move (ai, 6, 0));
14333        assert_true (ai_move (ai, 7, 0));
14334        assert_true (ai_move (ai, 1, 1));
14335        assert_true (ai_move (ai, 0, 3));
14336        assert_true (game.pass ());
14337        assert_true (ai_move (ai, 7, 1));
14338        assert_true (ai_move (ai, 6, 1));
14339        assert_true (ai_move (ai, 7, 6));
14340        assert_true (game.pass ());
14341        assert_true (ai_move (ai, 0, 0));
14342        assert_true (ai_move (ai, 0, 1));
14343    }
14344
14345    private static inline void test_complete_reversi_game_174 ()
14346    {
14347                                  /* 0 1 2 3 4 5 6 7 */
14348        string [] board = {/* 0 */ " . . . . . . . .",
14349                           /* 1 */ " . . . . . . . .",
14350                           /* 2 */ " . . L D . . . .",
14351                           /* 3 */ " . . . L D . . .",
14352                           /* 4 */ " . . . L D . . .",
14353                           /* 5 */ " . . . L D . . .",
14354                           /* 6 */ " . . . . . . . .",
14355                           /* 7 */ " . . . . . . . ."};
14356
14357        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14358        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14359
14360        assert_true (ai_move (ai, 1, 2));
14361        assert_true (ai_move (ai, 5, 6));
14362        assert_true (ai_move (ai, 4, 6));
14363        assert_true (ai_move (ai, 5, 7));
14364        assert_true (ai_move (ai, 2, 6));
14365        assert_true (ai_move (ai, 2, 4));
14366        assert_true (ai_move (ai, 2, 5));
14367        assert_true (ai_move (ai, 3, 1));
14368        assert_true (ai_move (ai, 1, 3));
14369        assert_true (ai_move (ai, 1, 5));
14370        assert_true (ai_move (ai, 1, 4));
14371        assert_true (ai_move (ai, 3, 6));
14372        assert_true (ai_move (ai, 2, 7));
14373        assert_true (ai_move (ai, 3, 7));
14374        assert_true (ai_move (ai, 2, 1));
14375        assert_true (ai_move (ai, 2, 3));
14376        assert_true (ai_move (ai, 0, 5));
14377        assert_true (ai_move (ai, 2, 0));
14378        assert_true (ai_move (ai, 4, 0));
14379        assert_true (ai_move (ai, 0, 2));
14380        assert_true (ai_move (ai, 4, 2));
14381        assert_true (ai_move (ai, 0, 3));
14382        assert_true (ai_move (ai, 0, 4));
14383        assert_true (ai_move (ai, 0, 6));
14384        assert_true (ai_move (ai, 4, 7));
14385        assert_true (ai_move (ai, 1, 7));
14386        assert_true (ai_move (ai, 1, 1));
14387        assert_true (ai_move (ai, 0, 1));
14388        assert_true (ai_move (ai, 6, 7));
14389        assert_true (ai_move (ai, 7, 7));
14390        assert_true (ai_move (ai, 1, 6));
14391        assert_true (ai_move (ai, 6, 5));
14392        assert_true (ai_move (ai, 6, 6));
14393        assert_true (ai_move (ai, 0, 7));
14394        assert_true (ai_move (ai, 7, 4));
14395        assert_true (ai_move (ai, 5, 2));
14396        assert_true (ai_move (ai, 5, 1));
14397        assert_true (ai_move (ai, 3, 0));
14398        assert_true (ai_move (ai, 6, 2));
14399        assert_true (ai_move (ai, 5, 0));
14400        assert_true (ai_move (ai, 4, 1));
14401        assert_true (ai_move (ai, 7, 2));
14402        assert_true (ai_move (ai, 6, 3));
14403        assert_true (ai_move (ai, 6, 0));
14404        assert_true (ai_move (ai, 5, 4));
14405        assert_true (ai_move (ai, 7, 5));
14406        assert_true (ai_move (ai, 5, 3));
14407        assert_true (ai_move (ai, 6, 1));
14408        assert_true (ai_move (ai, 7, 6));
14409        assert_true (ai_move (ai, 7, 3));
14410        assert_true (ai_move (ai, 6, 4));
14411        assert_true (ai_move (ai, 5, 5));
14412        assert_true (ai_move (ai, 7, 1));
14413        assert_true (ai_move (ai, 0, 0));
14414        assert_true (ai_move (ai, 1, 0));
14415        assert_true (ai_move (ai, 7, 0));
14416    }
14417
14418    private static inline void test_complete_reversi_game_175 ()
14419    {
14420                                  /* 0 1 2 3 4 5 6 7 */
14421        string [] board = {/* 0 */ " . . . . . . . .",
14422                           /* 1 */ " . . . L . . . .",
14423                           /* 2 */ " . . L L . . . .",
14424                           /* 3 */ " . . . L D . . .",
14425                           /* 4 */ " . . . D D . . .",
14426                           /* 5 */ " . . . . D . . .",
14427                           /* 6 */ " . . . . . . . .",
14428                           /* 7 */ " . . . . . . . ."};
14429
14430        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14431        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14432
14433        assert_true (ai_move (ai, 2, 1));
14434        assert_true (ai_move (ai, 4, 2));
14435        assert_true (ai_move (ai, 2, 3));
14436        assert_true (ai_move (ai, 1, 3));
14437        assert_true (ai_move (ai, 3, 0));
14438        assert_true (ai_move (ai, 4, 0));
14439        assert_true (ai_move (ai, 5, 0));
14440        assert_true (ai_move (ai, 2, 0));
14441        assert_true (ai_move (ai, 1, 0));
14442        assert_true (ai_move (ai, 2, 4));
14443        assert_true (ai_move (ai, 1, 2));
14444        assert_true (ai_move (ai, 0, 2));
14445        assert_true (ai_move (ai, 2, 5));
14446        assert_true (ai_move (ai, 1, 4));
14447        assert_true (ai_move (ai, 5, 1));
14448        assert_true (ai_move (ai, 3, 6));
14449        assert_true (ai_move (ai, 4, 1));
14450        assert_true (ai_move (ai, 5, 6));
14451        assert_true (ai_move (ai, 0, 5));
14452        assert_true (ai_move (ai, 3, 5));
14453        assert_true (ai_move (ai, 1, 5));
14454        assert_true (ai_move (ai, 0, 4));
14455        assert_true (ai_move (ai, 5, 5));
14456        assert_true (ai_move (ai, 4, 6));
14457        assert_true (ai_move (ai, 2, 6));
14458        assert_true (ai_move (ai, 6, 4));
14459        assert_true (ai_move (ai, 6, 5));
14460        assert_true (ai_move (ai, 2, 7));
14461        assert_true (ai_move (ai, 7, 3));
14462        assert_true (ai_move (ai, 7, 5));
14463        assert_true (ai_move (ai, 4, 7));
14464        assert_true (ai_move (ai, 3, 7));
14465        assert_true (ai_move (ai, 1, 7));
14466        assert_true (ai_move (ai, 5, 4));
14467        assert_true (ai_move (ai, 5, 7));
14468        assert_true (ai_move (ai, 7, 4));
14469        assert_true (ai_move (ai, 6, 7));
14470        assert_true (ai_move (ai, 7, 2));
14471        assert_true (ai_move (ai, 6, 3));
14472        assert_true (ai_move (ai, 6, 2));
14473        assert_true (ai_move (ai, 1, 6));
14474        assert_true (ai_move (ai, 5, 2));
14475        assert_true (ai_move (ai, 5, 3));
14476        assert_true (ai_move (ai, 0, 6));
14477        assert_true (ai_move (ai, 6, 6));
14478        assert_true (ai_move (ai, 7, 7));
14479        assert_true (ai_move (ai, 0, 7));
14480        assert_true (ai_move (ai, 6, 0));
14481        assert_true (ai_move (ai, 7, 0));
14482        assert_true (ai_move (ai, 1, 1));
14483        assert_true (ai_move (ai, 0, 3));
14484        assert_true (game.pass ());
14485        assert_true (ai_move (ai, 7, 1));
14486        assert_true (ai_move (ai, 6, 1));
14487        assert_true (ai_move (ai, 7, 6));
14488        assert_true (game.pass ());
14489        assert_true (ai_move (ai, 0, 0));
14490        assert_true (ai_move (ai, 0, 1));
14491    }
14492
14493    private static inline void test_complete_reversi_game_176 ()
14494    {
14495                                  /* 0 1 2 3 4 5 6 7 */
14496        string [] board = {/* 0 */ " . . . . . . . .",
14497                           /* 1 */ " . . . . . . . .",
14498                           /* 2 */ " . . L L L . . .",
14499                           /* 3 */ " . . D D L . . .",
14500                           /* 4 */ " . . . D L . . .",
14501                           /* 5 */ " . . . . . . . .",
14502                           /* 6 */ " . . . . . . . .",
14503                           /* 7 */ " . . . . . . . ."};
14504
14505        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14506        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14507
14508        assert_true (ai_move (ai, 2, 1));
14509        assert_true (ai_move (ai, 1, 2));
14510        assert_true (ai_move (ai, 4, 1));
14511        assert_true (ai_move (ai, 2, 0));
14512        assert_true (ai_move (ai, 0, 2));
14513        assert_true (ai_move (ai, 0, 3));
14514        assert_true (ai_move (ai, 0, 4));
14515        assert_true (ai_move (ai, 4, 0));
14516        assert_true (ai_move (ai, 5, 0));
14517        assert_true (ai_move (ai, 2, 5));
14518        assert_true (ai_move (ai, 5, 2));
14519        assert_true (ai_move (ai, 6, 2));
14520        assert_true (ai_move (ai, 3, 1));
14521        assert_true (ai_move (ai, 5, 1));
14522        assert_true (ai_move (ai, 5, 4));
14523        assert_true (ai_move (ai, 1, 4));
14524        assert_true (ai_move (ai, 1, 3));
14525        assert_true (ai_move (ai, 2, 4));
14526        assert_true (ai_move (ai, 5, 3));
14527        assert_true (ai_move (ai, 6, 3));
14528        assert_true (ai_move (ai, 7, 2));
14529        assert_true (ai_move (ai, 5, 5));
14530        assert_true (ai_move (ai, 2, 6));
14531        assert_true (ai_move (ai, 3, 6));
14532        assert_true (ai_move (ai, 5, 6));
14533        assert_true (ai_move (ai, 6, 4));
14534        assert_true (ai_move (ai, 0, 5));
14535        assert_true (ai_move (ai, 4, 6));
14536        assert_true (ai_move (ai, 4, 7));
14537        assert_true (ai_move (ai, 1, 1));
14538        assert_true (ai_move (ai, 3, 5));
14539        assert_true (ai_move (ai, 2, 7));
14540        assert_true (ai_move (ai, 1, 5));
14541        assert_true (ai_move (ai, 7, 4));
14542        assert_true (ai_move (ai, 7, 3));
14543        assert_true (ai_move (ai, 0, 1));
14544        assert_true (ai_move (ai, 0, 0));
14545        assert_true (ai_move (ai, 5, 7));
14546        assert_true (ai_move (ai, 7, 5));
14547        assert_true (ai_move (ai, 3, 7));
14548        assert_true (ai_move (ai, 4, 5));
14549        assert_true (ai_move (ai, 6, 5));
14550        assert_true (ai_move (ai, 6, 1));
14551        assert_true (ai_move (ai, 0, 6));
14552        assert_true (ai_move (ai, 1, 0));
14553        assert_true (ai_move (ai, 7, 1));
14554        assert_true (ai_move (ai, 7, 0));
14555        assert_true (ai_move (ai, 6, 0));
14556        assert_true (ai_move (ai, 3, 0));
14557        assert_true (ai_move (ai, 1, 6));
14558        assert_true (ai_move (ai, 7, 6));
14559        assert_true (ai_move (ai, 6, 6));
14560        assert_true (ai_move (ai, 7, 7));
14561        assert_true (ai_move (ai, 6, 7));
14562        assert_true (ai_move (ai, 1, 7));
14563        assert_true (ai_move (ai, 0, 7));
14564    }
14565
14566    private static inline void test_complete_reversi_game_177 ()
14567    {
14568                                  /* 0 1 2 3 4 5 6 7 */
14569        string [] board = {/* 0 */ " . . . . . . . .",
14570                           /* 1 */ " . . . . . . . .",
14571                           /* 2 */ " . . L D . . . .",
14572                           /* 3 */ " . . L D D . . .",
14573                           /* 4 */ " . . L L L . . .",
14574                           /* 5 */ " . . . . . . . .",
14575                           /* 6 */ " . . . . . . . .",
14576                           /* 7 */ " . . . . . . . ."};
14577
14578        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14579        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14580
14581        assert_true (ai_move (ai, 1, 2));
14582        assert_true (ai_move (ai, 2, 1));
14583        assert_true (ai_move (ai, 1, 4));
14584        assert_true (ai_move (ai, 0, 2));
14585        assert_true (ai_move (ai, 2, 0));
14586        assert_true (ai_move (ai, 3, 0));
14587        assert_true (ai_move (ai, 4, 0));
14588        assert_true (ai_move (ai, 0, 4));
14589        assert_true (ai_move (ai, 0, 5));
14590        assert_true (ai_move (ai, 5, 2));
14591        assert_true (ai_move (ai, 2, 5));
14592        assert_true (ai_move (ai, 2, 6));
14593        assert_true (ai_move (ai, 1, 3));
14594        assert_true (ai_move (ai, 1, 5));
14595        assert_true (ai_move (ai, 4, 5));
14596        assert_true (ai_move (ai, 4, 1));
14597        assert_true (ai_move (ai, 3, 1));
14598        assert_true (ai_move (ai, 4, 2));
14599        assert_true (ai_move (ai, 3, 5));
14600        assert_true (ai_move (ai, 3, 6));
14601        assert_true (ai_move (ai, 2, 7));
14602        assert_true (ai_move (ai, 5, 5));
14603        assert_true (ai_move (ai, 6, 2));
14604        assert_true (ai_move (ai, 6, 3));
14605        assert_true (ai_move (ai, 6, 5));
14606        assert_true (ai_move (ai, 4, 6));
14607        assert_true (ai_move (ai, 5, 0));
14608        assert_true (ai_move (ai, 6, 4));
14609        assert_true (ai_move (ai, 7, 4));
14610        assert_true (ai_move (ai, 1, 1));
14611        assert_true (ai_move (ai, 5, 3));
14612        assert_true (ai_move (ai, 7, 2));
14613        assert_true (ai_move (ai, 5, 1));
14614        assert_true (ai_move (ai, 4, 7));
14615        assert_true (ai_move (ai, 3, 7));
14616        assert_true (ai_move (ai, 1, 0));
14617        assert_true (ai_move (ai, 0, 0));
14618        assert_true (ai_move (ai, 7, 5));
14619        assert_true (ai_move (ai, 5, 7));
14620        assert_true (ai_move (ai, 7, 3));
14621        assert_true (ai_move (ai, 5, 4));
14622        assert_true (ai_move (ai, 5, 6));
14623        assert_true (ai_move (ai, 1, 6));
14624        assert_true (ai_move (ai, 6, 0));
14625        assert_true (ai_move (ai, 0, 1));
14626        assert_true (ai_move (ai, 1, 7));
14627        assert_true (ai_move (ai, 0, 7));
14628        assert_true (ai_move (ai, 0, 6));
14629        assert_true (ai_move (ai, 0, 3));
14630        assert_true (ai_move (ai, 6, 1));
14631        assert_true (ai_move (ai, 6, 7));
14632        assert_true (ai_move (ai, 6, 6));
14633        assert_true (ai_move (ai, 7, 7));
14634        assert_true (ai_move (ai, 7, 6));
14635        assert_true (ai_move (ai, 7, 1));
14636        assert_true (ai_move (ai, 7, 0));
14637    }
14638
14639    private static inline void test_complete_reversi_game_178 ()
14640    {
14641                                  /* 0 1 2 3 4 5 6 7 */
14642        string [] board = {/* 0 */ " . . . . . . . .",
14643                           /* 1 */ " . . . . . . . .",
14644                           /* 2 */ " . D D D . . . .",
14645                           /* 3 */ " . . . L L L . .",
14646                           /* 4 */ " . . . D L . . .",
14647                           /* 5 */ " . . . . . . . .",
14648                           /* 6 */ " . . . . . . . .",
14649                           /* 7 */ " . . . . . . . ."};
14650
14651        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14652        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14653
14654        assert_true (ai_move (ai, 5, 2));
14655        assert_true (ai_move (ai, 4, 2));
14656        assert_true (ai_move (ai, 5, 4));
14657        assert_true (ai_move (ai, 6, 2));
14658        assert_true (ai_move (ai, 5, 1));
14659        assert_true (ai_move (ai, 6, 4));
14660        assert_true (ai_move (ai, 6, 3));
14661        assert_true (ai_move (ai, 7, 3));
14662        assert_true (ai_move (ai, 4, 1));
14663        assert_true (ai_move (ai, 3, 1));
14664        assert_true (ai_move (ai, 4, 0));
14665        assert_true (ai_move (ai, 2, 0));
14666        assert_true (ai_move (ai, 2, 4));
14667        assert_true (ai_move (ai, 3, 0));
14668        assert_true (ai_move (ai, 7, 5));
14669        assert_true (ai_move (ai, 5, 0));
14670        assert_true (ai_move (ai, 2, 1));
14671        assert_true (ai_move (ai, 2, 3));
14672        assert_true (ai_move (ai, 7, 1));
14673        assert_true (ai_move (ai, 1, 5));
14674        assert_true (ai_move (ai, 1, 4));
14675        assert_true (ai_move (ai, 0, 2));
14676        assert_true (ai_move (ai, 1, 3));
14677        assert_true (ai_move (ai, 0, 5));
14678        assert_true (ai_move (ai, 6, 1));
14679        assert_true (ai_move (ai, 5, 5));
14680        assert_true (ai_move (ai, 3, 5));
14681        assert_true (ai_move (ai, 0, 3));
14682        assert_true (ai_move (ai, 7, 4));
14683        assert_true (ai_move (ai, 7, 6));
14684        assert_true (ai_move (ai, 5, 6));
14685        assert_true (ai_move (ai, 5, 7));
14686        assert_true (ai_move (ai, 6, 5));
14687        assert_true (ai_move (ai, 4, 6));
14688        assert_true (ai_move (ai, 3, 6));
14689        assert_true (ai_move (ai, 6, 6));
14690        assert_true (ai_move (ai, 7, 2));
14691        assert_true (ai_move (ai, 7, 0));
14692        assert_true (ai_move (ai, 7, 7));
14693        assert_true (ai_move (ai, 2, 5));
14694        assert_true (ai_move (ai, 3, 7));
14695        assert_true (ai_move (ai, 4, 5));
14696        assert_true (ai_move (ai, 1, 1));
14697        assert_true (ai_move (ai, 2, 7));
14698        assert_true (ai_move (ai, 2, 6));
14699        assert_true (ai_move (ai, 4, 7));
14700        assert_true (ai_move (ai, 6, 7));
14701        assert_true (ai_move (ai, 1, 7));
14702        assert_true (ai_move (ai, 0, 7));
14703        assert_true (ai_move (ai, 0, 0));
14704        assert_true (ai_move (ai, 1, 6));
14705        assert_true (ai_move (ai, 0, 6));
14706        assert_true (ai_move (ai, 0, 4));
14707        assert_true (game.pass ());
14708        assert_true (ai_move (ai, 0, 1));
14709        assert_true (game.pass ());
14710        assert_true (ai_move (ai, 1, 0));
14711        assert_true (game.pass ());
14712        assert_true (ai_move (ai, 6, 0));
14713    }
14714
14715    private static inline void test_complete_reversi_game_179 ()
14716    {
14717                                  /* 0 1 2 3 4 5 6 7 */
14718        string [] board = {/* 0 */ " . . . . . . . .",
14719                           /* 1 */ " . . . . . . . .",
14720                           /* 2 */ " . D D D L . . .",
14721                           /* 3 */ " . . . L L . . .",
14722                           /* 4 */ " . . . D L . . .",
14723                           /* 5 */ " . . . . . . . .",
14724                           /* 6 */ " . . . . . . . .",
14725                           /* 7 */ " . . . . . . . ."};
14726
14727        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14728        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14729
14730        assert_true (ai_move (ai, 5, 2));
14731        assert_true (ai_move (ai, 5, 1));
14732        assert_true (ai_move (ai, 4, 1));
14733        assert_true (ai_move (ai, 5, 3));
14734        assert_true (ai_move (ai, 6, 2));
14735        assert_true (ai_move (ai, 4, 0));
14736        assert_true (ai_move (ai, 3, 0));
14737        assert_true (ai_move (ai, 2, 0));
14738        assert_true (ai_move (ai, 5, 0));
14739        assert_true (ai_move (ai, 6, 0));
14740        assert_true (ai_move (ai, 3, 5));
14741        assert_true (ai_move (ai, 3, 1));
14742        assert_true (ai_move (ai, 2, 3));
14743        assert_true (ai_move (ai, 6, 3));
14744        assert_true (ai_move (ai, 7, 3));
14745        assert_true (ai_move (ai, 1, 3));
14746        assert_true (ai_move (ai, 0, 3));
14747        assert_true (ai_move (ai, 1, 4));
14748        assert_true (ai_move (ai, 2, 1));
14749        assert_true (ai_move (ai, 2, 4));
14750        assert_true (ai_move (ai, 0, 5));
14751        assert_true (ai_move (ai, 6, 4));
14752        assert_true (ai_move (ai, 2, 5));
14753        assert_true (ai_move (ai, 1, 5));
14754        assert_true (ai_move (ai, 5, 5));
14755        assert_true (ai_move (ai, 7, 2));
14756        assert_true (ai_move (ai, 7, 1));
14757        assert_true (ai_move (ai, 2, 6));
14758        assert_true (ai_move (ai, 3, 6));
14759        assert_true (ai_move (ai, 7, 5));
14760        assert_true (ai_move (ai, 2, 7));
14761        assert_true (ai_move (ai, 4, 6));
14762        assert_true (ai_move (ai, 4, 5));
14763        assert_true (ai_move (ai, 3, 7));
14764        assert_true (ai_move (ai, 5, 7));
14765        assert_true (ai_move (ai, 1, 7));
14766        assert_true (ai_move (ai, 6, 5));
14767        assert_true (ai_move (ai, 0, 2));
14768        assert_true (ai_move (ai, 4, 7));
14769        assert_true (ai_move (ai, 6, 7));
14770        assert_true (ai_move (ai, 6, 1));
14771        assert_true (ai_move (ai, 0, 4));
14772        assert_true (ai_move (ai, 0, 1));
14773        assert_true (ai_move (ai, 5, 6));
14774        assert_true (ai_move (ai, 5, 4));
14775        assert_true (ai_move (ai, 7, 4));
14776        assert_true (ai_move (ai, 7, 6));
14777        assert_true (ai_move (ai, 6, 6));
14778        assert_true (ai_move (ai, 0, 6));
14779        assert_true (ai_move (ai, 1, 0));
14780        assert_true (ai_move (ai, 7, 7));
14781        assert_true (ai_move (ai, 7, 0));
14782        assert_true (ai_move (ai, 0, 7));
14783        assert_true (ai_move (ai, 1, 1));
14784        assert_true (ai_move (ai, 0, 0));
14785        assert_true (ai_move (ai, 1, 6));
14786    }
14787
14788    private static inline void test_complete_reversi_game_180 ()
14789    {
14790                                  /* 0 1 2 3 4 5 6 7 */
14791        string [] board = {/* 0 */ " . . . . . . . .",
14792                           /* 1 */ " . . . . . . . .",
14793                           /* 2 */ " . D D D . . . .",
14794                           /* 3 */ " . . . L D . . .",
14795                           /* 4 */ " . . . L L . . .",
14796                           /* 5 */ " . . . L . . . .",
14797                           /* 6 */ " . . . . . . . .",
14798                           /* 7 */ " . . . . . . . ."};
14799
14800        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14801        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14802
14803        assert_true (ai_move (ai, 2, 3));
14804        assert_true (ai_move (ai, 5, 2));
14805        assert_true (ai_move (ai, 5, 4));
14806        assert_true (ai_move (ai, 6, 4));
14807        assert_true (ai_move (ai, 6, 5));
14808        assert_true (ai_move (ai, 4, 2));
14809        assert_true (ai_move (ai, 5, 1));
14810        assert_true (ai_move (ai, 4, 1));
14811        assert_true (ai_move (ai, 6, 2));
14812        assert_true (ai_move (ai, 2, 1));
14813        assert_true (ai_move (ai, 2, 0));
14814        assert_true (ai_move (ai, 1, 4));
14815        assert_true (ai_move (ai, 1, 3));
14816        assert_true (ai_move (ai, 0, 2));
14817        assert_true (ai_move (ai, 3, 0));
14818        assert_true (ai_move (ai, 5, 0));
14819        assert_true (ai_move (ai, 3, 1));
14820        assert_true (ai_move (ai, 7, 2));
14821        assert_true (ai_move (ai, 5, 3));
14822        assert_true (ai_move (ai, 5, 5));
14823        assert_true (ai_move (ai, 0, 3));
14824        assert_true (ai_move (ai, 0, 4));
14825        assert_true (ai_move (ai, 0, 5));
14826        assert_true (ai_move (ai, 0, 6));
14827        assert_true (ai_move (ai, 6, 3));
14828        assert_true (ai_move (ai, 0, 1));
14829        assert_true (ai_move (ai, 4, 6));
14830        assert_true (ai_move (ai, 5, 6));
14831        assert_true (ai_move (ai, 4, 5));
14832        assert_true (ai_move (ai, 1, 5));
14833        assert_true (ai_move (ai, 2, 4));
14834        assert_true (ai_move (ai, 7, 3));
14835        assert_true (ai_move (ai, 5, 7));
14836        assert_true (ai_move (ai, 3, 6));
14837        assert_true (ai_move (ai, 2, 5));
14838        assert_true (ai_move (ai, 2, 6));
14839        assert_true (ai_move (ai, 2, 7));
14840        assert_true (ai_move (ai, 7, 5));
14841        assert_true (ai_move (ai, 7, 4));
14842        assert_true (ai_move (ai, 4, 0));
14843        assert_true (ai_move (ai, 6, 0));
14844        assert_true (ai_move (ai, 3, 7));
14845        assert_true (ai_move (ai, 4, 7));
14846        assert_true (ai_move (ai, 1, 1));
14847        assert_true (ai_move (ai, 1, 0));
14848        assert_true (ai_move (ai, 6, 7));
14849        assert_true (ai_move (ai, 7, 7));
14850        assert_true (ai_move (ai, 1, 6));
14851        assert_true (ai_move (ai, 6, 6));
14852        assert_true (ai_move (ai, 6, 1));
14853        assert_true (ai_move (ai, 7, 6));
14854        assert_true (game.pass ());
14855        assert_true (ai_move (ai, 0, 0));
14856        assert_true (game.pass ());
14857        assert_true (ai_move (ai, 0, 7));
14858        assert_true (game.pass ());
14859        assert_true (ai_move (ai, 1, 7));
14860        assert_true (game.pass ());
14861        assert_true (ai_move (ai, 7, 1));
14862        assert_true (ai_move (ai, 7, 0));
14863    }
14864
14865    private static inline void test_complete_reversi_game_181 ()
14866    {
14867                                  /* 0 1 2 3 4 5 6 7 */
14868        string [] board = {/* 0 */ " . . . . . . . .",
14869                           /* 1 */ " . . . L . . . .",
14870                           /* 2 */ " . D D L . . . .",
14871                           /* 3 */ " . . . L D . . .",
14872                           /* 4 */ " . . . D L . . .",
14873                           /* 5 */ " . . . . . . . .",
14874                           /* 6 */ " . . . . . . . .",
14875                           /* 7 */ " . . . . . . . ."};
14876
14877        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14878        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14879
14880        assert_true (ai_move (ai, 4, 2));
14881        assert_true (ai_move (ai, 1, 3));
14882        assert_true (ai_move (ai, 2, 0));
14883        assert_true (ai_move (ai, 0, 2));
14884        assert_true (ai_move (ai, 0, 4));
14885        assert_true (ai_move (ai, 5, 2));
14886        assert_true (ai_move (ai, 2, 1));
14887        assert_true (ai_move (ai, 4, 0));
14888        assert_true (ai_move (ai, 3, 0));
14889        assert_true (ai_move (ai, 1, 0));
14890        assert_true (ai_move (ai, 2, 3));
14891        assert_true (ai_move (ai, 1, 4));
14892        assert_true (ai_move (ai, 2, 4));
14893        assert_true (ai_move (ai, 5, 3));
14894        assert_true (ai_move (ai, 6, 2));
14895        assert_true (ai_move (ai, 5, 1));
14896        assert_true (ai_move (ai, 6, 4));
14897        assert_true (ai_move (ai, 5, 4));
14898        assert_true (ai_move (ai, 6, 5));
14899        assert_true (ai_move (ai, 5, 5));
14900        assert_true (ai_move (ai, 4, 6));
14901        assert_true (ai_move (ai, 5, 6));
14902        assert_true (ai_move (ai, 6, 3));
14903        assert_true (ai_move (ai, 4, 1));
14904        assert_true (ai_move (ai, 4, 5));
14905        assert_true (ai_move (ai, 0, 5));
14906        assert_true (ai_move (ai, 0, 3));
14907        assert_true (ai_move (ai, 2, 5));
14908        assert_true (ai_move (ai, 5, 7));
14909        assert_true (ai_move (ai, 7, 2));
14910        assert_true (ai_move (ai, 3, 6));
14911        assert_true (ai_move (ai, 2, 6));
14912        assert_true (ai_move (ai, 5, 0));
14913        assert_true (ai_move (ai, 6, 0));
14914        assert_true (ai_move (ai, 1, 5));
14915        assert_true (ai_move (ai, 3, 5));
14916        assert_true (ai_move (ai, 2, 7));
14917        assert_true (ai_move (ai, 7, 5));
14918        assert_true (ai_move (ai, 7, 4));
14919        assert_true (ai_move (ai, 7, 3));
14920        assert_true (ai_move (ai, 6, 6));
14921        assert_true (ai_move (ai, 7, 6));
14922        assert_true (ai_move (ai, 1, 1));
14923        assert_true (ai_move (ai, 3, 7));
14924        assert_true (ai_move (ai, 4, 7));
14925        assert_true (ai_move (ai, 6, 1));
14926        assert_true (ai_move (ai, 7, 0));
14927        assert_true (ai_move (ai, 0, 0));
14928        assert_true (ai_move (ai, 7, 1));
14929        assert_true (ai_move (ai, 7, 7));
14930        assert_true (ai_move (ai, 0, 1));
14931        assert_true (ai_move (ai, 0, 6));
14932        assert_true (ai_move (ai, 1, 6));
14933        assert_true (ai_move (ai, 1, 7));
14934        assert_true (ai_move (ai, 6, 7));
14935        assert_true (game.pass ());
14936        assert_true (ai_move (ai, 0, 7));
14937    }
14938
14939    private static inline void test_complete_reversi_game_182 ()
14940    {
14941                                  /* 0 1 2 3 4 5 6 7 */
14942        string [] board = {/* 0 */ " . . . . . . . .",
14943                           /* 1 */ " . . . . . . . .",
14944                           /* 2 */ " . D D D . . . .",
14945                           /* 3 */ " . . . L D . . .",
14946                           /* 4 */ " . . L L L . . .",
14947                           /* 5 */ " . . . . . . . .",
14948                           /* 6 */ " . . . . . . . .",
14949                           /* 7 */ " . . . . . . . ."};
14950
14951        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
14952        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
14953
14954        assert_true (ai_move (ai, 4, 5));
14955        assert_true (ai_move (ai, 5, 6));
14956        assert_true (ai_move (ai, 4, 6));
14957        assert_true (ai_move (ai, 5, 2));
14958        assert_true (ai_move (ai, 5, 4));
14959        assert_true (ai_move (ai, 3, 1));
14960        assert_true (ai_move (ai, 4, 2));
14961        assert_true (ai_move (ai, 1, 3));
14962        assert_true (ai_move (ai, 6, 2));
14963        assert_true (ai_move (ai, 0, 2));
14964        assert_true (ai_move (ai, 2, 0));
14965        assert_true (ai_move (ai, 4, 0));
14966        assert_true (ai_move (ai, 3, 0));
14967        assert_true (ai_move (ai, 1, 0));
14968        assert_true (ai_move (ai, 0, 4));
14969        assert_true (ai_move (ai, 1, 4));
14970        assert_true (ai_move (ai, 2, 5));
14971        assert_true (ai_move (ai, 2, 6));
14972        assert_true (ai_move (ai, 1, 5));
14973        assert_true (ai_move (ai, 0, 5));
14974        assert_true (ai_move (ai, 0, 6));
14975        assert_true (ai_move (ai, 7, 2));
14976        assert_true (ai_move (ai, 5, 3));
14977        assert_true (ai_move (ai, 6, 5));
14978        assert_true (ai_move (ai, 3, 5));
14979        assert_true (ai_move (ai, 6, 3));
14980        assert_true (ai_move (ai, 2, 3));
14981        assert_true (ai_move (ai, 4, 1));
14982        assert_true (ai_move (ai, 2, 1));
14983        assert_true (ai_move (ai, 5, 7));
14984        assert_true (ai_move (ai, 3, 6));
14985        assert_true (ai_move (ai, 3, 7));
14986        assert_true (ai_move (ai, 6, 4));
14987        assert_true (ai_move (ai, 5, 1));
14988        assert_true (ai_move (ai, 5, 0));
14989        assert_true (ai_move (ai, 6, 0));
14990        assert_true (ai_move (ai, 1, 7));
14991        assert_true (ai_move (ai, 5, 5));
14992        assert_true (ai_move (ai, 7, 5));
14993        assert_true (ai_move (ai, 2, 7));
14994        assert_true (ai_move (ai, 7, 4));
14995        assert_true (ai_move (ai, 6, 1));
14996        assert_true (ai_move (ai, 4, 7));
14997        assert_true (ai_move (ai, 0, 7));
14998        assert_true (ai_move (ai, 0, 3));
14999        assert_true (ai_move (ai, 1, 6));
15000        assert_true (ai_move (ai, 7, 1));
15001        assert_true (ai_move (ai, 7, 3));
15002        assert_true (ai_move (ai, 6, 6));
15003        assert_true (ai_move (ai, 7, 0));
15004        assert_true (ai_move (ai, 0, 1));
15005        assert_true (ai_move (ai, 0, 0));
15006        assert_true (game.pass ());
15007        assert_true (ai_move (ai, 1, 1));
15008        assert_true (game.pass ());
15009        assert_true (ai_move (ai, 7, 7));
15010        assert_true (ai_move (ai, 7, 6));
15011        assert_true (ai_move (ai, 6, 7));
15012    }
15013
15014    private static inline void test_complete_reversi_game_183 ()
15015    {
15016                                  /* 0 1 2 3 4 5 6 7 */
15017        string [] board = {/* 0 */ " . . . . . . . .",
15018                           /* 1 */ " . L . . . . . .",
15019                           /* 2 */ " . D L D . . . .",
15020                           /* 3 */ " . . . L D . . .",
15021                           /* 4 */ " . . . D L . . .",
15022                           /* 5 */ " . . . . . . . .",
15023                           /* 6 */ " . . . . . . . .",
15024                           /* 7 */ " . . . . . . . ."};
15025
15026        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15027        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15028
15029        assert_true (ai_move (ai, 2, 3));
15030        assert_true (ai_move (ai, 0, 2));
15031        assert_true (ai_move (ai, 2, 1));
15032        assert_true (ai_move (ai, 3, 0));
15033        assert_true (ai_move (ai, 2, 0));
15034        assert_true (ai_move (ai, 1, 0));
15035        assert_true (ai_move (ai, 0, 3));
15036        assert_true (ai_move (ai, 3, 1));
15037        assert_true (ai_move (ai, 0, 1));
15038        assert_true (ai_move (ai, 1, 3));
15039        assert_true (ai_move (ai, 0, 0));
15040        assert_true (ai_move (ai, 4, 2));
15041        assert_true (ai_move (ai, 4, 0));
15042        assert_true (ai_move (ai, 1, 4));
15043        assert_true (ai_move (ai, 5, 2));
15044        assert_true (ai_move (ai, 5, 4));
15045        assert_true (ai_move (ai, 4, 1));
15046        assert_true (ai_move (ai, 6, 2));
15047        assert_true (ai_move (ai, 0, 5));
15048        assert_true (ai_move (ai, 1, 5));
15049        assert_true (ai_move (ai, 2, 5));
15050        assert_true (ai_move (ai, 2, 4));
15051        assert_true (ai_move (ai, 0, 4));
15052        assert_true (ai_move (ai, 2, 6));
15053        assert_true (ai_move (ai, 6, 3));
15054        assert_true (ai_move (ai, 7, 2));
15055        assert_true (ai_move (ai, 3, 6));
15056        assert_true (ai_move (ai, 4, 6));
15057        assert_true (ai_move (ai, 5, 1));
15058        assert_true (ai_move (ai, 6, 1));
15059        assert_true (ai_move (ai, 7, 4));
15060        assert_true (ai_move (ai, 6, 4));
15061        assert_true (ai_move (ai, 2, 7));
15062        assert_true (ai_move (ai, 1, 6));
15063        assert_true (ai_move (ai, 4, 7));
15064        assert_true (game.pass ());
15065        assert_true (ai_move (ai, 5, 6));
15066        assert_true (ai_move (ai, 6, 6));
15067        assert_true (ai_move (ai, 5, 5));
15068        assert_true (ai_move (ai, 4, 5));
15069        assert_true (ai_move (ai, 3, 5));
15070        assert_true (game.pass ());
15071        assert_true (ai_move (ai, 0, 7));
15072        assert_true (ai_move (ai, 0, 6));
15073        assert_true (ai_move (ai, 1, 7));
15074        assert_true (ai_move (ai, 6, 0));
15075        assert_true (ai_move (ai, 5, 0));
15076        assert_true (ai_move (ai, 3, 7));
15077        assert_true (ai_move (ai, 7, 3));
15078        assert_true (ai_move (ai, 7, 5));
15079        assert_true (ai_move (ai, 6, 5));
15080        assert_true (ai_move (ai, 5, 7));
15081        assert_true (ai_move (ai, 5, 3));
15082        assert_true (ai_move (ai, 7, 1));
15083        assert_true (ai_move (ai, 7, 7));
15084        assert_true (ai_move (ai, 6, 7));
15085        assert_true (ai_move (ai, 7, 6));
15086        assert_true (game.pass ());
15087        assert_true (ai_move (ai, 7, 0));
15088    }
15089
15090    private static inline void test_complete_reversi_game_184 ()
15091    {
15092                                  /* 0 1 2 3 4 5 6 7 */
15093        string [] board = {/* 0 */ " . . . . . . . .",
15094                           /* 1 */ " . . . . . . . .",
15095                           /* 2 */ " . . . . L . . .",
15096                           /* 3 */ " . . D D L . . .",
15097                           /* 4 */ " . . . D L . . .",
15098                           /* 5 */ " . . . . L D . .",
15099                           /* 6 */ " . . . . . . . .",
15100                           /* 7 */ " . . . . . . . ."};
15101
15102        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15103        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15104
15105        assert_true (ai_move (ai, 5, 6));
15106        assert_true (ai_move (ai, 2, 5));
15107        assert_true (ai_move (ai, 5, 1));
15108        assert_true (ai_move (ai, 4, 1));
15109        assert_true (ai_move (ai, 3, 1));
15110        assert_true (ai_move (ai, 1, 2));
15111        assert_true (ai_move (ai, 1, 3));
15112        assert_true (ai_move (ai, 4, 6));
15113        assert_true (ai_move (ai, 3, 7));
15114        assert_true (ai_move (ai, 2, 0));
15115        assert_true (ai_move (ai, 2, 1));
15116        assert_true (ai_move (ai, 3, 0));
15117        assert_true (ai_move (ai, 3, 5));
15118        assert_true (ai_move (ai, 4, 0));
15119        assert_true (ai_move (ai, 1, 5));
15120        assert_true (ai_move (ai, 6, 2));
15121        assert_true (ai_move (ai, 5, 4));
15122        assert_true (ai_move (ai, 2, 2));
15123        assert_true (ai_move (ai, 5, 3));
15124        assert_true (ai_move (ai, 1, 4));
15125        assert_true (ai_move (ai, 0, 5));
15126        assert_true (ai_move (ai, 6, 4));
15127        assert_true (ai_move (ai, 6, 3));
15128        assert_true (ai_move (ai, 2, 6));
15129        assert_true (ai_move (ai, 2, 4));
15130        assert_true (ai_move (ai, 5, 7));
15131        assert_true (ai_move (ai, 3, 6));
15132        assert_true (ai_move (ai, 2, 7));
15133        assert_true (ai_move (ai, 4, 7));
15134        assert_true (ai_move (ai, 7, 3));
15135        assert_true (ai_move (ai, 6, 5));
15136        assert_true (ai_move (ai, 0, 4));
15137        assert_true (ai_move (ai, 5, 2));
15138        assert_true (ai_move (ai, 7, 5));
15139        assert_true (ai_move (ai, 3, 2));
15140        assert_true (ai_move (ai, 0, 6));
15141        assert_true (ai_move (ai, 1, 6));
15142        assert_true (ai_move (ai, 1, 7));
15143        assert_true (ai_move (ai, 0, 7));
15144        assert_true (ai_move (ai, 6, 6));
15145        assert_true (ai_move (ai, 0, 3));
15146        assert_true (ai_move (ai, 0, 2));
15147        assert_true (ai_move (ai, 0, 1));
15148        assert_true (ai_move (ai, 1, 1));
15149        assert_true (ai_move (ai, 5, 0));
15150        assert_true (ai_move (ai, 6, 0));
15151        assert_true (ai_move (ai, 6, 1));
15152        assert_true (ai_move (ai, 7, 2));
15153        assert_true (ai_move (ai, 6, 7));
15154        assert_true (game.pass ());
15155        assert_true (ai_move (ai, 7, 4));
15156        assert_true (ai_move (ai, 7, 6));
15157        assert_true (ai_move (ai, 0, 0));
15158        assert_true (ai_move (ai, 1, 0));
15159        assert_true (ai_move (ai, 7, 0));
15160        assert_true (ai_move (ai, 7, 1));
15161        assert_true (ai_move (ai, 7, 7));
15162    }
15163
15164    private static inline void test_complete_reversi_game_185 ()
15165    {
15166                                  /* 0 1 2 3 4 5 6 7 */
15167        string [] board = {/* 0 */ " . . . . . . . .",
15168                           /* 1 */ " . . . . . . . .",
15169                           /* 2 */ " . . . . L . . .",
15170                           /* 3 */ " . . D D L . . .",
15171                           /* 4 */ " . . . L D . . .",
15172                           /* 5 */ " . . L . . D . .",
15173                           /* 6 */ " . . . . . . . .",
15174                           /* 7 */ " . . . . . . . ."};
15175
15176        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15177        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15178
15179        assert_true (ai_move (ai, 5, 1));
15180        assert_true (ai_move (ai, 4, 1));
15181        assert_true (ai_move (ai, 4, 5));
15182        assert_true (ai_move (ai, 2, 4));
15183        assert_true (ai_move (ai, 2, 6));
15184        assert_true (ai_move (ai, 1, 3));
15185        assert_true (ai_move (ai, 1, 2));
15186        assert_true (ai_move (ai, 1, 5));
15187        assert_true (ai_move (ai, 1, 4));
15188        assert_true (ai_move (ai, 3, 7));
15189        assert_true (ai_move (ai, 2, 7));
15190        assert_true (ai_move (ai, 1, 7));
15191        assert_true (ai_move (ai, 2, 2));
15192        assert_true (ai_move (ai, 3, 5));
15193        assert_true (ai_move (ai, 4, 6));
15194        assert_true (ai_move (ai, 2, 1));
15195        assert_true (ai_move (ai, 0, 5));
15196        assert_true (ai_move (ai, 5, 6));
15197        assert_true (ai_move (ai, 3, 2));
15198        assert_true (ai_move (ai, 6, 5));
15199        assert_true (ai_move (ai, 6, 4));
15200        assert_true (ai_move (ai, 4, 7));
15201        assert_true (ai_move (ai, 5, 2));
15202        assert_true (ai_move (ai, 0, 3));
15203        assert_true (ai_move (ai, 0, 2));
15204        assert_true (ai_move (ai, 0, 4));
15205        assert_true (ai_move (ai, 7, 5));
15206        assert_true (ai_move (ai, 3, 6));
15207        assert_true (ai_move (ai, 2, 0));
15208        assert_true (ai_move (ai, 3, 1));
15209        assert_true (ai_move (ai, 1, 1));
15210        assert_true (ai_move (ai, 6, 0));
15211        assert_true (ai_move (ai, 5, 7));
15212        assert_true (ai_move (ai, 6, 7));
15213        assert_true (ai_move (ai, 3, 0));
15214        assert_true (ai_move (ai, 5, 4));
15215        assert_true (ai_move (ai, 5, 3));
15216        assert_true (ai_move (ai, 6, 3));
15217        assert_true (ai_move (ai, 5, 0));
15218        assert_true (ai_move (ai, 6, 1));
15219        assert_true (ai_move (ai, 6, 2));
15220        assert_true (ai_move (ai, 7, 2));
15221        assert_true (ai_move (ai, 7, 4));
15222        assert_true (ai_move (ai, 7, 3));
15223        assert_true (ai_move (ai, 6, 6));
15224        assert_true (ai_move (ai, 4, 0));
15225        assert_true (ai_move (ai, 7, 0));
15226        assert_true (ai_move (ai, 7, 1));
15227        assert_true (ai_move (ai, 1, 6));
15228        assert_true (ai_move (ai, 0, 7));
15229        assert_true (ai_move (ai, 0, 6));
15230        assert_true (ai_move (ai, 7, 7));
15231        assert_true (ai_move (ai, 7, 6));
15232        assert_true (ai_move (ai, 0, 0));
15233        assert_true (ai_move (ai, 1, 0));
15234        assert_true (ai_move (ai, 0, 1));
15235    }
15236
15237    private static inline void test_complete_reversi_game_186 ()
15238    {
15239                                  /* 0 1 2 3 4 5 6 7 */
15240        string [] board = {/* 0 */ " . . . . . . . .",
15241                           /* 1 */ " . . . . . . . .",
15242                           /* 2 */ " . . . . L . . .",
15243                           /* 3 */ " . . D L L . . .",
15244                           /* 4 */ " . . L D D . . .",
15245                           /* 5 */ " . . . . . D . .",
15246                           /* 6 */ " . . . . . . . .",
15247                           /* 7 */ " . . . . . . . ."};
15248
15249        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15250        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15251
15252        assert_true (ai_move (ai, 2, 5));
15253        assert_true (ai_move (ai, 1, 5));
15254        assert_true (ai_move (ai, 1, 4));
15255        assert_true (ai_move (ai, 3, 5));
15256        assert_true (ai_move (ai, 3, 6));
15257        assert_true (ai_move (ai, 1, 2));
15258        assert_true (ai_move (ai, 2, 6));
15259        assert_true (ai_move (ai, 0, 5));
15260        assert_true (ai_move (ai, 2, 2));
15261        assert_true (ai_move (ai, 4, 7));
15262        assert_true (ai_move (ai, 5, 1));
15263        assert_true (ai_move (ai, 2, 1));
15264        assert_true (ai_move (ai, 1, 3));
15265        assert_true (ai_move (ai, 4, 1));
15266        assert_true (ai_move (ai, 4, 5));
15267        assert_true (ai_move (ai, 6, 5));
15268        assert_true (ai_move (ai, 5, 6));
15269        assert_true (ai_move (ai, 5, 7));
15270        assert_true (ai_move (ai, 2, 0));
15271        assert_true (ai_move (ai, 0, 2));
15272        assert_true (ai_move (ai, 7, 5));
15273        assert_true (ai_move (ai, 3, 1));
15274        assert_true (ai_move (ai, 2, 7));
15275        assert_true (ai_move (ai, 3, 0));
15276        assert_true (ai_move (ai, 5, 2));
15277        assert_true (ai_move (ai, 6, 2));
15278        assert_true (ai_move (ai, 5, 3));
15279        assert_true (ai_move (ai, 7, 4));
15280        assert_true (ai_move (ai, 4, 0));
15281        assert_true (ai_move (ai, 3, 2));
15282        assert_true (ai_move (ai, 6, 3));
15283        assert_true (ai_move (ai, 3, 7));
15284        assert_true (ai_move (ai, 6, 7));
15285        assert_true (ai_move (ai, 5, 0));
15286        assert_true (ai_move (ai, 6, 0));
15287        assert_true (ai_move (ai, 7, 6));
15288        assert_true (ai_move (ai, 1, 0));
15289        assert_true (ai_move (ai, 5, 4));
15290        assert_true (ai_move (ai, 4, 6));
15291        assert_true (ai_move (ai, 6, 4));
15292        assert_true (ai_move (ai, 1, 1));
15293        assert_true (ai_move (ai, 6, 1));
15294        assert_true (ai_move (ai, 1, 7));
15295        assert_true (ai_move (ai, 6, 6));
15296        assert_true (ai_move (ai, 7, 7));
15297        assert_true (ai_move (ai, 1, 6));
15298        assert_true (ai_move (ai, 0, 3));
15299        assert_true (ai_move (ai, 0, 4));
15300        assert_true (ai_move (ai, 7, 3));
15301        assert_true (ai_move (ai, 7, 1));
15302        assert_true (ai_move (ai, 7, 0));
15303        assert_true (ai_move (ai, 7, 2));
15304        assert_true (ai_move (ai, 0, 7));
15305        assert_true (ai_move (ai, 0, 0));
15306        assert_true (ai_move (ai, 0, 6));
15307        assert_true (ai_move (ai, 0, 1));
15308    }
15309
15310    private static inline void test_complete_reversi_game_187 ()
15311    {
15312                                  /* 0 1 2 3 4 5 6 7 */
15313        string [] board = {/* 0 */ " . . . . . . . .",
15314                           /* 1 */ " . . . . . . . .",
15315                           /* 2 */ " . . . . L . . .",
15316                           /* 3 */ " . L L L L . . .",
15317                           /* 4 */ " . . . D D . . .",
15318                           /* 5 */ " . . . . . D . .",
15319                           /* 6 */ " . . . . . . . .",
15320                           /* 7 */ " . . . . . . . ."};
15321
15322        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15323        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15324
15325        assert_true (ai_move (ai, 1, 2));
15326        assert_true (ai_move (ai, 2, 5));
15327        assert_true (ai_move (ai, 0, 3));
15328        assert_true (ai_move (ai, 5, 4));
15329        assert_true (ai_move (ai, 4, 5));
15330        assert_true (ai_move (ai, 5, 6));
15331        assert_true (ai_move (ai, 6, 5));
15332        assert_true (ai_move (ai, 3, 6));
15333        assert_true (ai_move (ai, 3, 5));
15334        assert_true (ai_move (ai, 4, 6));
15335        assert_true (ai_move (ai, 1, 5));
15336        assert_true (ai_move (ai, 6, 4));
15337        assert_true (ai_move (ai, 5, 7));
15338        assert_true (ai_move (ai, 1, 4));
15339        assert_true (ai_move (ai, 0, 5));
15340        assert_true (ai_move (ai, 3, 7));
15341        assert_true (ai_move (ai, 6, 7));
15342        assert_true (ai_move (ai, 7, 5));
15343        assert_true (ai_move (ai, 2, 7));
15344        assert_true (ai_move (ai, 4, 7));
15345        assert_true (ai_move (ai, 6, 3));
15346        assert_true (ai_move (ai, 5, 3));
15347        assert_true (ai_move (ai, 5, 2));
15348        assert_true (ai_move (ai, 7, 2));
15349        assert_true (ai_move (ai, 1, 6));
15350        assert_true (ai_move (ai, 3, 2));
15351        assert_true (ai_move (ai, 4, 1));
15352        assert_true (ai_move (ai, 2, 1));
15353        assert_true (ai_move (ai, 2, 6));
15354        assert_true (ai_move (ai, 7, 7));
15355        assert_true (ai_move (ai, 3, 0));
15356        assert_true (ai_move (ai, 1, 0));
15357        assert_true (ai_move (ai, 2, 2));
15358        assert_true (ai_move (ai, 5, 1));
15359        assert_true (ai_move (ai, 7, 6));
15360        assert_true (ai_move (ai, 0, 2));
15361        assert_true (ai_move (ai, 3, 1));
15362        assert_true (ai_move (ai, 0, 4));
15363        assert_true (ai_move (ai, 0, 1));
15364        assert_true (ai_move (ai, 2, 4));
15365        assert_true (ai_move (ai, 2, 0));
15366        assert_true (ai_move (ai, 4, 0));
15367        assert_true (ai_move (ai, 0, 6));
15368        assert_true (ai_move (ai, 1, 7));
15369        assert_true (ai_move (ai, 7, 4));
15370        assert_true (ai_move (ai, 0, 7));
15371        assert_true (ai_move (ai, 6, 2));
15372        assert_true (ai_move (ai, 0, 0));
15373        assert_true (ai_move (ai, 5, 0));
15374        assert_true (ai_move (ai, 6, 1));
15375        assert_true (ai_move (ai, 6, 0));
15376        assert_true (ai_move (ai, 1, 1));
15377        assert_true (game.pass ());
15378        assert_true (ai_move (ai, 7, 3));
15379        assert_true (ai_move (ai, 6, 6));
15380        assert_true (ai_move (ai, 7, 0));
15381        assert_true (ai_move (ai, 7, 1));
15382    }
15383
15384    private static inline void test_complete_reversi_game_188 ()
15385    {
15386                                  /* 0 1 2 3 4 5 6 7 */
15387        string [] board = {/* 0 */ " . . . . . . . .",
15388                           /* 1 */ " . . . . . . . .",
15389                           /* 2 */ " . . . . L . . .",
15390                           /* 3 */ " . . D D L . . .",
15391                           /* 4 */ " . . . D D L . .",
15392                           /* 5 */ " . . . . . . L .",
15393                           /* 6 */ " . . . . . . . .",
15394                           /* 7 */ " . . . . . . . ."};
15395
15396        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15397        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15398
15399        assert_true (ai_move (ai, 6, 4));
15400        assert_true (ai_move (ai, 2, 5));
15401        assert_true (ai_move (ai, 5, 1));
15402        assert_true (ai_move (ai, 4, 1));
15403        assert_true (ai_move (ai, 4, 5));
15404        assert_true (ai_move (ai, 6, 3));
15405        assert_true (ai_move (ai, 7, 2));
15406        assert_true (ai_move (ai, 6, 2));
15407        assert_true (ai_move (ai, 7, 3));
15408        assert_true (ai_move (ai, 3, 6));
15409        assert_true (ai_move (ai, 4, 6));
15410        assert_true (ai_move (ai, 5, 6));
15411        assert_true (ai_move (ai, 4, 7));
15412        assert_true (ai_move (ai, 1, 2));
15413        assert_true (ai_move (ai, 3, 5));
15414        assert_true (ai_move (ai, 3, 2));
15415        assert_true (ai_move (ai, 1, 4));
15416        assert_true (ai_move (ai, 1, 5));
15417        assert_true (ai_move (ai, 2, 6));
15418        assert_true (ai_move (ai, 3, 7));
15419        assert_true (ai_move (ai, 2, 7));
15420        assert_true (ai_move (ai, 5, 7));
15421        assert_true (ai_move (ai, 6, 7));
15422        assert_true (ai_move (ai, 5, 5));
15423        assert_true (ai_move (ai, 7, 4));
15424        assert_true (ai_move (ai, 0, 5));
15425        assert_true (ai_move (ai, 2, 1));
15426        assert_true (ai_move (ai, 2, 2));
15427        assert_true (ai_move (ai, 4, 0));
15428        assert_true (ai_move (ai, 2, 0));
15429        assert_true (ai_move (ai, 0, 2));
15430        assert_true (ai_move (ai, 3, 1));
15431        assert_true (ai_move (ai, 0, 4));
15432        assert_true (ai_move (ai, 1, 3));
15433        assert_true (ai_move (ai, 0, 6));
15434        assert_true (ai_move (ai, 0, 3));
15435        assert_true (ai_move (ai, 5, 3));
15436        assert_true (ai_move (ai, 2, 4));
15437        assert_true (ai_move (ai, 1, 6));
15438        assert_true (ai_move (ai, 5, 2));
15439        assert_true (ai_move (ai, 3, 0));
15440        assert_true (ai_move (ai, 5, 0));
15441        assert_true (ai_move (ai, 6, 1));
15442        assert_true (ai_move (ai, 0, 7));
15443        assert_true (ai_move (ai, 6, 6));
15444        assert_true (ai_move (ai, 6, 0));
15445        assert_true (ai_move (ai, 0, 1));
15446        assert_true (ai_move (ai, 7, 5));
15447        assert_true (ai_move (ai, 7, 6));
15448        assert_true (ai_move (ai, 1, 7));
15449        assert_true (ai_move (ai, 1, 0));
15450        assert_true (ai_move (ai, 7, 0));
15451        assert_true (ai_move (ai, 1, 1));
15452        assert_true (ai_move (ai, 7, 1));
15453        assert_true (game.pass ());
15454        assert_true (ai_move (ai, 7, 7));
15455        assert_true (game.pass ());
15456        assert_true (ai_move (ai, 0, 0));
15457    }
15458
15459    private static inline void test_complete_reversi_game_189 ()
15460    {
15461                                  /* 0 1 2 3 4 5 6 7 */
15462        string [] board = {/* 0 */ " . . . . . . . .",
15463                           /* 1 */ " . . . . . . . .",
15464                           /* 2 */ " . . . . L . . .",
15465                           /* 3 */ " . . D D L . . .",
15466                           /* 4 */ " . . . D L D . .",
15467                           /* 5 */ " . . . . L . . .",
15468                           /* 6 */ " . . . . . . . .",
15469                           /* 7 */ " . . . . . . . ."};
15470
15471        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15472        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15473
15474        assert_true (ai_move (ai, 5, 6));
15475        assert_true (ai_move (ai, 4, 6));
15476        assert_true (ai_move (ai, 5, 1));
15477        assert_true (ai_move (ai, 6, 4));
15478        assert_true (ai_move (ai, 5, 2));
15479        assert_true (ai_move (ai, 2, 2));
15480        assert_true (ai_move (ai, 2, 1));
15481        assert_true (ai_move (ai, 5, 3));
15482        assert_true (ai_move (ai, 2, 4));
15483        assert_true (ai_move (ai, 5, 0));
15484        assert_true (ai_move (ai, 6, 2));
15485        assert_true (ai_move (ai, 7, 3));
15486        assert_true (ai_move (ai, 7, 2));
15487        assert_true (ai_move (ai, 4, 1));
15488        assert_true (ai_move (ai, 3, 0));
15489        assert_true (ai_move (ai, 3, 2));
15490        assert_true (ai_move (ai, 3, 1));
15491        assert_true (ai_move (ai, 6, 3));
15492        assert_true (ai_move (ai, 7, 5));
15493        assert_true (ai_move (ai, 7, 4));
15494        assert_true (ai_move (ai, 3, 5));
15495        assert_true (ai_move (ai, 2, 0));
15496        assert_true (ai_move (ai, 1, 0));
15497        assert_true (ai_move (ai, 2, 5));
15498        assert_true (ai_move (ai, 2, 6));
15499        assert_true (ai_move (ai, 1, 4));
15500        assert_true (ai_move (ai, 5, 5));
15501        assert_true (ai_move (ai, 5, 7));
15502        assert_true (ai_move (ai, 1, 2));
15503        assert_true (ai_move (ai, 1, 5));
15504        assert_true (ai_move (ai, 0, 5));
15505        assert_true (ai_move (ai, 1, 3));
15506        assert_true (ai_move (ai, 6, 5));
15507        assert_true (ai_move (ai, 3, 6));
15508        assert_true (ai_move (ai, 0, 4));
15509        assert_true (ai_move (ai, 2, 7));
15510        assert_true (ai_move (ai, 0, 3));
15511        assert_true (ai_move (ai, 0, 2));
15512        assert_true (ai_move (ai, 0, 1));
15513        assert_true (ai_move (ai, 6, 6));
15514        assert_true (ai_move (ai, 3, 7));
15515        assert_true (ai_move (ai, 4, 7));
15516        assert_true (ai_move (ai, 1, 6));
15517        assert_true (ai_move (ai, 0, 7));
15518        assert_true (ai_move (ai, 1, 7));
15519        assert_true (ai_move (ai, 0, 6));
15520        assert_true (ai_move (ai, 4, 0));
15521        assert_true (ai_move (ai, 0, 0));
15522        assert_true (ai_move (ai, 7, 7));
15523        assert_true (ai_move (ai, 1, 1));
15524        assert_true (ai_move (ai, 6, 7));
15525        assert_true (ai_move (ai, 6, 0));
15526        assert_true (ai_move (ai, 6, 1));
15527        assert_true (ai_move (ai, 7, 6));
15528        assert_true (game.pass ());
15529        assert_true (ai_move (ai, 7, 1));
15530        assert_true (ai_move (ai, 7, 0));
15531    }
15532
15533    private static inline void test_complete_reversi_game_190 ()
15534    {
15535                                  /* 0 1 2 3 4 5 6 7 */
15536        string [] board = {/* 0 */ " . . . . . . . .",
15537                           /* 1 */ " . . . . . . . .",
15538                           /* 2 */ " . . . . L . . .",
15539                           /* 3 */ " . . D D L . . .",
15540                           /* 4 */ " . . . L D D . .",
15541                           /* 5 */ " . . L . . . . .",
15542                           /* 6 */ " . . . . . . . .",
15543                           /* 7 */ " . . . . . . . ."};
15544
15545        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15546        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15547
15548        assert_true (ai_move (ai, 5, 1));
15549        assert_true (ai_move (ai, 4, 1));
15550        assert_true (ai_move (ai, 4, 5));
15551        assert_true (ai_move (ai, 6, 5));
15552        assert_true (ai_move (ai, 6, 3));
15553        assert_true (ai_move (ai, 2, 4));
15554        assert_true (ai_move (ai, 2, 6));
15555        assert_true (ai_move (ai, 1, 3));
15556        assert_true (ai_move (ai, 1, 2));
15557        assert_true (ai_move (ai, 1, 5));
15558        assert_true (ai_move (ai, 1, 4));
15559        assert_true (ai_move (ai, 3, 7));
15560        assert_true (ai_move (ai, 2, 7));
15561        assert_true (ai_move (ai, 1, 7));
15562        assert_true (ai_move (ai, 2, 2));
15563        assert_true (ai_move (ai, 3, 5));
15564        assert_true (ai_move (ai, 4, 6));
15565        assert_true (ai_move (ai, 2, 1));
15566        assert_true (ai_move (ai, 3, 6));
15567        assert_true (ai_move (ai, 5, 3));
15568        assert_true (ai_move (ai, 2, 0));
15569        assert_true (ai_move (ai, 6, 4));
15570        assert_true (ai_move (ai, 0, 5));
15571        assert_true (ai_move (ai, 0, 2));
15572        assert_true (ai_move (ai, 0, 4));
15573        assert_true (ai_move (ai, 1, 6));
15574        assert_true (ai_move (ai, 5, 5));
15575        assert_true (ai_move (ai, 7, 3));
15576        assert_true (ai_move (ai, 7, 5));
15577        assert_true (ai_move (ai, 5, 6));
15578        assert_true (ai_move (ai, 7, 4));
15579        assert_true (ai_move (ai, 7, 6));
15580        assert_true (ai_move (ai, 4, 7));
15581        assert_true (ai_move (ai, 5, 7));
15582        assert_true (ai_move (ai, 7, 2));
15583        assert_true (ai_move (ai, 7, 1));
15584        assert_true (ai_move (ai, 6, 2));
15585        assert_true (ai_move (ai, 5, 2));
15586        assert_true (ai_move (ai, 0, 7));
15587        assert_true (ai_move (ai, 5, 0));
15588        assert_true (ai_move (ai, 6, 7));
15589        assert_true (ai_move (ai, 0, 6));
15590        assert_true (ai_move (ai, 3, 1));
15591        assert_true (ai_move (ai, 3, 2));
15592        assert_true (ai_move (ai, 0, 3));
15593        assert_true (ai_move (ai, 4, 0));
15594        assert_true (ai_move (ai, 3, 0));
15595        assert_true (ai_move (ai, 1, 0));
15596        assert_true (ai_move (ai, 1, 1));
15597        assert_true (ai_move (ai, 0, 0));
15598        assert_true (ai_move (ai, 0, 1));
15599        assert_true (ai_move (ai, 6, 6));
15600        assert_true (ai_move (ai, 7, 7));
15601        assert_true (game.pass ());
15602        assert_true (ai_move (ai, 7, 0));
15603        assert_true (game.pass ());
15604        assert_true (ai_move (ai, 6, 0));
15605        assert_true (ai_move (ai, 6, 1));
15606    }
15607
15608    private static inline void test_complete_reversi_game_191 ()
15609    {
15610                                  /* 0 1 2 3 4 5 6 7 */
15611        string [] board = {/* 0 */ " . . . . . . . .",
15612                           /* 1 */ " . . . . . . . .",
15613                           /* 2 */ " . . . . L . . .",
15614                           /* 3 */ " . . D L L . . .",
15615                           /* 4 */ " . . L D D D . .",
15616                           /* 5 */ " . . . . . . . .",
15617                           /* 6 */ " . . . . . . . .",
15618                           /* 7 */ " . . . . . . . ."};
15619
15620        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15621        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15622
15623        assert_true (ai_move (ai, 2, 5));
15624        assert_true (ai_move (ai, 6, 5));
15625        assert_true (ai_move (ai, 2, 2));
15626        assert_true (ai_move (ai, 4, 5));
15627        assert_true (ai_move (ai, 5, 1));
15628        assert_true (ai_move (ai, 4, 1));
15629        assert_true (ai_move (ai, 5, 6));
15630        assert_true (ai_move (ai, 4, 6));
15631        assert_true (ai_move (ai, 7, 4));
15632        assert_true (ai_move (ai, 1, 5));
15633        assert_true (ai_move (ai, 1, 4));
15634        assert_true (ai_move (ai, 3, 5));
15635        assert_true (ai_move (ai, 2, 6));
15636        assert_true (ai_move (ai, 1, 2));
15637        assert_true (ai_move (ai, 0, 2));
15638        assert_true (ai_move (ai, 2, 7));
15639        assert_true (ai_move (ai, 3, 1));
15640        assert_true (ai_move (ai, 2, 1));
15641        assert_true (ai_move (ai, 1, 3));
15642        assert_true (ai_move (ai, 0, 4));
15643        assert_true (ai_move (ai, 5, 7));
15644        assert_true (ai_move (ai, 3, 6));
15645        assert_true (ai_move (ai, 3, 0));
15646        assert_true (ai_move (ai, 7, 6));
15647        assert_true (ai_move (ai, 0, 6));
15648        assert_true (ai_move (ai, 1, 6));
15649        assert_true (ai_move (ai, 6, 4));
15650        assert_true (ai_move (ai, 0, 3));
15651        assert_true (ai_move (ai, 0, 5));
15652        assert_true (ai_move (ai, 5, 3));
15653        assert_true (ai_move (ai, 5, 5));
15654        assert_true (ai_move (ai, 6, 3));
15655        assert_true (ai_move (ai, 3, 2));
15656        assert_true (ai_move (ai, 2, 0));
15657        assert_true (ai_move (ai, 4, 0));
15658        assert_true (ai_move (ai, 5, 0));
15659        assert_true (ai_move (ai, 1, 1));
15660        assert_true (ai_move (ai, 3, 7));
15661        assert_true (ai_move (ai, 6, 6));
15662        assert_true (ai_move (ai, 4, 7));
15663        assert_true (ai_move (ai, 0, 7));
15664        assert_true (ai_move (ai, 6, 7));
15665        assert_true (ai_move (ai, 7, 7));
15666        assert_true (ai_move (ai, 5, 2));
15667        assert_true (ai_move (ai, 1, 7));
15668        assert_true (ai_move (ai, 1, 0));
15669        assert_true (ai_move (ai, 7, 2));
15670        assert_true (ai_move (ai, 6, 2));
15671        assert_true (ai_move (ai, 7, 3));
15672        assert_true (ai_move (ai, 7, 5));
15673        assert_true (ai_move (ai, 6, 1));
15674        assert_true (ai_move (ai, 6, 0));
15675        assert_true (ai_move (ai, 7, 0));
15676        assert_true (ai_move (ai, 7, 1));
15677        assert_true (ai_move (ai, 0, 0));
15678        assert_true (ai_move (ai, 0, 1));
15679    }
15680
15681    private static inline void test_complete_reversi_game_192 ()
15682    {
15683                                  /* 0 1 2 3 4 5 6 7 */
15684        string [] board = {/* 0 */ " . . . . . . . .",
15685                           /* 1 */ " . . . . . . . .",
15686                           /* 2 */ " . . . . L . . .",
15687                           /* 3 */ " . L L L L . . .",
15688                           /* 4 */ " . . . D D D . .",
15689                           /* 5 */ " . . . . . . . .",
15690                           /* 6 */ " . . . . . . . .",
15691                           /* 7 */ " . . . . . . . ."};
15692
15693        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15694        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15695
15696        assert_true (ai_move (ai, 1, 2));
15697        assert_true (ai_move (ai, 6, 5));
15698        assert_true (ai_move (ai, 6, 4));
15699        assert_true (ai_move (ai, 2, 5));
15700        assert_true (ai_move (ai, 0, 3));
15701        assert_true (ai_move (ai, 4, 5));
15702        assert_true (ai_move (ai, 3, 6));
15703        assert_true (ai_move (ai, 5, 6));
15704        assert_true (ai_move (ai, 1, 4));
15705        assert_true (ai_move (ai, 6, 3));
15706        assert_true (ai_move (ai, 7, 2));
15707        assert_true (ai_move (ai, 4, 6));
15708        assert_true (ai_move (ai, 7, 4));
15709        assert_true (ai_move (ai, 2, 7));
15710        assert_true (ai_move (ai, 6, 6));
15711        assert_true (ai_move (ai, 0, 1));
15712        assert_true (ai_move (ai, 2, 1));
15713        assert_true (ai_move (ai, 0, 5));
15714        assert_true (ai_move (ai, 4, 7));
15715        assert_true (ai_move (ai, 2, 6));
15716        assert_true (ai_move (ai, 1, 5));
15717        assert_true (ai_move (ai, 3, 5));
15718        assert_true (ai_move (ai, 3, 2));
15719        assert_true (ai_move (ai, 3, 1));
15720        assert_true (ai_move (ai, 4, 1));
15721        assert_true (ai_move (ai, 6, 7));
15722        assert_true (ai_move (ai, 2, 4));
15723        assert_true (ai_move (ai, 2, 2));
15724        assert_true (ai_move (ai, 1, 1));
15725        assert_true (ai_move (ai, 2, 0));
15726        assert_true (ai_move (ai, 3, 0));
15727        assert_true (ai_move (ai, 5, 0));
15728        assert_true (ai_move (ai, 1, 0));
15729        assert_true (ai_move (ai, 0, 4));
15730        assert_true (ai_move (ai, 0, 6));
15731        assert_true (ai_move (ai, 4, 0));
15732        assert_true (ai_move (ai, 5, 5));
15733        assert_true (ai_move (ai, 7, 3));
15734        assert_true (ai_move (ai, 6, 0));
15735        assert_true (ai_move (ai, 7, 5));
15736        assert_true (ai_move (ai, 7, 6));
15737        assert_true (ai_move (ai, 5, 2));
15738        assert_true (ai_move (ai, 6, 2));
15739        assert_true (ai_move (ai, 0, 0));
15740        assert_true (ai_move (ai, 0, 2));
15741        assert_true (ai_move (ai, 0, 7));
15742        assert_true (ai_move (ai, 5, 7));
15743        assert_true (ai_move (ai, 3, 7));
15744        assert_true (ai_move (ai, 1, 7));
15745        assert_true (ai_move (ai, 7, 7));
15746        assert_true (ai_move (ai, 5, 3));
15747        assert_true (ai_move (ai, 7, 0));
15748        assert_true (ai_move (ai, 5, 1));
15749        assert_true (ai_move (ai, 7, 1));
15750        assert_true (game.pass ());
15751        assert_true (ai_move (ai, 6, 1));
15752        assert_true (game.pass ());
15753        assert_true (ai_move (ai, 1, 6));
15754    }
15755
15756    private static inline void test_complete_reversi_game_193 ()
15757    {
15758                                  /* 0 1 2 3 4 5 6 7 */
15759        string [] board = {/* 0 */ " . . . . . . . .",
15760                           /* 1 */ " . . . . . . . .",
15761                           /* 2 */ " . . . . L . . .",
15762                           /* 3 */ " . . D D D L . .",
15763                           /* 4 */ " . . . D L . L .",
15764                           /* 5 */ " . . . . . . . .",
15765                           /* 6 */ " . . . . . . . .",
15766                           /* 7 */ " . . . . . . . ."};
15767
15768        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15769        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15770
15771        assert_true (ai_move (ai, 6, 3));
15772        assert_true (ai_move (ai, 6, 2));
15773        assert_true (ai_move (ai, 4, 1));
15774        assert_true (ai_move (ai, 3, 1));
15775        assert_true (ai_move (ai, 5, 1));
15776        assert_true (ai_move (ai, 2, 2));
15777        assert_true (ai_move (ai, 2, 1));
15778        assert_true (ai_move (ai, 3, 5));
15779        assert_true (ai_move (ai, 7, 5));
15780        assert_true (ai_move (ai, 1, 3));
15781        assert_true (ai_move (ai, 0, 4));
15782        assert_true (ai_move (ai, 2, 0));
15783        assert_true (ai_move (ai, 4, 5));
15784        assert_true (ai_move (ai, 5, 6));
15785        assert_true (ai_move (ai, 4, 6));
15786        assert_true (ai_move (ai, 5, 7));
15787        assert_true (ai_move (ai, 2, 6));
15788        assert_true (ai_move (ai, 2, 4));
15789        assert_true (ai_move (ai, 2, 5));
15790        assert_true (ai_move (ai, 3, 6));
15791        assert_true (ai_move (ai, 2, 7));
15792        assert_true (ai_move (ai, 1, 5));
15793        assert_true (ai_move (ai, 0, 5));
15794        assert_true (ai_move (ai, 3, 7));
15795        assert_true (ai_move (ai, 1, 4));
15796        assert_true (ai_move (ai, 0, 2));
15797        assert_true (ai_move (ai, 1, 2));
15798        assert_true (ai_move (ai, 0, 3));
15799        assert_true (ai_move (ai, 1, 6));
15800        assert_true (ai_move (ai, 5, 4));
15801        assert_true (ai_move (ai, 0, 1));
15802        assert_true (ai_move (ai, 7, 4));
15803        assert_true (ai_move (ai, 5, 5));
15804        assert_true (ai_move (ai, 5, 2));
15805        assert_true (ai_move (ai, 6, 5));
15806        assert_true (ai_move (ai, 3, 2));
15807        assert_true (ai_move (ai, 7, 2));
15808        assert_true (ai_move (ai, 7, 3));
15809        assert_true (ai_move (ai, 3, 0));
15810        assert_true (ai_move (ai, 5, 0));
15811        assert_true (ai_move (ai, 4, 0));
15812        assert_true (ai_move (ai, 0, 7));
15813        assert_true (ai_move (ai, 1, 7));
15814        assert_true (ai_move (ai, 0, 6));
15815        assert_true (ai_move (ai, 4, 7));
15816        assert_true (ai_move (ai, 0, 0));
15817        assert_true (ai_move (ai, 1, 0));
15818        assert_true (ai_move (ai, 1, 1));
15819        assert_true (ai_move (ai, 6, 1));
15820        assert_true (ai_move (ai, 7, 0));
15821        assert_true (ai_move (ai, 6, 0));
15822        assert_true (ai_move (ai, 6, 6));
15823        assert_true (ai_move (ai, 7, 6));
15824        assert_true (ai_move (ai, 7, 1));
15825        assert_true (ai_move (ai, 6, 7));
15826        assert_true (ai_move (ai, 7, 7));
15827    }
15828
15829    private static inline void test_complete_reversi_game_194 ()
15830    {
15831                                  /* 0 1 2 3 4 5 6 7 */
15832        string [] board = {/* 0 */ " . . . . . . . .",
15833                           /* 1 */ " . . . . . . . .",
15834                           /* 2 */ " . . . . L . L .",
15835                           /* 3 */ " . . D D D L . .",
15836                           /* 4 */ " . . . D L . . .",
15837                           /* 5 */ " . . . . . . . .",
15838                           /* 6 */ " . . . . . . . .",
15839                           /* 7 */ " . . . . . . . ."};
15840
15841        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15842        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15843
15844        assert_true (ai_move (ai, 6, 3));
15845        assert_true (ai_move (ai, 6, 4));
15846        assert_true (ai_move (ai, 4, 1));
15847        assert_true (ai_move (ai, 3, 1));
15848        assert_true (ai_move (ai, 5, 1));
15849        assert_true (ai_move (ai, 2, 2));
15850        assert_true (ai_move (ai, 2, 1));
15851        assert_true (ai_move (ai, 3, 5));
15852        assert_true (ai_move (ai, 7, 5));
15853        assert_true (ai_move (ai, 1, 3));
15854        assert_true (ai_move (ai, 0, 4));
15855        assert_true (ai_move (ai, 2, 0));
15856        assert_true (ai_move (ai, 4, 5));
15857        assert_true (ai_move (ai, 5, 6));
15858        assert_true (ai_move (ai, 4, 6));
15859        assert_true (ai_move (ai, 5, 7));
15860        assert_true (ai_move (ai, 2, 6));
15861        assert_true (ai_move (ai, 2, 4));
15862        assert_true (ai_move (ai, 2, 5));
15863        assert_true (ai_move (ai, 3, 6));
15864        assert_true (ai_move (ai, 2, 7));
15865        assert_true (ai_move (ai, 1, 5));
15866        assert_true (ai_move (ai, 0, 5));
15867        assert_true (ai_move (ai, 3, 7));
15868        assert_true (ai_move (ai, 1, 4));
15869        assert_true (ai_move (ai, 0, 2));
15870        assert_true (ai_move (ai, 1, 2));
15871        assert_true (ai_move (ai, 0, 3));
15872        assert_true (ai_move (ai, 1, 6));
15873        assert_true (ai_move (ai, 5, 4));
15874        assert_true (ai_move (ai, 0, 1));
15875        assert_true (ai_move (ai, 7, 4));
15876        assert_true (ai_move (ai, 5, 5));
15877        assert_true (ai_move (ai, 5, 2));
15878        assert_true (ai_move (ai, 6, 5));
15879        assert_true (ai_move (ai, 3, 2));
15880        assert_true (ai_move (ai, 7, 2));
15881        assert_true (ai_move (ai, 7, 3));
15882        assert_true (ai_move (ai, 3, 0));
15883        assert_true (ai_move (ai, 5, 0));
15884        assert_true (ai_move (ai, 4, 0));
15885        assert_true (ai_move (ai, 0, 7));
15886        assert_true (ai_move (ai, 1, 7));
15887        assert_true (ai_move (ai, 0, 6));
15888        assert_true (ai_move (ai, 4, 7));
15889        assert_true (ai_move (ai, 0, 0));
15890        assert_true (ai_move (ai, 1, 0));
15891        assert_true (ai_move (ai, 1, 1));
15892        assert_true (ai_move (ai, 6, 1));
15893        assert_true (ai_move (ai, 7, 0));
15894        assert_true (ai_move (ai, 6, 0));
15895        assert_true (ai_move (ai, 6, 6));
15896        assert_true (ai_move (ai, 7, 6));
15897        assert_true (ai_move (ai, 7, 1));
15898        assert_true (ai_move (ai, 6, 7));
15899        assert_true (ai_move (ai, 7, 7));
15900    }
15901
15902    private static inline void test_complete_reversi_game_195 ()
15903    {
15904                                  /* 0 1 2 3 4 5 6 7 */
15905        string [] board = {/* 0 */ " . . . . . . . .",
15906                           /* 1 */ " . . . . . . . .",
15907                           /* 2 */ " . . . . L . . .",
15908                           /* 3 */ " . . D L D D . .",
15909                           /* 4 */ " . . L L L . . .",
15910                           /* 5 */ " . . . . . . . .",
15911                           /* 6 */ " . . . . . . . .",
15912                           /* 7 */ " . . . . . . . ."};
15913
15914        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15915        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15916
15917        assert_true (ai_move (ai, 4, 1));
15918        assert_true (ai_move (ai, 2, 2));
15919        assert_true (ai_move (ai, 4, 5));
15920        assert_true (ai_move (ai, 5, 6));
15921        assert_true (ai_move (ai, 4, 6));
15922        assert_true (ai_move (ai, 5, 1));
15923        assert_true (ai_move (ai, 3, 1));
15924        assert_true (ai_move (ai, 4, 0));
15925        assert_true (ai_move (ai, 2, 0));
15926        assert_true (ai_move (ai, 2, 1));
15927        assert_true (ai_move (ai, 6, 0));
15928        assert_true (ai_move (ai, 6, 2));
15929        assert_true (ai_move (ai, 1, 2));
15930        assert_true (ai_move (ai, 1, 3));
15931        assert_true (ai_move (ai, 2, 5));
15932        assert_true (ai_move (ai, 1, 5));
15933        assert_true (ai_move (ai, 0, 5));
15934        assert_true (ai_move (ai, 6, 4));
15935        assert_true (ai_move (ai, 6, 3));
15936        assert_true (ai_move (ai, 2, 6));
15937        assert_true (ai_move (ai, 3, 5));
15938        assert_true (ai_move (ai, 0, 4));
15939        assert_true (ai_move (ai, 0, 2));
15940        assert_true (ai_move (ai, 0, 3));
15941        assert_true (ai_move (ai, 2, 7));
15942        assert_true (ai_move (ai, 3, 7));
15943        assert_true (ai_move (ai, 4, 7));
15944        assert_true (ai_move (ai, 3, 6));
15945        assert_true (ai_move (ai, 1, 4));
15946        assert_true (ai_move (ai, 5, 2));
15947        assert_true (ai_move (ai, 5, 7));
15948        assert_true (ai_move (ai, 5, 5));
15949        assert_true (ai_move (ai, 1, 7));
15950        assert_true (ai_move (ai, 5, 4));
15951        assert_true (ai_move (ai, 6, 7));
15952        assert_true (ai_move (ai, 7, 3));
15953        assert_true (ai_move (ai, 7, 2));
15954        assert_true (ai_move (ai, 7, 4));
15955        assert_true (ai_move (ai, 3, 2));
15956        assert_true (ai_move (ai, 6, 1));
15957        assert_true (ai_move (ai, 7, 5));
15958        assert_true (ai_move (ai, 3, 0));
15959        assert_true (ai_move (ai, 6, 5));
15960        assert_true (ai_move (ai, 1, 0));
15961        assert_true (ai_move (ai, 7, 1));
15962        assert_true (ai_move (ai, 1, 6));
15963        assert_true (ai_move (ai, 0, 6));
15964        assert_true (ai_move (ai, 0, 7));
15965        assert_true (ai_move (ai, 0, 1));
15966        assert_true (ai_move (ai, 7, 7));
15967        assert_true (ai_move (ai, 5, 0));
15968        assert_true (ai_move (ai, 7, 0));
15969        assert_true (ai_move (ai, 1, 1));
15970        assert_true (ai_move (ai, 7, 6));
15971        assert_true (ai_move (ai, 6, 6));
15972        assert_true (ai_move (ai, 0, 0));
15973    }
15974
15975    private static inline void test_complete_reversi_game_196 ()
15976    {
15977                                  /* 0 1 2 3 4 5 6 7 */
15978        string [] board = {/* 0 */ " . . . . . . . .",
15979                           /* 1 */ " . . . . . . . .",
15980                           /* 2 */ " . . L . L . . .",
15981                           /* 3 */ " . . D L D D . .",
15982                           /* 4 */ " . . . D L . . .",
15983                           /* 5 */ " . . . . . . . .",
15984                           /* 6 */ " . . . . . . . .",
15985                           /* 7 */ " . . . . . . . ."};
15986
15987        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
15988        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
15989
15990        assert_true (ai_move (ai, 2, 1));
15991        assert_true (ai_move (ai, 6, 2));
15992        assert_true (ai_move (ai, 6, 3));
15993        assert_true (ai_move (ai, 1, 3));
15994        assert_true (ai_move (ai, 2, 4));
15995        assert_true (ai_move (ai, 3, 1));
15996        assert_true (ai_move (ai, 3, 2));
15997        assert_true (ai_move (ai, 2, 5));
15998        assert_true (ai_move (ai, 5, 2));
15999        assert_true (ai_move (ai, 2, 0));
16000        assert_true (ai_move (ai, 1, 5));
16001        assert_true (ai_move (ai, 0, 5));
16002        assert_true (ai_move (ai, 2, 6));
16003        assert_true (ai_move (ai, 3, 7));
16004        assert_true (ai_move (ai, 1, 4));
16005        assert_true (ai_move (ai, 5, 4));
16006        assert_true (ai_move (ai, 4, 1));
16007        assert_true (ai_move (ai, 7, 2));
16008        assert_true (ai_move (ai, 7, 4));
16009        assert_true (ai_move (ai, 7, 3));
16010        assert_true (ai_move (ai, 2, 7));
16011        assert_true (ai_move (ai, 7, 5));
16012        assert_true (ai_move (ai, 4, 7));
16013        assert_true (ai_move (ai, 3, 0));
16014        assert_true (ai_move (ai, 0, 3));
16015        assert_true (ai_move (ai, 5, 1));
16016        assert_true (ai_move (ai, 3, 5));
16017        assert_true (ai_move (ai, 4, 5));
16018        assert_true (ai_move (ai, 3, 6));
16019        assert_true (ai_move (ai, 0, 4));
16020        assert_true (ai_move (ai, 0, 2));
16021        assert_true (ai_move (ai, 0, 1));
16022        assert_true (ai_move (ai, 1, 2));
16023        assert_true (ai_move (ai, 4, 6));
16024        assert_true (ai_move (ai, 6, 1));
16025        assert_true (ai_move (ai, 1, 1));
16026        assert_true (ai_move (ai, 4, 0));
16027        assert_true (ai_move (ai, 5, 0));
16028        assert_true (ai_move (ai, 7, 0));
16029        assert_true (ai_move (ai, 7, 1));
16030        assert_true (ai_move (ai, 7, 6));
16031        assert_true (ai_move (ai, 1, 6));
16032        assert_true (ai_move (ai, 6, 4));
16033        assert_true (ai_move (ai, 6, 5));
16034        assert_true (ai_move (ai, 5, 6));
16035        assert_true (ai_move (ai, 6, 7));
16036        assert_true (ai_move (ai, 0, 7));
16037        assert_true (ai_move (ai, 6, 0));
16038        assert_true (ai_move (ai, 0, 6));
16039        assert_true (ai_move (ai, 1, 7));
16040        assert_true (ai_move (ai, 5, 7));
16041        assert_true (ai_move (ai, 6, 6));
16042        assert_true (ai_move (ai, 1, 0));
16043        assert_true (game.pass ());
16044        assert_true (ai_move (ai, 0, 0));
16045        assert_true (game.pass ());
16046        assert_true (ai_move (ai, 5, 5));
16047        assert_true (game.pass ());
16048        assert_true (ai_move (ai, 7, 7));
16049    }
16050
16051    private static inline void test_complete_reversi_game_197 ()
16052    {
16053                                  /* 0 1 2 3 4 5 6 7 */
16054        string [] board = {/* 0 */ " . . . . . . . .",
16055                           /* 1 */ " . . . . . . . .",
16056                           /* 2 */ " . . . . L L L .",
16057                           /* 3 */ " . . D D D . . .",
16058                           /* 4 */ " . . . D L . . .",
16059                           /* 5 */ " . . . . . . . .",
16060                           /* 6 */ " . . . . . . . .",
16061                           /* 7 */ " . . . . . . . ."};
16062
16063        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16064        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16065
16066        assert_true (ai_move (ai, 5, 5));
16067        assert_true (ai_move (ai, 2, 4));
16068        assert_true (ai_move (ai, 2, 5));
16069        assert_true (ai_move (ai, 1, 5));
16070        assert_true (ai_move (ai, 1, 4));
16071        assert_true (ai_move (ai, 3, 5));
16072        assert_true (ai_move (ai, 3, 6));
16073        assert_true (ai_move (ai, 1, 2));
16074        assert_true (ai_move (ai, 2, 6));
16075        assert_true (ai_move (ai, 0, 5));
16076        assert_true (ai_move (ai, 2, 2));
16077        assert_true (ai_move (ai, 4, 7));
16078        assert_true (ai_move (ai, 4, 5));
16079        assert_true (ai_move (ai, 2, 1));
16080        assert_true (ai_move (ai, 1, 3));
16081        assert_true (ai_move (ai, 6, 5));
16082        assert_true (ai_move (ai, 3, 1));
16083        assert_true (ai_move (ai, 0, 2));
16084        assert_true (ai_move (ai, 5, 3));
16085        assert_true (ai_move (ai, 2, 7));
16086        assert_true (ai_move (ai, 5, 1));
16087        assert_true (ai_move (ai, 3, 2));
16088        assert_true (ai_move (ai, 4, 1));
16089        assert_true (ai_move (ai, 5, 0));
16090        assert_true (ai_move (ai, 7, 2));
16091        assert_true (ai_move (ai, 4, 0));
16092        assert_true (ai_move (ai, 1, 6));
16093        assert_true (ai_move (ai, 6, 3));
16094        assert_true (ai_move (ai, 6, 1));
16095        assert_true (ai_move (ai, 5, 4));
16096        assert_true (ai_move (ai, 2, 0));
16097        assert_true (ai_move (ai, 7, 0));
16098        assert_true (ai_move (ai, 5, 6));
16099        assert_true (ai_move (ai, 7, 1));
16100        assert_true (ai_move (ai, 6, 4));
16101        assert_true (ai_move (ai, 7, 3));
16102        assert_true (ai_move (ai, 0, 6));
16103        assert_true (ai_move (ai, 0, 4));
16104        assert_true (ai_move (ai, 4, 6));
16105        assert_true (ai_move (ai, 5, 7));
16106        assert_true (ai_move (ai, 7, 5));
16107        assert_true (ai_move (ai, 3, 7));
16108        assert_true (ai_move (ai, 1, 7));
16109        assert_true (ai_move (ai, 0, 7));
16110        assert_true (ai_move (ai, 6, 0));
16111        assert_true (ai_move (ai, 3, 0));
16112        assert_true (ai_move (ai, 0, 3));
16113        assert_true (ai_move (ai, 7, 4));
16114        assert_true (ai_move (ai, 6, 7));
16115        assert_true (ai_move (ai, 7, 6));
16116        assert_true (ai_move (ai, 6, 6));
16117        assert_true (ai_move (ai, 7, 7));
16118        assert_true (ai_move (ai, 1, 0));
16119        assert_true (ai_move (ai, 1, 1));
16120        assert_true (ai_move (ai, 0, 1));
16121        assert_true (ai_move (ai, 0, 0));
16122    }
16123
16124    private static inline void test_complete_reversi_game_198 ()
16125    {
16126                                  /* 0 1 2 3 4 5 6 7 */
16127        string [] board = {/* 0 */ " . . . . . . . .",
16128                           /* 1 */ " . . . . . . . .",
16129                           /* 2 */ " . . . . L D . .",
16130                           /* 3 */ " . . D L D . . .",
16131                           /* 4 */ " . . L L L . . .",
16132                           /* 5 */ " . . . . . . . .",
16133                           /* 6 */ " . . . . . . . .",
16134                           /* 7 */ " . . . . . . . ."};
16135
16136        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16137        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16138
16139        assert_true (ai_move (ai, 4, 1));
16140        assert_true (ai_move (ai, 2, 2));
16141        assert_true (ai_move (ai, 2, 5));
16142        assert_true (ai_move (ai, 2, 6));
16143        assert_true (ai_move (ai, 1, 2));
16144        assert_true (ai_move (ai, 1, 3));
16145        assert_true (ai_move (ai, 3, 2));
16146        assert_true (ai_move (ai, 2, 1));
16147        assert_true (ai_move (ai, 0, 3));
16148        assert_true (ai_move (ai, 6, 2));
16149        assert_true (ai_move (ai, 3, 1));
16150        assert_true (ai_move (ai, 5, 4));
16151        assert_true (ai_move (ai, 7, 2));
16152        assert_true (ai_move (ai, 0, 2));
16153        assert_true (ai_move (ai, 0, 1));
16154        assert_true (ai_move (ai, 4, 0));
16155        assert_true (ai_move (ai, 1, 5));
16156        assert_true (ai_move (ai, 6, 3));
16157        assert_true (ai_move (ai, 3, 5));
16158        assert_true (ai_move (ai, 4, 6));
16159        assert_true (ai_move (ai, 1, 4));
16160        assert_true (ai_move (ai, 0, 5));
16161        assert_true (ai_move (ai, 2, 0));
16162        assert_true (ai_move (ai, 0, 4));
16163        assert_true (ai_move (ai, 0, 6));
16164        assert_true (ai_move (ai, 1, 6));
16165        assert_true (ai_move (ai, 3, 0));
16166        assert_true (ai_move (ai, 1, 0));
16167        assert_true (ai_move (ai, 3, 7));
16168        assert_true (ai_move (ai, 2, 7));
16169        assert_true (ai_move (ai, 5, 0));
16170        assert_true (ai_move (ai, 6, 0));
16171        assert_true (ai_move (ai, 7, 4));
16172        assert_true (ai_move (ai, 4, 7));
16173        assert_true (ai_move (ai, 5, 1));
16174        assert_true (ai_move (ai, 5, 3));
16175        assert_true (ai_move (ai, 5, 5));
16176        assert_true (ai_move (ai, 6, 4));
16177        assert_true (ai_move (ai, 6, 5));
16178        assert_true (ai_move (ai, 7, 5));
16179        assert_true (ai_move (ai, 4, 5));
16180        assert_true (ai_move (ai, 3, 6));
16181        assert_true (ai_move (ai, 5, 7));
16182        assert_true (ai_move (ai, 5, 6));
16183        assert_true (ai_move (ai, 0, 7));
16184        assert_true (ai_move (ai, 1, 7));
16185        assert_true (ai_move (ai, 7, 6));
16186        assert_true (ai_move (ai, 7, 3));
16187        assert_true (ai_move (ai, 6, 6));
16188        assert_true (ai_move (ai, 7, 7));
16189        assert_true (ai_move (ai, 6, 7));
16190        assert_true (ai_move (ai, 7, 1));
16191        assert_true (ai_move (ai, 6, 1));
16192        assert_true (ai_move (ai, 1, 1));
16193        assert_true (ai_move (ai, 0, 0));
16194        assert_true (game.pass ());
16195        assert_true (ai_move (ai, 7, 0));
16196    }
16197
16198    private static inline void test_complete_reversi_game_199 ()
16199    {
16200                                  /* 0 1 2 3 4 5 6 7 */
16201        string [] board = {/* 0 */ " . . . . . . . .",
16202                           /* 1 */ " . . . . . . . .",
16203                           /* 2 */ " . . L . L D . .",
16204                           /* 3 */ " . . D L D . . .",
16205                           /* 4 */ " . . . D L . . .",
16206                           /* 5 */ " . . . . . . . .",
16207                           /* 6 */ " . . . . . . . .",
16208                           /* 7 */ " . . . . . . . ."};
16209
16210        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16211        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16212
16213        assert_true (ai_move (ai, 2, 1));
16214        assert_true (ai_move (ai, 6, 2));
16215        assert_true (ai_move (ai, 4, 5));
16216        assert_true (ai_move (ai, 5, 3));
16217        assert_true (ai_move (ai, 3, 2));
16218        assert_true (ai_move (ai, 1, 2));
16219        assert_true (ai_move (ai, 3, 1));
16220        assert_true (ai_move (ai, 4, 0));
16221        assert_true (ai_move (ai, 0, 2));
16222        assert_true (ai_move (ai, 1, 3));
16223        assert_true (ai_move (ai, 2, 4));
16224        assert_true (ai_move (ai, 0, 4));
16225        assert_true (ai_move (ai, 3, 0));
16226        assert_true (ai_move (ai, 1, 5));
16227        assert_true (ai_move (ai, 5, 0));
16228        assert_true (ai_move (ai, 2, 5));
16229        assert_true (ai_move (ai, 2, 6));
16230        assert_true (ai_move (ai, 2, 7));
16231        assert_true (ai_move (ai, 6, 4));
16232        assert_true (ai_move (ai, 6, 3));
16233        assert_true (ai_move (ai, 7, 2));
16234        assert_true (ai_move (ai, 4, 1));
16235        assert_true (ai_move (ai, 5, 1));
16236        assert_true (ai_move (ai, 5, 6));
16237        assert_true (ai_move (ai, 5, 4));
16238        assert_true (ai_move (ai, 7, 5));
16239        assert_true (ai_move (ai, 4, 6));
16240        assert_true (ai_move (ai, 7, 3));
16241        assert_true (ai_move (ai, 0, 3));
16242        assert_true (ai_move (ai, 3, 5));
16243        assert_true (ai_move (ai, 1, 4));
16244        assert_true (ai_move (ai, 0, 1));
16245        assert_true (ai_move (ai, 3, 6));
16246        assert_true (ai_move (ai, 0, 5));
16247        assert_true (ai_move (ai, 7, 4));
16248        assert_true (ai_move (ai, 7, 1));
16249        assert_true (ai_move (ai, 6, 1));
16250        assert_true (ai_move (ai, 5, 7));
16251        assert_true (ai_move (ai, 4, 7));
16252        assert_true (ai_move (ai, 3, 7));
16253        assert_true (ai_move (ai, 1, 6));
16254        assert_true (ai_move (ai, 2, 0));
16255        assert_true (ai_move (ai, 1, 0));
16256        assert_true (ai_move (ai, 5, 5));
16257        assert_true (ai_move (ai, 6, 5));
16258        assert_true (ai_move (ai, 6, 6));
16259        assert_true (ai_move (ai, 0, 6));
16260        assert_true (ai_move (ai, 0, 7));
16261        assert_true (ai_move (ai, 7, 7));
16262        assert_true (ai_move (ai, 1, 7));
16263        assert_true (ai_move (ai, 6, 7));
16264        assert_true (ai_move (ai, 7, 0));
16265        assert_true (ai_move (ai, 1, 1));
16266        assert_true (ai_move (ai, 6, 0));
16267        assert_true (game.pass ());
16268        assert_true (ai_move (ai, 0, 0));
16269        assert_true (game.pass ());
16270        assert_true (ai_move (ai, 7, 6));
16271    }
16272
16273    private static inline void test_complete_reversi_game_200 ()
16274    {
16275                                  /* 0 1 2 3 4 5 6 7 */
16276        string [] board = {/* 0 */ " . . . . . . . .",
16277                           /* 1 */ " . . . . L D . .",
16278                           /* 2 */ " . . . . L . . .",
16279                           /* 3 */ " . . D D L . . .",
16280                           /* 4 */ " . . . D L . . .",
16281                           /* 5 */ " . . . . . . . .",
16282                           /* 6 */ " . . . . . . . .",
16283                           /* 7 */ " . . . . . . . ."};
16284
16285        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16286        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16287
16288        assert_true (ai_move (ai, 5, 5));
16289        assert_true (ai_move (ai, 2, 5));
16290        assert_true (ai_move (ai, 4, 5));
16291        assert_true (ai_move (ai, 2, 4));
16292        assert_true (ai_move (ai, 2, 6));
16293        assert_true (ai_move (ai, 1, 3));
16294        assert_true (ai_move (ai, 1, 2));
16295        assert_true (ai_move (ai, 1, 5));
16296        assert_true (ai_move (ai, 1, 4));
16297        assert_true (ai_move (ai, 3, 7));
16298        assert_true (ai_move (ai, 2, 7));
16299        assert_true (ai_move (ai, 1, 7));
16300        assert_true (ai_move (ai, 2, 2));
16301        assert_true (ai_move (ai, 3, 5));
16302        assert_true (ai_move (ai, 4, 6));
16303        assert_true (ai_move (ai, 2, 1));
16304        assert_true (ai_move (ai, 0, 5));
16305        assert_true (ai_move (ai, 5, 6));
16306        assert_true (ai_move (ai, 3, 2));
16307        assert_true (ai_move (ai, 6, 5));
16308        assert_true (ai_move (ai, 6, 4));
16309        assert_true (ai_move (ai, 4, 7));
16310        assert_true (ai_move (ai, 5, 2));
16311        assert_true (ai_move (ai, 0, 3));
16312        assert_true (ai_move (ai, 0, 2));
16313        assert_true (ai_move (ai, 0, 4));
16314        assert_true (ai_move (ai, 7, 5));
16315        assert_true (ai_move (ai, 3, 6));
16316        assert_true (ai_move (ai, 2, 0));
16317        assert_true (ai_move (ai, 3, 1));
16318        assert_true (ai_move (ai, 1, 1));
16319        assert_true (ai_move (ai, 6, 0));
16320        assert_true (ai_move (ai, 5, 7));
16321        assert_true (ai_move (ai, 6, 7));
16322        assert_true (ai_move (ai, 3, 0));
16323        assert_true (ai_move (ai, 5, 4));
16324        assert_true (ai_move (ai, 5, 3));
16325        assert_true (ai_move (ai, 6, 3));
16326        assert_true (ai_move (ai, 5, 0));
16327        assert_true (ai_move (ai, 6, 1));
16328        assert_true (ai_move (ai, 6, 2));
16329        assert_true (ai_move (ai, 7, 2));
16330        assert_true (ai_move (ai, 7, 4));
16331        assert_true (ai_move (ai, 7, 3));
16332        assert_true (ai_move (ai, 6, 6));
16333        assert_true (ai_move (ai, 4, 0));
16334        assert_true (ai_move (ai, 7, 0));
16335        assert_true (ai_move (ai, 7, 1));
16336        assert_true (ai_move (ai, 1, 6));
16337        assert_true (ai_move (ai, 0, 7));
16338        assert_true (ai_move (ai, 0, 6));
16339        assert_true (ai_move (ai, 7, 7));
16340        assert_true (ai_move (ai, 7, 6));
16341        assert_true (ai_move (ai, 0, 0));
16342        assert_true (ai_move (ai, 1, 0));
16343        assert_true (ai_move (ai, 0, 1));
16344    }
16345
16346    private static inline void test_complete_reversi_game_201 ()
16347    {
16348                                  /* 0 1 2 3 4 5 6 7 */
16349        string [] board = {/* 0 */ " . . . . . . . .",
16350                           /* 1 */ " . . . . . D . .",
16351                           /* 2 */ " . . . . D . . .",
16352                           /* 3 */ " . . D D L . . .",
16353                           /* 4 */ " . . . L L . . .",
16354                           /* 5 */ " . . L . . . . .",
16355                           /* 6 */ " . . . . . . . .",
16356                           /* 7 */ " . . . . . . . ."};
16357
16358        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16359        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16360
16361        assert_true (ai_move (ai, 5, 5));
16362        assert_true (ai_move (ai, 4, 1));
16363        assert_true (ai_move (ai, 4, 5));
16364        assert_true (ai_move (ai, 2, 4));
16365        assert_true (ai_move (ai, 2, 6));
16366        assert_true (ai_move (ai, 1, 3));
16367        assert_true (ai_move (ai, 1, 2));
16368        assert_true (ai_move (ai, 1, 5));
16369        assert_true (ai_move (ai, 1, 4));
16370        assert_true (ai_move (ai, 3, 7));
16371        assert_true (ai_move (ai, 2, 7));
16372        assert_true (ai_move (ai, 1, 7));
16373        assert_true (ai_move (ai, 2, 2));
16374        assert_true (ai_move (ai, 3, 5));
16375        assert_true (ai_move (ai, 4, 6));
16376        assert_true (ai_move (ai, 2, 1));
16377        assert_true (ai_move (ai, 0, 5));
16378        assert_true (ai_move (ai, 5, 6));
16379        assert_true (ai_move (ai, 3, 2));
16380        assert_true (ai_move (ai, 6, 5));
16381        assert_true (ai_move (ai, 6, 4));
16382        assert_true (ai_move (ai, 4, 7));
16383        assert_true (ai_move (ai, 5, 2));
16384        assert_true (ai_move (ai, 0, 3));
16385        assert_true (ai_move (ai, 0, 2));
16386        assert_true (ai_move (ai, 0, 4));
16387        assert_true (ai_move (ai, 7, 5));
16388        assert_true (ai_move (ai, 3, 6));
16389        assert_true (ai_move (ai, 2, 0));
16390        assert_true (ai_move (ai, 3, 1));
16391        assert_true (ai_move (ai, 1, 1));
16392        assert_true (ai_move (ai, 6, 0));
16393        assert_true (ai_move (ai, 5, 7));
16394        assert_true (ai_move (ai, 6, 7));
16395        assert_true (ai_move (ai, 3, 0));
16396        assert_true (ai_move (ai, 5, 4));
16397        assert_true (ai_move (ai, 5, 3));
16398        assert_true (ai_move (ai, 6, 3));
16399        assert_true (ai_move (ai, 5, 0));
16400        assert_true (ai_move (ai, 6, 1));
16401        assert_true (ai_move (ai, 6, 2));
16402        assert_true (ai_move (ai, 7, 2));
16403        assert_true (ai_move (ai, 7, 4));
16404        assert_true (ai_move (ai, 7, 3));
16405        assert_true (ai_move (ai, 6, 6));
16406        assert_true (ai_move (ai, 4, 0));
16407        assert_true (ai_move (ai, 7, 0));
16408        assert_true (ai_move (ai, 7, 1));
16409        assert_true (ai_move (ai, 1, 6));
16410        assert_true (ai_move (ai, 0, 7));
16411        assert_true (ai_move (ai, 0, 6));
16412        assert_true (ai_move (ai, 7, 7));
16413        assert_true (ai_move (ai, 7, 6));
16414        assert_true (ai_move (ai, 0, 0));
16415        assert_true (ai_move (ai, 1, 0));
16416        assert_true (ai_move (ai, 0, 1));
16417    }
16418
16419    private static inline void test_complete_reversi_game_202 ()
16420    {
16421                                  /* 0 1 2 3 4 5 6 7 */
16422        string [] board = {/* 0 */ " . . . . . . . .",
16423                           /* 1 */ " . . . . . D . .",
16424                           /* 2 */ " . . . . D . . .",
16425                           /* 3 */ " . . D D L . . .",
16426                           /* 4 */ " . . L L L . . .",
16427                           /* 5 */ " . . . . . . . .",
16428                           /* 6 */ " . . . . . . . .",
16429                           /* 7 */ " . . . . . . . ."};
16430
16431        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16432        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16433
16434        assert_true (ai_move (ai, 2, 5));
16435        assert_true (ai_move (ai, 4, 1));
16436        assert_true (ai_move (ai, 4, 5));
16437        assert_true (ai_move (ai, 4, 6));
16438        assert_true (ai_move (ai, 5, 6));
16439        assert_true (ai_move (ai, 2, 2));
16440        assert_true (ai_move (ai, 2, 1));
16441        assert_true (ai_move (ai, 1, 5));
16442        assert_true (ai_move (ai, 1, 4));
16443        assert_true (ai_move (ai, 3, 5));
16444        assert_true (ai_move (ai, 0, 5));
16445        assert_true (ai_move (ai, 3, 6));
16446        assert_true (ai_move (ai, 5, 7));
16447        assert_true (ai_move (ai, 2, 6));
16448        assert_true (ai_move (ai, 3, 7));
16449        assert_true (ai_move (ai, 4, 7));
16450        assert_true (ai_move (ai, 3, 2));
16451        assert_true (ai_move (ai, 1, 3));
16452        assert_true (ai_move (ai, 1, 2));
16453        assert_true (ai_move (ai, 3, 1));
16454        assert_true (ai_move (ai, 3, 0));
16455        assert_true (ai_move (ai, 6, 5));
16456        assert_true (ai_move (ai, 5, 0));
16457        assert_true (ai_move (ai, 4, 0));
16458        assert_true (ai_move (ai, 5, 5));
16459        assert_true (ai_move (ai, 6, 2));
16460        assert_true (ai_move (ai, 7, 5));
16461        assert_true (ai_move (ai, 0, 2));
16462        assert_true (ai_move (ai, 5, 4));
16463        assert_true (ai_move (ai, 0, 4));
16464        assert_true (ai_move (ai, 5, 2));
16465        assert_true (ai_move (ai, 7, 4));
16466        assert_true (ai_move (ai, 7, 2));
16467        assert_true (ai_move (ai, 7, 3));
16468        assert_true (ai_move (ai, 6, 1));
16469        assert_true (ai_move (ai, 5, 3));
16470        assert_true (ai_move (ai, 6, 4));
16471        assert_true (ai_move (ai, 6, 3));
16472        assert_true (ai_move (ai, 7, 1));
16473        assert_true (ai_move (ai, 2, 7));
16474        assert_true (ai_move (ai, 1, 7));
16475        assert_true (ai_move (ai, 2, 0));
16476        assert_true (ai_move (ai, 1, 0));
16477        assert_true (ai_move (ai, 6, 6));
16478        assert_true (ai_move (ai, 1, 6));
16479        assert_true (ai_move (ai, 1, 1));
16480        assert_true (ai_move (ai, 0, 3));
16481        assert_true (ai_move (ai, 7, 0));
16482        assert_true (ai_move (ai, 0, 1));
16483        assert_true (ai_move (ai, 0, 0));
16484        assert_true (ai_move (ai, 6, 0));
16485        assert_true (ai_move (ai, 7, 6));
16486        assert_true (ai_move (ai, 6, 7));
16487        assert_true (ai_move (ai, 7, 7));
16488        assert_true (game.pass ());
16489        assert_true (ai_move (ai, 0, 7));
16490        assert_true (ai_move (ai, 0, 6));
16491    }
16492
16493    private static inline void test_complete_reversi_game_203 ()
16494    {
16495                                  /* 0 1 2 3 4 5 6 7 */
16496        string [] board = {/* 0 */ " . . . . . . . .",
16497                           /* 1 */ " . . . . . D . .",
16498                           /* 2 */ " . . L . D . . .",
16499                           /* 3 */ " . . D L L . . .",
16500                           /* 4 */ " . . . D L . . .",
16501                           /* 5 */ " . . . . . . . .",
16502                           /* 6 */ " . . . . . . . .",
16503                           /* 7 */ " . . . . . . . ."};
16504
16505        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16506        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16507
16508        assert_true (ai_move (ai, 2, 1));
16509        assert_true (ai_move (ai, 4, 1));
16510        assert_true (ai_move (ai, 2, 4));
16511        assert_true (ai_move (ai, 2, 5));
16512        assert_true (ai_move (ai, 2, 6));
16513        assert_true (ai_move (ai, 1, 2));
16514        assert_true (ai_move (ai, 1, 3));
16515        assert_true (ai_move (ai, 3, 0));
16516        assert_true (ai_move (ai, 0, 2));
16517        assert_true (ai_move (ai, 1, 4));
16518        assert_true (ai_move (ai, 0, 3));
16519        assert_true (ai_move (ai, 2, 7));
16520        assert_true (ai_move (ai, 3, 6));
16521        assert_true (ai_move (ai, 4, 5));
16522        assert_true (ai_move (ai, 1, 5));
16523        assert_true (ai_move (ai, 3, 2));
16524        assert_true (ai_move (ai, 5, 0));
16525        assert_true (ai_move (ai, 3, 1));
16526        assert_true (ai_move (ai, 4, 0));
16527        assert_true (ai_move (ai, 5, 2));
16528        assert_true (ai_move (ai, 2, 0));
16529        assert_true (ai_move (ai, 0, 5));
16530        assert_true (ai_move (ai, 6, 2));
16531        assert_true (ai_move (ai, 3, 5));
16532        assert_true (ai_move (ai, 5, 6));
16533        assert_true (ai_move (ai, 6, 3));
16534        assert_true (ai_move (ai, 4, 6));
16535        assert_true (ai_move (ai, 5, 5));
16536        assert_true (ai_move (ai, 3, 7));
16537        assert_true (ai_move (ai, 5, 7));
16538        assert_true (ai_move (ai, 6, 5));
16539        assert_true (ai_move (ai, 7, 5));
16540        assert_true (ai_move (ai, 1, 7));
16541        assert_true (ai_move (ai, 7, 2));
16542        assert_true (ai_move (ai, 6, 4));
16543        assert_true (ai_move (ai, 5, 4));
16544        assert_true (ai_move (ai, 7, 4));
16545        assert_true (ai_move (ai, 7, 3));
16546        assert_true (ai_move (ai, 5, 3));
16547        assert_true (ai_move (ai, 6, 1));
16548        assert_true (ai_move (ai, 7, 6));
16549        assert_true (ai_move (ai, 7, 7));
16550        assert_true (ai_move (ai, 7, 0));
16551        assert_true (ai_move (ai, 6, 6));
16552        assert_true (ai_move (ai, 7, 1));
16553        assert_true (ai_move (ai, 6, 0));
16554        assert_true (ai_move (ai, 0, 4));
16555        assert_true (ai_move (ai, 0, 1));
16556        assert_true (ai_move (ai, 1, 6));
16557        assert_true (ai_move (ai, 0, 7));
16558        assert_true (ai_move (ai, 0, 6));
16559        assert_true (ai_move (ai, 4, 7));
16560        assert_true (ai_move (ai, 0, 0));
16561        assert_true (ai_move (ai, 1, 0));
16562        assert_true (ai_move (ai, 1, 1));
16563        assert_true (game.pass ());
16564        assert_true (ai_move (ai, 6, 7));
16565    }
16566
16567    private static inline void test_complete_reversi_game_204 ()
16568    {
16569                                  /* 0 1 2 3 4 5 6 7 */
16570        string [] board = {/* 0 */ " . . . . . . . .",
16571                           /* 1 */ " . . . . . D . .",
16572                           /* 2 */ " . . . . D . . .",
16573                           /* 3 */ " . L L L L . . .",
16574                           /* 4 */ " . . . D L . . .",
16575                           /* 5 */ " . . . . . . . .",
16576                           /* 6 */ " . . . . . . . .",
16577                           /* 7 */ " . . . . . . . ."};
16578
16579        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16580        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16581
16582        assert_true (ai_move (ai, 1, 2));
16583        assert_true (ai_move (ai, 4, 1));
16584        assert_true (ai_move (ai, 0, 3));
16585        assert_true (ai_move (ai, 2, 5));
16586        assert_true (ai_move (ai, 4, 5));
16587        assert_true (ai_move (ai, 4, 6));
16588        assert_true (ai_move (ai, 5, 6));
16589        assert_true (ai_move (ai, 3, 5));
16590        assert_true (ai_move (ai, 1, 5));
16591        assert_true (ai_move (ai, 2, 4));
16592        assert_true (ai_move (ai, 5, 7));
16593        assert_true (ai_move (ai, 1, 4));
16594        assert_true (ai_move (ai, 0, 5));
16595        assert_true (ai_move (ai, 0, 4));
16596        assert_true (ai_move (ai, 3, 1));
16597        assert_true (ai_move (ai, 4, 0));
16598        assert_true (ai_move (ai, 3, 2));
16599        assert_true (ai_move (ai, 6, 2));
16600        assert_true (ai_move (ai, 5, 0));
16601        assert_true (ai_move (ai, 6, 0));
16602        assert_true (ai_move (ai, 5, 5));
16603        assert_true (ai_move (ai, 3, 6));
16604        assert_true (ai_move (ai, 2, 6));
16605        assert_true (ai_move (ai, 5, 4));
16606        assert_true (ai_move (ai, 6, 3));
16607        assert_true (ai_move (ai, 6, 5));
16608        assert_true (ai_move (ai, 7, 4));
16609        assert_true (ai_move (ai, 7, 2));
16610        assert_true (ai_move (ai, 5, 3));
16611        assert_true (ai_move (ai, 5, 2));
16612        assert_true (ai_move (ai, 7, 3));
16613        assert_true (ai_move (ai, 7, 5));
16614        assert_true (ai_move (ai, 6, 1));
16615        assert_true (ai_move (ai, 3, 0));
16616        assert_true (ai_move (ai, 6, 4));
16617        assert_true (ai_move (ai, 2, 0));
16618        assert_true (ai_move (ai, 2, 1));
16619        assert_true (ai_move (ai, 2, 7));
16620        assert_true (ai_move (ai, 4, 7));
16621        assert_true (ai_move (ai, 7, 1));
16622        assert_true (ai_move (ai, 3, 7));
16623        assert_true (ai_move (ai, 6, 7));
16624        assert_true (ai_move (ai, 6, 6));
16625        assert_true (ai_move (ai, 1, 7));
16626        assert_true (ai_move (ai, 1, 6));
16627        assert_true (ai_move (ai, 1, 0));
16628        assert_true (ai_move (ai, 1, 1));
16629        assert_true (ai_move (ai, 7, 6));
16630        assert_true (game.pass ());
16631        assert_true (ai_move (ai, 7, 0));
16632        assert_true (game.pass ());
16633        assert_true (ai_move (ai, 7, 7));
16634        assert_true (game.pass ());
16635        assert_true (ai_move (ai, 0, 7));
16636        assert_true (ai_move (ai, 0, 6));
16637        assert_true (ai_move (ai, 0, 2));
16638        assert_true (ai_move (ai, 0, 1));
16639        assert_true (ai_move (ai, 0, 0));
16640        assert_true (game.pass ());
16641        assert_true (ai_move (ai, 2, 2));
16642    }
16643
16644    private static inline void test_complete_reversi_game_205 ()
16645    {
16646                                  /* 0 1 2 3 4 5 6 7 */
16647        string [] board = {/* 0 */ " . . . . . . . .",
16648                           /* 1 */ " . . . . . . . .",
16649                           /* 2 */ " . . . . . . . .",
16650                           /* 3 */ " . . D D D . . .",
16651                           /* 4 */ " . . L L L L . .",
16652                           /* 5 */ " . . . . . D . .",
16653                           /* 6 */ " . . . . . . . .",
16654                           /* 7 */ " . . . . . . . ."};
16655
16656        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16657        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16658
16659        assert_true (ai_move (ai, 5, 3));
16660        assert_true (ai_move (ai, 1, 2));
16661        assert_true (ai_move (ai, 1, 3));
16662        assert_true (ai_move (ai, 6, 4));
16663        assert_true (ai_move (ai, 6, 5));
16664        assert_true (ai_move (ai, 4, 6));
16665        assert_true (ai_move (ai, 5, 6));
16666        assert_true (ai_move (ai, 0, 2));
16667        assert_true (ai_move (ai, 7, 3));
16668        assert_true (ai_move (ai, 2, 2));
16669        assert_true (ai_move (ai, 4, 5));
16670        assert_true (ai_move (ai, 5, 2));
16671        assert_true (ai_move (ai, 5, 1));
16672        assert_true (ai_move (ai, 6, 3));
16673        assert_true (ai_move (ai, 6, 2));
16674        assert_true (ai_move (ai, 7, 6));
16675        assert_true (ai_move (ai, 7, 4));
16676        assert_true (ai_move (ai, 5, 7));
16677        assert_true (ai_move (ai, 3, 7));
16678        assert_true (ai_move (ai, 5, 0));
16679        assert_true (ai_move (ai, 4, 1));
16680        assert_true (ai_move (ai, 7, 2));
16681        assert_true (ai_move (ai, 7, 1));
16682        assert_true (ai_move (ai, 3, 0));
16683        assert_true (ai_move (ai, 4, 7));
16684        assert_true (ai_move (ai, 2, 7));
16685        assert_true (ai_move (ai, 4, 2));
16686        assert_true (ai_move (ai, 3, 2));
16687        assert_true (ai_move (ai, 2, 1));
16688        assert_true (ai_move (ai, 3, 6));
16689        assert_true (ai_move (ai, 3, 5));
16690        assert_true (ai_move (ai, 2, 0));
16691        assert_true (ai_move (ai, 1, 1));
16692        assert_true (ai_move (ai, 3, 1));
16693        assert_true (ai_move (ai, 2, 5));
16694        assert_true (ai_move (ai, 2, 6));
16695        assert_true (ai_move (ai, 1, 5));
16696        assert_true (ai_move (ai, 6, 7));
16697        assert_true (ai_move (ai, 1, 0));
16698        assert_true (ai_move (ai, 1, 4));
16699        assert_true (ai_move (ai, 0, 5));
16700        assert_true (ai_move (ai, 0, 3));
16701        assert_true (ai_move (ai, 4, 0));
16702        assert_true (ai_move (ai, 0, 0));
16703        assert_true (ai_move (ai, 1, 6));
16704        assert_true (ai_move (ai, 6, 0));
16705        assert_true (ai_move (ai, 0, 4));
16706        assert_true (ai_move (ai, 0, 6));
16707        assert_true (ai_move (ai, 0, 7));
16708        assert_true (ai_move (ai, 7, 5));
16709        assert_true (ai_move (ai, 7, 7));
16710        assert_true (ai_move (ai, 1, 7));
16711        assert_true (ai_move (ai, 0, 1));
16712        assert_true (ai_move (ai, 6, 1));
16713        assert_true (ai_move (ai, 7, 0));
16714        assert_true (game.pass ());
16715        assert_true (ai_move (ai, 6, 6));
16716    }
16717
16718    private static inline void test_complete_reversi_game_206 ()
16719    {
16720                                  /* 0 1 2 3 4 5 6 7 */
16721        string [] board = {/* 0 */ " . . . . . . . .",
16722                           /* 1 */ " . . . . . . . .",
16723                           /* 2 */ " . . . . . L . .",
16724                           /* 3 */ " . . D D L . . .",
16725                           /* 4 */ " . . L L D . . .",
16726                           /* 5 */ " . . . . . D . .",
16727                           /* 6 */ " . . . . . . . .",
16728                           /* 7 */ " . . . . . . . ."};
16729
16730        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16731        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16732
16733        assert_true (ai_move (ai, 2, 5));
16734        assert_true (ai_move (ai, 1, 4));
16735        assert_true (ai_move (ai, 1, 5));
16736        assert_true (ai_move (ai, 3, 6));
16737        assert_true (ai_move (ai, 2, 6));
16738        assert_true (ai_move (ai, 1, 2));
16739        assert_true (ai_move (ai, 2, 2));
16740        assert_true (ai_move (ai, 4, 5));
16741        assert_true (ai_move (ai, 0, 2));
16742        assert_true (ai_move (ai, 6, 5));
16743        assert_true (ai_move (ai, 0, 3));
16744        assert_true (ai_move (ai, 3, 2));
16745        assert_true (ai_move (ai, 4, 1));
16746        assert_true (ai_move (ai, 3, 1));
16747        assert_true (ai_move (ai, 6, 3));
16748        assert_true (ai_move (ai, 1, 3));
16749        assert_true (ai_move (ai, 2, 1));
16750        assert_true (ai_move (ai, 3, 5));
16751        assert_true (ai_move (ai, 4, 2));
16752        assert_true (ai_move (ai, 0, 4));
16753        assert_true (ai_move (ai, 0, 5));
16754        assert_true (ai_move (ai, 2, 0));
16755        assert_true (ai_move (ai, 5, 6));
16756        assert_true (ai_move (ai, 5, 4));
16757        assert_true (ai_move (ai, 3, 0));
16758        assert_true (ai_move (ai, 2, 7));
16759        assert_true (ai_move (ai, 7, 5));
16760        assert_true (ai_move (ai, 5, 7));
16761        assert_true (ai_move (ai, 6, 4));
16762        assert_true (ai_move (ai, 6, 2));
16763        assert_true (ai_move (ai, 7, 2));
16764        assert_true (ai_move (ai, 4, 6));
16765        assert_true (ai_move (ai, 5, 3));
16766        assert_true (ai_move (ai, 5, 1));
16767        assert_true (ai_move (ai, 4, 0));
16768        assert_true (ai_move (ai, 5, 0));
16769        assert_true (ai_move (ai, 3, 7));
16770        assert_true (ai_move (ai, 4, 7));
16771        assert_true (ai_move (ai, 6, 1));
16772        assert_true (ai_move (ai, 1, 0));
16773        assert_true (ai_move (ai, 6, 7));
16774        assert_true (ai_move (ai, 7, 7));
16775        assert_true (ai_move (ai, 1, 1));
16776        assert_true (ai_move (ai, 1, 7));
16777        assert_true (ai_move (ai, 1, 6));
16778        assert_true (ai_move (ai, 6, 6));
16779        assert_true (ai_move (ai, 7, 6));
16780        assert_true (ai_move (ai, 7, 4));
16781        assert_true (ai_move (ai, 7, 3));
16782        assert_true (ai_move (ai, 0, 0));
16783        assert_true (ai_move (ai, 0, 1));
16784        assert_true (ai_move (ai, 7, 0));
16785        assert_true (ai_move (ai, 7, 1));
16786        assert_true (ai_move (ai, 6, 0));
16787        assert_true (game.pass ());
16788        assert_true (ai_move (ai, 0, 6));
16789        assert_true (ai_move (ai, 0, 7));
16790    }
16791
16792    private static inline void test_complete_reversi_game_207 ()
16793    {
16794                                  /* 0 1 2 3 4 5 6 7 */
16795        string [] board = {/* 0 */ " . . . . . . . .",
16796                           /* 1 */ " . . . . . . . .",
16797                           /* 2 */ " . . . . L . . .",
16798                           /* 3 */ " . . D L D . . .",
16799                           /* 4 */ " . . L L D . . .",
16800                           /* 5 */ " . . . . . D . .",
16801                           /* 6 */ " . . . . . . . .",
16802                           /* 7 */ " . . . . . . . ."};
16803
16804        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16805        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16806
16807        assert_true (ai_move (ai, 2, 2));
16808        assert_true (ai_move (ai, 2, 1));
16809        assert_true (ai_move (ai, 5, 1));
16810        assert_true (ai_move (ai, 3, 2));
16811        assert_true (ai_move (ai, 1, 2));
16812        assert_true (ai_move (ai, 4, 1));
16813        assert_true (ai_move (ai, 2, 0));
16814        assert_true (ai_move (ai, 0, 2));
16815        assert_true (ai_move (ai, 4, 0));
16816        assert_true (ai_move (ai, 3, 0));
16817        assert_true (ai_move (ai, 1, 3));
16818        assert_true (ai_move (ai, 1, 4));
16819        assert_true (ai_move (ai, 3, 1));
16820        assert_true (ai_move (ai, 5, 0));
16821        assert_true (ai_move (ai, 6, 0));
16822        assert_true (ai_move (ai, 5, 2));
16823        assert_true (ai_move (ai, 0, 5));
16824        assert_true (ai_move (ai, 0, 4));
16825        assert_true (ai_move (ai, 1, 0));
16826        assert_true (ai_move (ai, 5, 4));
16827        assert_true (ai_move (ai, 6, 3));
16828        assert_true (ai_move (ai, 6, 2));
16829        assert_true (ai_move (ai, 5, 3));
16830        assert_true (ai_move (ai, 7, 3));
16831        assert_true (ai_move (ai, 6, 4));
16832        assert_true (ai_move (ai, 4, 5));
16833        assert_true (ai_move (ai, 6, 5));
16834        assert_true (ai_move (ai, 7, 4));
16835        assert_true (ai_move (ai, 7, 5));
16836        assert_true (ai_move (ai, 4, 6));
16837        assert_true (ai_move (ai, 5, 6));
16838        assert_true (ai_move (ai, 7, 6));
16839        assert_true (ai_move (ai, 2, 5));
16840        assert_true (ai_move (ai, 3, 6));
16841        assert_true (ai_move (ai, 3, 5));
16842        assert_true (ai_move (ai, 1, 5));
16843        assert_true (ai_move (ai, 2, 7));
16844        assert_true (ai_move (ai, 2, 6));
16845        assert_true (ai_move (ai, 3, 7));
16846        assert_true (ai_move (ai, 5, 7));
16847        assert_true (ai_move (ai, 6, 6));
16848        assert_true (ai_move (ai, 0, 6));
16849        assert_true (ai_move (ai, 1, 7));
16850        assert_true (ai_move (ai, 6, 1));
16851        assert_true (ai_move (ai, 0, 3));
16852        assert_true (ai_move (ai, 4, 7));
16853        assert_true (ai_move (ai, 6, 7));
16854        assert_true (ai_move (ai, 7, 7));
16855        assert_true (ai_move (ai, 0, 7));
16856        assert_true (ai_move (ai, 1, 1));
16857        assert_true (ai_move (ai, 7, 0));
16858        assert_true (ai_move (ai, 7, 1));
16859        assert_true (ai_move (ai, 7, 2));
16860        assert_true (ai_move (ai, 1, 6));
16861        assert_true (ai_move (ai, 0, 1));
16862        assert_true (ai_move (ai, 0, 0));
16863    }
16864
16865    private static inline void test_complete_reversi_game_208 ()
16866    {
16867                                  /* 0 1 2 3 4 5 6 7 */
16868        string [] board = {/* 0 */ " . . . . . . . .",
16869                           /* 1 */ " . . . . . . . .",
16870                           /* 2 */ " . . . L . . . .",
16871                           /* 3 */ " . . D L D . . .",
16872                           /* 4 */ " . . L L D . . .",
16873                           /* 5 */ " . . . . . D . .",
16874                           /* 6 */ " . . . . . . . .",
16875                           /* 7 */ " . . . . . . . ."};
16876
16877        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16878        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16879
16880        assert_true (ai_move (ai, 2, 1));
16881        assert_true (ai_move (ai, 1, 3));
16882        assert_true (ai_move (ai, 2, 2));
16883        assert_true (ai_move (ai, 3, 1));
16884        assert_true (ai_move (ai, 4, 1));
16885        assert_true (ai_move (ai, 4, 0));
16886        assert_true (ai_move (ai, 2, 5));
16887        assert_true (ai_move (ai, 1, 2));
16888        assert_true (ai_move (ai, 1, 1));
16889        assert_true (ai_move (ai, 3, 5));
16890        assert_true (ai_move (ai, 4, 2));
16891        assert_true (ai_move (ai, 1, 5));
16892        assert_true (ai_move (ai, 2, 6));
16893        assert_true (ai_move (ai, 3, 0));
16894        assert_true (ai_move (ai, 1, 0));
16895        assert_true (ai_move (ai, 3, 6));
16896        assert_true (ai_move (ai, 0, 5));
16897        assert_true (ai_move (ai, 1, 4));
16898        assert_true (ai_move (ai, 2, 0));
16899        assert_true (ai_move (ai, 5, 0));
16900        assert_true (ai_move (ai, 6, 0));
16901        assert_true (ai_move (ai, 0, 0));
16902        assert_true (ai_move (ai, 0, 2));
16903        assert_true (ai_move (ai, 7, 0));
16904        assert_true (ai_move (ai, 4, 5));
16905        assert_true (ai_move (ai, 0, 1));
16906        assert_true (ai_move (ai, 4, 6));
16907        assert_true (ai_move (ai, 5, 1));
16908        assert_true (ai_move (ai, 5, 2));
16909        assert_true (ai_move (ai, 5, 7));
16910        assert_true (ai_move (ai, 3, 7));
16911        assert_true (ai_move (ai, 6, 3));
16912        assert_true (ai_move (ai, 6, 2));
16913        assert_true (ai_move (ai, 6, 1));
16914        assert_true (ai_move (ai, 7, 2));
16915        assert_true (ai_move (ai, 5, 6));
16916        assert_true (ai_move (ai, 5, 4));
16917        assert_true (ai_move (ai, 0, 3));
16918        assert_true (ai_move (ai, 0, 4));
16919        assert_true (ai_move (ai, 0, 6));
16920        assert_true (ai_move (ai, 1, 6));
16921        assert_true (ai_move (ai, 7, 4));
16922        assert_true (ai_move (ai, 6, 4));
16923        assert_true (ai_move (ai, 5, 3));
16924        assert_true (ai_move (ai, 6, 5));
16925        assert_true (ai_move (ai, 4, 7));
16926        assert_true (ai_move (ai, 2, 7));
16927        assert_true (ai_move (ai, 7, 1));
16928        assert_true (ai_move (ai, 6, 7));
16929        assert_true (ai_move (ai, 7, 3));
16930        assert_true (ai_move (ai, 6, 6));
16931        assert_true (ai_move (ai, 7, 5));
16932        assert_true (ai_move (ai, 7, 6));
16933        assert_true (ai_move (ai, 0, 7));
16934        assert_true (ai_move (ai, 1, 7));
16935        assert_true (ai_move (ai, 7, 7));
16936    }
16937
16938    private static inline void test_complete_reversi_game_209 ()
16939    {
16940                                  /* 0 1 2 3 4 5 6 7 */
16941        string [] board = {/* 0 */ " . . . . . . . .",
16942                           /* 1 */ " . . . . . . . .",
16943                           /* 2 */ " . . L . . . . .",
16944                           /* 3 */ " . . L D D . . .",
16945                           /* 4 */ " . . L L D . . .",
16946                           /* 5 */ " . . . . . D . .",
16947                           /* 6 */ " . . . . . . . .",
16948                           /* 7 */ " . . . . . . . ."};
16949
16950        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
16951        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
16952
16953        assert_true (ai_move (ai, 1, 3));
16954        assert_true (ai_move (ai, 1, 2));
16955        assert_true (ai_move (ai, 3, 1));
16956        assert_true (ai_move (ai, 2, 1));
16957        assert_true (ai_move (ai, 1, 5));
16958        assert_true (ai_move (ai, 2, 5));
16959        assert_true (ai_move (ai, 1, 4));
16960        assert_true (ai_move (ai, 0, 5));
16961        assert_true (ai_move (ai, 2, 6));
16962        assert_true (ai_move (ai, 3, 6));
16963        assert_true (ai_move (ai, 0, 4));
16964        assert_true (ai_move (ai, 2, 7));
16965        assert_true (ai_move (ai, 3, 5));
16966        assert_true (ai_move (ai, 0, 3));
16967        assert_true (ai_move (ai, 2, 0));
16968        assert_true (ai_move (ai, 4, 0));
16969        assert_true (ai_move (ai, 1, 6));
16970        assert_true (ai_move (ai, 4, 5));
16971        assert_true (ai_move (ai, 0, 6));
16972        assert_true (ai_move (ai, 0, 7));
16973        assert_true (ai_move (ai, 4, 6));
16974        assert_true (ai_move (ai, 5, 7));
16975        assert_true (ai_move (ai, 4, 2));
16976        assert_true (ai_move (ai, 6, 4));
16977        assert_true (ai_move (ai, 6, 5));
16978        assert_true (ai_move (ai, 5, 6));
16979        assert_true (ai_move (ai, 7, 3));
16980        assert_true (ai_move (ai, 5, 4));
16981        assert_true (ai_move (ai, 1, 7));
16982        assert_true (ai_move (ai, 7, 5));
16983        assert_true (ai_move (ai, 5, 3));
16984        assert_true (ai_move (ai, 3, 0));
16985        assert_true (ai_move (ai, 5, 0));
16986        assert_true (ai_move (ai, 7, 4));
16987        assert_true (ai_move (ai, 0, 2));
16988        assert_true (ai_move (ai, 0, 1));
16989        assert_true (ai_move (ai, 4, 7));
16990        assert_true (ai_move (ai, 3, 7));
16991        assert_true (ai_move (ai, 6, 3));
16992        assert_true (ai_move (ai, 7, 2));
16993        assert_true (ai_move (ai, 6, 6));
16994        assert_true (ai_move (ai, 5, 1));
16995        assert_true (ai_move (ai, 4, 1));
16996        assert_true (ai_move (ai, 7, 7));
16997        assert_true (ai_move (ai, 6, 7));
16998        assert_true (ai_move (ai, 5, 2));
16999        assert_true (ai_move (ai, 3, 2));
17000        assert_true (game.pass ());
17001        assert_true (ai_move (ai, 6, 0));
17002        assert_true (ai_move (ai, 6, 1));
17003        assert_true (ai_move (ai, 1, 0));
17004        assert_true (ai_move (ai, 1, 1));
17005        assert_true (ai_move (ai, 0, 0));
17006        assert_true (game.pass ());
17007        assert_true (ai_move (ai, 7, 6));
17008        assert_true (game.pass ());
17009        assert_true (ai_move (ai, 7, 0));
17010        assert_true (ai_move (ai, 6, 2));
17011        assert_true (ai_move (ai, 7, 1));
17012    }
17013
17014    private static inline void test_complete_reversi_game_210 ()
17015    {
17016                                  /* 0 1 2 3 4 5 6 7 */
17017        string [] board = {/* 0 */ " . . . . . . . .",
17018                           /* 1 */ " . . . . . . . .",
17019                           /* 2 */ " . L . . . . . .",
17020                           /* 3 */ " . . L D D . . .",
17021                           /* 4 */ " . . L L D . . .",
17022                           /* 5 */ " . . . . . D . .",
17023                           /* 6 */ " . . . . . . . .",
17024                           /* 7 */ " . . . . . . . ."};
17025
17026        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17027        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17028
17029        assert_true (ai_move (ai, 3, 5));
17030        assert_true (ai_move (ai, 4, 6));
17031        assert_true (ai_move (ai, 2, 6));
17032        assert_true (ai_move (ai, 6, 4));
17033        assert_true (ai_move (ai, 1, 3));
17034        assert_true (ai_move (ai, 1, 4));
17035        assert_true (ai_move (ai, 0, 5));
17036        assert_true (ai_move (ai, 1, 5));
17037        assert_true (ai_move (ai, 2, 5));
17038        assert_true (ai_move (ai, 3, 6));
17039        assert_true (ai_move (ai, 0, 4));
17040        assert_true (ai_move (ai, 0, 3));
17041        assert_true (ai_move (ai, 0, 2));
17042        assert_true (ai_move (ai, 2, 7));
17043        assert_true (ai_move (ai, 4, 7));
17044        assert_true (ai_move (ai, 5, 3));
17045        assert_true (ai_move (ai, 2, 2));
17046        assert_true (ai_move (ai, 2, 1));
17047        assert_true (ai_move (ai, 3, 2));
17048        assert_true (ai_move (ai, 3, 7));
17049        assert_true (ai_move (ai, 1, 7));
17050        assert_true (ai_move (ai, 5, 4));
17051        assert_true (ai_move (ai, 4, 2));
17052        assert_true (ai_move (ai, 4, 1));
17053        assert_true (ai_move (ai, 5, 1));
17054        assert_true (ai_move (ai, 1, 1));
17055        assert_true (ai_move (ai, 3, 1));
17056        assert_true (ai_move (ai, 3, 0));
17057        assert_true (ai_move (ai, 5, 7));
17058        assert_true (ai_move (ai, 4, 5));
17059        assert_true (ai_move (ai, 6, 5));
17060        assert_true (ai_move (ai, 5, 2));
17061        assert_true (ai_move (ai, 6, 2));
17062        assert_true (ai_move (ai, 6, 3));
17063        assert_true (ai_move (ai, 7, 5));
17064        assert_true (ai_move (ai, 5, 0));
17065        assert_true (ai_move (ai, 6, 1));
17066        assert_true (ai_move (ai, 7, 3));
17067        assert_true (ai_move (ai, 7, 4));
17068        assert_true (ai_move (ai, 7, 6));
17069        assert_true (ai_move (ai, 1, 6));
17070        assert_true (ai_move (ai, 5, 6));
17071        assert_true (ai_move (ai, 6, 7));
17072        assert_true (ai_move (ai, 7, 2));
17073        assert_true (ai_move (ai, 7, 0));
17074        assert_true (ai_move (ai, 6, 0));
17075        assert_true (ai_move (ai, 7, 1));
17076        assert_true (ai_move (ai, 0, 7));
17077        assert_true (ai_move (ai, 7, 7));
17078        assert_true (ai_move (ai, 0, 6));
17079        assert_true (ai_move (ai, 6, 6));
17080        assert_true (ai_move (ai, 0, 1));
17081        assert_true (ai_move (ai, 4, 0));
17082        assert_true (game.pass ());
17083        assert_true (ai_move (ai, 2, 0));
17084        assert_true (ai_move (ai, 1, 0));
17085        assert_true (ai_move (ai, 0, 0));
17086    }
17087
17088    private static inline void test_complete_reversi_game_211 ()
17089    {
17090                                  /* 0 1 2 3 4 5 6 7 */
17091        string [] board = {/* 0 */ " . . . . . . . .",
17092                           /* 1 */ " . . . . . . . .",
17093                           /* 2 */ " . . . . . . . .",
17094                           /* 3 */ " . . D D D . . .",
17095                           /* 4 */ " . . L L L L . .",
17096                           /* 5 */ " . . . . D . . .",
17097                           /* 6 */ " . . . . . . . .",
17098                           /* 7 */ " . . . . . . . ."};
17099
17100        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17101        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17102
17103        assert_true (ai_move (ai, 1, 5));
17104        assert_true (ai_move (ai, 5, 6));
17105        assert_true (ai_move (ai, 6, 5));
17106        assert_true (ai_move (ai, 6, 3));
17107        assert_true (ai_move (ai, 4, 7));
17108        assert_true (ai_move (ai, 1, 4));
17109        assert_true (ai_move (ai, 0, 5));
17110        assert_true (ai_move (ai, 1, 2));
17111        assert_true (ai_move (ai, 3, 2));
17112        assert_true (ai_move (ai, 2, 2));
17113        assert_true (ai_move (ai, 0, 2));
17114        assert_true (ai_move (ai, 4, 1));
17115        assert_true (ai_move (ai, 2, 1));
17116        assert_true (ai_move (ai, 3, 1));
17117        assert_true (ai_move (ai, 4, 0));
17118        assert_true (ai_move (ai, 2, 0));
17119        assert_true (ai_move (ai, 1, 3));
17120        assert_true (ai_move (ai, 3, 0));
17121        assert_true (ai_move (ai, 1, 0));
17122        assert_true (ai_move (ai, 5, 2));
17123        assert_true (ai_move (ai, 5, 0));
17124        assert_true (ai_move (ai, 4, 2));
17125        assert_true (ai_move (ai, 2, 5));
17126        assert_true (ai_move (ai, 5, 1));
17127        assert_true (ai_move (ai, 3, 5));
17128        assert_true (ai_move (ai, 2, 6));
17129        assert_true (ai_move (ai, 3, 6));
17130        assert_true (ai_move (ai, 2, 7));
17131        assert_true (ai_move (ai, 5, 3));
17132        assert_true (ai_move (ai, 6, 2));
17133        assert_true (ai_move (ai, 7, 2));
17134        assert_true (ai_move (ai, 6, 7));
17135        assert_true (ai_move (ai, 7, 4));
17136        assert_true (ai_move (ai, 7, 3));
17137        assert_true (ai_move (ai, 5, 5));
17138        assert_true (ai_move (ai, 7, 5));
17139        assert_true (ai_move (ai, 7, 6));
17140        assert_true (ai_move (ai, 4, 6));
17141        assert_true (ai_move (ai, 6, 4));
17142        assert_true (ai_move (ai, 0, 3));
17143        assert_true (ai_move (ai, 0, 4));
17144        assert_true (ai_move (ai, 6, 6));
17145        assert_true (ai_move (ai, 7, 7));
17146        assert_true (ai_move (ai, 7, 1));
17147        assert_true (ai_move (ai, 5, 7));
17148        assert_true (ai_move (ai, 6, 1));
17149        assert_true (ai_move (ai, 3, 7));
17150        assert_true (ai_move (ai, 1, 1));
17151        assert_true (ai_move (ai, 1, 7));
17152        assert_true (ai_move (ai, 0, 1));
17153        assert_true (ai_move (ai, 0, 0));
17154        assert_true (ai_move (ai, 1, 6));
17155        assert_true (ai_move (ai, 0, 7));
17156        assert_true (game.pass ());
17157        assert_true (ai_move (ai, 0, 6));
17158        assert_true (game.pass ());
17159        assert_true (ai_move (ai, 7, 0));
17160        assert_true (ai_move (ai, 6, 0));
17161    }
17162
17163    private static inline void test_complete_reversi_game_212 ()
17164    {
17165                                  /* 0 1 2 3 4 5 6 7 */
17166        string [] board = {/* 0 */ " . . . . . . . .",
17167                           /* 1 */ " . . . . . . . .",
17168                           /* 2 */ " . . . . L . . .",
17169                           /* 3 */ " . . D L D . . .",
17170                           /* 4 */ " . . L D D . . .",
17171                           /* 5 */ " . . . . D . . .",
17172                           /* 6 */ " . . . . . . . .",
17173                           /* 7 */ " . . . . . . . ."};
17174
17175        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17176        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17177
17178        assert_true (ai_move (ai, 2, 5));
17179        assert_true (ai_move (ai, 1, 5));
17180        assert_true (ai_move (ai, 1, 4));
17181        assert_true (ai_move (ai, 3, 5));
17182        assert_true (ai_move (ai, 3, 6));
17183        assert_true (ai_move (ai, 1, 2));
17184        assert_true (ai_move (ai, 4, 6));
17185        assert_true (ai_move (ai, 2, 6));
17186        assert_true (ai_move (ai, 0, 5));
17187        assert_true (ai_move (ai, 3, 7));
17188        assert_true (ai_move (ai, 4, 7));
17189        assert_true (ai_move (ai, 5, 7));
17190        assert_true (ai_move (ai, 5, 6));
17191        assert_true (ai_move (ai, 6, 5));
17192        assert_true (ai_move (ai, 4, 1));
17193        assert_true (ai_move (ai, 5, 1));
17194        assert_true (ai_move (ai, 2, 7));
17195        assert_true (ai_move (ai, 1, 7));
17196        assert_true (ai_move (ai, 3, 2));
17197        assert_true (ai_move (ai, 5, 5));
17198        assert_true (ai_move (ai, 5, 2));
17199        assert_true (ai_move (ai, 0, 3));
17200        assert_true (ai_move (ai, 7, 5));
17201        assert_true (ai_move (ai, 6, 4));
17202        assert_true (ai_move (ai, 5, 0));
17203        assert_true (ai_move (ai, 5, 4));
17204        assert_true (ai_move (ai, 6, 3));
17205        assert_true (ai_move (ai, 7, 3));
17206        assert_true (ai_move (ai, 1, 3));
17207        assert_true (ai_move (ai, 0, 2));
17208        assert_true (ai_move (ai, 5, 3));
17209        assert_true (ai_move (ai, 2, 2));
17210        assert_true (ai_move (ai, 1, 6));
17211        assert_true (ai_move (ai, 2, 1));
17212        assert_true (ai_move (ai, 2, 0));
17213        assert_true (ai_move (ai, 3, 1));
17214        assert_true (ai_move (ai, 3, 0));
17215        assert_true (ai_move (ai, 4, 0));
17216        assert_true (ai_move (ai, 6, 6));
17217        assert_true (ai_move (ai, 6, 7));
17218        assert_true (ai_move (ai, 1, 1));
17219        assert_true (ai_move (ai, 0, 4));
17220        assert_true (ai_move (ai, 0, 1));
17221        assert_true (ai_move (ai, 0, 7));
17222        assert_true (ai_move (ai, 0, 6));
17223        assert_true (ai_move (ai, 0, 0));
17224        assert_true (ai_move (ai, 1, 0));
17225        assert_true (ai_move (ai, 7, 7));
17226        assert_true (ai_move (ai, 7, 6));
17227        assert_true (ai_move (ai, 7, 4));
17228        assert_true (ai_move (ai, 7, 2));
17229        assert_true (ai_move (ai, 6, 2));
17230        assert_true (ai_move (ai, 7, 1));
17231        assert_true (ai_move (ai, 7, 0));
17232        assert_true (ai_move (ai, 6, 1));
17233        assert_true (ai_move (ai, 6, 0));
17234    }
17235
17236    private static inline void test_complete_reversi_game_213 ()
17237    {
17238                                  /* 0 1 2 3 4 5 6 7 */
17239        string [] board = {/* 0 */ " . . . . . . . .",
17240                           /* 1 */ " . . . . . . . .",
17241                           /* 2 */ " . . L . . . . .",
17242                           /* 3 */ " . . L D D . . .",
17243                           /* 4 */ " . . L D D . . .",
17244                           /* 5 */ " . . . . D . . .",
17245                           /* 6 */ " . . . . . . . .",
17246                           /* 7 */ " . . . . . . . ."};
17247
17248        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17249        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17250
17251        assert_true (ai_move (ai, 1, 3));
17252        assert_true (ai_move (ai, 0, 2));
17253        assert_true (ai_move (ai, 2, 1));
17254        assert_true (ai_move (ai, 3, 1));
17255        assert_true (ai_move (ai, 2, 5));
17256        assert_true (ai_move (ai, 2, 0));
17257        assert_true (ai_move (ai, 0, 3));
17258        assert_true (ai_move (ai, 0, 4));
17259        assert_true (ai_move (ai, 1, 1));
17260        assert_true (ai_move (ai, 2, 6));
17261        assert_true (ai_move (ai, 1, 5));
17262        assert_true (ai_move (ai, 0, 5));
17263        assert_true (ai_move (ai, 1, 2));
17264        assert_true (ai_move (ai, 3, 5));
17265        assert_true (ai_move (ai, 3, 2));
17266        assert_true (ai_move (ai, 4, 2));
17267        assert_true (ai_move (ai, 2, 7));
17268        assert_true (ai_move (ai, 1, 4));
17269        assert_true (ai_move (ai, 0, 1));
17270        assert_true (ai_move (ai, 0, 0));
17271        assert_true (ai_move (ai, 5, 2));
17272        assert_true (ai_move (ai, 6, 2));
17273        assert_true (ai_move (ai, 3, 6));
17274        assert_true (ai_move (ai, 4, 7));
17275        assert_true (ai_move (ai, 3, 7));
17276        assert_true (ai_move (ai, 5, 6));
17277        assert_true (ai_move (ai, 5, 4));
17278        assert_true (ai_move (ai, 1, 7));
17279        assert_true (ai_move (ai, 6, 7));
17280        assert_true (ai_move (ai, 5, 5));
17281        assert_true (ai_move (ai, 4, 1));
17282        assert_true (ai_move (ai, 5, 3));
17283        assert_true (ai_move (ai, 5, 1));
17284        assert_true (ai_move (ai, 6, 4));
17285        assert_true (ai_move (ai, 3, 0));
17286        assert_true (ai_move (ai, 4, 6));
17287        assert_true (ai_move (ai, 6, 3));
17288        assert_true (ai_move (ai, 7, 2));
17289        assert_true (ai_move (ai, 6, 5));
17290        assert_true (ai_move (ai, 5, 0));
17291        assert_true (ai_move (ai, 4, 0));
17292        assert_true (ai_move (ai, 7, 5));
17293        assert_true (ai_move (ai, 6, 6));
17294        assert_true (ai_move (ai, 1, 6));
17295        assert_true (ai_move (ai, 1, 0));
17296        assert_true (ai_move (ai, 7, 7));
17297        assert_true (ai_move (ai, 5, 7));
17298        assert_true (game.pass ());
17299        assert_true (ai_move (ai, 0, 7));
17300        assert_true (ai_move (ai, 0, 6));
17301        assert_true (ai_move (ai, 7, 6));
17302        assert_true (game.pass ());
17303        assert_true (ai_move (ai, 7, 3));
17304        assert_true (ai_move (ai, 7, 4));
17305        assert_true (ai_move (ai, 6, 1));
17306        assert_true (ai_move (ai, 7, 0));
17307        assert_true (ai_move (ai, 7, 1));
17308        assert_true (ai_move (ai, 6, 0));
17309    }
17310
17311    private static inline void test_complete_reversi_game_214 ()
17312    {
17313                                  /* 0 1 2 3 4 5 6 7 */
17314        string [] board = {/* 0 */ " . . . . . . . .",
17315                           /* 1 */ " . . . . . . . .",
17316                           /* 2 */ " . . . . . . . .",
17317                           /* 3 */ " . . D D D . . .",
17318                           /* 4 */ " . . L D L . . .",
17319                           /* 5 */ " . . . L . . . .",
17320                           /* 6 */ " . . . . L . . .",
17321                           /* 7 */ " . . . . . . . ."};
17322
17323        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17324        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17325
17326        assert_true (ai_move (ai, 3, 6));
17327        assert_true (ai_move (ai, 2, 2));
17328        assert_true (ai_move (ai, 1, 2));
17329        assert_true (ai_move (ai, 1, 3));
17330        assert_true (ai_move (ai, 5, 7));
17331        assert_true (ai_move (ai, 2, 6));
17332        assert_true (ai_move (ai, 4, 5));
17333        assert_true (ai_move (ai, 5, 5));
17334        assert_true (ai_move (ai, 5, 6));
17335        assert_true (ai_move (ai, 4, 7));
17336        assert_true (ai_move (ai, 3, 7));
17337        assert_true (ai_move (ai, 0, 2));
17338        assert_true (ai_move (ai, 6, 4));
17339        assert_true (ai_move (ai, 6, 5));
17340        assert_true (ai_move (ai, 5, 4));
17341        assert_true (ai_move (ai, 6, 3));
17342        assert_true (ai_move (ai, 7, 2));
17343        assert_true (ai_move (ai, 6, 2));
17344        assert_true (ai_move (ai, 7, 5));
17345        assert_true (ai_move (ai, 2, 7));
17346        assert_true (ai_move (ai, 2, 5));
17347        assert_true (ai_move (ai, 6, 7));
17348        assert_true (ai_move (ai, 2, 1));
17349        assert_true (ai_move (ai, 3, 1));
17350        assert_true (ai_move (ai, 5, 3));
17351        assert_true (ai_move (ai, 5, 2));
17352        assert_true (ai_move (ai, 4, 1));
17353        assert_true (ai_move (ai, 1, 4));
17354        assert_true (ai_move (ai, 0, 5));
17355        assert_true (ai_move (ai, 1, 5));
17356        assert_true (ai_move (ai, 7, 4));
17357        assert_true (ai_move (ai, 4, 2));
17358        assert_true (ai_move (ai, 3, 2));
17359        assert_true (ai_move (ai, 5, 0));
17360        assert_true (ai_move (ai, 5, 1));
17361        assert_true (ai_move (ai, 7, 3));
17362        assert_true (ai_move (ai, 0, 4));
17363        assert_true (ai_move (ai, 2, 0));
17364        assert_true (ai_move (ai, 3, 0));
17365        assert_true (ai_move (ai, 4, 0));
17366        assert_true (ai_move (ai, 0, 6));
17367        assert_true (ai_move (ai, 6, 1));
17368        assert_true (ai_move (ai, 1, 6));
17369        assert_true (ai_move (ai, 0, 7));
17370        assert_true (ai_move (ai, 1, 7));
17371        assert_true (ai_move (ai, 0, 3));
17372        assert_true (ai_move (ai, 7, 7));
17373        assert_true (ai_move (ai, 7, 6));
17374        assert_true (ai_move (ai, 7, 0));
17375        assert_true (ai_move (ai, 7, 1));
17376        assert_true (ai_move (ai, 6, 6));
17377        assert_true (game.pass ());
17378        assert_true (ai_move (ai, 1, 1));
17379        assert_true (ai_move (ai, 0, 1));
17380        assert_true (ai_move (ai, 6, 0));
17381        assert_true (game.pass ());
17382        assert_true (ai_move (ai, 1, 0));
17383    }
17384
17385    private static inline void test_complete_reversi_game_215 ()
17386    {
17387                                  /* 0 1 2 3 4 5 6 7 */
17388        string [] board = {/* 0 */ " . . . . . . . .",
17389                           /* 1 */ " . . . . . . . .",
17390                           /* 2 */ " . . . . L . . .",
17391                           /* 3 */ " . . D L L . . .",
17392                           /* 4 */ " . . L D L . . .",
17393                           /* 5 */ " . . . D . . . .",
17394                           /* 6 */ " . . . . . . . .",
17395                           /* 7 */ " . . . . . . . ."};
17396
17397        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17398        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17399
17400        assert_true (ai_move (ai, 2, 5));
17401        assert_true (ai_move (ai, 1, 5));
17402        assert_true (ai_move (ai, 1, 3));
17403        assert_true (ai_move (ai, 4, 5));
17404        assert_true (ai_move (ai, 2, 6));
17405        assert_true (ai_move (ai, 3, 7));
17406        assert_true (ai_move (ai, 2, 7));
17407        assert_true (ai_move (ai, 1, 4));
17408        assert_true (ai_move (ai, 4, 6));
17409        assert_true (ai_move (ai, 3, 6));
17410        assert_true (ai_move (ai, 4, 7));
17411        assert_true (ai_move (ai, 2, 2));
17412        assert_true (ai_move (ai, 2, 1));
17413        assert_true (ai_move (ai, 3, 2));
17414        assert_true (ai_move (ai, 3, 1));
17415        assert_true (ai_move (ai, 1, 2));
17416        assert_true (ai_move (ai, 0, 2));
17417        assert_true (ai_move (ai, 0, 3));
17418        assert_true (ai_move (ai, 5, 1));
17419        assert_true (ai_move (ai, 5, 2));
17420        assert_true (ai_move (ai, 6, 2));
17421        assert_true (ai_move (ai, 4, 1));
17422        assert_true (ai_move (ai, 0, 5));
17423        assert_true (ai_move (ai, 6, 3));
17424        assert_true (ai_move (ai, 0, 4));
17425        assert_true (ai_move (ai, 5, 0));
17426        assert_true (ai_move (ai, 5, 6));
17427        assert_true (ai_move (ai, 7, 2));
17428        assert_true (ai_move (ai, 5, 5));
17429        assert_true (ai_move (ai, 3, 0));
17430        assert_true (ai_move (ai, 5, 4));
17431        assert_true (ai_move (ai, 2, 0));
17432        assert_true (ai_move (ai, 4, 0));
17433        assert_true (ai_move (ai, 6, 5));
17434        assert_true (ai_move (ai, 5, 3));
17435        assert_true (ai_move (ai, 6, 4));
17436        assert_true (ai_move (ai, 7, 5));
17437        assert_true (ai_move (ai, 5, 7));
17438        assert_true (ai_move (ai, 6, 7));
17439        assert_true (ai_move (ai, 1, 1));
17440        assert_true (ai_move (ai, 7, 4));
17441        assert_true (ai_move (ai, 1, 7));
17442        assert_true (ai_move (ai, 0, 7));
17443        assert_true (ai_move (ai, 0, 6));
17444        assert_true (ai_move (ai, 7, 1));
17445        assert_true (ai_move (ai, 0, 1));
17446        assert_true (ai_move (ai, 7, 3));
17447        assert_true (ai_move (ai, 7, 6));
17448        assert_true (ai_move (ai, 7, 7));
17449        assert_true (ai_move (ai, 6, 1));
17450        assert_true (ai_move (ai, 1, 6));
17451        assert_true (ai_move (ai, 6, 6));
17452        assert_true (ai_move (ai, 0, 0));
17453        assert_true (ai_move (ai, 1, 0));
17454        assert_true (ai_move (ai, 6, 0));
17455        assert_true (ai_move (ai, 7, 0));
17456    }
17457
17458    private static inline void test_complete_reversi_game_216 ()
17459    {
17460                                  /* 0 1 2 3 4 5 6 7 */
17461        string [] board = {/* 0 */ " . . . . . . . .",
17462                           /* 1 */ " . . . . . . . .",
17463                           /* 2 */ " . . . . . . . .",
17464                           /* 3 */ " . . D D D . . .",
17465                           /* 4 */ " . . L D L . . .",
17466                           /* 5 */ " . . . L . . . .",
17467                           /* 6 */ " . . L . . . . .",
17468                           /* 7 */ " . . . . . . . ."};
17469
17470        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17471        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17472
17473        assert_true (ai_move (ai, 3, 6));
17474        assert_true (ai_move (ai, 2, 2));
17475        assert_true (ai_move (ai, 1, 2));
17476        assert_true (ai_move (ai, 1, 3));
17477        assert_true (ai_move (ai, 4, 5));
17478        assert_true (ai_move (ai, 0, 2));
17479        assert_true (ai_move (ai, 3, 2));
17480        assert_true (ai_move (ai, 4, 1));
17481        assert_true (ai_move (ai, 3, 1));
17482        assert_true (ai_move (ai, 4, 0));
17483        assert_true (ai_move (ai, 5, 0));
17484        assert_true (ai_move (ai, 5, 1));
17485        assert_true (ai_move (ai, 5, 2));
17486        assert_true (ai_move (ai, 4, 2));
17487        assert_true (ai_move (ai, 1, 5));
17488        assert_true (ai_move (ai, 0, 4));
17489        assert_true (ai_move (ai, 0, 3));
17490        assert_true (ai_move (ai, 6, 2));
17491        assert_true (ai_move (ai, 2, 1));
17492        assert_true (ai_move (ai, 1, 4));
17493        assert_true (ai_move (ai, 3, 0));
17494        assert_true (ai_move (ai, 2, 0));
17495        assert_true (ai_move (ai, 1, 0));
17496        assert_true (ai_move (ai, 5, 6));
17497        assert_true (ai_move (ai, 5, 3));
17498        assert_true (ai_move (ai, 2, 5));
17499        assert_true (ai_move (ai, 2, 7));
17500        assert_true (ai_move (ai, 6, 3));
17501        assert_true (ai_move (ai, 5, 4));
17502        assert_true (ai_move (ai, 4, 7));
17503        assert_true (ai_move (ai, 7, 4));
17504        assert_true (ai_move (ai, 5, 5));
17505        assert_true (ai_move (ai, 5, 7));
17506        assert_true (ai_move (ai, 3, 7));
17507        assert_true (ai_move (ai, 7, 2));
17508        assert_true (ai_move (ai, 6, 5));
17509        assert_true (ai_move (ai, 4, 6));
17510        assert_true (ai_move (ai, 6, 4));
17511        assert_true (ai_move (ai, 7, 3));
17512        assert_true (ai_move (ai, 6, 1));
17513        assert_true (ai_move (ai, 7, 5));
17514        assert_true (ai_move (ai, 6, 6));
17515        assert_true (ai_move (ai, 0, 5));
17516        assert_true (ai_move (ai, 1, 6));
17517        assert_true (ai_move (ai, 0, 1));
17518        assert_true (ai_move (ai, 1, 1));
17519        assert_true (ai_move (ai, 7, 6));
17520        assert_true (ai_move (ai, 7, 7));
17521        assert_true (ai_move (ai, 6, 7));
17522        assert_true (ai_move (ai, 7, 1));
17523        assert_true (ai_move (ai, 0, 0));
17524        assert_true (ai_move (ai, 1, 7));
17525        assert_true (ai_move (ai, 0, 7));
17526        assert_true (ai_move (ai, 0, 6));
17527        assert_true (ai_move (ai, 6, 0));
17528        assert_true (ai_move (ai, 7, 0));
17529    }
17530
17531    private static inline void test_complete_reversi_game_217 ()
17532    {
17533                                  /* 0 1 2 3 4 5 6 7 */
17534        string [] board = {/* 0 */ " . . . . . . . .",
17535                           /* 1 */ " . . . . . . . .",
17536                           /* 2 */ " . . L . . . . .",
17537                           /* 3 */ " . . L L D . . .",
17538                           /* 4 */ " . . L D L . . .",
17539                           /* 5 */ " . . . D . . . .",
17540                           /* 6 */ " . . . . . . . .",
17541                           /* 7 */ " . . . . . . . ."};
17542
17543        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17544        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17545
17546        assert_true (ai_move (ai, 1, 2));
17547        assert_true (ai_move (ai, 1, 3));
17548        assert_true (ai_move (ai, 4, 5));
17549        assert_true (ai_move (ai, 0, 2));
17550        assert_true (ai_move (ai, 3, 2));
17551        assert_true (ai_move (ai, 4, 1));
17552        assert_true (ai_move (ai, 3, 1));
17553        assert_true (ai_move (ai, 4, 0));
17554        assert_true (ai_move (ai, 5, 0));
17555        assert_true (ai_move (ai, 5, 1));
17556        assert_true (ai_move (ai, 5, 2));
17557        assert_true (ai_move (ai, 4, 2));
17558        assert_true (ai_move (ai, 1, 5));
17559        assert_true (ai_move (ai, 2, 5));
17560        assert_true (ai_move (ai, 1, 4));
17561        assert_true (ai_move (ai, 5, 6));
17562        assert_true (ai_move (ai, 2, 6));
17563        assert_true (ai_move (ai, 2, 7));
17564        assert_true (ai_move (ai, 3, 6));
17565        assert_true (ai_move (ai, 0, 5));
17566        assert_true (ai_move (ai, 5, 4));
17567        assert_true (ai_move (ai, 6, 2));
17568        assert_true (ai_move (ai, 6, 3));
17569        assert_true (ai_move (ai, 6, 0));
17570        assert_true (ai_move (ai, 7, 2));
17571        assert_true (ai_move (ai, 5, 3));
17572        assert_true (ai_move (ai, 2, 1));
17573        assert_true (ai_move (ai, 3, 0));
17574        assert_true (ai_move (ai, 0, 3));
17575        assert_true (ai_move (ai, 0, 4));
17576        assert_true (ai_move (ai, 5, 5));
17577        assert_true (ai_move (ai, 6, 5));
17578        assert_true (ai_move (ai, 6, 4));
17579        assert_true (ai_move (ai, 1, 6));
17580        assert_true (ai_move (ai, 4, 6));
17581        assert_true (ai_move (ai, 3, 7));
17582        assert_true (ai_move (ai, 2, 0));
17583        assert_true (ai_move (ai, 1, 0));
17584        assert_true (ai_move (ai, 7, 5));
17585        assert_true (ai_move (ai, 5, 7));
17586        assert_true (ai_move (ai, 4, 7));
17587        assert_true (ai_move (ai, 7, 3));
17588        assert_true (ai_move (ai, 6, 6));
17589        assert_true (ai_move (ai, 7, 1));
17590        assert_true (ai_move (ai, 1, 1));
17591        assert_true (ai_move (ai, 0, 1));
17592        assert_true (ai_move (ai, 0, 0));
17593        assert_true (ai_move (ai, 7, 6));
17594        assert_true (ai_move (ai, 7, 4));
17595        assert_true (ai_move (ai, 6, 7));
17596        assert_true (ai_move (ai, 7, 0));
17597        assert_true (game.pass ());
17598        assert_true (ai_move (ai, 0, 6));
17599        assert_true (game.pass ());
17600        assert_true (ai_move (ai, 6, 1));
17601        assert_true (game.pass ());
17602        assert_true (ai_move (ai, 0, 7));
17603        assert_true (ai_move (ai, 1, 7));
17604        assert_true (ai_move (ai, 7, 7));
17605    }
17606
17607    private static inline void test_complete_reversi_game_218 ()
17608    {
17609                                  /* 0 1 2 3 4 5 6 7 */
17610        string [] board = {/* 0 */ " . . . . . . . .",
17611                           /* 1 */ " . . . . . . . .",
17612                           /* 2 */ " . . . . L . . .",
17613                           /* 3 */ " . . D D L . . .",
17614                           /* 4 */ " . . D D L . . .",
17615                           /* 5 */ " . . D . . . . .",
17616                           /* 6 */ " . . . . . . . .",
17617                           /* 7 */ " . . . . . . . ."};
17618
17619        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17620        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17621
17622        assert_true (ai_move (ai, 5, 1));
17623        assert_true (ai_move (ai, 4, 1));
17624        assert_true (ai_move (ai, 5, 5));
17625        assert_true (ai_move (ai, 6, 0));
17626        assert_true (ai_move (ai, 5, 3));
17627        assert_true (ai_move (ai, 6, 4));
17628        assert_true (ai_move (ai, 6, 3));
17629        assert_true (ai_move (ai, 4, 6));
17630        assert_true (ai_move (ai, 3, 1));
17631        assert_true (ai_move (ai, 2, 1));
17632        assert_true (ai_move (ai, 2, 0));
17633        assert_true (ai_move (ai, 6, 2));
17634        assert_true (ai_move (ai, 2, 2));
17635        assert_true (ai_move (ai, 3, 5));
17636        assert_true (ai_move (ai, 3, 6));
17637        assert_true (ai_move (ai, 2, 6));
17638        assert_true (ai_move (ai, 3, 7));
17639        assert_true (ai_move (ai, 1, 4));
17640        assert_true (ai_move (ai, 1, 3));
17641        assert_true (ai_move (ai, 3, 2));
17642        assert_true (ai_move (ai, 2, 7));
17643        assert_true (ai_move (ai, 1, 5));
17644        assert_true (ai_move (ai, 0, 4));
17645        assert_true (ai_move (ai, 4, 7));
17646        assert_true (ai_move (ai, 4, 5));
17647        assert_true (ai_move (ai, 0, 2));
17648        assert_true (ai_move (ai, 6, 5));
17649        assert_true (ai_move (ai, 1, 2));
17650        assert_true (ai_move (ai, 5, 7));
17651        assert_true (ai_move (ai, 7, 5));
17652        assert_true (ai_move (ai, 5, 4));
17653        assert_true (ai_move (ai, 5, 2));
17654        assert_true (ai_move (ai, 5, 6));
17655        assert_true (ai_move (ai, 0, 5));
17656        assert_true (ai_move (ai, 0, 3));
17657        assert_true (ai_move (ai, 3, 0));
17658        assert_true (ai_move (ai, 7, 2));
17659        assert_true (ai_move (ai, 7, 4));
17660        assert_true (ai_move (ai, 7, 3));
17661        assert_true (ai_move (ai, 7, 1));
17662        assert_true (ai_move (ai, 5, 0));
17663        assert_true (ai_move (ai, 6, 1));
17664        assert_true (ai_move (ai, 7, 0));
17665        assert_true (ai_move (ai, 6, 6));
17666        assert_true (ai_move (ai, 7, 7));
17667        assert_true (ai_move (ai, 1, 0));
17668        assert_true (ai_move (ai, 7, 6));
17669        assert_true (ai_move (ai, 1, 1));
17670        assert_true (ai_move (ai, 4, 0));
17671        assert_true (ai_move (ai, 6, 7));
17672        assert_true (ai_move (ai, 0, 0));
17673        assert_true (ai_move (ai, 0, 1));
17674        assert_true (ai_move (ai, 1, 6));
17675        assert_true (ai_move (ai, 0, 7));
17676        assert_true (ai_move (ai, 0, 6));
17677        assert_true (ai_move (ai, 1, 7));
17678    }
17679
17680    private static inline void test_complete_reversi_game_219 ()
17681    {
17682                                  /* 0 1 2 3 4 5 6 7 */
17683        string [] board = {/* 0 */ " . . . . . . . .",
17684                           /* 1 */ " . . . . . . . .",
17685                           /* 2 */ " . . L . . . . .",
17686                           /* 3 */ " . . D L D . . .",
17687                           /* 4 */ " . . D D L . . .",
17688                           /* 5 */ " . . D . . . . .",
17689                           /* 6 */ " . . . . . . . .",
17690                           /* 7 */ " . . . . . . . ."};
17691
17692        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17693        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17694
17695        assert_true (ai_move (ai, 2, 1));
17696        assert_true (ai_move (ai, 1, 5));
17697        assert_true (ai_move (ai, 1, 4));
17698        assert_true (ai_move (ai, 3, 5));
17699        assert_true (ai_move (ai, 2, 6));
17700        assert_true (ai_move (ai, 0, 4));
17701        assert_true (ai_move (ai, 0, 3));
17702        assert_true (ai_move (ai, 0, 2));
17703        assert_true (ai_move (ai, 0, 5));
17704        assert_true (ai_move (ai, 0, 6));
17705        assert_true (ai_move (ai, 5, 3));
17706        assert_true (ai_move (ai, 1, 3));
17707        assert_true (ai_move (ai, 3, 2));
17708        assert_true (ai_move (ai, 3, 6));
17709        assert_true (ai_move (ai, 3, 7));
17710        assert_true (ai_move (ai, 3, 1));
17711        assert_true (ai_move (ai, 3, 0));
17712        assert_true (ai_move (ai, 4, 1));
17713        assert_true (ai_move (ai, 1, 2));
17714        assert_true (ai_move (ai, 4, 2));
17715        assert_true (ai_move (ai, 5, 0));
17716        assert_true (ai_move (ai, 4, 6));
17717        assert_true (ai_move (ai, 5, 2));
17718        assert_true (ai_move (ai, 5, 1));
17719        assert_true (ai_move (ai, 5, 5));
17720        assert_true (ai_move (ai, 2, 7));
17721        assert_true (ai_move (ai, 1, 7));
17722        assert_true (ai_move (ai, 6, 2));
17723        assert_true (ai_move (ai, 6, 3));
17724        assert_true (ai_move (ai, 5, 7));
17725        assert_true (ai_move (ai, 7, 2));
17726        assert_true (ai_move (ai, 6, 4));
17727        assert_true (ai_move (ai, 5, 4));
17728        assert_true (ai_move (ai, 7, 3));
17729        assert_true (ai_move (ai, 7, 5));
17730        assert_true (ai_move (ai, 7, 1));
17731        assert_true (ai_move (ai, 5, 6));
17732        assert_true (ai_move (ai, 2, 0));
17733        assert_true (ai_move (ai, 7, 4));
17734        assert_true (ai_move (ai, 7, 6));
17735        assert_true (ai_move (ai, 1, 6));
17736        assert_true (ai_move (ai, 4, 0));
17737        assert_true (ai_move (ai, 1, 0));
17738        assert_true (ai_move (ai, 6, 5));
17739        assert_true (ai_move (ai, 4, 5));
17740        assert_true (ai_move (ai, 4, 7));
17741        assert_true (ai_move (ai, 6, 7));
17742        assert_true (ai_move (ai, 6, 6));
17743        assert_true (ai_move (ai, 6, 0));
17744        assert_true (ai_move (ai, 0, 1));
17745        assert_true (ai_move (ai, 7, 7));
17746        assert_true (ai_move (ai, 0, 7));
17747        assert_true (ai_move (ai, 7, 0));
17748        assert_true (ai_move (ai, 1, 1));
17749        assert_true (ai_move (ai, 0, 0));
17750        assert_true (ai_move (ai, 6, 1));
17751    }
17752
17753    private static inline void test_complete_reversi_game_220 ()
17754    {
17755                                  /* 0 1 2 3 4 5 6 7 */
17756        string [] board = {/* 0 */ " . . . . . . . .",
17757                           /* 1 */ " . . . . . . . .",
17758                           /* 2 */ " . . . . . . . .",
17759                           /* 3 */ " . . D D D . . .",
17760                           /* 4 */ " . L L L L . . .",
17761                           /* 5 */ " . . D . . . . .",
17762                           /* 6 */ " . . . . . . . .",
17763                           /* 7 */ " . . . . . . . ."};
17764
17765        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17766        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17767
17768        assert_true (ai_move (ai, 1, 5));
17769        assert_true (ai_move (ai, 3, 6));
17770        assert_true (ai_move (ai, 2, 6));
17771        assert_true (ai_move (ai, 1, 2));
17772        assert_true (ai_move (ai, 2, 2));
17773        assert_true (ai_move (ai, 5, 2));
17774        assert_true (ai_move (ai, 0, 2));
17775        assert_true (ai_move (ai, 3, 2));
17776        assert_true (ai_move (ai, 0, 3));
17777        assert_true (ai_move (ai, 2, 1));
17778        assert_true (ai_move (ai, 2, 0));
17779        assert_true (ai_move (ai, 0, 5));
17780        assert_true (ai_move (ai, 1, 3));
17781        assert_true (ai_move (ai, 2, 7));
17782        assert_true (ai_move (ai, 4, 1));
17783        assert_true (ai_move (ai, 0, 6));
17784        assert_true (ai_move (ai, 6, 3));
17785        assert_true (ai_move (ai, 3, 1));
17786        assert_true (ai_move (ai, 4, 0));
17787        assert_true (ai_move (ai, 3, 0));
17788        assert_true (ai_move (ai, 4, 2));
17789        assert_true (ai_move (ai, 5, 1));
17790        assert_true (ai_move (ai, 5, 0));
17791        assert_true (ai_move (ai, 6, 2));
17792        assert_true (ai_move (ai, 7, 2));
17793        assert_true (ai_move (ai, 7, 4));
17794        assert_true (ai_move (ai, 6, 4));
17795        assert_true (ai_move (ai, 5, 4));
17796        assert_true (ai_move (ai, 5, 3));
17797        assert_true (ai_move (ai, 6, 1));
17798        assert_true (ai_move (ai, 6, 5));
17799        assert_true (ai_move (ai, 5, 5));
17800        assert_true (ai_move (ai, 5, 6));
17801        assert_true (ai_move (ai, 4, 5));
17802        assert_true (ai_move (ai, 7, 5));
17803        assert_true (ai_move (ai, 5, 7));
17804        assert_true (ai_move (ai, 7, 3));
17805        assert_true (ai_move (ai, 7, 1));
17806        assert_true (ai_move (ai, 7, 0));
17807        assert_true (ai_move (ai, 6, 0));
17808        assert_true (ai_move (ai, 3, 5));
17809        assert_true (ai_move (ai, 4, 6));
17810        assert_true (ai_move (ai, 3, 7));
17811        assert_true (ai_move (ai, 4, 7));
17812        assert_true (ai_move (ai, 6, 7));
17813        assert_true (ai_move (ai, 7, 7));
17814        assert_true (ai_move (ai, 1, 6));
17815        assert_true (ai_move (ai, 1, 7));
17816        assert_true (game.pass ());
17817        assert_true (ai_move (ai, 0, 7));
17818        assert_true (game.pass ());
17819        assert_true (ai_move (ai, 0, 4));
17820        assert_true (ai_move (ai, 1, 1));
17821        assert_true (ai_move (ai, 7, 6));
17822        assert_true (ai_move (ai, 6, 6));
17823        assert_true (ai_move (ai, 0, 0));
17824        assert_true (ai_move (ai, 0, 1));
17825        assert_true (ai_move (ai, 1, 0));
17826    }
17827
17828    private static inline void test_complete_reversi_game_221 ()
17829    {
17830                                  /* 0 1 2 3 4 5 6 7 */
17831        string [] board = {/* 0 */ " . . . . . . . .",
17832                           /* 1 */ " . . . . . . . .",
17833                           /* 2 */ " . . . . . L . .",
17834                           /* 3 */ " . . D D L . . .",
17835                           /* 4 */ " . . D L L . . .",
17836                           /* 5 */ " . D . . . . . .",
17837                           /* 6 */ " . . . . . . . .",
17838                           /* 7 */ " . . . . . . . ."};
17839
17840        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17841        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17842
17843        assert_true (ai_move (ai, 4, 5));
17844        assert_true (ai_move (ai, 4, 6));
17845        assert_true (ai_move (ai, 5, 6));
17846        assert_true (ai_move (ai, 2, 2));
17847        assert_true (ai_move (ai, 2, 1));
17848        assert_true (ai_move (ai, 1, 3));
17849        assert_true (ai_move (ai, 1, 2));
17850        assert_true (ai_move (ai, 3, 1));
17851        assert_true (ai_move (ai, 3, 2));
17852        assert_true (ai_move (ai, 2, 5));
17853        assert_true (ai_move (ai, 3, 5));
17854        assert_true (ai_move (ai, 2, 6));
17855        assert_true (ai_move (ai, 2, 7));
17856        assert_true (ai_move (ai, 5, 5));
17857        assert_true (ai_move (ai, 6, 5));
17858        assert_true (ai_move (ai, 6, 4));
17859        assert_true (ai_move (ai, 5, 4));
17860        assert_true (ai_move (ai, 1, 4));
17861        assert_true (ai_move (ai, 0, 2));
17862        assert_true (ai_move (ai, 3, 6));
17863        assert_true (ai_move (ai, 5, 7));
17864        assert_true (ai_move (ai, 2, 0));
17865        assert_true (ai_move (ai, 0, 5));
17866        assert_true (ai_move (ai, 7, 5));
17867        assert_true (ai_move (ai, 3, 7));
17868        assert_true (ai_move (ai, 4, 7));
17869        assert_true (ai_move (ai, 4, 0));
17870        assert_true (ai_move (ai, 4, 1));
17871        assert_true (ai_move (ai, 7, 3));
17872        assert_true (ai_move (ai, 7, 4));
17873        assert_true (ai_move (ai, 4, 2));
17874        assert_true (ai_move (ai, 3, 0));
17875        assert_true (ai_move (ai, 6, 2));
17876        assert_true (ai_move (ai, 5, 0));
17877        assert_true (ai_move (ai, 6, 3));
17878        assert_true (ai_move (ai, 5, 3));
17879        assert_true (ai_move (ai, 5, 1));
17880        assert_true (ai_move (ai, 7, 2));
17881        assert_true (ai_move (ai, 1, 6));
17882        assert_true (ai_move (ai, 1, 1));
17883        assert_true (ai_move (ai, 7, 6));
17884        assert_true (ai_move (ai, 7, 7));
17885        assert_true (ai_move (ai, 6, 7));
17886        assert_true (ai_move (ai, 6, 0));
17887        assert_true (ai_move (ai, 1, 0));
17888        assert_true (ai_move (ai, 0, 0));
17889        assert_true (ai_move (ai, 0, 1));
17890        assert_true (ai_move (ai, 0, 3));
17891        assert_true (ai_move (ai, 6, 6));
17892        assert_true (ai_move (ai, 7, 1));
17893        assert_true (ai_move (ai, 0, 4));
17894        assert_true (ai_move (ai, 0, 7));
17895        assert_true (ai_move (ai, 0, 6));
17896        assert_true (ai_move (ai, 1, 7));
17897        assert_true (ai_move (ai, 6, 1));
17898        assert_true (ai_move (ai, 7, 0));
17899    }
17900
17901    private static inline void test_complete_reversi_game_222 ()
17902    {
17903                                  /* 0 1 2 3 4 5 6 7 */
17904        string [] board = {/* 0 */ " . . . . . . . .",
17905                           /* 1 */ " . . . . . . . .",
17906                           /* 2 */ " . . . . L . . .",
17907                           /* 3 */ " . . D D L . . .",
17908                           /* 4 */ " . . D L L . . .",
17909                           /* 5 */ " . D . . . . . .",
17910                           /* 6 */ " . . . . . . . .",
17911                           /* 7 */ " . . . . . . . ."};
17912
17913        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17914        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17915
17916        assert_true (ai_move (ai, 5, 1));
17917        assert_true (ai_move (ai, 4, 1));
17918        assert_true (ai_move (ai, 4, 5));
17919        assert_true (ai_move (ai, 4, 6));
17920        assert_true (ai_move (ai, 5, 6));
17921        assert_true (ai_move (ai, 2, 2));
17922        assert_true (ai_move (ai, 2, 1));
17923        assert_true (ai_move (ai, 1, 3));
17924        assert_true (ai_move (ai, 1, 2));
17925        assert_true (ai_move (ai, 3, 1));
17926        assert_true (ai_move (ai, 0, 2));
17927        assert_true (ai_move (ai, 2, 0));
17928        assert_true (ai_move (ai, 3, 2));
17929        assert_true (ai_move (ai, 0, 4));
17930        assert_true (ai_move (ai, 0, 3));
17931        assert_true (ai_move (ai, 0, 1));
17932        assert_true (ai_move (ai, 5, 0));
17933        assert_true (ai_move (ai, 2, 6));
17934        assert_true (ai_move (ai, 4, 0));
17935        assert_true (ai_move (ai, 2, 5));
17936        assert_true (ai_move (ai, 5, 2));
17937        assert_true (ai_move (ai, 6, 2));
17938        assert_true (ai_move (ai, 1, 4));
17939        assert_true (ai_move (ai, 3, 0));
17940        assert_true (ai_move (ai, 1, 0));
17941        assert_true (ai_move (ai, 0, 5));
17942        assert_true (ai_move (ai, 6, 3));
17943        assert_true (ai_move (ai, 6, 4));
17944        assert_true (ai_move (ai, 7, 2));
17945        assert_true (ai_move (ai, 6, 7));
17946        assert_true (ai_move (ai, 3, 5));
17947        assert_true (ai_move (ai, 6, 1));
17948        assert_true (ai_move (ai, 6, 0));
17949        assert_true (ai_move (ai, 5, 3));
17950        assert_true (ai_move (ai, 7, 4));
17951        assert_true (ai_move (ai, 3, 6));
17952        assert_true (ai_move (ai, 7, 3));
17953        assert_true (ai_move (ai, 1, 1));
17954        assert_true (ai_move (ai, 3, 7));
17955        assert_true (ai_move (ai, 2, 7));
17956        assert_true (ai_move (ai, 7, 5));
17957        assert_true (ai_move (ai, 4, 7));
17958        assert_true (ai_move (ai, 0, 0));
17959        assert_true (ai_move (ai, 7, 1));
17960        assert_true (ai_move (ai, 7, 0));
17961        assert_true (ai_move (ai, 6, 5));
17962        assert_true (ai_move (ai, 0, 6));
17963        assert_true (ai_move (ai, 1, 6));
17964        assert_true (ai_move (ai, 0, 7));
17965        assert_true (ai_move (ai, 1, 7));
17966        assert_true (ai_move (ai, 5, 7));
17967        assert_true (game.pass ());
17968        assert_true (ai_move (ai, 6, 6));
17969        assert_true (ai_move (ai, 7, 6));
17970        assert_true (ai_move (ai, 5, 5));
17971        assert_true (ai_move (ai, 5, 4));
17972        assert_true (ai_move (ai, 7, 7));
17973    }
17974
17975    private static inline void test_complete_reversi_game_223 ()
17976    {
17977                                  /* 0 1 2 3 4 5 6 7 */
17978        string [] board = {/* 0 */ " . . . . . . . .",
17979                           /* 1 */ " . . . . . . . .",
17980                           /* 2 */ " . . . L . . . .",
17981                           /* 3 */ " . . D L D . . .",
17982                           /* 4 */ " . . D L L . . .",
17983                           /* 5 */ " . D . . . . . .",
17984                           /* 6 */ " . . . . . . . .",
17985                           /* 7 */ " . . . . . . . ."};
17986
17987        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
17988        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
17989
17990        assert_true (ai_move (ai, 2, 1));
17991        assert_true (ai_move (ai, 3, 1));
17992        assert_true (ai_move (ai, 2, 5));
17993        assert_true (ai_move (ai, 4, 2));
17994        assert_true (ai_move (ai, 5, 2));
17995        assert_true (ai_move (ai, 6, 2));
17996        assert_true (ai_move (ai, 4, 5));
17997        assert_true (ai_move (ai, 1, 3));
17998        assert_true (ai_move (ai, 1, 2));
17999        assert_true (ai_move (ai, 1, 4));
18000        assert_true (ai_move (ai, 0, 4));
18001        assert_true (ai_move (ai, 0, 5));
18002        assert_true (ai_move (ai, 0, 6));
18003        assert_true (ai_move (ai, 2, 6));
18004        assert_true (ai_move (ai, 3, 5));
18005        assert_true (ai_move (ai, 3, 6));
18006        assert_true (ai_move (ai, 2, 7));
18007        assert_true (ai_move (ai, 4, 7));
18008        assert_true (ai_move (ai, 3, 7));
18009        assert_true (ai_move (ai, 1, 7));
18010        assert_true (ai_move (ai, 5, 1));
18011        assert_true (ai_move (ai, 5, 5));
18012        assert_true (ai_move (ai, 5, 3));
18013        assert_true (ai_move (ai, 4, 0));
18014        assert_true (ai_move (ai, 5, 0));
18015        assert_true (ai_move (ai, 6, 4));
18016        assert_true (ai_move (ai, 5, 4));
18017        assert_true (ai_move (ai, 2, 2));
18018        assert_true (ai_move (ai, 3, 0));
18019        assert_true (ai_move (ai, 6, 5));
18020        assert_true (ai_move (ai, 4, 1));
18021        assert_true (ai_move (ai, 6, 3));
18022        assert_true (ai_move (ai, 0, 3));
18023        assert_true (ai_move (ai, 0, 2));
18024        assert_true (ai_move (ai, 0, 1));
18025        assert_true (ai_move (ai, 2, 0));
18026        assert_true (ai_move (ai, 1, 0));
18027        assert_true (ai_move (ai, 1, 1));
18028        assert_true (ai_move (ai, 4, 6));
18029        assert_true (ai_move (ai, 5, 6));
18030        assert_true (ai_move (ai, 1, 6));
18031        assert_true (ai_move (ai, 6, 0));
18032        assert_true (ai_move (ai, 7, 0));
18033        assert_true (game.pass ());
18034        assert_true (ai_move (ai, 6, 1));
18035        assert_true (ai_move (ai, 7, 1));
18036        assert_true (ai_move (ai, 7, 2));
18037        assert_true (ai_move (ai, 7, 3));
18038        assert_true (ai_move (ai, 7, 4));
18039        assert_true (ai_move (ai, 7, 5));
18040        assert_true (ai_move (ai, 7, 6));
18041        assert_true (ai_move (ai, 6, 6));
18042        assert_true (ai_move (ai, 7, 7));
18043        assert_true (ai_move (ai, 6, 7));
18044        assert_true (ai_move (ai, 0, 0));
18045        assert_true (game.pass ());
18046        assert_true (ai_move (ai, 5, 7));
18047        assert_true (game.pass ());
18048        assert_true (ai_move (ai, 0, 7));
18049    }
18050
18051    private static inline void test_complete_reversi_game_224 ()
18052    {
18053                                  /* 0 1 2 3 4 5 6 7 */
18054        string [] board = {/* 0 */ " . . . . . . . .",
18055                           /* 1 */ " . . . . . . . .",
18056                           /* 2 */ " . . L . . . . .",
18057                           /* 3 */ " . . D L D . . .",
18058                           /* 4 */ " . . D L L . . .",
18059                           /* 5 */ " . D . . . . . .",
18060                           /* 6 */ " . . . . . . . .",
18061                           /* 7 */ " . . . . . . . ."};
18062
18063        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18064        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18065
18066        assert_true (ai_move (ai, 2, 1));
18067        assert_true (ai_move (ai, 1, 3));
18068        assert_true (ai_move (ai, 2, 5));
18069        assert_true (ai_move (ai, 3, 1));
18070        assert_true (ai_move (ai, 1, 2));
18071        assert_true (ai_move (ai, 0, 2));
18072        assert_true (ai_move (ai, 4, 1));
18073        assert_true (ai_move (ai, 4, 0));
18074        assert_true (ai_move (ai, 0, 3));
18075        assert_true (ai_move (ai, 0, 4));
18076        assert_true (ai_move (ai, 3, 2));
18077        assert_true (ai_move (ai, 2, 6));
18078        assert_true (ai_move (ai, 2, 7));
18079        assert_true (ai_move (ai, 3, 0));
18080        assert_true (ai_move (ai, 2, 0));
18081        assert_true (ai_move (ai, 1, 0));
18082        assert_true (ai_move (ai, 0, 5));
18083        assert_true (ai_move (ai, 0, 6));
18084        assert_true (ai_move (ai, 5, 5));
18085        assert_true (ai_move (ai, 5, 1));
18086        assert_true (ai_move (ai, 5, 0));
18087        assert_true (ai_move (ai, 6, 0));
18088        assert_true (ai_move (ai, 6, 1));
18089        assert_true (ai_move (ai, 5, 2));
18090        assert_true (ai_move (ai, 0, 1));
18091        assert_true (ai_move (ai, 0, 0));
18092        assert_true (ai_move (ai, 1, 4));
18093        assert_true (ai_move (ai, 7, 0));
18094        assert_true (ai_move (ai, 7, 1));
18095        assert_true (ai_move (ai, 7, 2));
18096        assert_true (ai_move (ai, 5, 3));
18097        assert_true (ai_move (ai, 6, 2));
18098        assert_true (game.pass ());
18099        assert_true (ai_move (ai, 4, 5));
18100        assert_true (ai_move (ai, 1, 1));
18101        assert_true (ai_move (ai, 3, 6));
18102        assert_true (ai_move (ai, 5, 4));
18103        assert_true (ai_move (ai, 3, 5));
18104        assert_true (ai_move (ai, 6, 3));
18105        assert_true (ai_move (ai, 4, 6));
18106        assert_true (ai_move (ai, 5, 6));
18107        assert_true (ai_move (ai, 4, 2));
18108        assert_true (ai_move (ai, 1, 6));
18109        assert_true (ai_move (ai, 4, 7));
18110        assert_true (ai_move (ai, 3, 7));
18111        assert_true (ai_move (ai, 6, 5));
18112        assert_true (ai_move (ai, 5, 7));
18113        assert_true (ai_move (ai, 7, 3));
18114        assert_true (ai_move (ai, 7, 5));
18115        assert_true (ai_move (ai, 6, 4));
18116        assert_true (ai_move (ai, 7, 4));
18117        assert_true (ai_move (ai, 7, 6));
18118        assert_true (ai_move (ai, 6, 6));
18119        assert_true (ai_move (ai, 7, 7));
18120        assert_true (ai_move (ai, 6, 7));
18121        assert_true (ai_move (ai, 1, 7));
18122        assert_true (ai_move (ai, 0, 7));
18123    }
18124
18125    private static inline void test_complete_reversi_game_225 ()
18126    {
18127                                  /* 0 1 2 3 4 5 6 7 */
18128        string [] board = {/* 0 */ " . . . . . . . .",
18129                           /* 1 */ " . . . . . . . .",
18130                           /* 2 */ " . . . . . . . .",
18131                           /* 3 */ " . . D D D . . .",
18132                           /* 4 */ " . L L L L . . .",
18133                           /* 5 */ " . D . . . . . .",
18134                           /* 6 */ " . . . . . . . .",
18135                           /* 7 */ " . . . . . . . ."};
18136
18137        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18138        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18139
18140        assert_true (ai_move (ai, 0, 5));
18141        assert_true (ai_move (ai, 1, 2));
18142        assert_true (ai_move (ai, 3, 2));
18143        assert_true (ai_move (ai, 2, 2));
18144        assert_true (ai_move (ai, 0, 2));
18145        assert_true (ai_move (ai, 2, 1));
18146        assert_true (ai_move (ai, 3, 0));
18147        assert_true (ai_move (ai, 4, 1));
18148        assert_true (ai_move (ai, 5, 2));
18149        assert_true (ai_move (ai, 4, 2));
18150        assert_true (ai_move (ai, 5, 1));
18151        assert_true (ai_move (ai, 6, 2));
18152        assert_true (ai_move (ai, 3, 1));
18153        assert_true (ai_move (ai, 2, 5));
18154        assert_true (ai_move (ai, 2, 6));
18155        assert_true (ai_move (ai, 5, 0));
18156        assert_true (ai_move (ai, 6, 3));
18157        assert_true (ai_move (ai, 4, 0));
18158        assert_true (ai_move (ai, 6, 0));
18159        assert_true (ai_move (ai, 1, 3));
18160        assert_true (ai_move (ai, 0, 4));
18161        assert_true (ai_move (ai, 2, 7));
18162        assert_true (ai_move (ai, 3, 6));
18163        assert_true (ai_move (ai, 4, 5));
18164        assert_true (ai_move (ai, 7, 2));
18165        assert_true (ai_move (ai, 0, 3));
18166        assert_true (ai_move (ai, 3, 5));
18167        assert_true (ai_move (ai, 7, 4));
18168        assert_true (ai_move (ai, 5, 6));
18169        assert_true (ai_move (ai, 5, 4));
18170        assert_true (ai_move (ai, 4, 7));
18171        assert_true (ai_move (ai, 1, 6));
18172        assert_true (ai_move (ai, 6, 5));
18173        assert_true (ai_move (ai, 5, 3));
18174        assert_true (ai_move (ai, 7, 3));
18175        assert_true (ai_move (ai, 5, 5));
18176        assert_true (ai_move (ai, 4, 6));
18177        assert_true (ai_move (ai, 2, 0));
18178        assert_true (ai_move (ai, 1, 0));
18179        assert_true (ai_move (ai, 0, 6));
18180        assert_true (ai_move (ai, 6, 4));
18181        assert_true (ai_move (ai, 0, 1));
18182        assert_true (ai_move (ai, 7, 5));
18183        assert_true (ai_move (ai, 3, 7));
18184        assert_true (ai_move (ai, 1, 1));
18185        assert_true (ai_move (ai, 5, 7));
18186        assert_true (ai_move (ai, 6, 6));
18187        assert_true (ai_move (ai, 6, 1));
18188        assert_true (ai_move (ai, 7, 0));
18189        assert_true (ai_move (ai, 7, 1));
18190        assert_true (ai_move (ai, 0, 7));
18191        assert_true (ai_move (ai, 7, 6));
18192        assert_true (ai_move (ai, 0, 0));
18193        assert_true (ai_move (ai, 1, 7));
18194        assert_true (ai_move (ai, 7, 7));
18195        assert_true (ai_move (ai, 6, 7));
18196    }
18197
18198    private static inline void test_complete_reversi_game_226 ()
18199    {
18200                                  /* 0 1 2 3 4 5 6 7 */
18201        string [] board = {/* 0 */ " . . . . . . . .",
18202                           /* 1 */ " . . . . . . . .",
18203                           /* 2 */ " . L . . . . . .",
18204                           /* 3 */ " . . L D D . . .",
18205                           /* 4 */ " . . D L L . . .",
18206                           /* 5 */ " . D . . . . . .",
18207                           /* 6 */ " . . . . . . . .",
18208                           /* 7 */ " . . . . . . . ."};
18209
18210        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18211        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18212
18213        assert_true (ai_move (ai, 2, 2));
18214        assert_true (ai_move (ai, 1, 4));
18215        assert_true (ai_move (ai, 0, 2));
18216        assert_true (ai_move (ai, 2, 1));
18217        assert_true (ai_move (ai, 3, 2));
18218        assert_true (ai_move (ai, 4, 1));
18219        assert_true (ai_move (ai, 4, 2));
18220        assert_true (ai_move (ai, 3, 1));
18221        assert_true (ai_move (ai, 2, 0));
18222        assert_true (ai_move (ai, 3, 0));
18223        assert_true (ai_move (ai, 4, 0));
18224        assert_true (ai_move (ai, 5, 0));
18225        assert_true (ai_move (ai, 6, 0));
18226        assert_true (ai_move (ai, 5, 1));
18227        assert_true (ai_move (ai, 5, 2));
18228        assert_true (ai_move (ai, 5, 3));
18229        assert_true (ai_move (ai, 6, 4));
18230        assert_true (ai_move (ai, 6, 3));
18231        assert_true (ai_move (ai, 7, 4));
18232        assert_true (ai_move (ai, 7, 5));
18233        assert_true (ai_move (ai, 7, 6));
18234        assert_true (ai_move (ai, 1, 1));
18235        assert_true (ai_move (ai, 2, 5));
18236        assert_true (ai_move (ai, 3, 6));
18237        assert_true (ai_move (ai, 2, 6));
18238        assert_true (ai_move (ai, 1, 3));
18239        assert_true (ai_move (ai, 0, 3));
18240        assert_true (ai_move (ai, 7, 3));
18241        assert_true (ai_move (ai, 7, 2));
18242        assert_true (ai_move (ai, 0, 4));
18243        assert_true (ai_move (ai, 0, 5));
18244        assert_true (ai_move (ai, 0, 1));
18245        assert_true (ai_move (ai, 0, 0));
18246        assert_true (ai_move (ai, 6, 2));
18247        assert_true (ai_move (ai, 4, 7));
18248        assert_true (ai_move (ai, 2, 7));
18249        assert_true (ai_move (ai, 3, 7));
18250        assert_true (ai_move (ai, 5, 7));
18251        assert_true (ai_move (ai, 3, 5));
18252        assert_true (ai_move (ai, 5, 4));
18253        assert_true (ai_move (ai, 4, 5));
18254        assert_true (ai_move (ai, 5, 6));
18255        assert_true (ai_move (ai, 7, 1));
18256        assert_true (ai_move (ai, 5, 5));
18257        assert_true (ai_move (ai, 6, 5));
18258        assert_true (ai_move (ai, 4, 6));
18259        assert_true (ai_move (ai, 6, 1));
18260        assert_true (ai_move (ai, 7, 0));
18261        assert_true (ai_move (ai, 6, 7));
18262        assert_true (ai_move (ai, 7, 7));
18263        assert_true (game.pass ());
18264        assert_true (ai_move (ai, 6, 6));
18265        assert_true (game.pass ());
18266        assert_true (ai_move (ai, 1, 6));
18267        assert_true (ai_move (ai, 1, 7));
18268        assert_true (ai_move (ai, 1, 0));
18269        assert_true (game.pass ());
18270        assert_true (ai_move (ai, 0, 6));
18271        assert_true (ai_move (ai, 0, 7));
18272    }
18273
18274    private static inline void test_complete_reversi_game_227 ()
18275    {
18276                                  /* 0 1 2 3 4 5 6 7 */
18277        string [] board = {/* 0 */ " . . . . . . . .",
18278                           /* 1 */ " . . . . . . . .",
18279                           /* 2 */ " . . L . . . . .",
18280                           /* 3 */ " . . D L D . . .",
18281                           /* 4 */ " . . . D L D . .",
18282                           /* 5 */ " . . . . . L . .",
18283                           /* 6 */ " . . . . . . . .",
18284                           /* 7 */ " . . . . . . . ."};
18285
18286        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18287        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18288
18289        assert_true (ai_move (ai, 5, 6));
18290        assert_true (ai_move (ai, 1, 3));
18291        assert_true (ai_move (ai, 4, 5));
18292        assert_true (ai_move (ai, 3, 5));
18293        assert_true (ai_move (ai, 2, 6));
18294        assert_true (ai_move (ai, 3, 6));
18295        assert_true (ai_move (ai, 2, 7));
18296        assert_true (ai_move (ai, 6, 5));
18297        assert_true (ai_move (ai, 4, 6));
18298        assert_true (ai_move (ai, 4, 7));
18299        assert_true (ai_move (ai, 6, 4));
18300        assert_true (ai_move (ai, 2, 5));
18301        assert_true (ai_move (ai, 5, 7));
18302        assert_true (ai_move (ai, 6, 7));
18303        assert_true (ai_move (ai, 1, 5));
18304        assert_true (ai_move (ai, 0, 5));
18305        assert_true (ai_move (ai, 2, 4));
18306        assert_true (ai_move (ai, 1, 4));
18307        assert_true (ai_move (ai, 7, 5));
18308        assert_true (ai_move (ai, 6, 3));
18309        assert_true (ai_move (ai, 5, 3));
18310        assert_true (ai_move (ai, 5, 2));
18311        assert_true (ai_move (ai, 2, 1));
18312        assert_true (ai_move (ai, 3, 1));
18313        assert_true (ai_move (ai, 7, 2));
18314        assert_true (ai_move (ai, 3, 2));
18315        assert_true (ai_move (ai, 1, 2));
18316        assert_true (ai_move (ai, 2, 0));
18317        assert_true (ai_move (ai, 6, 2));
18318        assert_true (ai_move (ai, 0, 3));
18319        assert_true (ai_move (ai, 5, 1));
18320        assert_true (ai_move (ai, 5, 0));
18321        assert_true (ai_move (ai, 4, 2));
18322        assert_true (ai_move (ai, 4, 1));
18323        assert_true (ai_move (ai, 0, 2));
18324        assert_true (ai_move (ai, 0, 4));
18325        assert_true (ai_move (ai, 0, 6));
18326        assert_true (ai_move (ai, 7, 3));
18327        assert_true (ai_move (ai, 7, 4));
18328        assert_true (ai_move (ai, 7, 6));
18329        assert_true (ai_move (ai, 7, 7));
18330        assert_true (ai_move (ai, 3, 7));
18331        assert_true (ai_move (ai, 6, 6));
18332        assert_true (ai_move (ai, 6, 1));
18333        assert_true (ai_move (ai, 7, 1));
18334        assert_true (ai_move (ai, 1, 1));
18335        assert_true (ai_move (ai, 3, 0));
18336        assert_true (ai_move (ai, 4, 0));
18337        assert_true (ai_move (ai, 0, 0));
18338        assert_true (ai_move (ai, 1, 0));
18339        assert_true (ai_move (ai, 1, 6));
18340        assert_true (ai_move (ai, 0, 7));
18341        assert_true (ai_move (ai, 1, 7));
18342        assert_true (ai_move (ai, 0, 1));
18343        assert_true (ai_move (ai, 6, 0));
18344        assert_true (ai_move (ai, 7, 0));
18345    }
18346
18347    private static inline void test_complete_reversi_game_228 ()
18348    {
18349                                  /* 0 1 2 3 4 5 6 7 */
18350        string [] board = {/* 0 */ " . . . . . . . .",
18351                           /* 1 */ " . . . . . . . .",
18352                           /* 2 */ " . . L . . . . .",
18353                           /* 3 */ " . . D L L L . .",
18354                           /* 4 */ " . . . D D D . .",
18355                           /* 5 */ " . . . . . . . .",
18356                           /* 6 */ " . . . . . . . .",
18357                           /* 7 */ " . . . . . . . ."};
18358
18359        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18360        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18361
18362        assert_true (ai_move (ai, 2, 1));
18363        assert_true (ai_move (ai, 6, 5));
18364        assert_true (ai_move (ai, 6, 4));
18365        assert_true (ai_move (ai, 7, 5));
18366        assert_true (ai_move (ai, 6, 2));
18367        assert_true (ai_move (ai, 4, 2));
18368        assert_true (ai_move (ai, 5, 2));
18369        assert_true (ai_move (ai, 1, 3));
18370        assert_true (ai_move (ai, 3, 1));
18371        assert_true (ai_move (ai, 5, 1));
18372        assert_true (ai_move (ai, 4, 1));
18373        assert_true (ai_move (ai, 6, 3));
18374        assert_true (ai_move (ai, 7, 2));
18375        assert_true (ai_move (ai, 7, 3));
18376        assert_true (ai_move (ai, 1, 2));
18377        assert_true (ai_move (ai, 3, 2));
18378        assert_true (ai_move (ai, 5, 0));
18379        assert_true (ai_move (ai, 0, 2));
18380        assert_true (ai_move (ai, 0, 4));
18381        assert_true (ai_move (ai, 2, 0));
18382        assert_true (ai_move (ai, 2, 4));
18383        assert_true (ai_move (ai, 3, 0));
18384        assert_true (ai_move (ai, 4, 0));
18385        assert_true (ai_move (ai, 6, 0));
18386        assert_true (ai_move (ai, 7, 4));
18387        assert_true (ai_move (ai, 7, 1));
18388        assert_true (ai_move (ai, 1, 1));
18389        assert_true (ai_move (ai, 1, 0));
18390        assert_true (ai_move (ai, 7, 6));
18391        assert_true (ai_move (ai, 7, 7));
18392        assert_true (ai_move (ai, 6, 1));
18393        assert_true (ai_move (ai, 5, 6));
18394        assert_true (ai_move (ai, 6, 6));
18395        assert_true (ai_move (ai, 7, 0));
18396        assert_true (ai_move (ai, 4, 7));
18397        assert_true (ai_move (ai, 2, 5));
18398        assert_true (ai_move (ai, 1, 5));
18399        assert_true (ai_move (ai, 0, 3));
18400        assert_true (ai_move (ai, 2, 6));
18401        assert_true (ai_move (ai, 0, 5));
18402        assert_true (ai_move (ai, 1, 4));
18403        assert_true (ai_move (ai, 2, 7));
18404        assert_true (ai_move (ai, 3, 6));
18405        assert_true (ai_move (ai, 0, 6));
18406        assert_true (ai_move (ai, 4, 5));
18407        assert_true (ai_move (ai, 5, 7));
18408        assert_true (ai_move (ai, 3, 5));
18409        assert_true (ai_move (ai, 1, 6));
18410        assert_true (ai_move (ai, 6, 7));
18411        assert_true (ai_move (ai, 3, 7));
18412        assert_true (ai_move (ai, 4, 6));
18413        assert_true (ai_move (ai, 5, 5));
18414        assert_true (ai_move (ai, 1, 7));
18415        assert_true (ai_move (ai, 0, 0));
18416        assert_true (ai_move (ai, 0, 1));
18417        assert_true (ai_move (ai, 0, 7));
18418    }
18419
18420    private static inline void test_complete_reversi_game_229 ()
18421    {
18422                                  /* 0 1 2 3 4 5 6 7 */
18423        string [] board = {/* 0 */ " . . . . . . . .",
18424                           /* 1 */ " . . . . . . . .",
18425                           /* 2 */ " . . L . . . . .",
18426                           /* 3 */ " . . D L D . . .",
18427                           /* 4 */ " . . . L D D . .",
18428                           /* 5 */ " . . . L . . . .",
18429                           /* 6 */ " . . . . . . . .",
18430                           /* 7 */ " . . . . . . . ."};
18431
18432        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18433        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18434
18435        assert_true (ai_move (ai, 2, 1));
18436        assert_true (ai_move (ai, 1, 3));
18437        assert_true (ai_move (ai, 2, 6));
18438        assert_true (ai_move (ai, 3, 1));
18439        assert_true (ai_move (ai, 2, 5));
18440        assert_true (ai_move (ai, 2, 0));
18441        assert_true (ai_move (ai, 1, 2));
18442        assert_true (ai_move (ai, 0, 3));
18443        assert_true (ai_move (ai, 3, 2));
18444        assert_true (ai_move (ai, 4, 2));
18445        assert_true (ai_move (ai, 5, 1));
18446        assert_true (ai_move (ai, 2, 4));
18447        assert_true (ai_move (ai, 1, 5));
18448        assert_true (ai_move (ai, 2, 7));
18449        assert_true (ai_move (ai, 1, 4));
18450        assert_true (ai_move (ai, 4, 6));
18451        assert_true (ai_move (ai, 4, 1));
18452        assert_true (ai_move (ai, 0, 5));
18453        assert_true (ai_move (ai, 3, 6));
18454        assert_true (ai_move (ai, 5, 2));
18455        assert_true (ai_move (ai, 5, 3));
18456        assert_true (ai_move (ai, 0, 4));
18457        assert_true (ai_move (ai, 0, 2));
18458        assert_true (ai_move (ai, 0, 1));
18459        assert_true (ai_move (ai, 4, 0));
18460        assert_true (ai_move (ai, 6, 2));
18461        assert_true (ai_move (ai, 6, 4));
18462        assert_true (ai_move (ai, 6, 3));
18463        assert_true (ai_move (ai, 7, 3));
18464        assert_true (ai_move (ai, 5, 5));
18465        assert_true (ai_move (ai, 4, 5));
18466        assert_true (ai_move (ai, 7, 5));
18467        assert_true (ai_move (ai, 7, 2));
18468        assert_true (ai_move (ai, 5, 6));
18469        assert_true (ai_move (ai, 6, 5));
18470        assert_true (ai_move (ai, 3, 7));
18471        assert_true (ai_move (ai, 5, 7));
18472        assert_true (ai_move (ai, 6, 6));
18473        assert_true (ai_move (ai, 6, 1));
18474        assert_true (ai_move (ai, 3, 0));
18475        assert_true (ai_move (ai, 1, 0));
18476        assert_true (ai_move (ai, 1, 1));
18477        assert_true (ai_move (ai, 4, 7));
18478        assert_true (ai_move (ai, 6, 7));
18479        assert_true (ai_move (ai, 1, 7));
18480        assert_true (ai_move (ai, 0, 7));
18481        assert_true (ai_move (ai, 0, 6));
18482        assert_true (ai_move (ai, 5, 0));
18483        assert_true (ai_move (ai, 0, 0));
18484        assert_true (ai_move (ai, 1, 6));
18485        assert_true (ai_move (ai, 7, 7));
18486        assert_true (ai_move (ai, 7, 0));
18487        assert_true (ai_move (ai, 6, 0));
18488        assert_true (ai_move (ai, 7, 1));
18489        assert_true (game.pass ());
18490        assert_true (ai_move (ai, 7, 4));
18491        assert_true (ai_move (ai, 7, 6));
18492    }
18493
18494    private static inline void test_complete_reversi_game_230 ()
18495    {
18496                                  /* 0 1 2 3 4 5 6 7 */
18497        string [] board = {/* 0 */ " . . . . . . . .",
18498                           /* 1 */ " . . . . . . . .",
18499                           /* 2 */ " . . L . . . . .",
18500                           /* 3 */ " . . L L D . . .",
18501                           /* 4 */ " . . L D D D . .",
18502                           /* 5 */ " . . . . . . . .",
18503                           /* 6 */ " . . . . . . . .",
18504                           /* 7 */ " . . . . . . . ."};
18505
18506        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18507        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18508
18509        assert_true (ai_move (ai, 1, 2));
18510        assert_true (ai_move (ai, 1, 3));
18511        assert_true (ai_move (ai, 3, 2));
18512        assert_true (ai_move (ai, 3, 1));
18513        assert_true (ai_move (ai, 0, 3));
18514        assert_true (ai_move (ai, 0, 4));
18515        assert_true (ai_move (ai, 0, 5));
18516        assert_true (ai_move (ai, 0, 2));
18517        assert_true (ai_move (ai, 0, 1));
18518        assert_true (ai_move (ai, 4, 2));
18519        assert_true (ai_move (ai, 2, 1));
18520        assert_true (ai_move (ai, 2, 0));
18521        assert_true (ai_move (ai, 5, 2));
18522        assert_true (ai_move (ai, 4, 1));
18523        assert_true (ai_move (ai, 1, 5));
18524        assert_true (ai_move (ai, 6, 3));
18525        assert_true (ai_move (ai, 1, 4));
18526        assert_true (ai_move (ai, 6, 5));
18527        assert_true (ai_move (ai, 5, 0));
18528        assert_true (ai_move (ai, 5, 3));
18529        assert_true (ai_move (ai, 5, 1));
18530        assert_true (ai_move (ai, 4, 0));
18531        assert_true (ai_move (ai, 5, 5));
18532        assert_true (ai_move (ai, 6, 4));
18533        assert_true (ai_move (ai, 6, 2));
18534        assert_true (ai_move (ai, 4, 6));
18535        assert_true (ai_move (ai, 5, 6));
18536        assert_true (ai_move (ai, 7, 2));
18537        assert_true (ai_move (ai, 3, 7));
18538        assert_true (ai_move (ai, 5, 7));
18539        assert_true (ai_move (ai, 7, 4));
18540        assert_true (ai_move (ai, 7, 3));
18541        assert_true (ai_move (ai, 7, 1));
18542        assert_true (ai_move (ai, 4, 5));
18543        assert_true (ai_move (ai, 7, 5));
18544        assert_true (ai_move (ai, 4, 7));
18545        assert_true (ai_move (ai, 7, 6));
18546        assert_true (ai_move (ai, 2, 7));
18547        assert_true (ai_move (ai, 3, 6));
18548        assert_true (ai_move (ai, 2, 6));
18549        assert_true (ai_move (ai, 6, 1));
18550        assert_true (ai_move (ai, 2, 5));
18551        assert_true (ai_move (ai, 3, 5));
18552        assert_true (ai_move (ai, 6, 0));
18553        assert_true (ai_move (ai, 6, 6));
18554        assert_true (ai_move (ai, 7, 7));
18555        assert_true (ai_move (ai, 7, 0));
18556        assert_true (ai_move (ai, 0, 6));
18557        assert_true (ai_move (ai, 0, 7));
18558        assert_true (ai_move (ai, 1, 1));
18559        assert_true (ai_move (ai, 3, 0));
18560        assert_true (game.pass ());
18561        assert_true (ai_move (ai, 1, 7));
18562        assert_true (ai_move (ai, 1, 6));
18563        assert_true (ai_move (ai, 6, 7));
18564        assert_true (game.pass ());
18565        assert_true (ai_move (ai, 0, 0));
18566        assert_true (ai_move (ai, 1, 0));
18567    }
18568
18569    private static inline void test_complete_reversi_game_231 ()
18570    {
18571                                  /* 0 1 2 3 4 5 6 7 */
18572        string [] board = {/* 0 */ " . . . . . . . .",
18573                           /* 1 */ " . . . . . . . .",
18574                           /* 2 */ " . . L . . . . .",
18575                           /* 3 */ " . L L L D . . .",
18576                           /* 4 */ " . . . D D D . .",
18577                           /* 5 */ " . . . . . . . .",
18578                           /* 6 */ " . . . . . . . .",
18579                           /* 7 */ " . . . . . . . ."};
18580
18581        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18582        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18583
18584        assert_true (ai_move (ai, 1, 2));
18585        assert_true (ai_move (ai, 2, 4));
18586        assert_true (ai_move (ai, 3, 2));
18587        assert_true (ai_move (ai, 3, 1));
18588        assert_true (ai_move (ai, 0, 3));
18589        assert_true (ai_move (ai, 0, 4));
18590        assert_true (ai_move (ai, 0, 5));
18591        assert_true (ai_move (ai, 0, 2));
18592        assert_true (ai_move (ai, 0, 1));
18593        assert_true (ai_move (ai, 4, 2));
18594        assert_true (ai_move (ai, 2, 1));
18595        assert_true (ai_move (ai, 2, 0));
18596        assert_true (ai_move (ai, 5, 2));
18597        assert_true (ai_move (ai, 4, 1));
18598        assert_true (ai_move (ai, 1, 5));
18599        assert_true (ai_move (ai, 6, 3));
18600        assert_true (ai_move (ai, 1, 4));
18601        assert_true (ai_move (ai, 6, 5));
18602        assert_true (ai_move (ai, 5, 0));
18603        assert_true (ai_move (ai, 5, 3));
18604        assert_true (ai_move (ai, 5, 1));
18605        assert_true (ai_move (ai, 4, 0));
18606        assert_true (ai_move (ai, 5, 5));
18607        assert_true (ai_move (ai, 6, 4));
18608        assert_true (ai_move (ai, 6, 2));
18609        assert_true (ai_move (ai, 4, 6));
18610        assert_true (ai_move (ai, 5, 6));
18611        assert_true (ai_move (ai, 7, 2));
18612        assert_true (ai_move (ai, 3, 7));
18613        assert_true (ai_move (ai, 5, 7));
18614        assert_true (ai_move (ai, 7, 4));
18615        assert_true (ai_move (ai, 7, 3));
18616        assert_true (ai_move (ai, 7, 1));
18617        assert_true (ai_move (ai, 4, 5));
18618        assert_true (ai_move (ai, 7, 5));
18619        assert_true (ai_move (ai, 4, 7));
18620        assert_true (ai_move (ai, 7, 6));
18621        assert_true (ai_move (ai, 2, 7));
18622        assert_true (ai_move (ai, 3, 6));
18623        assert_true (ai_move (ai, 2, 6));
18624        assert_true (ai_move (ai, 6, 1));
18625        assert_true (ai_move (ai, 2, 5));
18626        assert_true (ai_move (ai, 3, 5));
18627        assert_true (ai_move (ai, 6, 0));
18628        assert_true (ai_move (ai, 6, 6));
18629        assert_true (ai_move (ai, 7, 7));
18630        assert_true (ai_move (ai, 7, 0));
18631        assert_true (ai_move (ai, 0, 6));
18632        assert_true (ai_move (ai, 0, 7));
18633        assert_true (ai_move (ai, 1, 1));
18634        assert_true (ai_move (ai, 3, 0));
18635        assert_true (game.pass ());
18636        assert_true (ai_move (ai, 1, 7));
18637        assert_true (ai_move (ai, 1, 6));
18638        assert_true (ai_move (ai, 6, 7));
18639        assert_true (game.pass ());
18640        assert_true (ai_move (ai, 0, 0));
18641        assert_true (ai_move (ai, 1, 0));
18642    }
18643
18644    private static inline void test_complete_reversi_game_232 ()
18645    {
18646                                  /* 0 1 2 3 4 5 6 7 */
18647        string [] board = {/* 0 */ " . . . . . . . .",
18648                           /* 1 */ " . . . . . . . .",
18649                           /* 2 */ " . . L . . . . .",
18650                           /* 3 */ " . . D L D . . .",
18651                           /* 4 */ " . . . D L . . .",
18652                           /* 5 */ " . . . . D L . .",
18653                           /* 6 */ " . . . . . . . .",
18654                           /* 7 */ " . . . . . . . ."};
18655
18656        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18657        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18658
18659        assert_true (ai_move (ai, 6, 5));
18660        assert_true (ai_move (ai, 1, 3));
18661        assert_true (ai_move (ai, 5, 4));
18662        assert_true (ai_move (ai, 3, 5));
18663        assert_true (ai_move (ai, 2, 5));
18664        assert_true (ai_move (ai, 5, 6));
18665        assert_true (ai_move (ai, 3, 6));
18666        assert_true (ai_move (ai, 7, 4));
18667        assert_true (ai_move (ai, 7, 5));
18668        assert_true (ai_move (ai, 7, 6));
18669        assert_true (ai_move (ai, 4, 7));
18670        assert_true (ai_move (ai, 1, 5));
18671        assert_true (ai_move (ai, 4, 6));
18672        assert_true (ai_move (ai, 5, 7));
18673        assert_true (ai_move (ai, 1, 4));
18674        assert_true (ai_move (ai, 3, 7));
18675        assert_true (ai_move (ai, 0, 5));
18676        assert_true (ai_move (ai, 6, 3));
18677        assert_true (ai_move (ai, 6, 4));
18678        assert_true (ai_move (ai, 7, 3));
18679        assert_true (ai_move (ai, 2, 7));
18680        assert_true (ai_move (ai, 1, 7));
18681        assert_true (ai_move (ai, 2, 6));
18682        assert_true (ai_move (ai, 2, 4));
18683        assert_true (ai_move (ai, 4, 2));
18684        assert_true (ai_move (ai, 0, 4));
18685        assert_true (ai_move (ai, 1, 6));
18686        assert_true (ai_move (ai, 5, 1));
18687        assert_true (ai_move (ai, 4, 1));
18688        assert_true (ai_move (ai, 3, 1));
18689        assert_true (ai_move (ai, 2, 0));
18690        assert_true (ai_move (ai, 2, 1));
18691        assert_true (ai_move (ai, 4, 0));
18692        assert_true (ai_move (ai, 3, 2));
18693        assert_true (ai_move (ai, 5, 2));
18694        assert_true (ai_move (ai, 6, 2));
18695        assert_true (ai_move (ai, 3, 0));
18696        assert_true (ai_move (ai, 5, 3));
18697        assert_true (ai_move (ai, 7, 2));
18698        assert_true (ai_move (ai, 7, 1));
18699        assert_true (ai_move (ai, 5, 0));
18700        assert_true (ai_move (ai, 0, 7));
18701        assert_true (ai_move (ai, 0, 3));
18702        assert_true (ai_move (ai, 1, 2));
18703        assert_true (ai_move (ai, 1, 0));
18704        assert_true (ai_move (ai, 6, 1));
18705        assert_true (ai_move (ai, 0, 2));
18706        assert_true (ai_move (ai, 6, 0));
18707        assert_true (ai_move (ai, 7, 0));
18708        assert_true (ai_move (ai, 1, 1));
18709        assert_true (ai_move (ai, 7, 7));
18710        assert_true (game.pass ());
18711        assert_true (ai_move (ai, 6, 7));
18712        assert_true (ai_move (ai, 6, 6));
18713        assert_true (ai_move (ai, 0, 0));
18714        assert_true (ai_move (ai, 0, 1));
18715        assert_true (ai_move (ai, 0, 6));
18716    }
18717
18718    private static inline void test_complete_reversi_game_233 ()
18719    {
18720                                  /* 0 1 2 3 4 5 6 7 */
18721        string [] board = {/* 0 */ " . . . . . . . .",
18722                           /* 1 */ " . . . . . . . .",
18723                           /* 2 */ " . . . . . . . .",
18724                           /* 3 */ " . . . D D . . .",
18725                           /* 4 */ " . . . L L D . .",
18726                           /* 5 */ " . . . . . L D .",
18727                           /* 6 */ " . . . . . . L .",
18728                           /* 7 */ " . . . . . . . ."};
18729
18730        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18731        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18732
18733        assert_true (ai_move (ai, 5, 6));
18734        assert_true (ai_move (ai, 4, 6));
18735        assert_true (ai_move (ai, 4, 7));
18736        assert_true (ai_move (ai, 6, 4));
18737        assert_true (ai_move (ai, 7, 4));
18738        assert_true (ai_move (ai, 5, 7));
18739        assert_true (ai_move (ai, 6, 3));
18740        assert_true (ai_move (ai, 3, 7));
18741        assert_true (ai_move (ai, 2, 5));
18742        assert_true (ai_move (ai, 7, 6));
18743        assert_true (ai_move (ai, 4, 5));
18744        assert_true (ai_move (ai, 3, 5));
18745        assert_true (ai_move (ai, 2, 6));
18746        assert_true (ai_move (ai, 1, 5));
18747        assert_true (ai_move (ai, 3, 6));
18748        assert_true (ai_move (ai, 2, 4));
18749        assert_true (ai_move (ai, 0, 5));
18750        assert_true (ai_move (ai, 1, 4));
18751        assert_true (ai_move (ai, 7, 5));
18752        assert_true (ai_move (ai, 7, 3));
18753        assert_true (ai_move (ai, 2, 7));
18754        assert_true (ai_move (ai, 1, 7));
18755        assert_true (ai_move (ai, 0, 3));
18756        assert_true (ai_move (ai, 5, 3));
18757        assert_true (ai_move (ai, 2, 3));
18758        assert_true (ai_move (ai, 2, 2));
18759        assert_true (ai_move (ai, 4, 2));
18760        assert_true (ai_move (ai, 1, 3));
18761        assert_true (ai_move (ai, 3, 2));
18762        assert_true (ai_move (ai, 5, 1));
18763        assert_true (ai_move (ai, 1, 2));
18764        assert_true (ai_move (ai, 2, 1));
18765        assert_true (ai_move (ai, 4, 1));
18766        assert_true (ai_move (ai, 4, 0));
18767        assert_true (ai_move (ai, 3, 1));
18768        assert_true (ai_move (ai, 3, 0));
18769        assert_true (ai_move (ai, 7, 2));
18770        assert_true (ai_move (ai, 7, 1));
18771        assert_true (ai_move (ai, 5, 2));
18772        assert_true (ai_move (ai, 0, 4));
18773        assert_true (ai_move (ai, 2, 0));
18774        assert_true (ai_move (ai, 0, 2));
18775        assert_true (ai_move (ai, 0, 1));
18776        assert_true (ai_move (ai, 6, 2));
18777        assert_true (ai_move (ai, 0, 6));
18778        assert_true (ai_move (ai, 1, 1));
18779        assert_true (ai_move (ai, 1, 6));
18780        assert_true (ai_move (ai, 1, 0));
18781        assert_true (ai_move (ai, 5, 0));
18782        assert_true (ai_move (ai, 6, 0));
18783        assert_true (ai_move (ai, 6, 1));
18784        assert_true (game.pass ());
18785        assert_true (ai_move (ai, 6, 7));
18786        assert_true (ai_move (ai, 7, 7));
18787    }
18788
18789    private static inline void test_complete_reversi_game_234 ()
18790    {
18791                                  /* 0 1 2 3 4 5 6 7 */
18792        string [] board = {/* 0 */ " . . . . . . . .",
18793                           /* 1 */ " . . . . . . . .",
18794                           /* 2 */ " . . . . . . . .",
18795                           /* 3 */ " . . . D D . . .",
18796                           /* 4 */ " . . . L L L L .",
18797                           /* 5 */ " . . . . . D D .",
18798                           /* 6 */ " . . . . . . . .",
18799                           /* 7 */ " . . . . . . . ."};
18800
18801        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18802        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18803
18804        assert_true (ai_move (ai, 5, 3));
18805        assert_true (ai_move (ai, 4, 6));
18806        assert_true (ai_move (ai, 5, 6));
18807        assert_true (ai_move (ai, 6, 2));
18808        assert_true (ai_move (ai, 5, 2));
18809        assert_true (ai_move (ai, 2, 2));
18810        assert_true (ai_move (ai, 7, 2));
18811        assert_true (ai_move (ai, 4, 2));
18812        assert_true (ai_move (ai, 7, 3));
18813        assert_true (ai_move (ai, 5, 1));
18814        assert_true (ai_move (ai, 5, 0));
18815        assert_true (ai_move (ai, 7, 5));
18816        assert_true (ai_move (ai, 6, 3));
18817        assert_true (ai_move (ai, 5, 7));
18818        assert_true (ai_move (ai, 3, 1));
18819        assert_true (ai_move (ai, 7, 6));
18820        assert_true (ai_move (ai, 1, 3));
18821        assert_true (ai_move (ai, 4, 1));
18822        assert_true (ai_move (ai, 3, 0));
18823        assert_true (ai_move (ai, 4, 0));
18824        assert_true (ai_move (ai, 3, 2));
18825        assert_true (ai_move (ai, 2, 1));
18826        assert_true (ai_move (ai, 2, 0));
18827        assert_true (ai_move (ai, 1, 2));
18828        assert_true (ai_move (ai, 0, 2));
18829        assert_true (ai_move (ai, 0, 4));
18830        assert_true (ai_move (ai, 1, 4));
18831        assert_true (ai_move (ai, 2, 4));
18832        assert_true (ai_move (ai, 2, 3));
18833        assert_true (ai_move (ai, 1, 1));
18834        assert_true (ai_move (ai, 1, 5));
18835        assert_true (ai_move (ai, 2, 5));
18836        assert_true (ai_move (ai, 2, 6));
18837        assert_true (ai_move (ai, 3, 5));
18838        assert_true (ai_move (ai, 0, 5));
18839        assert_true (ai_move (ai, 2, 7));
18840        assert_true (ai_move (ai, 0, 3));
18841        assert_true (ai_move (ai, 0, 1));
18842        assert_true (ai_move (ai, 0, 0));
18843        assert_true (ai_move (ai, 1, 0));
18844        assert_true (ai_move (ai, 4, 5));
18845        assert_true (ai_move (ai, 3, 6));
18846        assert_true (ai_move (ai, 4, 7));
18847        assert_true (ai_move (ai, 3, 7));
18848        assert_true (ai_move (ai, 1, 7));
18849        assert_true (ai_move (ai, 0, 7));
18850        assert_true (ai_move (ai, 6, 6));
18851        assert_true (ai_move (ai, 6, 7));
18852        assert_true (game.pass ());
18853        assert_true (ai_move (ai, 7, 7));
18854        assert_true (game.pass ());
18855        assert_true (ai_move (ai, 7, 4));
18856        assert_true (ai_move (ai, 6, 1));
18857        assert_true (ai_move (ai, 0, 6));
18858        assert_true (ai_move (ai, 1, 6));
18859        assert_true (ai_move (ai, 7, 0));
18860        assert_true (ai_move (ai, 7, 1));
18861        assert_true (ai_move (ai, 6, 0));
18862    }
18863
18864    private static inline void test_complete_reversi_game_235 ()
18865    {
18866                                  /* 0 1 2 3 4 5 6 7 */
18867        string [] board = {/* 0 */ " . . . . . . . .",
18868                           /* 1 */ " . . . . . . . .",
18869                           /* 2 */ " . . . . . L . .",
18870                           /* 3 */ " . . . D L . . .",
18871                           /* 4 */ " . . . L L D . .",
18872                           /* 5 */ " . . . . . D D .",
18873                           /* 6 */ " . . . . . . . .",
18874                           /* 7 */ " . . . . . . . ."};
18875
18876        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18877        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18878
18879        assert_true (ai_move (ai, 3, 2));
18880        assert_true (ai_move (ai, 6, 4));
18881        assert_true (ai_move (ai, 5, 3));
18882        assert_true (ai_move (ai, 5, 6));
18883        assert_true (ai_move (ai, 4, 7));
18884        assert_true (ai_move (ai, 5, 7));
18885        assert_true (ai_move (ai, 6, 7));
18886        assert_true (ai_move (ai, 7, 5));
18887        assert_true (ai_move (ai, 6, 3));
18888        assert_true (ai_move (ai, 6, 2));
18889        assert_true (ai_move (ai, 2, 5));
18890        assert_true (ai_move (ai, 4, 2));
18891        assert_true (ai_move (ai, 5, 1));
18892        assert_true (ai_move (ai, 3, 1));
18893        assert_true (ai_move (ai, 7, 2));
18894        assert_true (ai_move (ai, 4, 6));
18895        assert_true (ai_move (ai, 4, 5));
18896        assert_true (ai_move (ai, 2, 1));
18897        assert_true (ai_move (ai, 2, 2));
18898        assert_true (ai_move (ai, 4, 1));
18899        assert_true (ai_move (ai, 5, 0));
18900        assert_true (ai_move (ai, 1, 3));
18901        assert_true (ai_move (ai, 1, 2));
18902        assert_true (ai_move (ai, 0, 3));
18903        assert_true (ai_move (ai, 3, 5));
18904        assert_true (ai_move (ai, 7, 3));
18905        assert_true (ai_move (ai, 2, 0));
18906        assert_true (ai_move (ai, 1, 5));
18907        assert_true (ai_move (ai, 2, 4));
18908        assert_true (ai_move (ai, 2, 6));
18909        assert_true (ai_move (ai, 4, 0));
18910        assert_true (ai_move (ai, 1, 4));
18911        assert_true (ai_move (ai, 3, 6));
18912        assert_true (ai_move (ai, 2, 7));
18913        assert_true (ai_move (ai, 0, 5));
18914        assert_true (ai_move (ai, 3, 7));
18915        assert_true (ai_move (ai, 1, 7));
18916        assert_true (ai_move (ai, 2, 3));
18917        assert_true (ai_move (ai, 0, 2));
18918        assert_true (ai_move (ai, 0, 1));
18919        assert_true (ai_move (ai, 7, 4));
18920        assert_true (ai_move (ai, 7, 1));
18921        assert_true (ai_move (ai, 6, 6));
18922        assert_true (ai_move (ai, 3, 0));
18923        assert_true (ai_move (ai, 6, 1));
18924        assert_true (ai_move (ai, 7, 7));
18925        assert_true (ai_move (ai, 0, 4));
18926        assert_true (ai_move (ai, 0, 6));
18927        assert_true (ai_move (ai, 7, 6));
18928        assert_true (ai_move (ai, 0, 7));
18929        assert_true (ai_move (ai, 7, 0));
18930        assert_true (ai_move (ai, 1, 6));
18931        assert_true (ai_move (ai, 1, 0));
18932        assert_true (ai_move (ai, 6, 0));
18933        assert_true (ai_move (ai, 1, 1));
18934        assert_true (ai_move (ai, 0, 0));
18935    }
18936
18937    private static inline void test_complete_reversi_game_236 ()
18938    {
18939                                  /* 0 1 2 3 4 5 6 7 */
18940        string [] board = {/* 0 */ " . . . . . . . .",
18941                           /* 1 */ " . . . . . . . .",
18942                           /* 2 */ " . . . . L . . .",
18943                           /* 3 */ " . . . D L . . .",
18944                           /* 4 */ " . . . L L D . .",
18945                           /* 5 */ " . . . . . D D .",
18946                           /* 6 */ " . . . . . . . .",
18947                           /* 7 */ " . . . . . . . ."};
18948
18949        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
18950        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
18951
18952        assert_true (ai_move (ai, 5, 1));
18953        assert_true (ai_move (ai, 3, 2));
18954        assert_true (ai_move (ai, 2, 1));
18955        assert_true (ai_move (ai, 3, 1));
18956        assert_true (ai_move (ai, 2, 0));
18957        assert_true (ai_move (ai, 6, 4));
18958        assert_true (ai_move (ai, 5, 3));
18959        assert_true (ai_move (ai, 5, 2));
18960        assert_true (ai_move (ai, 7, 5));
18961        assert_true (ai_move (ai, 5, 0));
18962        assert_true (ai_move (ai, 2, 3));
18963        assert_true (ai_move (ai, 6, 2));
18964        assert_true (ai_move (ai, 4, 1));
18965        assert_true (ai_move (ai, 5, 6));
18966        assert_true (ai_move (ai, 4, 6));
18967        assert_true (ai_move (ai, 2, 2));
18968        assert_true (ai_move (ai, 6, 3));
18969        assert_true (ai_move (ai, 6, 1));
18970        assert_true (ai_move (ai, 1, 3));
18971        assert_true (ai_move (ai, 1, 2));
18972        assert_true (ai_move (ai, 4, 5));
18973        assert_true (ai_move (ai, 3, 5));
18974        assert_true (ai_move (ai, 7, 2));
18975        assert_true (ai_move (ai, 7, 4));
18976        assert_true (ai_move (ai, 7, 3));
18977        assert_true (ai_move (ai, 6, 6));
18978        assert_true (ai_move (ai, 2, 6));
18979        assert_true (ai_move (ai, 2, 5));
18980        assert_true (ai_move (ai, 0, 2));
18981        assert_true (ai_move (ai, 7, 1));
18982        assert_true (ai_move (ai, 7, 0));
18983        assert_true (ai_move (ai, 3, 0));
18984        assert_true (ai_move (ai, 1, 5));
18985        assert_true (ai_move (ai, 0, 4));
18986        assert_true (ai_move (ai, 6, 0));
18987        assert_true (ai_move (ai, 4, 0));
18988        assert_true (ai_move (ai, 1, 4));
18989        assert_true (ai_move (ai, 2, 4));
18990        assert_true (ai_move (ai, 0, 3));
18991        assert_true (ai_move (ai, 0, 1));
18992        assert_true (ai_move (ai, 4, 7));
18993        assert_true (ai_move (ai, 0, 5));
18994        assert_true (ai_move (ai, 7, 7));
18995        assert_true (ai_move (ai, 0, 6));
18996        assert_true (ai_move (ai, 1, 1));
18997        assert_true (ai_move (ai, 7, 6));
18998        assert_true (ai_move (ai, 1, 6));
18999        assert_true (ai_move (ai, 1, 7));
19000        assert_true (ai_move (ai, 3, 6));
19001        assert_true (ai_move (ai, 0, 7));
19002        assert_true (game.pass ());
19003        assert_true (ai_move (ai, 2, 7));
19004        assert_true (ai_move (ai, 3, 7));
19005        assert_true (ai_move (ai, 5, 7));
19006        assert_true (ai_move (ai, 6, 7));
19007        assert_true (ai_move (ai, 0, 0));
19008        assert_true (ai_move (ai, 1, 0));
19009    }
19010
19011    private static inline void test_complete_reversi_game_237 ()
19012    {
19013                                  /* 0 1 2 3 4 5 6 7 */
19014        string [] board = {/* 0 */ " . . . . . . . .",
19015                           /* 1 */ " . . . . . . . .",
19016                           /* 2 */ " . . . L . . . .",
19017                           /* 3 */ " . . . L D . . .",
19018                           /* 4 */ " . . . L L D . .",
19019                           /* 5 */ " . . . . . D D .",
19020                           /* 6 */ " . . . . . . . .",
19021                           /* 7 */ " . . . . . . . ."};
19022
19023        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19024        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19025
19026        assert_true (ai_move (ai, 2, 1));
19027        assert_true (ai_move (ai, 5, 2));
19028        assert_true (ai_move (ai, 2, 2));
19029        assert_true (ai_move (ai, 4, 5));
19030        assert_true (ai_move (ai, 3, 6));
19031        assert_true (ai_move (ai, 6, 4));
19032        assert_true (ai_move (ai, 7, 3));
19033        assert_true (ai_move (ai, 4, 6));
19034        assert_true (ai_move (ai, 6, 3));
19035        assert_true (ai_move (ai, 5, 6));
19036        assert_true (ai_move (ai, 4, 7));
19037        assert_true (ai_move (ai, 2, 7));
19038        assert_true (ai_move (ai, 4, 1));
19039        assert_true (ai_move (ai, 7, 5));
19040        assert_true (ai_move (ai, 7, 4));
19041        assert_true (ai_move (ai, 5, 3));
19042        assert_true (ai_move (ai, 7, 6));
19043        assert_true (ai_move (ai, 5, 1));
19044        assert_true (ai_move (ai, 5, 0));
19045        assert_true (ai_move (ai, 4, 2));
19046        assert_true (ai_move (ai, 3, 1));
19047        assert_true (ai_move (ai, 4, 0));
19048        assert_true (ai_move (ai, 3, 0));
19049        assert_true (ai_move (ai, 1, 2));
19050        assert_true (ai_move (ai, 0, 2));
19051        assert_true (ai_move (ai, 2, 3));
19052        assert_true (ai_move (ai, 1, 4));
19053        assert_true (ai_move (ai, 1, 3));
19054        assert_true (ai_move (ai, 0, 4));
19055        assert_true (ai_move (ai, 0, 3));
19056        assert_true (ai_move (ai, 3, 7));
19057        assert_true (ai_move (ai, 5, 7));
19058        assert_true (ai_move (ai, 2, 6));
19059        assert_true (ai_move (ai, 6, 7));
19060        assert_true (ai_move (ai, 2, 5));
19061        assert_true (ai_move (ai, 2, 4));
19062        assert_true (ai_move (ai, 3, 5));
19063        assert_true (ai_move (ai, 7, 2));
19064        assert_true (ai_move (ai, 7, 1));
19065        assert_true (ai_move (ai, 2, 0));
19066        assert_true (ai_move (ai, 6, 2));
19067        assert_true (ai_move (ai, 6, 0));
19068        assert_true (ai_move (ai, 1, 5));
19069        assert_true (ai_move (ai, 6, 6));
19070        assert_true (ai_move (ai, 1, 6));
19071        assert_true (ai_move (ai, 1, 7));
19072        assert_true (ai_move (ai, 1, 1));
19073        assert_true (ai_move (ai, 0, 0));
19074        assert_true (ai_move (ai, 0, 1));
19075        assert_true (ai_move (ai, 1, 0));
19076        assert_true (ai_move (ai, 0, 5));
19077        assert_true (ai_move (ai, 0, 6));
19078        assert_true (ai_move (ai, 0, 7));
19079        assert_true (ai_move (ai, 6, 1));
19080        assert_true (ai_move (ai, 7, 7));
19081        assert_true (game.pass ());
19082        assert_true (ai_move (ai, 7, 0));
19083    }
19084
19085    private static inline void test_complete_reversi_game_238 ()
19086    {
19087                                  /* 0 1 2 3 4 5 6 7 */
19088        string [] board = {/* 0 */ " . . . . . . . .",
19089                           /* 1 */ " . . . . . . . .",
19090                           /* 2 */ " . . L . . . . .",
19091                           /* 3 */ " . . . L D . . .",
19092                           /* 4 */ " . . . L L D . .",
19093                           /* 5 */ " . . . . . D D .",
19094                           /* 6 */ " . . . . . . . .",
19095                           /* 7 */ " . . . . . . . ."};
19096
19097        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19098        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19099
19100        assert_true (ai_move (ai, 2, 5));
19101        assert_true (ai_move (ai, 5, 3));
19102        assert_true (ai_move (ai, 5, 2));
19103        assert_true (ai_move (ai, 6, 2));
19104        assert_true (ai_move (ai, 6, 3));
19105        assert_true (ai_move (ai, 6, 4));
19106        assert_true (ai_move (ai, 7, 2));
19107        assert_true (ai_move (ai, 5, 6));
19108        assert_true (ai_move (ai, 7, 3));
19109        assert_true (ai_move (ai, 5, 1));
19110        assert_true (ai_move (ai, 4, 1));
19111        assert_true (ai_move (ai, 7, 5));
19112        assert_true (ai_move (ai, 5, 0));
19113        assert_true (ai_move (ai, 3, 5));
19114        assert_true (ai_move (ai, 4, 5));
19115        assert_true (ai_move (ai, 3, 6));
19116        assert_true (ai_move (ai, 2, 6));
19117        assert_true (ai_move (ai, 1, 4));
19118        assert_true (ai_move (ai, 1, 5));
19119        assert_true (ai_move (ai, 0, 5));
19120        assert_true (ai_move (ai, 2, 7));
19121        assert_true (ai_move (ai, 4, 7));
19122        assert_true (ai_move (ai, 5, 7));
19123        assert_true (ai_move (ai, 4, 6));
19124        assert_true (ai_move (ai, 3, 7));
19125        assert_true (ai_move (ai, 7, 4));
19126        assert_true (ai_move (ai, 7, 6));
19127        assert_true (ai_move (ai, 4, 2));
19128        assert_true (ai_move (ai, 3, 1));
19129        assert_true (ai_move (ai, 6, 1));
19130        assert_true (ai_move (ai, 0, 3));
19131        assert_true (ai_move (ai, 1, 6));
19132        assert_true (ai_move (ai, 3, 2));
19133        assert_true (ai_move (ai, 7, 1));
19134        assert_true (ai_move (ai, 7, 0));
19135        assert_true (ai_move (ai, 2, 0));
19136        assert_true (ai_move (ai, 2, 4));
19137        assert_true (ai_move (ai, 1, 7));
19138        assert_true (ai_move (ai, 0, 7));
19139        assert_true (ai_move (ai, 1, 3));
19140        assert_true (ai_move (ai, 0, 2));
19141        assert_true (ai_move (ai, 1, 2));
19142        assert_true (ai_move (ai, 0, 6));
19143        assert_true (ai_move (ai, 0, 4));
19144        assert_true (ai_move (ai, 2, 3));
19145        assert_true (ai_move (ai, 6, 0));
19146        assert_true (ai_move (ai, 4, 0));
19147        assert_true (ai_move (ai, 2, 1));
19148        assert_true (ai_move (ai, 3, 0));
19149        assert_true (ai_move (ai, 6, 6));
19150        assert_true (ai_move (ai, 6, 7));
19151        assert_true (ai_move (ai, 1, 0));
19152        assert_true (ai_move (ai, 0, 0));
19153        assert_true (ai_move (ai, 0, 1));
19154        assert_true (ai_move (ai, 1, 1));
19155        assert_true (game.pass ());
19156        assert_true (ai_move (ai, 7, 7));
19157    }
19158
19159    private static inline void test_complete_reversi_game_239 ()
19160    {
19161                                  /* 0 1 2 3 4 5 6 7 */
19162        string [] board = {/* 0 */ " . . . . . . . .",
19163                           /* 1 */ " . . . . . . . .",
19164                           /* 2 */ " . . . . . . . .",
19165                           /* 3 */ " . . . D D D . .",
19166                           /* 4 */ " . . . L L D . .",
19167                           /* 5 */ " . . . . . L . .",
19168                           /* 6 */ " . . . . . . L .",
19169                           /* 7 */ " . . . . . . . ."};
19170
19171        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19172        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19173
19174        assert_true (ai_move (ai, 5, 6));
19175        assert_true (ai_move (ai, 6, 2));
19176        assert_true (ai_move (ai, 5, 2));
19177        assert_true (ai_move (ai, 6, 4));
19178        assert_true (ai_move (ai, 6, 5));
19179        assert_true (ai_move (ai, 4, 6));
19180        assert_true (ai_move (ai, 5, 7));
19181        assert_true (ai_move (ai, 4, 2));
19182        assert_true (ai_move (ai, 3, 2));
19183        assert_true (ai_move (ai, 2, 4));
19184        assert_true (ai_move (ai, 5, 1));
19185        assert_true (ai_move (ai, 2, 2));
19186        assert_true (ai_move (ai, 3, 1));
19187        assert_true (ai_move (ai, 6, 3));
19188        assert_true (ai_move (ai, 1, 3));
19189        assert_true (ai_move (ai, 4, 1));
19190        assert_true (ai_move (ai, 7, 2));
19191        assert_true (ai_move (ai, 2, 3));
19192        assert_true (ai_move (ai, 2, 1));
19193        assert_true (ai_move (ai, 5, 0));
19194        assert_true (ai_move (ai, 3, 0));
19195        assert_true (ai_move (ai, 4, 0));
19196        assert_true (ai_move (ai, 6, 0));
19197        assert_true (ai_move (ai, 7, 4));
19198        assert_true (ai_move (ai, 2, 5));
19199        assert_true (ai_move (ai, 7, 3));
19200        assert_true (ai_move (ai, 3, 7));
19201        assert_true (ai_move (ai, 1, 4));
19202        assert_true (ai_move (ai, 3, 5));
19203        assert_true (ai_move (ai, 1, 2));
19204        assert_true (ai_move (ai, 0, 2));
19205        assert_true (ai_move (ai, 1, 5));
19206        assert_true (ai_move (ai, 0, 4));
19207        assert_true (ai_move (ai, 2, 6));
19208        assert_true (ai_move (ai, 2, 7));
19209        assert_true (ai_move (ai, 0, 3));
19210        assert_true (ai_move (ai, 0, 5));
19211        assert_true (ai_move (ai, 4, 5));
19212        assert_true (ai_move (ai, 3, 6));
19213        assert_true (ai_move (ai, 7, 6));
19214        assert_true (ai_move (ai, 6, 1));
19215        assert_true (ai_move (ai, 4, 7));
19216        assert_true (ai_move (ai, 1, 6));
19217        assert_true (ai_move (ai, 7, 1));
19218        assert_true (ai_move (ai, 7, 7));
19219        assert_true (ai_move (ai, 6, 7));
19220        assert_true (ai_move (ai, 7, 5));
19221        assert_true (ai_move (ai, 7, 0));
19222        assert_true (game.pass ());
19223        assert_true (ai_move (ai, 2, 0));
19224        assert_true (ai_move (ai, 1, 0));
19225        assert_true (ai_move (ai, 0, 0));
19226        assert_true (ai_move (ai, 1, 1));
19227        assert_true (ai_move (ai, 0, 1));
19228        assert_true (game.pass ());
19229        assert_true (ai_move (ai, 0, 7));
19230        assert_true (ai_move (ai, 0, 6));
19231        assert_true (ai_move (ai, 1, 7));
19232    }
19233
19234    private static inline void test_complete_reversi_game_240 ()
19235    {
19236                                  /* 0 1 2 3 4 5 6 7 */
19237        string [] board = {/* 0 */ " . . . . . . . .",
19238                           /* 1 */ " . . . . . . . .",
19239                           /* 2 */ " . . . . . . . .",
19240                           /* 3 */ " . . . D D D . .",
19241                           /* 4 */ " . . . L L L L .",
19242                           /* 5 */ " . . . . . D . .",
19243                           /* 6 */ " . . . . . . . .",
19244                           /* 7 */ " . . . . . . . ."};
19245
19246        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19247        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19248
19249        assert_true (ai_move (ai, 6, 5));
19250        assert_true (ai_move (ai, 4, 6));
19251        assert_true (ai_move (ai, 5, 6));
19252        assert_true (ai_move (ai, 6, 2));
19253        assert_true (ai_move (ai, 5, 2));
19254        assert_true (ai_move (ai, 2, 2));
19255        assert_true (ai_move (ai, 7, 2));
19256        assert_true (ai_move (ai, 4, 2));
19257        assert_true (ai_move (ai, 7, 3));
19258        assert_true (ai_move (ai, 5, 1));
19259        assert_true (ai_move (ai, 5, 0));
19260        assert_true (ai_move (ai, 7, 5));
19261        assert_true (ai_move (ai, 6, 3));
19262        assert_true (ai_move (ai, 5, 7));
19263        assert_true (ai_move (ai, 3, 1));
19264        assert_true (ai_move (ai, 7, 6));
19265        assert_true (ai_move (ai, 1, 3));
19266        assert_true (ai_move (ai, 4, 1));
19267        assert_true (ai_move (ai, 3, 0));
19268        assert_true (ai_move (ai, 4, 0));
19269        assert_true (ai_move (ai, 3, 2));
19270        assert_true (ai_move (ai, 2, 1));
19271        assert_true (ai_move (ai, 2, 0));
19272        assert_true (ai_move (ai, 1, 2));
19273        assert_true (ai_move (ai, 0, 2));
19274        assert_true (ai_move (ai, 0, 4));
19275        assert_true (ai_move (ai, 1, 4));
19276        assert_true (ai_move (ai, 2, 4));
19277        assert_true (ai_move (ai, 2, 3));
19278        assert_true (ai_move (ai, 1, 1));
19279        assert_true (ai_move (ai, 1, 5));
19280        assert_true (ai_move (ai, 2, 5));
19281        assert_true (ai_move (ai, 2, 6));
19282        assert_true (ai_move (ai, 3, 5));
19283        assert_true (ai_move (ai, 0, 5));
19284        assert_true (ai_move (ai, 2, 7));
19285        assert_true (ai_move (ai, 0, 3));
19286        assert_true (ai_move (ai, 0, 1));
19287        assert_true (ai_move (ai, 0, 0));
19288        assert_true (ai_move (ai, 1, 0));
19289        assert_true (ai_move (ai, 4, 5));
19290        assert_true (ai_move (ai, 3, 6));
19291        assert_true (ai_move (ai, 4, 7));
19292        assert_true (ai_move (ai, 3, 7));
19293        assert_true (ai_move (ai, 1, 7));
19294        assert_true (ai_move (ai, 0, 7));
19295        assert_true (ai_move (ai, 6, 6));
19296        assert_true (ai_move (ai, 6, 7));
19297        assert_true (game.pass ());
19298        assert_true (ai_move (ai, 7, 7));
19299        assert_true (game.pass ());
19300        assert_true (ai_move (ai, 7, 4));
19301        assert_true (ai_move (ai, 6, 1));
19302        assert_true (ai_move (ai, 0, 6));
19303        assert_true (ai_move (ai, 1, 6));
19304        assert_true (ai_move (ai, 7, 0));
19305        assert_true (ai_move (ai, 7, 1));
19306        assert_true (ai_move (ai, 6, 0));
19307    }
19308
19309    private static inline void test_complete_reversi_game_241 ()
19310    {
19311                                  /* 0 1 2 3 4 5 6 7 */
19312        string [] board = {/* 0 */ " . . . . . . . .",
19313                           /* 1 */ " . . . . . . . .",
19314                           /* 2 */ " . . . . . . L .",
19315                           /* 3 */ " . . . D D L . .",
19316                           /* 4 */ " . . . L L D . .",
19317                           /* 5 */ " . . . . . D . .",
19318                           /* 6 */ " . . . . . . . .",
19319                           /* 7 */ " . . . . . . . ."};
19320
19321        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19322        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19323
19324        assert_true (ai_move (ai, 5, 2));
19325        assert_true (ai_move (ai, 6, 4));
19326        assert_true (ai_move (ai, 6, 5));
19327        assert_true (ai_move (ai, 4, 6));
19328        assert_true (ai_move (ai, 5, 6));
19329        assert_true (ai_move (ai, 2, 2));
19330        assert_true (ai_move (ai, 7, 2));
19331        assert_true (ai_move (ai, 4, 2));
19332        assert_true (ai_move (ai, 7, 3));
19333        assert_true (ai_move (ai, 5, 1));
19334        assert_true (ai_move (ai, 5, 0));
19335        assert_true (ai_move (ai, 7, 5));
19336        assert_true (ai_move (ai, 6, 3));
19337        assert_true (ai_move (ai, 5, 7));
19338        assert_true (ai_move (ai, 3, 1));
19339        assert_true (ai_move (ai, 7, 6));
19340        assert_true (ai_move (ai, 1, 3));
19341        assert_true (ai_move (ai, 4, 1));
19342        assert_true (ai_move (ai, 3, 0));
19343        assert_true (ai_move (ai, 4, 0));
19344        assert_true (ai_move (ai, 3, 2));
19345        assert_true (ai_move (ai, 2, 1));
19346        assert_true (ai_move (ai, 2, 0));
19347        assert_true (ai_move (ai, 1, 2));
19348        assert_true (ai_move (ai, 0, 2));
19349        assert_true (ai_move (ai, 0, 4));
19350        assert_true (ai_move (ai, 1, 4));
19351        assert_true (ai_move (ai, 2, 4));
19352        assert_true (ai_move (ai, 2, 3));
19353        assert_true (ai_move (ai, 1, 1));
19354        assert_true (ai_move (ai, 1, 5));
19355        assert_true (ai_move (ai, 2, 5));
19356        assert_true (ai_move (ai, 2, 6));
19357        assert_true (ai_move (ai, 3, 5));
19358        assert_true (ai_move (ai, 0, 5));
19359        assert_true (ai_move (ai, 2, 7));
19360        assert_true (ai_move (ai, 0, 3));
19361        assert_true (ai_move (ai, 0, 1));
19362        assert_true (ai_move (ai, 0, 0));
19363        assert_true (ai_move (ai, 1, 0));
19364        assert_true (ai_move (ai, 4, 5));
19365        assert_true (ai_move (ai, 3, 6));
19366        assert_true (ai_move (ai, 4, 7));
19367        assert_true (ai_move (ai, 3, 7));
19368        assert_true (ai_move (ai, 1, 7));
19369        assert_true (ai_move (ai, 0, 7));
19370        assert_true (ai_move (ai, 6, 6));
19371        assert_true (ai_move (ai, 6, 7));
19372        assert_true (game.pass ());
19373        assert_true (ai_move (ai, 7, 7));
19374        assert_true (game.pass ());
19375        assert_true (ai_move (ai, 7, 4));
19376        assert_true (ai_move (ai, 6, 1));
19377        assert_true (ai_move (ai, 0, 6));
19378        assert_true (ai_move (ai, 1, 6));
19379        assert_true (ai_move (ai, 7, 0));
19380        assert_true (ai_move (ai, 7, 1));
19381        assert_true (ai_move (ai, 6, 0));
19382    }
19383
19384    private static inline void test_complete_reversi_game_242 ()
19385    {
19386                                  /* 0 1 2 3 4 5 6 7 */
19387        string [] board = {/* 0 */ " . . . . . . . .",
19388                           /* 1 */ " . . . . . . . .",
19389                           /* 2 */ " . . . . . L . .",
19390                           /* 3 */ " . . . D L D . .",
19391                           /* 4 */ " . . . L L D . .",
19392                           /* 5 */ " . . . . . D . .",
19393                           /* 6 */ " . . . . . . . .",
19394                           /* 7 */ " . . . . . . . ."};
19395
19396        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19397        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19398
19399        assert_true (ai_move (ai, 5, 1));
19400        assert_true (ai_move (ai, 6, 4));
19401        assert_true (ai_move (ai, 7, 5));
19402        assert_true (ai_move (ai, 6, 1));
19403        assert_true (ai_move (ai, 3, 5));
19404        assert_true (ai_move (ai, 5, 6));
19405        assert_true (ai_move (ai, 4, 6));
19406        assert_true (ai_move (ai, 6, 3));
19407        assert_true (ai_move (ai, 5, 7));
19408        assert_true (ai_move (ai, 5, 0));
19409        assert_true (ai_move (ai, 4, 2));
19410        assert_true (ai_move (ai, 3, 2));
19411        assert_true (ai_move (ai, 4, 1));
19412        assert_true (ai_move (ai, 7, 4));
19413        assert_true (ai_move (ai, 2, 2));
19414        assert_true (ai_move (ai, 1, 2));
19415        assert_true (ai_move (ai, 6, 5));
19416        assert_true (ai_move (ai, 2, 5));
19417        assert_true (ai_move (ai, 2, 4));
19418        assert_true (ai_move (ai, 3, 1));
19419        assert_true (ai_move (ai, 2, 0));
19420        assert_true (ai_move (ai, 4, 0));
19421        assert_true (ai_move (ai, 7, 3));
19422        assert_true (ai_move (ai, 1, 5));
19423        assert_true (ai_move (ai, 1, 4));
19424        assert_true (ai_move (ai, 2, 3));
19425        assert_true (ai_move (ai, 3, 6));
19426        assert_true (ai_move (ai, 2, 6));
19427        assert_true (ai_move (ai, 0, 5));
19428        assert_true (ai_move (ai, 0, 4));
19429        assert_true (ai_move (ai, 7, 0));
19430        assert_true (ai_move (ai, 4, 7));
19431        assert_true (ai_move (ai, 0, 3));
19432        assert_true (ai_move (ai, 6, 2));
19433        assert_true (ai_move (ai, 4, 5));
19434        assert_true (ai_move (ai, 6, 0));
19435        assert_true (ai_move (ai, 3, 0));
19436        assert_true (ai_move (ai, 7, 2));
19437        assert_true (ai_move (ai, 7, 1));
19438        assert_true (ai_move (ai, 2, 1));
19439        assert_true (ai_move (ai, 0, 2));
19440        assert_true (ai_move (ai, 6, 7));
19441        assert_true (ai_move (ai, 1, 3));
19442        assert_true (ai_move (ai, 6, 6));
19443        assert_true (ai_move (ai, 2, 7));
19444        assert_true (ai_move (ai, 1, 1));
19445        assert_true (ai_move (ai, 1, 0));
19446        assert_true (ai_move (ai, 0, 0));
19447        assert_true (ai_move (ai, 0, 1));
19448        assert_true (ai_move (ai, 0, 6));
19449        assert_true (ai_move (ai, 7, 7));
19450        assert_true (ai_move (ai, 3, 7));
19451        assert_true (ai_move (ai, 7, 6));
19452        assert_true (ai_move (ai, 1, 6));
19453        assert_true (ai_move (ai, 0, 7));
19454        assert_true (ai_move (ai, 1, 7));
19455    }
19456
19457    private static inline void test_complete_reversi_game_243 ()
19458    {
19459                                  /* 0 1 2 3 4 5 6 7 */
19460        string [] board = {/* 0 */ " . . . . . . . .",
19461                           /* 1 */ " . . . . . . . .",
19462                           /* 2 */ " . . . . L . . .",
19463                           /* 3 */ " . . . D L D . .",
19464                           /* 4 */ " . . . L L D . .",
19465                           /* 5 */ " . . . . . D . .",
19466                           /* 6 */ " . . . . . . . .",
19467                           /* 7 */ " . . . . . . . ."};
19468
19469        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19470        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19471
19472        assert_true (ai_move (ai, 5, 1));
19473        assert_true (ai_move (ai, 4, 1));
19474        assert_true (ai_move (ai, 3, 1));
19475        assert_true (ai_move (ai, 6, 4));
19476        assert_true (ai_move (ai, 7, 5));
19477        assert_true (ai_move (ai, 4, 0));
19478        assert_true (ai_move (ai, 2, 4));
19479        assert_true (ai_move (ai, 6, 3));
19480        assert_true (ai_move (ai, 5, 2));
19481        assert_true (ai_move (ai, 6, 2));
19482        assert_true (ai_move (ai, 5, 0));
19483        assert_true (ai_move (ai, 3, 5));
19484        assert_true (ai_move (ai, 7, 4));
19485        assert_true (ai_move (ai, 5, 6));
19486        assert_true (ai_move (ai, 6, 5));
19487        assert_true (ai_move (ai, 1, 3));
19488        assert_true (ai_move (ai, 4, 6));
19489        assert_true (ai_move (ai, 7, 3));
19490        assert_true (ai_move (ai, 7, 2));
19491        assert_true (ai_move (ai, 2, 0));
19492        assert_true (ai_move (ai, 3, 6));
19493        assert_true (ai_move (ai, 5, 7));
19494        assert_true (ai_move (ai, 2, 6));
19495        assert_true (ai_move (ai, 4, 5));
19496        assert_true (ai_move (ai, 1, 5));
19497        assert_true (ai_move (ai, 2, 7));
19498        assert_true (ai_move (ai, 0, 2));
19499        assert_true (ai_move (ai, 2, 2));
19500        assert_true (ai_move (ai, 3, 0));
19501        assert_true (ai_move (ai, 6, 0));
19502        assert_true (ai_move (ai, 2, 1));
19503        assert_true (ai_move (ai, 1, 2));
19504        assert_true (ai_move (ai, 3, 2));
19505        assert_true (ai_move (ai, 0, 4));
19506        assert_true (ai_move (ai, 1, 4));
19507        assert_true (ai_move (ai, 2, 5));
19508        assert_true (ai_move (ai, 3, 7));
19509        assert_true (ai_move (ai, 4, 7));
19510        assert_true (ai_move (ai, 1, 6));
19511        assert_true (ai_move (ai, 2, 3));
19512        assert_true (ai_move (ai, 1, 7));
19513        assert_true (ai_move (ai, 0, 7));
19514        assert_true (ai_move (ai, 0, 6));
19515        assert_true (ai_move (ai, 0, 5));
19516        assert_true (ai_move (ai, 1, 1));
19517        assert_true (ai_move (ai, 0, 3));
19518        assert_true (ai_move (ai, 1, 0));
19519        assert_true (ai_move (ai, 0, 0));
19520        assert_true (ai_move (ai, 0, 1));
19521        assert_true (ai_move (ai, 6, 1));
19522        assert_true (ai_move (ai, 6, 7));
19523        assert_true (ai_move (ai, 7, 7));
19524        assert_true (ai_move (ai, 7, 0));
19525        assert_true (ai_move (ai, 7, 6));
19526        assert_true (ai_move (ai, 6, 6));
19527        assert_true (ai_move (ai, 7, 1));
19528    }
19529
19530    private static inline void test_complete_reversi_game_244 ()
19531    {
19532                                  /* 0 1 2 3 4 5 6 7 */
19533        string [] board = {/* 0 */ " . . . . . . . .",
19534                           /* 1 */ " . . . . . . . .",
19535                           /* 2 */ " . . . L . . . .",
19536                           /* 3 */ " . . . L D D . .",
19537                           /* 4 */ " . . . L L D . .",
19538                           /* 5 */ " . . . . . D . .",
19539                           /* 6 */ " . . . . . . . .",
19540                           /* 7 */ " . . . . . . . ."};
19541
19542        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19543        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19544
19545        assert_true (ai_move (ai, 2, 1));
19546        assert_true (ai_move (ai, 3, 1));
19547        assert_true (ai_move (ai, 3, 5));
19548        assert_true (ai_move (ai, 3, 6));
19549        assert_true (ai_move (ai, 2, 6));
19550        assert_true (ai_move (ai, 5, 2));
19551        assert_true (ai_move (ai, 5, 1));
19552        assert_true (ai_move (ai, 6, 5));
19553        assert_true (ai_move (ai, 6, 4));
19554        assert_true (ai_move (ai, 4, 5));
19555        assert_true (ai_move (ai, 7, 5));
19556        assert_true (ai_move (ai, 4, 6));
19557        assert_true (ai_move (ai, 2, 7));
19558        assert_true (ai_move (ai, 5, 6));
19559        assert_true (ai_move (ai, 4, 7));
19560        assert_true (ai_move (ai, 3, 7));
19561        assert_true (ai_move (ai, 4, 2));
19562        assert_true (ai_move (ai, 6, 3));
19563        assert_true (ai_move (ai, 6, 2));
19564        assert_true (ai_move (ai, 4, 1));
19565        assert_true (ai_move (ai, 4, 0));
19566        assert_true (ai_move (ai, 1, 5));
19567        assert_true (ai_move (ai, 2, 0));
19568        assert_true (ai_move (ai, 3, 0));
19569        assert_true (ai_move (ai, 2, 5));
19570        assert_true (ai_move (ai, 1, 2));
19571        assert_true (ai_move (ai, 0, 5));
19572        assert_true (ai_move (ai, 7, 2));
19573        assert_true (ai_move (ai, 2, 4));
19574        assert_true (ai_move (ai, 7, 4));
19575        assert_true (ai_move (ai, 2, 2));
19576        assert_true (ai_move (ai, 0, 4));
19577        assert_true (ai_move (ai, 0, 2));
19578        assert_true (ai_move (ai, 0, 3));
19579        assert_true (ai_move (ai, 1, 1));
19580        assert_true (ai_move (ai, 2, 3));
19581        assert_true (ai_move (ai, 1, 4));
19582        assert_true (ai_move (ai, 1, 3));
19583        assert_true (ai_move (ai, 0, 1));
19584        assert_true (ai_move (ai, 5, 7));
19585        assert_true (ai_move (ai, 6, 7));
19586        assert_true (ai_move (ai, 5, 0));
19587        assert_true (ai_move (ai, 6, 0));
19588        assert_true (ai_move (ai, 1, 6));
19589        assert_true (ai_move (ai, 6, 6));
19590        assert_true (ai_move (ai, 6, 1));
19591        assert_true (ai_move (ai, 7, 3));
19592        assert_true (ai_move (ai, 0, 0));
19593        assert_true (ai_move (ai, 7, 1));
19594        assert_true (ai_move (ai, 7, 0));
19595        assert_true (ai_move (ai, 1, 0));
19596        assert_true (ai_move (ai, 0, 6));
19597        assert_true (ai_move (ai, 1, 7));
19598        assert_true (ai_move (ai, 0, 7));
19599        assert_true (game.pass ());
19600        assert_true (ai_move (ai, 7, 7));
19601        assert_true (ai_move (ai, 7, 6));
19602    }
19603
19604    private static inline void test_complete_reversi_game_245 ()
19605    {
19606                                  /* 0 1 2 3 4 5 6 7 */
19607        string [] board = {/* 0 */ " . . . . . . . .",
19608                           /* 1 */ " . . . . . . . .",
19609                           /* 2 */ " . . L . . . . .",
19610                           /* 3 */ " . . . L D D . .",
19611                           /* 4 */ " . . . L L D . .",
19612                           /* 5 */ " . . . . . D . .",
19613                           /* 6 */ " . . . . . . . .",
19614                           /* 7 */ " . . . . . . . ."};
19615
19616        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19617        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19618
19619        assert_true (ai_move (ai, 3, 5));
19620        assert_true (ai_move (ai, 3, 6));
19621        assert_true (ai_move (ai, 2, 6));
19622        assert_true (ai_move (ai, 5, 2));
19623        assert_true (ai_move (ai, 5, 1));
19624        assert_true (ai_move (ai, 6, 5));
19625        assert_true (ai_move (ai, 6, 4));
19626        assert_true (ai_move (ai, 4, 5));
19627        assert_true (ai_move (ai, 7, 5));
19628        assert_true (ai_move (ai, 4, 6));
19629        assert_true (ai_move (ai, 2, 7));
19630        assert_true (ai_move (ai, 5, 6));
19631        assert_true (ai_move (ai, 4, 7));
19632        assert_true (ai_move (ai, 3, 7));
19633        assert_true (ai_move (ai, 4, 2));
19634        assert_true (ai_move (ai, 1, 5));
19635        assert_true (ai_move (ai, 2, 5));
19636        assert_true (ai_move (ai, 6, 3));
19637        assert_true (ai_move (ai, 6, 2));
19638        assert_true (ai_move (ai, 4, 1));
19639        assert_true (ai_move (ai, 0, 5));
19640        assert_true (ai_move (ai, 7, 2));
19641        assert_true (ai_move (ai, 3, 0));
19642        assert_true (ai_move (ai, 0, 4));
19643        assert_true (ai_move (ai, 0, 3));
19644        assert_true (ai_move (ai, 2, 4));
19645        assert_true (ai_move (ai, 1, 4));
19646        assert_true (ai_move (ai, 2, 3));
19647        assert_true (ai_move (ai, 2, 1));
19648        assert_true (ai_move (ai, 7, 3));
19649        assert_true (ai_move (ai, 5, 7));
19650        assert_true (ai_move (ai, 5, 0));
19651        assert_true (ai_move (ai, 3, 1));
19652        assert_true (ai_move (ai, 3, 2));
19653        assert_true (ai_move (ai, 4, 0));
19654        assert_true (ai_move (ai, 2, 0));
19655        assert_true (ai_move (ai, 7, 4));
19656        assert_true (ai_move (ai, 7, 6));
19657        assert_true (ai_move (ai, 0, 6));
19658        assert_true (ai_move (ai, 1, 0));
19659        assert_true (ai_move (ai, 6, 6));
19660        assert_true (ai_move (ai, 1, 2));
19661        assert_true (ai_move (ai, 0, 2));
19662        assert_true (ai_move (ai, 7, 7));
19663        assert_true (ai_move (ai, 6, 7));
19664        assert_true (ai_move (ai, 1, 3));
19665        assert_true (ai_move (ai, 1, 1));
19666        assert_true (ai_move (ai, 0, 0));
19667        assert_true (ai_move (ai, 7, 1));
19668        assert_true (ai_move (ai, 0, 1));
19669        assert_true (ai_move (ai, 6, 0));
19670        assert_true (ai_move (ai, 0, 7));
19671        assert_true (game.pass ());
19672        assert_true (ai_move (ai, 1, 7));
19673        assert_true (ai_move (ai, 1, 6));
19674        assert_true (ai_move (ai, 6, 1));
19675        assert_true (ai_move (ai, 7, 0));
19676    }
19677
19678    private static inline void test_complete_reversi_game_246 ()
19679    {
19680                                  /* 0 1 2 3 4 5 6 7 */
19681        string [] board = {/* 0 */ " . . . . . . . .",
19682                           /* 1 */ " . . . . . . . .",
19683                           /* 2 */ " . . . . . . . .",
19684                           /* 3 */ " . . . D D . . .",
19685                           /* 4 */ " . . . L D L . .",
19686                           /* 5 */ " . . . . L L . .",
19687                           /* 6 */ " . . . . . L . .",
19688                           /* 7 */ " . . . . . . . ."};
19689
19690        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19691        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19692
19693        assert_true (ai_move (ai, 2, 5));
19694        assert_true (ai_move (ai, 3, 2));
19695        assert_true (ai_move (ai, 4, 6));
19696        assert_true (ai_move (ai, 3, 6));
19697        assert_true (ai_move (ai, 3, 1));
19698        assert_true (ai_move (ai, 1, 4));
19699        assert_true (ai_move (ai, 4, 2));
19700        assert_true (ai_move (ai, 2, 3));
19701        assert_true (ai_move (ai, 1, 3));
19702        assert_true (ai_move (ai, 5, 2));
19703        assert_true (ai_move (ai, 6, 2));
19704        assert_true (ai_move (ai, 2, 1));
19705        assert_true (ai_move (ai, 4, 1));
19706        assert_true (ai_move (ai, 4, 0));
19707        assert_true (ai_move (ai, 5, 0));
19708        assert_true (ai_move (ai, 2, 0));
19709        assert_true (ai_move (ai, 5, 3));
19710        assert_true (ai_move (ai, 5, 1));
19711        assert_true (ai_move (ai, 6, 3));
19712        assert_true (ai_move (ai, 6, 4));
19713        assert_true (ai_move (ai, 2, 4));
19714        assert_true (ai_move (ai, 7, 4));
19715        assert_true (ai_move (ai, 2, 6));
19716        assert_true (ai_move (ai, 7, 3));
19717        assert_true (ai_move (ai, 7, 2));
19718        assert_true (ai_move (ai, 7, 1));
19719        assert_true (ai_move (ai, 1, 5));
19720        assert_true (ai_move (ai, 2, 2));
19721        assert_true (ai_move (ai, 5, 7));
19722        assert_true (ai_move (ai, 6, 5));
19723        assert_true (ai_move (ai, 1, 2));
19724        assert_true (ai_move (ai, 0, 2));
19725        assert_true (ai_move (ai, 4, 7));
19726        assert_true (ai_move (ai, 0, 3));
19727        assert_true (ai_move (ai, 3, 5));
19728        assert_true (ai_move (ai, 0, 4));
19729        assert_true (ai_move (ai, 7, 5));
19730        assert_true (ai_move (ai, 7, 6));
19731        assert_true (ai_move (ai, 0, 5));
19732        assert_true (ai_move (ai, 6, 6));
19733        assert_true (ai_move (ai, 0, 1));
19734        assert_true (ai_move (ai, 2, 7));
19735        assert_true (ai_move (ai, 3, 0));
19736        assert_true (ai_move (ai, 6, 0));
19737        assert_true (ai_move (ai, 3, 7));
19738        assert_true (ai_move (ai, 6, 7));
19739        assert_true (ai_move (ai, 6, 1));
19740        assert_true (ai_move (ai, 1, 1));
19741        assert_true (ai_move (ai, 1, 0));
19742        assert_true (ai_move (ai, 0, 0));
19743        assert_true (game.pass ());
19744        assert_true (ai_move (ai, 0, 6));
19745        assert_true (ai_move (ai, 1, 6));
19746        assert_true (ai_move (ai, 1, 7));
19747    }
19748
19749    private static inline void test_complete_reversi_game_247 ()
19750    {
19751                                  /* 0 1 2 3 4 5 6 7 */
19752        string [] board = {/* 0 */ " . . . . . . . .",
19753                           /* 1 */ " . . . . . . . .",
19754                           /* 2 */ " . . . . . L . .",
19755                           /* 3 */ " . . . D L . . .",
19756                           /* 4 */ " . . . L D L . .",
19757                           /* 5 */ " . . . . D D . .",
19758                           /* 6 */ " . . . . . . . .",
19759                           /* 7 */ " . . . . . . . ."};
19760
19761        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19762        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19763
19764        assert_true (ai_move (ai, 6, 4));
19765        assert_true (ai_move (ai, 5, 6));
19766        assert_true (ai_move (ai, 3, 6));
19767        assert_true (ai_move (ai, 6, 5));
19768        assert_true (ai_move (ai, 7, 5));
19769        assert_true (ai_move (ai, 2, 7));
19770        assert_true (ai_move (ai, 4, 6));
19771        assert_true (ai_move (ai, 7, 4));
19772        assert_true (ai_move (ai, 3, 5));
19773        assert_true (ai_move (ai, 2, 5));
19774        assert_true (ai_move (ai, 1, 5));
19775        assert_true (ai_move (ai, 1, 4));
19776        assert_true (ai_move (ai, 3, 7));
19777        assert_true (ai_move (ai, 0, 5));
19778        assert_true (ai_move (ai, 7, 3));
19779        assert_true (ai_move (ai, 4, 7));
19780        assert_true (ai_move (ai, 5, 7));
19781        assert_true (ai_move (ai, 6, 7));
19782        assert_true (ai_move (ai, 2, 6));
19783        assert_true (ai_move (ai, 2, 4));
19784        assert_true (ai_move (ai, 2, 3));
19785        assert_true (ai_move (ai, 1, 7));
19786        assert_true (ai_move (ai, 6, 3));
19787        assert_true (ai_move (ai, 5, 3));
19788        assert_true (ai_move (ai, 4, 1));
19789        assert_true (ai_move (ai, 5, 1));
19790        assert_true (ai_move (ai, 3, 2));
19791        assert_true (ai_move (ai, 7, 2));
19792        assert_true (ai_move (ai, 7, 1));
19793        assert_true (ai_move (ai, 1, 2));
19794        assert_true (ai_move (ai, 2, 2));
19795        assert_true (ai_move (ai, 2, 1));
19796        assert_true (ai_move (ai, 1, 3));
19797        assert_true (ai_move (ai, 4, 2));
19798        assert_true (ai_move (ai, 3, 1));
19799        assert_true (ai_move (ai, 6, 2));
19800        assert_true (ai_move (ai, 2, 0));
19801        assert_true (ai_move (ai, 0, 3));
19802        assert_true (ai_move (ai, 0, 2));
19803        assert_true (ai_move (ai, 4, 0));
19804        assert_true (ai_move (ai, 3, 0));
19805        assert_true (ai_move (ai, 5, 0));
19806        assert_true (ai_move (ai, 6, 0));
19807        assert_true (ai_move (ai, 6, 1));
19808        assert_true (ai_move (ai, 0, 4));
19809        assert_true (ai_move (ai, 0, 1));
19810        assert_true (ai_move (ai, 7, 0));
19811        assert_true (ai_move (ai, 1, 1));
19812        assert_true (ai_move (ai, 0, 0));
19813        assert_true (ai_move (ai, 1, 0));
19814        assert_true (ai_move (ai, 0, 6));
19815        assert_true (ai_move (ai, 6, 6));
19816        assert_true (ai_move (ai, 7, 6));
19817        assert_true (ai_move (ai, 1, 6));
19818        assert_true (ai_move (ai, 7, 7));
19819        assert_true (game.pass ());
19820        assert_true (ai_move (ai, 0, 7));
19821    }
19822
19823    private static inline void test_complete_reversi_game_248 ()
19824    {
19825                                  /* 0 1 2 3 4 5 6 7 */
19826        string [] board = {/* 0 */ " . . . . . . . .",
19827                           /* 1 */ " . . . . . . . .",
19828                           /* 2 */ " . . . . . . . .",
19829                           /* 3 */ " . . . D D . . .",
19830                           /* 4 */ " . . . L D L . .",
19831                           /* 5 */ " . . . . L D . .",
19832                           /* 6 */ " . . . L . . . .",
19833                           /* 7 */ " . . . . . . . ."};
19834
19835        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19836        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19837
19838        assert_true (ai_move (ai, 4, 6));
19839        assert_true (ai_move (ai, 5, 2));
19840        assert_true (ai_move (ai, 6, 4));
19841        assert_true (ai_move (ai, 6, 3));
19842        assert_true (ai_move (ai, 4, 2));
19843        assert_true (ai_move (ai, 6, 5));
19844        assert_true (ai_move (ai, 6, 2));
19845        assert_true (ai_move (ai, 4, 7));
19846        assert_true (ai_move (ai, 2, 4));
19847        assert_true (ai_move (ai, 3, 2));
19848        assert_true (ai_move (ai, 2, 2));
19849        assert_true (ai_move (ai, 4, 1));
19850        assert_true (ai_move (ai, 5, 1));
19851        assert_true (ai_move (ai, 5, 0));
19852        assert_true (ai_move (ai, 5, 6));
19853        assert_true (ai_move (ai, 5, 7));
19854        assert_true (ai_move (ai, 7, 5));
19855        assert_true (ai_move (ai, 2, 1));
19856        assert_true (ai_move (ai, 3, 1));
19857        assert_true (ai_move (ai, 1, 2));
19858        assert_true (ai_move (ai, 1, 3));
19859        assert_true (ai_move (ai, 7, 2));
19860        assert_true (ai_move (ai, 2, 0));
19861        assert_true (ai_move (ai, 7, 4));
19862        assert_true (ai_move (ai, 2, 7));
19863        assert_true (ai_move (ai, 2, 6));
19864        assert_true (ai_move (ai, 2, 5));
19865        assert_true (ai_move (ai, 3, 0));
19866        assert_true (ai_move (ai, 0, 2));
19867        assert_true (ai_move (ai, 0, 4));
19868        assert_true (ai_move (ai, 2, 3));
19869        assert_true (ai_move (ai, 0, 3));
19870        assert_true (ai_move (ai, 0, 5));
19871        assert_true (ai_move (ai, 3, 5));
19872        assert_true (ai_move (ai, 1, 4));
19873        assert_true (ai_move (ai, 5, 3));
19874        assert_true (ai_move (ai, 0, 1));
19875        assert_true (ai_move (ai, 1, 5));
19876        assert_true (ai_move (ai, 3, 7));
19877        assert_true (ai_move (ai, 1, 7));
19878        assert_true (ai_move (ai, 6, 6));
19879        assert_true (ai_move (ai, 1, 0));
19880        assert_true (ai_move (ai, 0, 6));
19881        assert_true (ai_move (ai, 1, 1));
19882        assert_true (ai_move (ai, 0, 0));
19883        assert_true (ai_move (ai, 6, 7));
19884        assert_true (ai_move (ai, 4, 0));
19885        assert_true (ai_move (ai, 7, 6));
19886        assert_true (ai_move (ai, 6, 0));
19887        assert_true (ai_move (ai, 6, 1));
19888        assert_true (ai_move (ai, 7, 3));
19889        assert_true (ai_move (ai, 1, 6));
19890        assert_true (ai_move (ai, 0, 7));
19891        assert_true (ai_move (ai, 7, 1));
19892        assert_true (ai_move (ai, 7, 7));
19893        assert_true (game.pass ());
19894        assert_true (ai_move (ai, 7, 0));
19895    }
19896
19897    private static inline void test_complete_reversi_game_249 ()
19898    {
19899                                  /* 0 1 2 3 4 5 6 7 */
19900        string [] board = {/* 0 */ " . . . . . . . .",
19901                           /* 1 */ " . . . . . . . .",
19902                           /* 2 */ " . . . L . . . .",
19903                           /* 3 */ " . . . L L . . .",
19904                           /* 4 */ " . . . L D L . .",
19905                           /* 5 */ " . . . . D D . .",
19906                           /* 6 */ " . . . . . . . .",
19907                           /* 7 */ " . . . . . . . ."};
19908
19909        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19910        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19911
19912        assert_true (ai_move (ai, 5, 3));
19913        assert_true (ai_move (ai, 6, 5));
19914        assert_true (ai_move (ai, 6, 3));
19915        assert_true (ai_move (ai, 3, 5));
19916        assert_true (ai_move (ai, 5, 6));
19917        assert_true (ai_move (ai, 4, 7));
19918        assert_true (ai_move (ai, 5, 7));
19919        assert_true (ai_move (ai, 6, 4));
19920        assert_true (ai_move (ai, 3, 6));
19921        assert_true (ai_move (ai, 4, 6));
19922        assert_true (ai_move (ai, 3, 7));
19923        assert_true (ai_move (ai, 5, 2));
19924        assert_true (ai_move (ai, 5, 1));
19925        assert_true (ai_move (ai, 4, 2));
19926        assert_true (ai_move (ai, 4, 1));
19927        assert_true (ai_move (ai, 6, 2));
19928        assert_true (ai_move (ai, 7, 2));
19929        assert_true (ai_move (ai, 7, 3));
19930        assert_true (ai_move (ai, 2, 1));
19931        assert_true (ai_move (ai, 2, 2));
19932        assert_true (ai_move (ai, 1, 2));
19933        assert_true (ai_move (ai, 3, 1));
19934        assert_true (ai_move (ai, 7, 5));
19935        assert_true (ai_move (ai, 1, 3));
19936        assert_true (ai_move (ai, 7, 4));
19937        assert_true (ai_move (ai, 2, 0));
19938        assert_true (ai_move (ai, 2, 6));
19939        assert_true (ai_move (ai, 0, 2));
19940        assert_true (ai_move (ai, 2, 5));
19941        assert_true (ai_move (ai, 4, 0));
19942        assert_true (ai_move (ai, 2, 4));
19943        assert_true (ai_move (ai, 5, 0));
19944        assert_true (ai_move (ai, 3, 0));
19945        assert_true (ai_move (ai, 1, 5));
19946        assert_true (ai_move (ai, 2, 3));
19947        assert_true (ai_move (ai, 1, 4));
19948        assert_true (ai_move (ai, 0, 5));
19949        assert_true (ai_move (ai, 2, 7));
19950        assert_true (ai_move (ai, 1, 7));
19951        assert_true (ai_move (ai, 6, 1));
19952        assert_true (ai_move (ai, 0, 4));
19953        assert_true (ai_move (ai, 6, 7));
19954        assert_true (ai_move (ai, 7, 7));
19955        assert_true (ai_move (ai, 7, 6));
19956        assert_true (ai_move (ai, 0, 1));
19957        assert_true (ai_move (ai, 7, 1));
19958        assert_true (ai_move (ai, 0, 3));
19959        assert_true (ai_move (ai, 0, 6));
19960        assert_true (ai_move (ai, 0, 7));
19961        assert_true (ai_move (ai, 1, 1));
19962        assert_true (ai_move (ai, 6, 6));
19963        assert_true (ai_move (ai, 1, 6));
19964        assert_true (ai_move (ai, 7, 0));
19965        assert_true (ai_move (ai, 6, 0));
19966        assert_true (ai_move (ai, 1, 0));
19967        assert_true (ai_move (ai, 0, 0));
19968    }
19969
19970    private static inline void test_complete_reversi_game_250 ()
19971    {
19972                                  /* 0 1 2 3 4 5 6 7 */
19973        string [] board = {/* 0 */ " . . . . . . . .",
19974                           /* 1 */ " . . . . . . . .",
19975                           /* 2 */ " . . . . . . . .",
19976                           /* 3 */ " . . . D D . . .",
19977                           /* 4 */ " . . . D L L . .",
19978                           /* 5 */ " . . . D . L . .",
19979                           /* 6 */ " . . . . . . L .",
19980                           /* 7 */ " . . . . . . . ."};
19981
19982        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
19983        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
19984
19985        assert_true (ai_move (ai, 6, 5));
19986        assert_true (ai_move (ai, 5, 3));
19987        assert_true (ai_move (ai, 6, 3));
19988        assert_true (ai_move (ai, 5, 2));
19989        assert_true (ai_move (ai, 4, 1));
19990        assert_true (ai_move (ai, 5, 1));
19991        assert_true (ai_move (ai, 4, 5));
19992        assert_true (ai_move (ai, 5, 6));
19993        assert_true (ai_move (ai, 6, 4));
19994        assert_true (ai_move (ai, 2, 6));
19995        assert_true (ai_move (ai, 5, 7));
19996        assert_true (ai_move (ai, 7, 3));
19997        assert_true (ai_move (ai, 2, 5));
19998        assert_true (ai_move (ai, 3, 6));
19999        assert_true (ai_move (ai, 5, 0));
20000        assert_true (ai_move (ai, 7, 5));
20001        assert_true (ai_move (ai, 4, 6));
20002        assert_true (ai_move (ai, 2, 2));
20003        assert_true (ai_move (ai, 3, 2));
20004        assert_true (ai_move (ai, 1, 5));
20005        assert_true (ai_move (ai, 7, 4));
20006        assert_true (ai_move (ai, 7, 2));
20007        assert_true (ai_move (ai, 0, 5));
20008        assert_true (ai_move (ai, 1, 4));
20009        assert_true (ai_move (ai, 6, 2));
20010        assert_true (ai_move (ai, 3, 7));
20011        assert_true (ai_move (ai, 4, 7));
20012        assert_true (ai_move (ai, 6, 7));
20013        assert_true (ai_move (ai, 2, 3));
20014        assert_true (ai_move (ai, 4, 2));
20015        assert_true (ai_move (ai, 2, 1));
20016        assert_true (ai_move (ai, 0, 4));
20017        assert_true (ai_move (ai, 0, 3));
20018        assert_true (ai_move (ai, 3, 0));
20019        assert_true (ai_move (ai, 4, 0));
20020        assert_true (ai_move (ai, 2, 4));
20021        assert_true (ai_move (ai, 2, 0));
20022        assert_true (ai_move (ai, 3, 1));
20023        assert_true (ai_move (ai, 0, 6));
20024        assert_true (ai_move (ai, 1, 2));
20025        assert_true (ai_move (ai, 0, 2));
20026        assert_true (ai_move (ai, 1, 3));
20027        assert_true (ai_move (ai, 2, 7));
20028        assert_true (ai_move (ai, 1, 7));
20029        assert_true (ai_move (ai, 7, 7));
20030        assert_true (ai_move (ai, 7, 6));
20031        assert_true (ai_move (ai, 0, 7));
20032        assert_true (ai_move (ai, 1, 6));
20033        assert_true (ai_move (ai, 6, 1));
20034        assert_true (ai_move (ai, 7, 0));
20035        assert_true (ai_move (ai, 7, 1));
20036        assert_true (ai_move (ai, 6, 0));
20037        assert_true (game.pass ());
20038        assert_true (ai_move (ai, 1, 0));
20039        assert_true (ai_move (ai, 1, 1));
20040        assert_true (ai_move (ai, 0, 1));
20041        assert_true (ai_move (ai, 0, 0));
20042    }
20043
20044    private static inline void test_complete_reversi_game_251 ()
20045    {
20046                                  /* 0 1 2 3 4 5 6 7 */
20047        string [] board = {/* 0 */ " . . . . . . . .",
20048                           /* 1 */ " . . . . . . . .",
20049                           /* 2 */ " . . . . . . . .",
20050                           /* 3 */ " . . . D D . . .",
20051                           /* 4 */ " . . . D L L . .",
20052                           /* 5 */ " . . . D . L . .",
20053                           /* 6 */ " . . . . . L . .",
20054                           /* 7 */ " . . . . . . . ."};
20055
20056        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20057        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20058
20059        assert_true (ai_move (ai, 6, 5));
20060        assert_true (ai_move (ai, 6, 4));
20061        assert_true (ai_move (ai, 4, 7));
20062        assert_true (ai_move (ai, 7, 5));
20063        assert_true (ai_move (ai, 4, 5));
20064        assert_true (ai_move (ai, 5, 7));
20065        assert_true (ai_move (ai, 6, 3));
20066        assert_true (ai_move (ai, 5, 3));
20067        assert_true (ai_move (ai, 6, 2));
20068        assert_true (ai_move (ai, 4, 2));
20069        assert_true (ai_move (ai, 5, 1));
20070        assert_true (ai_move (ai, 3, 1));
20071        assert_true (ai_move (ai, 4, 1));
20072        assert_true (ai_move (ai, 7, 2));
20073        assert_true (ai_move (ai, 2, 0));
20074        assert_true (ai_move (ai, 5, 2));
20075        assert_true (ai_move (ai, 6, 7));
20076        assert_true (ai_move (ai, 3, 2));
20077        assert_true (ai_move (ai, 2, 3));
20078        assert_true (ai_move (ai, 2, 1));
20079        assert_true (ai_move (ai, 2, 2));
20080        assert_true (ai_move (ai, 1, 2));
20081        assert_true (ai_move (ai, 1, 3));
20082        assert_true (ai_move (ai, 2, 6));
20083        assert_true (ai_move (ai, 2, 5));
20084        assert_true (ai_move (ai, 1, 5));
20085        assert_true (ai_move (ai, 0, 2));
20086        assert_true (ai_move (ai, 5, 0));
20087        assert_true (ai_move (ai, 3, 6));
20088        assert_true (ai_move (ai, 2, 7));
20089        assert_true (ai_move (ai, 1, 4));
20090        assert_true (ai_move (ai, 4, 6));
20091        assert_true (ai_move (ai, 6, 6));
20092        assert_true (ai_move (ai, 0, 3));
20093        assert_true (ai_move (ai, 2, 4));
20094        assert_true (ai_move (ai, 3, 0));
20095        assert_true (ai_move (ai, 0, 4));
20096        assert_true (ai_move (ai, 0, 5));
20097        assert_true (ai_move (ai, 0, 6));
20098        assert_true (ai_move (ai, 7, 7));
20099        assert_true (ai_move (ai, 3, 7));
20100        assert_true (ai_move (ai, 1, 0));
20101        assert_true (ai_move (ai, 4, 0));
20102        assert_true (ai_move (ai, 1, 1));
20103        assert_true (ai_move (ai, 1, 6));
20104        assert_true (ai_move (ai, 0, 7));
20105        assert_true (ai_move (ai, 1, 7));
20106        assert_true (ai_move (ai, 0, 1));
20107        assert_true (ai_move (ai, 7, 6));
20108        assert_true (game.pass ());
20109        assert_true (ai_move (ai, 7, 4));
20110        assert_true (ai_move (ai, 7, 3));
20111        assert_true (ai_move (ai, 0, 0));
20112        assert_true (ai_move (ai, 6, 1));
20113        assert_true (ai_move (ai, 7, 0));
20114        assert_true (ai_move (ai, 6, 0));
20115        assert_true (ai_move (ai, 7, 1));
20116    }
20117
20118    private static inline void test_complete_reversi_game_252 ()
20119    {
20120                                  /* 0 1 2 3 4 5 6 7 */
20121        string [] board = {/* 0 */ " . . . . . . . .",
20122                           /* 1 */ " . . . . . . . .",
20123                           /* 2 */ " . . . . L . . .",
20124                           /* 3 */ " . . . D L . . .",
20125                           /* 4 */ " . . . D L L . .",
20126                           /* 5 */ " . . . D . D . .",
20127                           /* 6 */ " . . . . . . . .",
20128                           /* 7 */ " . . . . . . . ."};
20129
20130        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20131        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20132
20133        assert_true (ai_move (ai, 5, 1));
20134        assert_true (ai_move (ai, 5, 6));
20135        assert_true (ai_move (ai, 5, 2));
20136        assert_true (ai_move (ai, 2, 6));
20137        assert_true (ai_move (ai, 3, 6));
20138        assert_true (ai_move (ai, 2, 2));
20139        assert_true (ai_move (ai, 2, 4));
20140        assert_true (ai_move (ai, 3, 2));
20141        assert_true (ai_move (ai, 1, 2));
20142        assert_true (ai_move (ai, 4, 1));
20143        assert_true (ai_move (ai, 5, 0));
20144        assert_true (ai_move (ai, 6, 2));
20145        assert_true (ai_move (ai, 6, 3));
20146        assert_true (ai_move (ai, 6, 4));
20147        assert_true (ai_move (ai, 7, 2));
20148        assert_true (ai_move (ai, 3, 0));
20149        assert_true (ai_move (ai, 5, 3));
20150        assert_true (ai_move (ai, 2, 1));
20151        assert_true (ai_move (ai, 2, 3));
20152        assert_true (ai_move (ai, 0, 2));
20153        assert_true (ai_move (ai, 2, 0));
20154        assert_true (ai_move (ai, 4, 0));
20155        assert_true (ai_move (ai, 3, 1));
20156        assert_true (ai_move (ai, 1, 3));
20157        assert_true (ai_move (ai, 1, 4));
20158        assert_true (ai_move (ai, 7, 3));
20159        assert_true (ai_move (ai, 5, 7));
20160        assert_true (ai_move (ai, 7, 1));
20161        assert_true (ai_move (ai, 7, 5));
20162        assert_true (ai_move (ai, 6, 5));
20163        assert_true (ai_move (ai, 0, 3));
20164        assert_true (ai_move (ai, 4, 5));
20165        assert_true (ai_move (ai, 0, 1));
20166        assert_true (ai_move (ai, 2, 7));
20167        assert_true (ai_move (ai, 3, 7));
20168        assert_true (ai_move (ai, 2, 5));
20169        assert_true (ai_move (ai, 1, 5));
20170        assert_true (ai_move (ai, 4, 7));
20171        assert_true (ai_move (ai, 1, 7));
20172        assert_true (ai_move (ai, 4, 6));
20173        assert_true (ai_move (ai, 1, 1));
20174        assert_true (ai_move (ai, 0, 4));
20175        assert_true (ai_move (ai, 0, 5));
20176        assert_true (ai_move (ai, 6, 1));
20177        assert_true (ai_move (ai, 7, 4));
20178        assert_true (ai_move (ai, 7, 6));
20179        assert_true (ai_move (ai, 6, 6));
20180        assert_true (ai_move (ai, 6, 0));
20181        assert_true (ai_move (ai, 7, 0));
20182        assert_true (ai_move (ai, 7, 7));
20183        assert_true (ai_move (ai, 6, 7));
20184        assert_true (ai_move (ai, 0, 7));
20185        assert_true (game.pass ());
20186        assert_true (ai_move (ai, 0, 6));
20187        assert_true (ai_move (ai, 1, 6));
20188        assert_true (ai_move (ai, 0, 0));
20189        assert_true (ai_move (ai, 1, 0));
20190    }
20191
20192    private static inline void test_complete_reversi_game_253 ()
20193    {
20194                                  /* 0 1 2 3 4 5 6 7 */
20195        string [] board = {/* 0 */ " . . . . . . . .",
20196                           /* 1 */ " . . . . . . . .",
20197                           /* 2 */ " . . . L . . . .",
20198                           /* 3 */ " . . . D L . . .",
20199                           /* 4 */ " . . . D L L . .",
20200                           /* 5 */ " . . . D . D . .",
20201                           /* 6 */ " . . . . . . . .",
20202                           /* 7 */ " . . . . . . . ."};
20203
20204        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20205        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20206
20207        assert_true (ai_move (ai, 3, 1));
20208        assert_true (ai_move (ai, 5, 6));
20209        assert_true (ai_move (ai, 5, 2));
20210        assert_true (ai_move (ai, 2, 1));
20211        assert_true (ai_move (ai, 5, 3));
20212        assert_true (ai_move (ai, 5, 1));
20213        assert_true (ai_move (ai, 6, 4));
20214        assert_true (ai_move (ai, 7, 5));
20215        assert_true (ai_move (ai, 7, 4));
20216        assert_true (ai_move (ai, 7, 3));
20217        assert_true (ai_move (ai, 1, 0));
20218        assert_true (ai_move (ai, 2, 6));
20219        assert_true (ai_move (ai, 4, 5));
20220        assert_true (ai_move (ai, 2, 4));
20221        assert_true (ai_move (ai, 6, 5));
20222        assert_true (ai_move (ai, 4, 6));
20223        assert_true (ai_move (ai, 3, 6));
20224        assert_true (ai_move (ai, 2, 2));
20225        assert_true (ai_move (ai, 1, 2));
20226        assert_true (ai_move (ai, 4, 2));
20227        assert_true (ai_move (ai, 1, 3));
20228        assert_true (ai_move (ai, 1, 5));
20229        assert_true (ai_move (ai, 1, 4));
20230        assert_true (ai_move (ai, 2, 3));
20231        assert_true (ai_move (ai, 6, 3));
20232        assert_true (ai_move (ai, 6, 2));
20233        assert_true (ai_move (ai, 4, 1));
20234        assert_true (ai_move (ai, 7, 2));
20235        assert_true (ai_move (ai, 5, 7));
20236        assert_true (ai_move (ai, 0, 2));
20237        assert_true (ai_move (ai, 2, 5));
20238        assert_true (ai_move (ai, 0, 5));
20239        assert_true (ai_move (ai, 5, 0));
20240        assert_true (ai_move (ai, 7, 6));
20241        assert_true (ai_move (ai, 2, 7));
20242        assert_true (ai_move (ai, 0, 3));
20243        assert_true (ai_move (ai, 0, 4));
20244        assert_true (ai_move (ai, 2, 0));
20245        assert_true (ai_move (ai, 3, 0));
20246        assert_true (ai_move (ai, 4, 0));
20247        assert_true (ai_move (ai, 1, 1));
20248        assert_true (ai_move (ai, 4, 7));
20249        assert_true (ai_move (ai, 3, 7));
20250        assert_true (ai_move (ai, 6, 1));
20251        assert_true (ai_move (ai, 6, 7));
20252        assert_true (ai_move (ai, 1, 6));
20253        assert_true (ai_move (ai, 0, 1));
20254        assert_true (ai_move (ai, 0, 0));
20255        assert_true (ai_move (ai, 7, 0));
20256        assert_true (ai_move (ai, 1, 7));
20257        assert_true (ai_move (ai, 0, 7));
20258        assert_true (ai_move (ai, 0, 6));
20259        assert_true (ai_move (ai, 6, 0));
20260        assert_true (ai_move (ai, 6, 6));
20261        assert_true (ai_move (ai, 7, 1));
20262        assert_true (game.pass ());
20263        assert_true (ai_move (ai, 7, 7));
20264    }
20265
20266    private static inline void test_complete_reversi_game_254 ()
20267    {
20268                                  /* 0 1 2 3 4 5 6 7 */
20269        string [] board = {/* 0 */ " . . . . . . . .",
20270                           /* 1 */ " . . . . . . . .",
20271                           /* 2 */ " . . . . . . . .",
20272                           /* 3 */ " . . . D D . . .",
20273                           /* 4 */ " . . . D L L . .",
20274                           /* 5 */ " . . . L . D . .",
20275                           /* 6 */ " . . L . . . . .",
20276                           /* 7 */ " . . . . . . . ."};
20277
20278        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20279        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20280
20281        assert_true (ai_move (ai, 6, 5));
20282        assert_true (ai_move (ai, 6, 4));
20283        assert_true (ai_move (ai, 5, 3));
20284        assert_true (ai_move (ai, 4, 6));
20285        assert_true (ai_move (ai, 5, 6));
20286        assert_true (ai_move (ai, 6, 2));
20287        assert_true (ai_move (ai, 5, 2));
20288        assert_true (ai_move (ai, 4, 2));
20289        assert_true (ai_move (ai, 3, 7));
20290        assert_true (ai_move (ai, 2, 5));
20291        assert_true (ai_move (ai, 3, 2));
20292        assert_true (ai_move (ai, 2, 4));
20293        assert_true (ai_move (ai, 5, 1));
20294        assert_true (ai_move (ai, 6, 3));
20295        assert_true (ai_move (ai, 7, 2));
20296        assert_true (ai_move (ai, 2, 2));
20297        assert_true (ai_move (ai, 2, 3));
20298        assert_true (ai_move (ai, 1, 2));
20299        assert_true (ai_move (ai, 2, 1));
20300        assert_true (ai_move (ai, 4, 1));
20301        assert_true (ai_move (ai, 7, 5));
20302        assert_true (ai_move (ai, 3, 0));
20303        assert_true (ai_move (ai, 4, 5));
20304        assert_true (ai_move (ai, 5, 7));
20305        assert_true (ai_move (ai, 4, 0));
20306        assert_true (ai_move (ai, 5, 0));
20307        assert_true (ai_move (ai, 0, 2));
20308        assert_true (ai_move (ai, 3, 1));
20309        assert_true (ai_move (ai, 2, 0));
20310        assert_true (ai_move (ai, 1, 0));
20311        assert_true (ai_move (ai, 3, 6));
20312        assert_true (ai_move (ai, 1, 3));
20313        assert_true (ai_move (ai, 0, 3));
20314        assert_true (ai_move (ai, 1, 4));
20315        assert_true (ai_move (ai, 0, 4));
20316        assert_true (ai_move (ai, 4, 7));
20317        assert_true (ai_move (ai, 6, 7));
20318        assert_true (ai_move (ai, 1, 5));
20319        assert_true (ai_move (ai, 2, 7));
20320        assert_true (ai_move (ai, 0, 5));
20321        assert_true (ai_move (ai, 0, 6));
20322        assert_true (ai_move (ai, 7, 4));
20323        assert_true (ai_move (ai, 7, 3));
20324        assert_true (ai_move (ai, 6, 6));
20325        assert_true (ai_move (ai, 1, 7));
20326        assert_true (ai_move (ai, 1, 1));
20327        assert_true (ai_move (ai, 0, 1));
20328        assert_true (ai_move (ai, 6, 1));
20329        assert_true (ai_move (ai, 7, 0));
20330        assert_true (ai_move (ai, 7, 1));
20331        assert_true (ai_move (ai, 6, 0));
20332        assert_true (ai_move (ai, 7, 7));
20333        assert_true (ai_move (ai, 0, 0));
20334        assert_true (ai_move (ai, 0, 7));
20335        assert_true (ai_move (ai, 7, 6));
20336        assert_true (ai_move (ai, 1, 6));
20337    }
20338
20339    private static inline void test_complete_reversi_game_255 ()
20340    {
20341                                  /* 0 1 2 3 4 5 6 7 */
20342        string [] board = {/* 0 */ " . . . . . . . .",
20343                           /* 1 */ " . . . . . . . .",
20344                           /* 2 */ " . . . . . . . .",
20345                           /* 3 */ " . . . D D . . .",
20346                           /* 4 */ " . . L L L L . .",
20347                           /* 5 */ " . . . D . D . .",
20348                           /* 6 */ " . . . . . . . .",
20349                           /* 7 */ " . . . . . . . ."};
20350
20351        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20352        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20353
20354        assert_true (ai_move (ai, 6, 5));
20355        assert_true (ai_move (ai, 2, 6));
20356        assert_true (ai_move (ai, 1, 5));
20357        assert_true (ai_move (ai, 1, 3));
20358        assert_true (ai_move (ai, 3, 7));
20359        assert_true (ai_move (ai, 6, 4));
20360        assert_true (ai_move (ai, 7, 3));
20361        assert_true (ai_move (ai, 5, 2));
20362        assert_true (ai_move (ai, 3, 2));
20363        assert_true (ai_move (ai, 2, 2));
20364        assert_true (ai_move (ai, 1, 2));
20365        assert_true (ai_move (ai, 3, 1));
20366        assert_true (ai_move (ai, 2, 1));
20367        assert_true (ai_move (ai, 2, 0));
20368        assert_true (ai_move (ai, 2, 5));
20369        assert_true (ai_move (ai, 2, 7));
20370        assert_true (ai_move (ai, 3, 6));
20371        assert_true (ai_move (ai, 0, 5));
20372        assert_true (ai_move (ai, 0, 4));
20373        assert_true (ai_move (ai, 0, 3));
20374        assert_true (ai_move (ai, 3, 0));
20375        assert_true (ai_move (ai, 4, 7));
20376        assert_true (ai_move (ai, 4, 6));
20377        assert_true (ai_move (ai, 4, 0));
20378        assert_true (ai_move (ai, 2, 3));
20379        assert_true (ai_move (ai, 4, 2));
20380        assert_true (ai_move (ai, 4, 1));
20381        assert_true (ai_move (ai, 5, 1));
20382        assert_true (ai_move (ai, 6, 2));
20383        assert_true (ai_move (ai, 5, 3));
20384        assert_true (ai_move (ai, 6, 3));
20385        assert_true (ai_move (ai, 5, 6));
20386        assert_true (ai_move (ai, 4, 5));
20387        assert_true (ai_move (ai, 1, 4));
20388        assert_true (ai_move (ai, 0, 2));
20389        assert_true (ai_move (ai, 0, 1));
20390        assert_true (ai_move (ai, 5, 7));
20391        assert_true (ai_move (ai, 7, 2));
20392        assert_true (ai_move (ai, 1, 7));
20393        assert_true (ai_move (ai, 7, 4));
20394        assert_true (ai_move (ai, 5, 0));
20395        assert_true (ai_move (ai, 7, 5));
20396        assert_true (ai_move (ai, 1, 0));
20397        assert_true (ai_move (ai, 0, 6));
20398        assert_true (ai_move (ai, 1, 6));
20399        assert_true (ai_move (ai, 6, 1));
20400        assert_true (ai_move (ai, 7, 0));
20401        assert_true (ai_move (ai, 6, 0));
20402        assert_true (ai_move (ai, 7, 1));
20403        assert_true (ai_move (ai, 0, 0));
20404        assert_true (ai_move (ai, 7, 6));
20405        assert_true (ai_move (ai, 6, 7));
20406        assert_true (ai_move (ai, 7, 7));
20407        assert_true (ai_move (ai, 6, 6));
20408        assert_true (ai_move (ai, 1, 1));
20409    }
20410
20411    private static inline void test_complete_reversi_game_256 ()
20412    {
20413                                  /* 0 1 2 3 4 5 6 7 */
20414        string [] board = {/* 0 */ " . . . . . . . .",
20415                           /* 1 */ " . . . . . . . .",
20416                           /* 2 */ " . . L . . . . .",
20417                           /* 3 */ " . . . L D . . .",
20418                           /* 4 */ " . . . D L L . .",
20419                           /* 5 */ " . . . D . D . .",
20420                           /* 6 */ " . . . . . . . .",
20421                           /* 7 */ " . . . . . . . ."};
20422
20423        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20424        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20425
20426        assert_true (ai_move (ai, 5, 3));
20427        assert_true (ai_move (ai, 6, 3));
20428        assert_true (ai_move (ai, 6, 2));
20429        assert_true (ai_move (ai, 6, 5));
20430        assert_true (ai_move (ai, 6, 4));
20431        assert_true (ai_move (ai, 7, 3));
20432        assert_true (ai_move (ai, 7, 5));
20433        assert_true (ai_move (ai, 5, 1));
20434        assert_true (ai_move (ai, 7, 2));
20435        assert_true (ai_move (ai, 7, 1));
20436        assert_true (ai_move (ai, 4, 2));
20437        assert_true (ai_move (ai, 4, 5));
20438        assert_true (ai_move (ai, 5, 6));
20439        assert_true (ai_move (ai, 5, 7));
20440        assert_true (ai_move (ai, 4, 6));
20441        assert_true (ai_move (ai, 5, 2));
20442        assert_true (ai_move (ai, 5, 0));
20443        assert_true (ai_move (ai, 4, 1));
20444        assert_true (ai_move (ai, 4, 7));
20445        assert_true (ai_move (ai, 3, 2));
20446        assert_true (ai_move (ai, 4, 0));
20447        assert_true (ai_move (ai, 3, 0));
20448        assert_true (ai_move (ai, 2, 0));
20449        assert_true (ai_move (ai, 2, 6));
20450        assert_true (ai_move (ai, 3, 6));
20451        assert_true (ai_move (ai, 2, 7));
20452        assert_true (ai_move (ai, 3, 7));
20453        assert_true (ai_move (ai, 3, 1));
20454        assert_true (ai_move (ai, 2, 1));
20455        assert_true (ai_move (ai, 2, 4));
20456        assert_true (ai_move (ai, 1, 2));
20457        assert_true (ai_move (ai, 0, 2));
20458        assert_true (ai_move (ai, 2, 5));
20459        assert_true (ai_move (ai, 6, 0));
20460        assert_true (ai_move (ai, 7, 0));
20461        assert_true (ai_move (ai, 7, 4));
20462        assert_true (ai_move (ai, 6, 1));
20463        assert_true (ai_move (ai, 6, 6));
20464        assert_true (ai_move (ai, 2, 3));
20465        assert_true (ai_move (ai, 1, 3));
20466        assert_true (ai_move (ai, 1, 4));
20467        assert_true (ai_move (ai, 1, 5));
20468        assert_true (ai_move (ai, 7, 7));
20469        assert_true (ai_move (ai, 7, 6));
20470        assert_true (ai_move (ai, 6, 7));
20471        assert_true (ai_move (ai, 1, 0));
20472        assert_true (ai_move (ai, 1, 7));
20473        assert_true (ai_move (ai, 1, 6));
20474        assert_true (ai_move (ai, 0, 7));
20475        assert_true (ai_move (ai, 0, 6));
20476        assert_true (ai_move (ai, 0, 0));
20477        assert_true (game.pass ());
20478        assert_true (ai_move (ai, 0, 1));
20479        assert_true (ai_move (ai, 0, 3));
20480        assert_true (ai_move (ai, 0, 5));
20481        assert_true (ai_move (ai, 0, 4));
20482        assert_true (ai_move (ai, 1, 1));
20483    }
20484
20485    private static inline void test_complete_reversi_game_257 ()
20486    {
20487                                  /* 0 1 2 3 4 5 6 7 */
20488        string [] board = {/* 0 */ " . . . . . . . .",
20489                           /* 1 */ " . . . . . . . .",
20490                           /* 2 */ " . . . . . . . .",
20491                           /* 3 */ " . . . D D . . .",
20492                           /* 4 */ " . . . D L L . .",
20493                           /* 5 */ " . . D . . L . .",
20494                           /* 6 */ " . . . . . . L .",
20495                           /* 7 */ " . . . . . . . ."};
20496
20497        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20498        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20499
20500        assert_true (ai_move (ai, 6, 5));
20501        assert_true (ai_move (ai, 5, 3));
20502        assert_true (ai_move (ai, 6, 3));
20503        assert_true (ai_move (ai, 5, 2));
20504        assert_true (ai_move (ai, 4, 1));
20505        assert_true (ai_move (ai, 5, 1));
20506        assert_true (ai_move (ai, 6, 4));
20507        assert_true (ai_move (ai, 7, 4));
20508        assert_true (ai_move (ai, 4, 5));
20509        assert_true (ai_move (ai, 3, 6));
20510        assert_true (ai_move (ai, 3, 5));
20511        assert_true (ai_move (ai, 1, 4));
20512        assert_true (ai_move (ai, 1, 5));
20513        assert_true (ai_move (ai, 5, 6));
20514        assert_true (ai_move (ai, 4, 2));
20515        assert_true (ai_move (ai, 7, 3));
20516        assert_true (ai_move (ai, 6, 2));
20517        assert_true (ai_move (ai, 3, 0));
20518        assert_true (ai_move (ai, 7, 2));
20519        assert_true (ai_move (ai, 3, 1));
20520        assert_true (ai_move (ai, 3, 2));
20521        assert_true (ai_move (ai, 2, 1));
20522        assert_true (ai_move (ai, 7, 5));
20523        assert_true (ai_move (ai, 7, 6));
20524        assert_true (ai_move (ai, 7, 7));
20525        assert_true (ai_move (ai, 0, 5));
20526        assert_true (ai_move (ai, 5, 7));
20527        assert_true (ai_move (ai, 2, 4));
20528        assert_true (ai_move (ai, 4, 6));
20529        assert_true (ai_move (ai, 6, 7));
20530        assert_true (ai_move (ai, 2, 0));
20531        assert_true (ai_move (ai, 1, 0));
20532        assert_true (ai_move (ai, 1, 3));
20533        assert_true (ai_move (ai, 1, 2));
20534        assert_true (ai_move (ai, 2, 6));
20535        assert_true (ai_move (ai, 2, 3));
20536        assert_true (ai_move (ai, 4, 7));
20537        assert_true (ai_move (ai, 2, 7));
20538        assert_true (ai_move (ai, 3, 7));
20539        assert_true (ai_move (ai, 6, 1));
20540        assert_true (ai_move (ai, 0, 4));
20541        assert_true (ai_move (ai, 0, 3));
20542        assert_true (ai_move (ai, 2, 2));
20543        assert_true (ai_move (ai, 4, 0));
20544        assert_true (ai_move (ai, 7, 1));
20545        assert_true (ai_move (ai, 0, 6));
20546        assert_true (ai_move (ai, 7, 0));
20547        assert_true (ai_move (ai, 1, 6));
20548        assert_true (ai_move (ai, 0, 2));
20549        assert_true (ai_move (ai, 0, 1));
20550        assert_true (ai_move (ai, 0, 7));
20551        assert_true (ai_move (ai, 1, 1));
20552        assert_true (ai_move (ai, 1, 7));
20553        assert_true (ai_move (ai, 6, 0));
20554        assert_true (ai_move (ai, 0, 0));
20555        assert_true (game.pass ());
20556        assert_true (ai_move (ai, 5, 0));
20557    }
20558
20559    private static inline void test_complete_reversi_game_258 ()
20560    {
20561                                  /* 0 1 2 3 4 5 6 7 */
20562        string [] board = {/* 0 */ " . . . . . . . .",
20563                           /* 1 */ " . . . . . . . .",
20564                           /* 2 */ " . . . . . . . .",
20565                           /* 3 */ " . . . D D . . .",
20566                           /* 4 */ " . . . D L L . .",
20567                           /* 5 */ " . . D . . L . .",
20568                           /* 6 */ " . . . . . L . .",
20569                           /* 7 */ " . . . . . . . ."};
20570
20571        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20572        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20573
20574        assert_true (ai_move (ai, 6, 5));
20575        assert_true (ai_move (ai, 5, 3));
20576        assert_true (ai_move (ai, 4, 7));
20577        assert_true (ai_move (ai, 5, 7));
20578        assert_true (ai_move (ai, 6, 3));
20579        assert_true (ai_move (ai, 3, 7));
20580        assert_true (ai_move (ai, 3, 5));
20581        assert_true (ai_move (ai, 5, 2));
20582        assert_true (ai_move (ai, 4, 5));
20583        assert_true (ai_move (ai, 2, 6));
20584        assert_true (ai_move (ai, 4, 1));
20585        assert_true (ai_move (ai, 1, 5));
20586        assert_true (ai_move (ai, 3, 6));
20587        assert_true (ai_move (ai, 5, 1));
20588        assert_true (ai_move (ai, 1, 4));
20589        assert_true (ai_move (ai, 4, 6));
20590        assert_true (ai_move (ai, 0, 5));
20591        assert_true (ai_move (ai, 6, 4));
20592        assert_true (ai_move (ai, 2, 7));
20593        assert_true (ai_move (ai, 1, 7));
20594        assert_true (ai_move (ai, 5, 0));
20595        assert_true (ai_move (ai, 7, 2));
20596        assert_true (ai_move (ai, 7, 5));
20597        assert_true (ai_move (ai, 2, 4));
20598        assert_true (ai_move (ai, 6, 2));
20599        assert_true (ai_move (ai, 0, 3));
20600        assert_true (ai_move (ai, 2, 3));
20601        assert_true (ai_move (ai, 1, 2));
20602        assert_true (ai_move (ai, 3, 2));
20603        assert_true (ai_move (ai, 2, 1));
20604        assert_true (ai_move (ai, 3, 1));
20605        assert_true (ai_move (ai, 4, 2));
20606        assert_true (ai_move (ai, 7, 3));
20607        assert_true (ai_move (ai, 1, 3));
20608        assert_true (ai_move (ai, 1, 0));
20609        assert_true (ai_move (ai, 2, 0));
20610        assert_true (ai_move (ai, 3, 0));
20611        assert_true (ai_move (ai, 4, 0));
20612        assert_true (ai_move (ai, 1, 1));
20613        assert_true (ai_move (ai, 0, 2));
20614        assert_true (ai_move (ai, 7, 1));
20615        assert_true (ai_move (ai, 0, 0));
20616        assert_true (ai_move (ai, 6, 7));
20617        assert_true (ai_move (ai, 7, 7));
20618        assert_true (ai_move (ai, 6, 1));
20619        assert_true (ai_move (ai, 7, 4));
20620        assert_true (ai_move (ai, 7, 6));
20621        assert_true (ai_move (ai, 6, 6));
20622        assert_true (ai_move (ai, 1, 6));
20623        assert_true (ai_move (ai, 2, 2));
20624        assert_true (ai_move (ai, 0, 1));
20625        assert_true (ai_move (ai, 0, 4));
20626        assert_true (ai_move (ai, 0, 6));
20627        assert_true (ai_move (ai, 0, 7));
20628        assert_true (game.pass ());
20629        assert_true (ai_move (ai, 7, 0));
20630        assert_true (ai_move (ai, 6, 0));
20631    }
20632
20633    private static inline void test_complete_reversi_game_259 ()
20634    {
20635                                  /* 0 1 2 3 4 5 6 7 */
20636        string [] board = {/* 0 */ " . . . . . . . .",
20637                           /* 1 */ " . . . . . . . .",
20638                           /* 2 */ " . . . . L . . .",
20639                           /* 3 */ " . . . D L . . .",
20640                           /* 4 */ " . . . D L L . .",
20641                           /* 5 */ " . . D . . D . .",
20642                           /* 6 */ " . . . . . . . .",
20643                           /* 7 */ " . . . . . . . ."};
20644
20645        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20646        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20647
20648        assert_true (ai_move (ai, 5, 1));
20649        assert_true (ai_move (ai, 5, 6));
20650        assert_true (ai_move (ai, 5, 2));
20651        assert_true (ai_move (ai, 2, 2));
20652        assert_true (ai_move (ai, 2, 4));
20653        assert_true (ai_move (ai, 3, 2));
20654        assert_true (ai_move (ai, 1, 2));
20655        assert_true (ai_move (ai, 4, 1));
20656        assert_true (ai_move (ai, 5, 0));
20657        assert_true (ai_move (ai, 6, 2));
20658        assert_true (ai_move (ai, 6, 3));
20659        assert_true (ai_move (ai, 7, 2));
20660        assert_true (ai_move (ai, 7, 4));
20661        assert_true (ai_move (ai, 2, 3));
20662        assert_true (ai_move (ai, 1, 4));
20663        assert_true (ai_move (ai, 1, 3));
20664        assert_true (ai_move (ai, 7, 3));
20665        assert_true (ai_move (ai, 7, 5));
20666        assert_true (ai_move (ai, 0, 2));
20667        assert_true (ai_move (ai, 5, 3));
20668        assert_true (ai_move (ai, 4, 5));
20669        assert_true (ai_move (ai, 3, 1));
20670        assert_true (ai_move (ai, 6, 5));
20671        assert_true (ai_move (ai, 7, 1));
20672        assert_true (ai_move (ai, 2, 1));
20673        assert_true (ai_move (ai, 2, 6));
20674        assert_true (ai_move (ai, 3, 5));
20675        assert_true (ai_move (ai, 1, 5));
20676        assert_true (ai_move (ai, 2, 7));
20677        assert_true (ai_move (ai, 2, 0));
20678        assert_true (ai_move (ai, 0, 5));
20679        assert_true (ai_move (ai, 3, 6));
20680        assert_true (ai_move (ai, 3, 0));
20681        assert_true (ai_move (ai, 7, 6));
20682        assert_true (ai_move (ai, 4, 6));
20683        assert_true (ai_move (ai, 3, 7));
20684        assert_true (ai_move (ai, 6, 4));
20685        assert_true (ai_move (ai, 5, 7));
20686        assert_true (ai_move (ai, 4, 7));
20687        assert_true (ai_move (ai, 1, 7));
20688        assert_true (ai_move (ai, 1, 0));
20689        assert_true (ai_move (ai, 4, 0));
20690        assert_true (ai_move (ai, 6, 0));
20691        assert_true (ai_move (ai, 0, 0));
20692        assert_true (ai_move (ai, 1, 6));
20693        assert_true (ai_move (ai, 7, 0));
20694        assert_true (ai_move (ai, 6, 1));
20695        assert_true (ai_move (ai, 0, 7));
20696        assert_true (ai_move (ai, 0, 6));
20697        assert_true (ai_move (ai, 0, 1));
20698        assert_true (ai_move (ai, 1, 1));
20699        assert_true (ai_move (ai, 0, 4));
20700        assert_true (ai_move (ai, 0, 3));
20701        assert_true (ai_move (ai, 6, 6));
20702        assert_true (ai_move (ai, 6, 7));
20703        assert_true (ai_move (ai, 7, 7));
20704    }
20705
20706    private static inline void test_complete_reversi_game_260 ()
20707    {
20708                                  /* 0 1 2 3 4 5 6 7 */
20709        string [] board = {/* 0 */ " . . . . . . . .",
20710                           /* 1 */ " . . . . . . . .",
20711                           /* 2 */ " . . . L . . . .",
20712                           /* 3 */ " . . . D L . . .",
20713                           /* 4 */ " . . . D L L . .",
20714                           /* 5 */ " . . D . . D . .",
20715                           /* 6 */ " . . . . . . . .",
20716                           /* 7 */ " . . . . . . . ."};
20717
20718        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20719        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20720
20721        assert_true (ai_move (ai, 3, 1));
20722        assert_true (ai_move (ai, 5, 6));
20723        assert_true (ai_move (ai, 5, 2));
20724        assert_true (ai_move (ai, 2, 1));
20725        assert_true (ai_move (ai, 5, 3));
20726        assert_true (ai_move (ai, 6, 2));
20727        assert_true (ai_move (ai, 6, 3));
20728        assert_true (ai_move (ai, 5, 1));
20729        assert_true (ai_move (ai, 6, 5));
20730        assert_true (ai_move (ai, 7, 5));
20731        assert_true (ai_move (ai, 4, 1));
20732        assert_true (ai_move (ai, 5, 0));
20733        assert_true (ai_move (ai, 7, 2));
20734        assert_true (ai_move (ai, 6, 4));
20735        assert_true (ai_move (ai, 4, 5));
20736        assert_true (ai_move (ai, 3, 0));
20737        assert_true (ai_move (ai, 5, 7));
20738        assert_true (ai_move (ai, 4, 6));
20739        assert_true (ai_move (ai, 3, 5));
20740        assert_true (ai_move (ai, 1, 5));
20741        assert_true (ai_move (ai, 3, 6));
20742        assert_true (ai_move (ai, 2, 6));
20743        assert_true (ai_move (ai, 2, 4));
20744        assert_true (ai_move (ai, 7, 3));
20745        assert_true (ai_move (ai, 2, 7));
20746        assert_true (ai_move (ai, 2, 2));
20747        assert_true (ai_move (ai, 4, 2));
20748        assert_true (ai_move (ai, 2, 3));
20749        assert_true (ai_move (ai, 4, 0));
20750        assert_true (ai_move (ai, 1, 4));
20751        assert_true (ai_move (ai, 0, 3));
20752        assert_true (ai_move (ai, 0, 5));
20753        assert_true (ai_move (ai, 1, 3));
20754        assert_true (ai_move (ai, 2, 0));
20755        assert_true (ai_move (ai, 1, 2));
20756        assert_true (ai_move (ai, 0, 4));
20757        assert_true (ai_move (ai, 0, 6));
20758        assert_true (ai_move (ai, 0, 2));
20759        assert_true (ai_move (ai, 0, 1));
20760        assert_true (ai_move (ai, 4, 7));
20761        assert_true (ai_move (ai, 3, 7));
20762        assert_true (ai_move (ai, 1, 1));
20763        assert_true (ai_move (ai, 6, 7));
20764        assert_true (ai_move (ai, 7, 1));
20765        assert_true (ai_move (ai, 7, 4));
20766        assert_true (ai_move (ai, 6, 1));
20767        assert_true (ai_move (ai, 7, 0));
20768        assert_true (ai_move (ai, 6, 0));
20769        assert_true (ai_move (ai, 7, 6));
20770        assert_true (ai_move (ai, 6, 6));
20771        assert_true (ai_move (ai, 1, 6));
20772        assert_true (ai_move (ai, 0, 7));
20773        assert_true (ai_move (ai, 1, 7));
20774        assert_true (ai_move (ai, 7, 7));
20775        assert_true (ai_move (ai, 1, 0));
20776        assert_true (ai_move (ai, 0, 0));
20777    }
20778
20779    private static inline void test_complete_reversi_game_261 ()
20780    {
20781                                  /* 0 1 2 3 4 5 6 7 */
20782        string [] board = {/* 0 */ " . . . . . . . .",
20783                           /* 1 */ " . . . . . . . .",
20784                           /* 2 */ " . . . . . . . .",
20785                           /* 3 */ " . . . D D . . .",
20786                           /* 4 */ " . . L L L L . .",
20787                           /* 5 */ " . . D . . D . .",
20788                           /* 6 */ " . . . . . . . .",
20789                           /* 7 */ " . . . . . . . ."};
20790
20791        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20792        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20793
20794        assert_true (ai_move (ai, 5, 3));
20795        assert_true (ai_move (ai, 2, 6));
20796        assert_true (ai_move (ai, 1, 5));
20797        assert_true (ai_move (ai, 2, 3));
20798        assert_true (ai_move (ai, 1, 3));
20799        assert_true (ai_move (ai, 1, 2));
20800        assert_true (ai_move (ai, 3, 7));
20801        assert_true (ai_move (ai, 2, 7));
20802        assert_true (ai_move (ai, 1, 7));
20803        assert_true (ai_move (ai, 6, 4));
20804        assert_true (ai_move (ai, 6, 5));
20805        assert_true (ai_move (ai, 4, 6));
20806        assert_true (ai_move (ai, 5, 6));
20807        assert_true (ai_move (ai, 0, 5));
20808        assert_true (ai_move (ai, 7, 3));
20809        assert_true (ai_move (ai, 3, 2));
20810        assert_true (ai_move (ai, 2, 1));
20811        assert_true (ai_move (ai, 3, 0));
20812        assert_true (ai_move (ai, 4, 5));
20813        assert_true (ai_move (ai, 3, 1));
20814        assert_true (ai_move (ai, 4, 7));
20815        assert_true (ai_move (ai, 1, 4));
20816        assert_true (ai_move (ai, 3, 5));
20817        assert_true (ai_move (ai, 3, 6));
20818        assert_true (ai_move (ai, 2, 2));
20819        assert_true (ai_move (ai, 7, 5));
20820        assert_true (ai_move (ai, 4, 2));
20821        assert_true (ai_move (ai, 5, 2));
20822        assert_true (ai_move (ai, 6, 3));
20823        assert_true (ai_move (ai, 7, 4));
20824        assert_true (ai_move (ai, 7, 2));
20825        assert_true (ai_move (ai, 7, 1));
20826        assert_true (ai_move (ai, 5, 1));
20827        assert_true (ai_move (ai, 6, 2));
20828        assert_true (ai_move (ai, 4, 1));
20829        assert_true (ai_move (ai, 5, 0));
20830        assert_true (ai_move (ai, 4, 0));
20831        assert_true (ai_move (ai, 5, 7));
20832        assert_true (ai_move (ai, 6, 7));
20833        assert_true (ai_move (ai, 1, 6));
20834        assert_true (ai_move (ai, 0, 3));
20835        assert_true (ai_move (ai, 0, 2));
20836        assert_true (ai_move (ai, 0, 4));
20837        assert_true (ai_move (ai, 2, 0));
20838        assert_true (ai_move (ai, 6, 6));
20839        assert_true (ai_move (ai, 0, 6));
20840        assert_true (ai_move (ai, 1, 1));
20841        assert_true (ai_move (ai, 7, 6));
20842        assert_true (ai_move (ai, 7, 7));
20843        assert_true (ai_move (ai, 0, 1));
20844        assert_true (ai_move (ai, 7, 0));
20845        assert_true (game.pass ());
20846        assert_true (ai_move (ai, 6, 0));
20847        assert_true (ai_move (ai, 6, 1));
20848        assert_true (ai_move (ai, 1, 0));
20849        assert_true (game.pass ());
20850        assert_true (ai_move (ai, 0, 0));
20851        assert_true (game.pass ());
20852        assert_true (ai_move (ai, 0, 7));
20853    }
20854
20855    private static inline void test_complete_reversi_game_262 ()
20856    {
20857                                  /* 0 1 2 3 4 5 6 7 */
20858        string [] board = {/* 0 */ " . . . . . . . .",
20859                           /* 1 */ " . . . . . . . .",
20860                           /* 2 */ " . . L . . . . .",
20861                           /* 3 */ " . . . L D . . .",
20862                           /* 4 */ " . . . D L L . .",
20863                           /* 5 */ " . . D . . D . .",
20864                           /* 6 */ " . . . . . . . .",
20865                           /* 7 */ " . . . . . . . ."};
20866
20867        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20868        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20869
20870        assert_true (ai_move (ai, 5, 3));
20871        assert_true (ai_move (ai, 6, 4));
20872        assert_true (ai_move (ai, 6, 5));
20873        assert_true (ai_move (ai, 4, 6));
20874        assert_true (ai_move (ai, 5, 6));
20875        assert_true (ai_move (ai, 6, 2));
20876        assert_true (ai_move (ai, 5, 2));
20877        assert_true (ai_move (ai, 3, 5));
20878        assert_true (ai_move (ai, 7, 2));
20879        assert_true (ai_move (ai, 1, 5));
20880        assert_true (ai_move (ai, 7, 3));
20881        assert_true (ai_move (ai, 4, 2));
20882        assert_true (ai_move (ai, 3, 1));
20883        assert_true (ai_move (ai, 4, 1));
20884        assert_true (ai_move (ai, 1, 3));
20885        assert_true (ai_move (ai, 6, 3));
20886        assert_true (ai_move (ai, 5, 1));
20887        assert_true (ai_move (ai, 4, 5));
20888        assert_true (ai_move (ai, 3, 2));
20889        assert_true (ai_move (ai, 7, 4));
20890        assert_true (ai_move (ai, 7, 5));
20891        assert_true (ai_move (ai, 5, 0));
20892        assert_true (ai_move (ai, 2, 6));
20893        assert_true (ai_move (ai, 2, 4));
20894        assert_true (ai_move (ai, 4, 0));
20895        assert_true (ai_move (ai, 5, 7));
20896        assert_true (ai_move (ai, 0, 5));
20897        assert_true (ai_move (ai, 2, 7));
20898        assert_true (ai_move (ai, 1, 4));
20899        assert_true (ai_move (ai, 1, 2));
20900        assert_true (ai_move (ai, 0, 2));
20901        assert_true (ai_move (ai, 3, 6));
20902        assert_true (ai_move (ai, 2, 3));
20903        assert_true (ai_move (ai, 2, 1));
20904        assert_true (ai_move (ai, 3, 0));
20905        assert_true (ai_move (ai, 2, 0));
20906        assert_true (ai_move (ai, 4, 7));
20907        assert_true (ai_move (ai, 3, 7));
20908        assert_true (ai_move (ai, 1, 1));
20909        assert_true (ai_move (ai, 6, 0));
20910        assert_true (ai_move (ai, 1, 7));
20911        assert_true (ai_move (ai, 0, 7));
20912        assert_true (ai_move (ai, 6, 1));
20913        assert_true (ai_move (ai, 6, 7));
20914        assert_true (ai_move (ai, 6, 6));
20915        assert_true (ai_move (ai, 1, 6));
20916        assert_true (ai_move (ai, 0, 6));
20917        assert_true (ai_move (ai, 0, 4));
20918        assert_true (ai_move (ai, 0, 3));
20919        assert_true (ai_move (ai, 7, 0));
20920        assert_true (ai_move (ai, 7, 1));
20921        assert_true (ai_move (ai, 0, 0));
20922        assert_true (ai_move (ai, 0, 1));
20923        assert_true (ai_move (ai, 1, 0));
20924        assert_true (game.pass ());
20925        assert_true (ai_move (ai, 7, 6));
20926        assert_true (ai_move (ai, 7, 7));
20927    }
20928
20929    private static inline void test_complete_reversi_game_263 ()
20930    {
20931                                  /* 0 1 2 3 4 5 6 7 */
20932        string [] board = {/* 0 */ " . . . . . . . .",
20933                           /* 1 */ " . . . . . . . .",
20934                           /* 2 */ " . . . . . L . .",
20935                           /* 3 */ " . . . D D L . .",
20936                           /* 4 */ " . . . L L L . .",
20937                           /* 5 */ " . . . . . D . .",
20938                           /* 6 */ " . . . . . . . .",
20939                           /* 7 */ " . . . . . . . ."};
20940
20941        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
20942        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
20943
20944        assert_true (ai_move (ai, 6, 5));
20945        assert_true (ai_move (ai, 6, 4));
20946        assert_true (ai_move (ai, 5, 1));
20947        assert_true (ai_move (ai, 6, 2));
20948        assert_true (ai_move (ai, 7, 2));
20949        assert_true (ai_move (ai, 5, 6));
20950        assert_true (ai_move (ai, 4, 7));
20951        assert_true (ai_move (ai, 5, 7));
20952        assert_true (ai_move (ai, 6, 7));
20953        assert_true (ai_move (ai, 7, 4));
20954        assert_true (ai_move (ai, 6, 3));
20955        assert_true (ai_move (ai, 5, 0));
20956        assert_true (ai_move (ai, 4, 1));
20957        assert_true (ai_move (ai, 4, 2));
20958        assert_true (ai_move (ai, 3, 2));
20959        assert_true (ai_move (ai, 2, 1));
20960        assert_true (ai_move (ai, 2, 2));
20961        assert_true (ai_move (ai, 4, 0));
20962        assert_true (ai_move (ai, 4, 5));
20963        assert_true (ai_move (ai, 3, 5));
20964        assert_true (ai_move (ai, 2, 0));
20965        assert_true (ai_move (ai, 1, 2));
20966        assert_true (ai_move (ai, 3, 1));
20967        assert_true (ai_move (ai, 2, 3));
20968        assert_true (ai_move (ai, 7, 5));
20969        assert_true (ai_move (ai, 7, 3));
20970        assert_true (ai_move (ai, 1, 3));
20971        assert_true (ai_move (ai, 6, 1));
20972        assert_true (ai_move (ai, 4, 6));
20973        assert_true (ai_move (ai, 3, 6));
20974        assert_true (ai_move (ai, 2, 7));
20975        assert_true (ai_move (ai, 3, 0));
20976        assert_true (ai_move (ai, 2, 6));
20977        assert_true (ai_move (ai, 2, 5));
20978        assert_true (ai_move (ai, 1, 5));
20979        assert_true (ai_move (ai, 1, 0));
20980        assert_true (ai_move (ai, 0, 2));
20981        assert_true (ai_move (ai, 1, 1));
20982        assert_true (ai_move (ai, 0, 0));
20983        assert_true (ai_move (ai, 0, 4));
20984        assert_true (ai_move (ai, 1, 4));
20985        assert_true (ai_move (ai, 2, 4));
20986        assert_true (ai_move (ai, 7, 0));
20987        assert_true (ai_move (ai, 6, 0));
20988        assert_true (ai_move (ai, 7, 1));
20989        assert_true (ai_move (ai, 0, 1));
20990        assert_true (ai_move (ai, 0, 3));
20991        assert_true (ai_move (ai, 0, 5));
20992        assert_true (ai_move (ai, 0, 6));
20993        assert_true (ai_move (ai, 0, 7));
20994        assert_true (game.pass ());
20995        assert_true (ai_move (ai, 1, 6));
20996        assert_true (ai_move (ai, 1, 7));
20997        assert_true (ai_move (ai, 3, 7));
20998        assert_true (ai_move (ai, 6, 6));
20999        assert_true (ai_move (ai, 7, 7));
21000        assert_true (ai_move (ai, 7, 6));
21001    }
21002
21003    private static inline void test_complete_reversi_game_264 ()
21004    {
21005                                  /* 0 1 2 3 4 5 6 7 */
21006        string [] board = {/* 0 */ " . . . . . . . .",
21007                           /* 1 */ " . . . . . . . .",
21008                           /* 2 */ " . . . L . L . .",
21009                           /* 3 */ " . . . L D D . .",
21010                           /* 4 */ " . . . L D . . .",
21011                           /* 5 */ " . . . . . D . .",
21012                           /* 6 */ " . . . . . . . .",
21013                           /* 7 */ " . . . . . . . ."};
21014
21015        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21016        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21017
21018        assert_true (ai_move (ai, 5, 1));
21019        assert_true (ai_move (ai, 5, 4));
21020        assert_true (ai_move (ai, 3, 5));
21021        assert_true (ai_move (ai, 4, 5));
21022        assert_true (ai_move (ai, 2, 2));
21023        assert_true (ai_move (ai, 6, 5));
21024        assert_true (ai_move (ai, 5, 6));
21025        assert_true (ai_move (ai, 1, 2));
21026        assert_true (ai_move (ai, 4, 6));
21027        assert_true (ai_move (ai, 2, 5));
21028        assert_true (ai_move (ai, 6, 4));
21029        assert_true (ai_move (ai, 6, 2));
21030        assert_true (ai_move (ai, 7, 3));
21031        assert_true (ai_move (ai, 7, 5));
21032        assert_true (ai_move (ai, 1, 5));
21033        assert_true (ai_move (ai, 5, 7));
21034        assert_true (ai_move (ai, 2, 3));
21035        assert_true (ai_move (ai, 1, 4));
21036        assert_true (ai_move (ai, 0, 3));
21037        assert_true (ai_move (ai, 5, 0));
21038        assert_true (ai_move (ai, 1, 3));
21039        assert_true (ai_move (ai, 7, 2));
21040        assert_true (ai_move (ai, 7, 4));
21041        assert_true (ai_move (ai, 6, 3));
21042        assert_true (ai_move (ai, 4, 7));
21043        assert_true (ai_move (ai, 3, 7));
21044        assert_true (ai_move (ai, 4, 2));
21045        assert_true (ai_move (ai, 3, 1));
21046        assert_true (ai_move (ai, 4, 1));
21047        assert_true (ai_move (ai, 2, 6));
21048        assert_true (ai_move (ai, 0, 2));
21049        assert_true (ai_move (ai, 3, 6));
21050        assert_true (ai_move (ai, 2, 1));
21051        assert_true (ai_move (ai, 2, 0));
21052        assert_true (ai_move (ai, 6, 6));
21053        assert_true (ai_move (ai, 2, 4));
21054        assert_true (ai_move (ai, 3, 0));
21055        assert_true (ai_move (ai, 7, 7));
21056        assert_true (ai_move (ai, 2, 7));
21057        assert_true (ai_move (ai, 6, 7));
21058        assert_true (ai_move (ai, 7, 6));
21059        assert_true (ai_move (ai, 4, 0));
21060        assert_true (ai_move (ai, 6, 0));
21061        assert_true (ai_move (ai, 7, 0));
21062        assert_true (ai_move (ai, 7, 1));
21063        assert_true (ai_move (ai, 1, 0));
21064        assert_true (ai_move (ai, 1, 1));
21065        assert_true (ai_move (ai, 6, 1));
21066        assert_true (game.pass ());
21067        assert_true (ai_move (ai, 1, 7));
21068        assert_true (ai_move (ai, 1, 6));
21069        assert_true (ai_move (ai, 0, 4));
21070        assert_true (ai_move (ai, 0, 6));
21071        assert_true (ai_move (ai, 0, 5));
21072        assert_true (game.pass ());
21073        assert_true (ai_move (ai, 0, 1));
21074        assert_true (ai_move (ai, 0, 0));
21075    }
21076
21077    private static inline void test_complete_reversi_game_265 ()
21078    {
21079                                  /* 0 1 2 3 4 5 6 7 */
21080        string [] board = {/* 0 */ " . . . . . . . .",
21081                           /* 1 */ " . . . . . . . .",
21082                           /* 2 */ " . . . . D L . .",
21083                           /* 3 */ " . . . D D . . .",
21084                           /* 4 */ " . . . L L L . .",
21085                           /* 5 */ " . . . . . D . .",
21086                           /* 6 */ " . . . . . . . .",
21087                           /* 7 */ " . . . . . . . ."};
21088
21089        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21090        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21091
21092        assert_true (ai_move (ai, 6, 5));
21093        assert_true (ai_move (ai, 6, 4));
21094        assert_true (ai_move (ai, 5, 3));
21095        assert_true (ai_move (ai, 5, 6));
21096        assert_true (ai_move (ai, 6, 2));
21097        assert_true (ai_move (ai, 5, 1));
21098        assert_true (ai_move (ai, 4, 0));
21099        assert_true (ai_move (ai, 5, 0));
21100        assert_true (ai_move (ai, 4, 7));
21101        assert_true (ai_move (ai, 3, 0));
21102        assert_true (ai_move (ai, 7, 5));
21103        assert_true (ai_move (ai, 7, 2));
21104        assert_true (ai_move (ai, 4, 6));
21105        assert_true (ai_move (ai, 5, 7));
21106        assert_true (ai_move (ai, 6, 7));
21107        assert_true (ai_move (ai, 7, 3));
21108        assert_true (ai_move (ai, 6, 3));
21109        assert_true (ai_move (ai, 3, 6));
21110        assert_true (ai_move (ai, 4, 1));
21111        assert_true (ai_move (ai, 3, 1));
21112        assert_true (ai_move (ai, 3, 7));
21113        assert_true (ai_move (ai, 2, 2));
21114        assert_true (ai_move (ai, 2, 0));
21115        assert_true (ai_move (ai, 1, 0));
21116        assert_true (ai_move (ai, 1, 3));
21117        assert_true (ai_move (ai, 2, 1));
21118        assert_true (ai_move (ai, 2, 3));
21119        assert_true (ai_move (ai, 3, 2));
21120        assert_true (ai_move (ai, 2, 5));
21121        assert_true (ai_move (ai, 2, 4));
21122        assert_true (ai_move (ai, 4, 5));
21123        assert_true (ai_move (ai, 2, 6));
21124        assert_true (ai_move (ai, 3, 5));
21125        assert_true (ai_move (ai, 1, 4));
21126        assert_true (ai_move (ai, 1, 2));
21127        assert_true (ai_move (ai, 0, 3));
21128        assert_true (ai_move (ai, 1, 5));
21129        assert_true (ai_move (ai, 2, 7));
21130        assert_true (ai_move (ai, 1, 7));
21131        assert_true (ai_move (ai, 0, 5));
21132        assert_true (ai_move (ai, 0, 4));
21133        assert_true (ai_move (ai, 7, 4));
21134        assert_true (ai_move (ai, 7, 1));
21135        assert_true (ai_move (ai, 0, 6));
21136        assert_true (ai_move (ai, 0, 7));
21137        assert_true (ai_move (ai, 1, 6));
21138        assert_true (ai_move (ai, 0, 2));
21139        assert_true (ai_move (ai, 1, 1));
21140        assert_true (ai_move (ai, 0, 1));
21141        assert_true (ai_move (ai, 6, 6));
21142        assert_true (ai_move (ai, 7, 6));
21143        assert_true (ai_move (ai, 7, 7));
21144        assert_true (ai_move (ai, 6, 0));
21145        assert_true (ai_move (ai, 7, 0));
21146        assert_true (game.pass ());
21147        assert_true (ai_move (ai, 6, 1));
21148    }
21149
21150    private static inline void test_complete_reversi_game_266 ()
21151    {
21152                                  /* 0 1 2 3 4 5 6 7 */
21153        string [] board = {/* 0 */ " . . . . . . . .",
21154                           /* 1 */ " . . . . . . . .",
21155                           /* 2 */ " . . . L L L . .",
21156                           /* 3 */ " . . . L D . . .",
21157                           /* 4 */ " . . . L D . . .",
21158                           /* 5 */ " . . . . . D . .",
21159                           /* 6 */ " . . . . . . . .",
21160                           /* 7 */ " . . . . . . . ."};
21161
21162        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21163        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21164
21165        assert_true (ai_move (ai, 4, 1));
21166        assert_true (ai_move (ai, 5, 1));
21167        assert_true (ai_move (ai, 6, 3));
21168        assert_true (ai_move (ai, 6, 2));
21169        assert_true (ai_move (ai, 2, 1));
21170        assert_true (ai_move (ai, 2, 2));
21171        assert_true (ai_move (ai, 2, 5));
21172        assert_true (ai_move (ai, 2, 0));
21173        assert_true (ai_move (ai, 2, 3));
21174        assert_true (ai_move (ai, 3, 0));
21175        assert_true (ai_move (ai, 1, 2));
21176        assert_true (ai_move (ai, 0, 2));
21177        assert_true (ai_move (ai, 5, 0));
21178        assert_true (ai_move (ai, 3, 1));
21179        assert_true (ai_move (ai, 7, 2));
21180        assert_true (ai_move (ai, 1, 4));
21181        assert_true (ai_move (ai, 6, 0));
21182        assert_true (ai_move (ai, 3, 6));
21183        assert_true (ai_move (ai, 1, 3));
21184        assert_true (ai_move (ai, 0, 4));
21185        assert_true (ai_move (ai, 0, 3));
21186        assert_true (ai_move (ai, 2, 4));
21187        assert_true (ai_move (ai, 1, 5));
21188        assert_true (ai_move (ai, 0, 5));
21189        assert_true (ai_move (ai, 2, 6));
21190        assert_true (ai_move (ai, 2, 7));
21191        assert_true (ai_move (ai, 4, 7));
21192        assert_true (ai_move (ai, 3, 5));
21193        assert_true (ai_move (ai, 1, 6));
21194        assert_true (ai_move (ai, 5, 3));
21195        assert_true (ai_move (ai, 4, 5));
21196        assert_true (ai_move (ai, 4, 6));
21197        assert_true (ai_move (ai, 3, 7));
21198        assert_true (ai_move (ai, 6, 5));
21199        assert_true (ai_move (ai, 1, 7));
21200        assert_true (ai_move (ai, 7, 3));
21201        assert_true (ai_move (ai, 7, 4));
21202        assert_true (ai_move (ai, 5, 7));
21203        assert_true (ai_move (ai, 6, 7));
21204        assert_true (ai_move (ai, 0, 7));
21205        assert_true (ai_move (ai, 7, 5));
21206        assert_true (ai_move (ai, 7, 7));
21207        assert_true (ai_move (ai, 0, 6));
21208        assert_true (ai_move (ai, 6, 6));
21209        assert_true (ai_move (ai, 5, 6));
21210        assert_true (ai_move (ai, 5, 4));
21211        assert_true (ai_move (ai, 6, 4));
21212        assert_true (ai_move (ai, 7, 6));
21213        assert_true (ai_move (ai, 4, 0));
21214        assert_true (ai_move (ai, 7, 0));
21215        assert_true (ai_move (ai, 1, 0));
21216        assert_true (ai_move (ai, 7, 1));
21217        assert_true (ai_move (ai, 6, 1));
21218        assert_true (ai_move (ai, 0, 0));
21219        assert_true (ai_move (ai, 1, 1));
21220        assert_true (ai_move (ai, 0, 1));
21221    }
21222
21223    private static inline void test_complete_reversi_game_267 ()
21224    {
21225                                  /* 0 1 2 3 4 5 6 7 */
21226        string [] board = {/* 0 */ " . . . . . . . .",
21227                           /* 1 */ " . . . . . . . .",
21228                           /* 2 */ " . . . . . L . .",
21229                           /* 3 */ " . . . D L . . .",
21230                           /* 4 */ " . . . D L . . .",
21231                           /* 5 */ " . . . D L D . .",
21232                           /* 6 */ " . . . . . . . .",
21233                           /* 7 */ " . . . . . . . ."};
21234
21235        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21236        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21237
21238        assert_true (ai_move (ai, 5, 6));
21239        assert_true (ai_move (ai, 4, 6));
21240        assert_true (ai_move (ai, 5, 7));
21241        assert_true (ai_move (ai, 6, 5));
21242        assert_true (ai_move (ai, 6, 4));
21243        assert_true (ai_move (ai, 2, 6));
21244        assert_true (ai_move (ai, 2, 4));
21245        assert_true (ai_move (ai, 6, 3));
21246        assert_true (ai_move (ai, 7, 3));
21247        assert_true (ai_move (ai, 4, 7));
21248        assert_true (ai_move (ai, 7, 5));
21249        assert_true (ai_move (ai, 5, 4));
21250        assert_true (ai_move (ai, 3, 7));
21251        assert_true (ai_move (ai, 7, 4));
21252        assert_true (ai_move (ai, 1, 5));
21253        assert_true (ai_move (ai, 1, 4));
21254        assert_true (ai_move (ai, 1, 3));
21255        assert_true (ai_move (ai, 0, 4));
21256        assert_true (ai_move (ai, 4, 2));
21257        assert_true (ai_move (ai, 2, 5));
21258        assert_true (ai_move (ai, 2, 3));
21259        assert_true (ai_move (ai, 3, 6));
21260        assert_true (ai_move (ai, 6, 2));
21261        assert_true (ai_move (ai, 5, 3));
21262        assert_true (ai_move (ai, 0, 5));
21263        assert_true (ai_move (ai, 0, 2));
21264        assert_true (ai_move (ai, 0, 3));
21265        assert_true (ai_move (ai, 0, 6));
21266        assert_true (ai_move (ai, 1, 6));
21267        assert_true (ai_move (ai, 1, 2));
21268        assert_true (ai_move (ai, 2, 2));
21269        assert_true (ai_move (ai, 0, 7));
21270        assert_true (ai_move (ai, 6, 7));
21271        assert_true (ai_move (ai, 2, 1));
21272        assert_true (ai_move (ai, 3, 2));
21273        assert_true (ai_move (ai, 5, 1));
21274        assert_true (ai_move (ai, 5, 0));
21275        assert_true (ai_move (ai, 7, 2));
21276        assert_true (ai_move (ai, 7, 1));
21277        assert_true (ai_move (ai, 6, 6));
21278        assert_true (ai_move (ai, 3, 1));
21279        assert_true (ai_move (ai, 4, 0));
21280        assert_true (ai_move (ai, 4, 1));
21281        assert_true (ai_move (ai, 6, 0));
21282        assert_true (ai_move (ai, 2, 0));
21283        assert_true (ai_move (ai, 1, 1));
21284        assert_true (ai_move (ai, 2, 7));
21285        assert_true (ai_move (ai, 1, 7));
21286        assert_true (ai_move (ai, 7, 6));
21287        assert_true (ai_move (ai, 7, 7));
21288        assert_true (ai_move (ai, 3, 0));
21289        assert_true (ai_move (ai, 7, 0));
21290        assert_true (ai_move (ai, 6, 1));
21291        assert_true (ai_move (ai, 1, 0));
21292        assert_true (ai_move (ai, 0, 1));
21293        assert_true (ai_move (ai, 0, 0));
21294    }
21295
21296    private static inline void test_complete_reversi_game_268 ()
21297    {
21298                                  /* 0 1 2 3 4 5 6 7 */
21299        string [] board = {/* 0 */ " . . . . . . . .",
21300                           /* 1 */ " . . . . . . . .",
21301                           /* 2 */ " . . . . . L . .",
21302                           /* 3 */ " . . . D L . . .",
21303                           /* 4 */ " . . . L D . . .",
21304                           /* 5 */ " . . L D . D . .",
21305                           /* 6 */ " . . . . . . . .",
21306                           /* 7 */ " . . . . . . . ."};
21307
21308        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21309        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21310
21311        assert_true (ai_move (ai, 1, 5));
21312        assert_true (ai_move (ai, 5, 4));
21313        assert_true (ai_move (ai, 5, 3));
21314        assert_true (ai_move (ai, 5, 6));
21315        assert_true (ai_move (ai, 6, 4));
21316        assert_true (ai_move (ai, 7, 5));
21317        assert_true (ai_move (ai, 2, 4));
21318        assert_true (ai_move (ai, 2, 6));
21319        assert_true (ai_move (ai, 3, 6));
21320        assert_true (ai_move (ai, 0, 4));
21321        assert_true (ai_move (ai, 4, 5));
21322        assert_true (ai_move (ai, 4, 2));
21323        assert_true (ai_move (ai, 2, 2));
21324        assert_true (ai_move (ai, 2, 3));
21325        assert_true (ai_move (ai, 4, 6));
21326        assert_true (ai_move (ai, 6, 5));
21327        assert_true (ai_move (ai, 6, 3));
21328        assert_true (ai_move (ai, 5, 7));
21329        assert_true (ai_move (ai, 6, 2));
21330        assert_true (ai_move (ai, 2, 1));
21331        assert_true (ai_move (ai, 2, 7));
21332        assert_true (ai_move (ai, 7, 2));
21333        assert_true (ai_move (ai, 0, 5));
21334        assert_true (ai_move (ai, 7, 3));
21335        assert_true (ai_move (ai, 7, 4));
21336        assert_true (ai_move (ai, 3, 7));
21337        assert_true (ai_move (ai, 5, 1));
21338        assert_true (ai_move (ai, 5, 0));
21339        assert_true (ai_move (ai, 0, 3));
21340        assert_true (ai_move (ai, 1, 4));
21341        assert_true (ai_move (ai, 4, 1));
21342        assert_true (ai_move (ai, 3, 1));
21343        assert_true (ai_move (ai, 3, 2));
21344        assert_true (ai_move (ai, 1, 2));
21345        assert_true (ai_move (ai, 1, 6));
21346        assert_true (ai_move (ai, 1, 7));
21347        assert_true (ai_move (ai, 6, 1));
21348        assert_true (ai_move (ai, 1, 3));
21349        assert_true (ai_move (ai, 0, 7));
21350        assert_true (ai_move (ai, 0, 6));
21351        assert_true (ai_move (ai, 4, 7));
21352        assert_true (ai_move (ai, 7, 0));
21353        assert_true (ai_move (ai, 2, 0));
21354        assert_true (ai_move (ai, 7, 1));
21355        assert_true (ai_move (ai, 3, 0));
21356        assert_true (ai_move (ai, 0, 2));
21357        assert_true (ai_move (ai, 0, 1));
21358        assert_true (ai_move (ai, 4, 0));
21359        assert_true (ai_move (ai, 6, 7));
21360        assert_true (ai_move (ai, 1, 0));
21361        assert_true (ai_move (ai, 6, 0));
21362        assert_true (ai_move (ai, 6, 6));
21363        assert_true (ai_move (ai, 0, 0));
21364        assert_true (ai_move (ai, 1, 1));
21365        assert_true (ai_move (ai, 7, 6));
21366        assert_true (ai_move (ai, 7, 7));
21367    }
21368
21369    private static inline void test_complete_reversi_game_269 ()
21370    {
21371                                  /* 0 1 2 3 4 5 6 7 */
21372        string [] board = {/* 0 */ " . . . . . . . .",
21373                           /* 1 */ " . . . . . . . .",
21374                           /* 2 */ " . . . . . L . .",
21375                           /* 3 */ " . . L L L . . .",
21376                           /* 4 */ " . . . D D . . .",
21377                           /* 5 */ " . . . D . D . .",
21378                           /* 6 */ " . . . . . . . .",
21379                           /* 7 */ " . . . . . . . ."};
21380
21381        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21382        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21383
21384        assert_true (ai_move (ai, 1, 2));
21385        assert_true (ai_move (ai, 1, 3));
21386        assert_true (ai_move (ai, 1, 4));
21387        assert_true (ai_move (ai, 0, 3));
21388        assert_true (ai_move (ai, 3, 2));
21389        assert_true (ai_move (ai, 2, 1));
21390        assert_true (ai_move (ai, 3, 1));
21391        assert_true (ai_move (ai, 1, 5));
21392        assert_true (ai_move (ai, 0, 5));
21393        assert_true (ai_move (ai, 4, 1));
21394        assert_true (ai_move (ai, 2, 5));
21395        assert_true (ai_move (ai, 4, 5));
21396        assert_true (ai_move (ai, 5, 0));
21397        assert_true (ai_move (ai, 6, 5));
21398        assert_true (ai_move (ai, 6, 3));
21399        assert_true (ai_move (ai, 2, 6));
21400        assert_true (ai_move (ai, 2, 7));
21401        assert_true (ai_move (ai, 5, 1));
21402        assert_true (ai_move (ai, 5, 4));
21403        assert_true (ai_move (ai, 6, 4));
21404        assert_true (ai_move (ai, 7, 5));
21405        assert_true (ai_move (ai, 5, 6));
21406        assert_true (ai_move (ai, 3, 6));
21407        assert_true (ai_move (ai, 4, 6));
21408        assert_true (ai_move (ai, 5, 7));
21409        assert_true (ai_move (ai, 6, 2));
21410        assert_true (ai_move (ai, 7, 3));
21411        assert_true (ai_move (ai, 4, 2));
21412        assert_true (ai_move (ai, 3, 0));
21413        assert_true (ai_move (ai, 2, 0));
21414        assert_true (ai_move (ai, 7, 4));
21415        assert_true (ai_move (ai, 5, 3));
21416        assert_true (ai_move (ai, 7, 2));
21417        assert_true (ai_move (ai, 4, 0));
21418        assert_true (ai_move (ai, 1, 0));
21419        assert_true (ai_move (ai, 2, 4));
21420        assert_true (ai_move (ai, 6, 0));
21421        assert_true (ai_move (ai, 2, 2));
21422        assert_true (ai_move (ai, 0, 4));
21423        assert_true (ai_move (ai, 0, 6));
21424        assert_true (ai_move (ai, 0, 2));
21425        assert_true (ai_move (ai, 0, 1));
21426        assert_true (ai_move (ai, 1, 6));
21427        assert_true (ai_move (ai, 0, 7));
21428        assert_true (ai_move (ai, 1, 7));
21429        assert_true (ai_move (ai, 3, 7));
21430        assert_true (ai_move (ai, 4, 7));
21431        assert_true (ai_move (ai, 6, 7));
21432        assert_true (ai_move (ai, 6, 6));
21433        assert_true (ai_move (ai, 7, 7));
21434        assert_true (ai_move (ai, 7, 6));
21435        assert_true (ai_move (ai, 7, 1));
21436        assert_true (ai_move (ai, 6, 1));
21437        assert_true (ai_move (ai, 7, 0));
21438        assert_true (ai_move (ai, 1, 1));
21439        assert_true (ai_move (ai, 0, 0));
21440    }
21441
21442    private static inline void test_complete_reversi_game_270 ()
21443    {
21444                                  /* 0 1 2 3 4 5 6 7 */
21445        string [] board = {/* 0 */ " . . . . . . . .",
21446                           /* 1 */ " . . . . . . . .",
21447                           /* 2 */ " . . . . . L . .",
21448                           /* 3 */ " . . . D L . . .",
21449                           /* 4 */ " . . D D L . . .",
21450                           /* 5 */ " . . . . L D . .",
21451                           /* 6 */ " . . . . . . . .",
21452                           /* 7 */ " . . . . . . . ."};
21453
21454        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21455        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21456
21457        assert_true (ai_move (ai, 5, 6));
21458        assert_true (ai_move (ai, 2, 2));
21459        assert_true (ai_move (ai, 5, 4));
21460        assert_true (ai_move (ai, 1, 5));
21461        assert_true (ai_move (ai, 1, 4));
21462        assert_true (ai_move (ai, 6, 5));
21463        assert_true (ai_move (ai, 5, 3));
21464        assert_true (ai_move (ai, 6, 3));
21465        assert_true (ai_move (ai, 5, 1));
21466        assert_true (ai_move (ai, 4, 1));
21467        assert_true (ai_move (ai, 7, 5));
21468        assert_true (ai_move (ai, 5, 0));
21469        assert_true (ai_move (ai, 7, 2));
21470        assert_true (ai_move (ai, 7, 4));
21471        assert_true (ai_move (ai, 7, 3));
21472        assert_true (ai_move (ai, 1, 3));
21473        assert_true (ai_move (ai, 3, 0));
21474        assert_true (ai_move (ai, 3, 2));
21475        assert_true (ai_move (ai, 0, 2));
21476        assert_true (ai_move (ai, 0, 4));
21477        assert_true (ai_move (ai, 0, 6));
21478        assert_true (ai_move (ai, 2, 6));
21479        assert_true (ai_move (ai, 3, 1));
21480        assert_true (ai_move (ai, 4, 0));
21481        assert_true (ai_move (ai, 1, 2));
21482        assert_true (ai_move (ai, 2, 0));
21483        assert_true (ai_move (ai, 4, 2));
21484        assert_true (ai_move (ai, 4, 6));
21485        assert_true (ai_move (ai, 3, 5));
21486        assert_true (ai_move (ai, 2, 1));
21487        assert_true (ai_move (ai, 3, 6));
21488        assert_true (ai_move (ai, 2, 3));
21489        assert_true (ai_move (ai, 0, 3));
21490        assert_true (ai_move (ai, 0, 1));
21491        assert_true (ai_move (ai, 1, 7));
21492        assert_true (ai_move (ai, 2, 5));
21493        assert_true (ai_move (ai, 1, 1));
21494        assert_true (ai_move (ai, 4, 7));
21495        assert_true (ai_move (ai, 2, 7));
21496        assert_true (ai_move (ai, 0, 0));
21497        assert_true (ai_move (ai, 5, 7));
21498        assert_true (ai_move (ai, 3, 7));
21499        assert_true (ai_move (ai, 0, 5));
21500        assert_true (ai_move (ai, 6, 2));
21501        assert_true (ai_move (ai, 7, 1));
21502        assert_true (ai_move (ai, 0, 7));
21503        assert_true (ai_move (ai, 1, 6));
21504        assert_true (ai_move (ai, 6, 7));
21505        assert_true (ai_move (ai, 1, 0));
21506        assert_true (ai_move (ai, 6, 4));
21507        assert_true (ai_move (ai, 6, 1));
21508        assert_true (ai_move (ai, 6, 6));
21509        assert_true (ai_move (ai, 7, 7));
21510        assert_true (ai_move (ai, 7, 6));
21511        assert_true (ai_move (ai, 6, 0));
21512        assert_true (ai_move (ai, 7, 0));
21513    }
21514
21515    private static inline void test_complete_reversi_game_271 ()
21516    {
21517                                  /* 0 1 2 3 4 5 6 7 */
21518        string [] board = {/* 0 */ " . . . . . . . .",
21519                           /* 1 */ " . . . . . . . .",
21520                           /* 2 */ " . . . . . L . .",
21521                           /* 3 */ " . . . D L . . .",
21522                           /* 4 */ " . . D L D . . .",
21523                           /* 5 */ " . . L . . D . .",
21524                           /* 6 */ " . . . . . . . .",
21525                           /* 7 */ " . . . . . . . ."};
21526
21527        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21528        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21529
21530        assert_true (ai_move (ai, 2, 6));
21531        assert_true (ai_move (ai, 2, 3));
21532        assert_true (ai_move (ai, 2, 2));
21533        assert_true (ai_move (ai, 1, 2));
21534        assert_true (ai_move (ai, 1, 3));
21535        assert_true (ai_move (ai, 3, 2));
21536        assert_true (ai_move (ai, 2, 1));
21537        assert_true (ai_move (ai, 0, 3));
21538        assert_true (ai_move (ai, 0, 4));
21539        assert_true (ai_move (ai, 0, 5));
21540        assert_true (ai_move (ai, 0, 2));
21541        assert_true (ai_move (ai, 0, 1));
21542        assert_true (ai_move (ai, 5, 4));
21543        assert_true (ai_move (ai, 1, 4));
21544        assert_true (ai_move (ai, 3, 5));
21545        assert_true (ai_move (ai, 3, 1));
21546        assert_true (ai_move (ai, 3, 0));
21547        assert_true (ai_move (ai, 3, 6));
21548        assert_true (ai_move (ai, 3, 7));
21549        assert_true (ai_move (ai, 4, 6));
21550        assert_true (ai_move (ai, 1, 5));
21551        assert_true (ai_move (ai, 4, 5));
21552        assert_true (ai_move (ai, 5, 7));
21553        assert_true (ai_move (ai, 6, 5));
21554        assert_true (ai_move (ai, 6, 4));
21555        assert_true (ai_move (ai, 4, 1));
21556        assert_true (ai_move (ai, 7, 5));
21557        assert_true (ai_move (ai, 2, 0));
21558        assert_true (ai_move (ai, 6, 3));
21559        assert_true (ai_move (ai, 4, 0));
21560        assert_true (ai_move (ai, 1, 1));
21561        assert_true (ai_move (ai, 5, 0));
21562        assert_true (ai_move (ai, 5, 6));
21563        assert_true (ai_move (ai, 4, 2));
21564        assert_true (ai_move (ai, 5, 1));
21565        assert_true (ai_move (ai, 1, 0));
21566        assert_true (ai_move (ai, 1, 6));
21567        assert_true (ai_move (ai, 4, 7));
21568        assert_true (ai_move (ai, 5, 3));
21569        assert_true (ai_move (ai, 7, 2));
21570        assert_true (ai_move (ai, 7, 3));
21571        assert_true (ai_move (ai, 6, 2));
21572        assert_true (ai_move (ai, 2, 7));
21573        assert_true (ai_move (ai, 7, 4));
21574        assert_true (ai_move (ai, 7, 1));
21575        assert_true (ai_move (ai, 0, 0));
21576        assert_true (ai_move (ai, 7, 6));
21577        assert_true (ai_move (ai, 0, 7));
21578        assert_true (ai_move (ai, 1, 7));
21579        assert_true (ai_move (ai, 0, 6));
21580        assert_true (ai_move (ai, 6, 1));
21581        assert_true (ai_move (ai, 6, 6));
21582        assert_true (ai_move (ai, 6, 7));
21583        assert_true (ai_move (ai, 6, 0));
21584        assert_true (game.pass ());
21585        assert_true (ai_move (ai, 7, 0));
21586        assert_true (game.pass ());
21587        assert_true (ai_move (ai, 7, 7));
21588    }
21589
21590    private static inline void test_complete_reversi_game_272 ()
21591    {
21592                                  /* 0 1 2 3 4 5 6 7 */
21593        string [] board = {/* 0 */ " . . . . . . . .",
21594                           /* 1 */ " . . . . . . . .",
21595                           /* 2 */ " . . . . . L . .",
21596                           /* 3 */ " . . L L L . . .",
21597                           /* 4 */ " . . D D D . . .",
21598                           /* 5 */ " . . . . . D . .",
21599                           /* 6 */ " . . . . . . . .",
21600                           /* 7 */ " . . . . . . . ."};
21601
21602        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21603        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21604
21605        assert_true (ai_move (ai, 1, 2));
21606        assert_true (ai_move (ai, 1, 3));
21607        assert_true (ai_move (ai, 0, 2));
21608        assert_true (ai_move (ai, 1, 5));
21609        assert_true (ai_move (ai, 3, 5));
21610        assert_true (ai_move (ai, 2, 5));
21611        assert_true (ai_move (ai, 0, 5));
21612        assert_true (ai_move (ai, 2, 6));
21613        assert_true (ai_move (ai, 3, 7));
21614        assert_true (ai_move (ai, 4, 6));
21615        assert_true (ai_move (ai, 1, 4));
21616        assert_true (ai_move (ai, 6, 4));
21617        assert_true (ai_move (ai, 4, 5));
21618        assert_true (ai_move (ai, 2, 7));
21619        assert_true (ai_move (ai, 3, 6));
21620        assert_true (ai_move (ai, 4, 7));
21621        assert_true (ai_move (ai, 6, 5));
21622        assert_true (ai_move (ai, 1, 6));
21623        assert_true (ai_move (ai, 4, 2));
21624        assert_true (ai_move (ai, 7, 5));
21625        assert_true (ai_move (ai, 3, 2));
21626        assert_true (ai_move (ai, 4, 1));
21627        assert_true (ai_move (ai, 5, 3));
21628        assert_true (ai_move (ai, 5, 4));
21629        assert_true (ai_move (ai, 5, 7));
21630        assert_true (ai_move (ai, 2, 1));
21631        assert_true (ai_move (ai, 6, 3));
21632        assert_true (ai_move (ai, 2, 2));
21633        assert_true (ai_move (ai, 5, 6));
21634        assert_true (ai_move (ai, 7, 3));
21635        assert_true (ai_move (ai, 6, 2));
21636        assert_true (ai_move (ai, 3, 1));
21637        assert_true (ai_move (ai, 5, 0));
21638        assert_true (ai_move (ai, 5, 1));
21639        assert_true (ai_move (ai, 4, 0));
21640        assert_true (ai_move (ai, 6, 7));
21641        assert_true (ai_move (ai, 6, 0));
21642        assert_true (ai_move (ai, 2, 0));
21643        assert_true (ai_move (ai, 7, 2));
21644        assert_true (ai_move (ai, 6, 1));
21645        assert_true (ai_move (ai, 7, 4));
21646        assert_true (ai_move (ai, 7, 1));
21647        assert_true (ai_move (ai, 6, 6));
21648        assert_true (ai_move (ai, 7, 7));
21649        assert_true (ai_move (ai, 7, 6));
21650        assert_true (ai_move (ai, 0, 1));
21651        assert_true (ai_move (ai, 7, 0));
21652        assert_true (ai_move (ai, 1, 1));
21653        assert_true (ai_move (ai, 3, 0));
21654        assert_true (ai_move (ai, 0, 3));
21655        assert_true (ai_move (ai, 0, 4));
21656        assert_true (ai_move (ai, 0, 6));
21657        assert_true (ai_move (ai, 0, 7));
21658        assert_true (ai_move (ai, 1, 7));
21659        assert_true (ai_move (ai, 0, 0));
21660        assert_true (ai_move (ai, 1, 0));
21661    }
21662
21663    private static inline void test_complete_reversi_game_273 ()
21664    {
21665                                  /* 0 1 2 3 4 5 6 7 */
21666        string [] board = {/* 0 */ " . . . . . . . .",
21667                           /* 1 */ " . . . . . . . .",
21668                           /* 2 */ " . . . L . . . .",
21669                           /* 3 */ " . . . L D . . .",
21670                           /* 4 */ " . . . D L . . .",
21671                           /* 5 */ " . . D . . L . .",
21672                           /* 6 */ " . . . . . . L .",
21673                           /* 7 */ " . . . . . . . ."};
21674
21675        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21676        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21677
21678        assert_true (ai_move (ai, 5, 4));
21679        assert_true (ai_move (ai, 3, 5));
21680        assert_true (ai_move (ai, 2, 6));
21681        assert_true (ai_move (ai, 3, 6));
21682        assert_true (ai_move (ai, 4, 5));
21683        assert_true (ai_move (ai, 1, 4));
21684        assert_true (ai_move (ai, 1, 5));
21685        assert_true (ai_move (ai, 5, 6));
21686        assert_true (ai_move (ai, 2, 1));
21687        assert_true (ai_move (ai, 6, 3));
21688        assert_true (ai_move (ai, 6, 4));
21689        assert_true (ai_move (ai, 0, 5));
21690        assert_true (ai_move (ai, 2, 7));
21691        assert_true (ai_move (ai, 3, 1));
21692        assert_true (ai_move (ai, 0, 3));
21693        assert_true (ai_move (ai, 2, 3));
21694        assert_true (ai_move (ai, 4, 6));
21695        assert_true (ai_move (ai, 4, 7));
21696        assert_true (ai_move (ai, 0, 4));
21697        assert_true (ai_move (ai, 0, 2));
21698        assert_true (ai_move (ai, 2, 4));
21699        assert_true (ai_move (ai, 0, 6));
21700        assert_true (ai_move (ai, 5, 7));
21701        assert_true (ai_move (ai, 3, 7));
21702        assert_true (ai_move (ai, 7, 2));
21703        assert_true (ai_move (ai, 6, 5));
21704        assert_true (ai_move (ai, 5, 3));
21705        assert_true (ai_move (ai, 7, 4));
21706        assert_true (ai_move (ai, 7, 3));
21707        assert_true (ai_move (ai, 5, 2));
21708        assert_true (ai_move (ai, 5, 1));
21709        assert_true (ai_move (ai, 4, 1));
21710        assert_true (ai_move (ai, 6, 2));
21711        assert_true (ai_move (ai, 5, 0));
21712        assert_true (ai_move (ai, 3, 0));
21713        assert_true (ai_move (ai, 7, 1));
21714        assert_true (ai_move (ai, 1, 2));
21715        assert_true (ai_move (ai, 7, 5));
21716        assert_true (ai_move (ai, 1, 3));
21717        assert_true (ai_move (ai, 4, 2));
21718        assert_true (ai_move (ai, 2, 2));
21719        assert_true (ai_move (ai, 2, 0));
21720        assert_true (ai_move (ai, 4, 0));
21721        assert_true (ai_move (ai, 1, 1));
21722        assert_true (ai_move (ai, 6, 1));
21723        assert_true (ai_move (ai, 7, 0));
21724        assert_true (ai_move (ai, 6, 0));
21725        assert_true (ai_move (ai, 6, 7));
21726        assert_true (ai_move (ai, 7, 7));
21727        assert_true (game.pass ());
21728        assert_true (ai_move (ai, 0, 0));
21729        assert_true (ai_move (ai, 7, 6));
21730        assert_true (ai_move (ai, 0, 1));
21731        assert_true (ai_move (ai, 1, 0));
21732        assert_true (ai_move (ai, 0, 7));
21733        assert_true (game.pass ());
21734        assert_true (ai_move (ai, 1, 7));
21735        assert_true (ai_move (ai, 1, 6));
21736    }
21737
21738    private static inline void test_complete_reversi_game_274 ()
21739    {
21740                                  /* 0 1 2 3 4 5 6 7 */
21741        string [] board = {/* 0 */ " . . . . . . . .",
21742                           /* 1 */ " . . . . . . . .",
21743                           /* 2 */ " . . . L . . . .",
21744                           /* 3 */ " . . . L L . . .",
21745                           /* 4 */ " . . . D D L . .",
21746                           /* 5 */ " . . D . . D . .",
21747                           /* 6 */ " . . . . . . . .",
21748                           /* 7 */ " . . . . . . . ."};
21749
21750        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21751        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21752
21753        assert_true (ai_move (ai, 5, 3));
21754        assert_true (ai_move (ai, 6, 5));
21755        assert_true (ai_move (ai, 6, 4));
21756        assert_true (ai_move (ai, 4, 5));
21757        assert_true (ai_move (ai, 4, 6));
21758        assert_true (ai_move (ai, 6, 2));
21759        assert_true (ai_move (ai, 5, 6));
21760        assert_true (ai_move (ai, 7, 5));
21761        assert_true (ai_move (ai, 5, 2));
21762        assert_true (ai_move (ai, 3, 7));
21763        assert_true (ai_move (ai, 2, 1));
21764        assert_true (ai_move (ai, 5, 1));
21765        assert_true (ai_move (ai, 6, 3));
21766        assert_true (ai_move (ai, 3, 1));
21767        assert_true (ai_move (ai, 3, 5));
21768        assert_true (ai_move (ai, 1, 5));
21769        assert_true (ai_move (ai, 2, 6));
21770        assert_true (ai_move (ai, 2, 7));
21771        assert_true (ai_move (ai, 5, 0));
21772        assert_true (ai_move (ai, 7, 2));
21773        assert_true (ai_move (ai, 0, 5));
21774        assert_true (ai_move (ai, 4, 1));
21775        assert_true (ai_move (ai, 5, 7));
21776        assert_true (ai_move (ai, 4, 0));
21777        assert_true (ai_move (ai, 2, 2));
21778        assert_true (ai_move (ai, 1, 2));
21779        assert_true (ai_move (ai, 2, 3));
21780        assert_true (ai_move (ai, 0, 4));
21781        assert_true (ai_move (ai, 3, 0));
21782        assert_true (ai_move (ai, 4, 2));
21783        assert_true (ai_move (ai, 1, 3));
21784        assert_true (ai_move (ai, 4, 7));
21785        assert_true (ai_move (ai, 1, 7));
21786        assert_true (ai_move (ai, 2, 0));
21787        assert_true (ai_move (ai, 1, 0));
21788        assert_true (ai_move (ai, 0, 6));
21789        assert_true (ai_move (ai, 6, 0));
21790        assert_true (ai_move (ai, 2, 4));
21791        assert_true (ai_move (ai, 3, 6));
21792        assert_true (ai_move (ai, 1, 4));
21793        assert_true (ai_move (ai, 6, 1));
21794        assert_true (ai_move (ai, 1, 1));
21795        assert_true (ai_move (ai, 6, 7));
21796        assert_true (ai_move (ai, 1, 6));
21797        assert_true (ai_move (ai, 0, 7));
21798        assert_true (ai_move (ai, 6, 6));
21799        assert_true (ai_move (ai, 7, 3));
21800        assert_true (ai_move (ai, 7, 4));
21801        assert_true (ai_move (ai, 0, 3));
21802        assert_true (ai_move (ai, 0, 1));
21803        assert_true (ai_move (ai, 0, 0));
21804        assert_true (ai_move (ai, 0, 2));
21805        assert_true (ai_move (ai, 7, 7));
21806        assert_true (ai_move (ai, 7, 0));
21807        assert_true (ai_move (ai, 7, 6));
21808        assert_true (ai_move (ai, 7, 1));
21809    }
21810
21811    private static inline void test_complete_reversi_game_275 ()
21812    {
21813                                  /* 0 1 2 3 4 5 6 7 */
21814        string [] board = {/* 0 */ " . . . . . . . .",
21815                           /* 1 */ " . . . . . . . .",
21816                           /* 2 */ " . . . L . . . .",
21817                           /* 3 */ " . . . L L L . .",
21818                           /* 4 */ " . . . D D . . .",
21819                           /* 5 */ " . . D . . D . .",
21820                           /* 6 */ " . . . . . . . .",
21821                           /* 7 */ " . . . . . . . ."};
21822
21823        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21824        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21825
21826        assert_true (ai_move (ai, 6, 2));
21827        assert_true (ai_move (ai, 6, 3));
21828        assert_true (ai_move (ai, 6, 4));
21829        assert_true (ai_move (ai, 7, 3));
21830        assert_true (ai_move (ai, 5, 2));
21831        assert_true (ai_move (ai, 4, 1));
21832        assert_true (ai_move (ai, 4, 2));
21833        assert_true (ai_move (ai, 7, 2));
21834        assert_true (ai_move (ai, 5, 1));
21835        assert_true (ai_move (ai, 4, 0));
21836        assert_true (ai_move (ai, 5, 0));
21837        assert_true (ai_move (ai, 6, 5));
21838        assert_true (ai_move (ai, 3, 0));
21839        assert_true (ai_move (ai, 4, 6));
21840        assert_true (ai_move (ai, 7, 5));
21841        assert_true (ai_move (ai, 5, 4));
21842        assert_true (ai_move (ai, 5, 6));
21843        assert_true (ai_move (ai, 4, 5));
21844        assert_true (ai_move (ai, 7, 4));
21845        assert_true (ai_move (ai, 7, 6));
21846        assert_true (ai_move (ai, 2, 2));
21847        assert_true (ai_move (ai, 1, 2));
21848        assert_true (ai_move (ai, 3, 6));
21849        assert_true (ai_move (ai, 2, 7));
21850        assert_true (ai_move (ai, 4, 7));
21851        assert_true (ai_move (ai, 5, 7));
21852        assert_true (ai_move (ai, 3, 5));
21853        assert_true (ai_move (ai, 1, 5));
21854        assert_true (ai_move (ai, 2, 6));
21855        assert_true (ai_move (ai, 2, 3));
21856        assert_true (ai_move (ai, 6, 7));
21857        assert_true (ai_move (ai, 1, 7));
21858        assert_true (ai_move (ai, 2, 4));
21859        assert_true (ai_move (ai, 1, 4));
21860        assert_true (ai_move (ai, 3, 1));
21861        assert_true (ai_move (ai, 2, 1));
21862        assert_true (ai_move (ai, 1, 3));
21863        assert_true (ai_move (ai, 2, 0));
21864        assert_true (ai_move (ai, 1, 0));
21865        assert_true (ai_move (ai, 0, 4));
21866        assert_true (ai_move (ai, 0, 2));
21867        assert_true (ai_move (ai, 6, 1));
21868        assert_true (ai_move (ai, 6, 0));
21869        assert_true (ai_move (ai, 0, 3));
21870        assert_true (ai_move (ai, 0, 5));
21871        assert_true (ai_move (ai, 1, 6));
21872        assert_true (ai_move (ai, 0, 1));
21873        assert_true (ai_move (ai, 1, 1));
21874        assert_true (ai_move (ai, 7, 1));
21875        assert_true (ai_move (ai, 7, 0));
21876        assert_true (ai_move (ai, 0, 0));
21877        assert_true (ai_move (ai, 3, 7));
21878        assert_true (ai_move (ai, 0, 7));
21879        assert_true (game.pass ());
21880        assert_true (ai_move (ai, 0, 6));
21881        assert_true (game.pass ());
21882        assert_true (ai_move (ai, 6, 6));
21883    }
21884
21885    private static inline void test_complete_reversi_game_276 ()
21886    {
21887                                  /* 0 1 2 3 4 5 6 7 */
21888        string [] board = {/* 0 */ " . . . . . . . .",
21889                           /* 1 */ " . . . . . . . .",
21890                           /* 2 */ " . . . L . . . .",
21891                           /* 3 */ " . . . L D . . .",
21892                           /* 4 */ " . . . L D . . .",
21893                           /* 5 */ " . . D L . D . .",
21894                           /* 6 */ " . . . . . . . .",
21895                           /* 7 */ " . . . . . . . ."};
21896
21897        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21898        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21899
21900        assert_true (ai_move (ai, 2, 6));
21901        assert_true (ai_move (ai, 5, 2));
21902        assert_true (ai_move (ai, 2, 4));
21903        assert_true (ai_move (ai, 1, 5));
21904        assert_true (ai_move (ai, 2, 3));
21905        assert_true (ai_move (ai, 1, 3));
21906        assert_true (ai_move (ai, 1, 2));
21907        assert_true (ai_move (ai, 1, 4));
21908        assert_true (ai_move (ai, 2, 2));
21909        assert_true (ai_move (ai, 3, 1));
21910        assert_true (ai_move (ai, 2, 1));
21911        assert_true (ai_move (ai, 4, 2));
21912        assert_true (ai_move (ai, 0, 2));
21913        assert_true (ai_move (ai, 0, 3));
21914        assert_true (ai_move (ai, 6, 2));
21915        assert_true (ai_move (ai, 4, 1));
21916        assert_true (ai_move (ai, 0, 5));
21917        assert_true (ai_move (ai, 6, 3));
21918        assert_true (ai_move (ai, 5, 0));
21919        assert_true (ai_move (ai, 4, 6));
21920        assert_true (ai_move (ai, 5, 1));
21921        assert_true (ai_move (ai, 6, 4));
21922        assert_true (ai_move (ai, 0, 4));
21923        assert_true (ai_move (ai, 5, 3));
21924        assert_true (ai_move (ai, 3, 6));
21925        assert_true (ai_move (ai, 7, 2));
21926        assert_true (ai_move (ai, 4, 0));
21927        assert_true (ai_move (ai, 1, 7));
21928        assert_true (ai_move (ai, 3, 7));
21929        assert_true (ai_move (ai, 1, 1));
21930        assert_true (ai_move (ai, 4, 5));
21931        assert_true (ai_move (ai, 2, 7));
21932        assert_true (ai_move (ai, 5, 4));
21933        assert_true (ai_move (ai, 4, 7));
21934        assert_true (ai_move (ai, 6, 5));
21935        assert_true (ai_move (ai, 7, 5));
21936        assert_true (ai_move (ai, 5, 7));
21937        assert_true (ai_move (ai, 6, 7));
21938        assert_true (ai_move (ai, 1, 6));
21939        assert_true (ai_move (ai, 1, 0));
21940        assert_true (ai_move (ai, 3, 0));
21941        assert_true (ai_move (ai, 2, 0));
21942        assert_true (ai_move (ai, 5, 6));
21943        assert_true (ai_move (ai, 6, 0));
21944        assert_true (ai_move (ai, 0, 0));
21945        assert_true (ai_move (ai, 0, 6));
21946        assert_true (ai_move (ai, 0, 7));
21947        assert_true (ai_move (ai, 6, 1));
21948        assert_true (ai_move (ai, 7, 7));
21949        assert_true (ai_move (ai, 6, 6));
21950        assert_true (ai_move (ai, 7, 0));
21951        assert_true (ai_move (ai, 7, 1));
21952        assert_true (ai_move (ai, 7, 3));
21953        assert_true (ai_move (ai, 7, 4));
21954        assert_true (ai_move (ai, 7, 6));
21955        assert_true (ai_move (ai, 0, 1));
21956    }
21957
21958    private static inline void test_complete_reversi_game_277 ()
21959    {
21960                                  /* 0 1 2 3 4 5 6 7 */
21961        string [] board = {/* 0 */ " . . . . . . . .",
21962                           /* 1 */ " . . . . . . . .",
21963                           /* 2 */ " . . . L . . . .",
21964                           /* 3 */ " . . . L D . . .",
21965                           /* 4 */ " . . D D L . . .",
21966                           /* 5 */ " . . . . . L . .",
21967                           /* 6 */ " . . . . . . L .",
21968                           /* 7 */ " . . . . . . . ."};
21969
21970        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
21971        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
21972
21973        assert_true (ai_move (ai, 5, 4));
21974        assert_true (ai_move (ai, 1, 5));
21975        assert_true (ai_move (ai, 1, 4));
21976        assert_true (ai_move (ai, 1, 3));
21977        assert_true (ai_move (ai, 0, 4));
21978        assert_true (ai_move (ai, 3, 5));
21979        assert_true (ai_move (ai, 2, 1));
21980        assert_true (ai_move (ai, 6, 4));
21981        assert_true (ai_move (ai, 2, 6));
21982        assert_true (ai_move (ai, 5, 3));
21983        assert_true (ai_move (ai, 1, 2));
21984        assert_true (ai_move (ai, 3, 1));
21985        assert_true (ai_move (ai, 4, 6));
21986        assert_true (ai_move (ai, 3, 7));
21987        assert_true (ai_move (ai, 5, 7));
21988        assert_true (ai_move (ai, 3, 6));
21989        assert_true (ai_move (ai, 7, 3));
21990        assert_true (ai_move (ai, 5, 6));
21991        assert_true (ai_move (ai, 5, 2));
21992        assert_true (ai_move (ai, 6, 2));
21993        assert_true (ai_move (ai, 7, 2));
21994        assert_true (ai_move (ai, 5, 1));
21995        assert_true (ai_move (ai, 5, 0));
21996        assert_true (ai_move (ai, 6, 5));
21997        assert_true (ai_move (ai, 7, 4));
21998        assert_true (ai_move (ai, 7, 6));
21999        assert_true (ai_move (ai, 2, 2));
22000        assert_true (ai_move (ai, 4, 5));
22001        assert_true (ai_move (ai, 2, 3));
22002        assert_true (ai_move (ai, 4, 7));
22003        assert_true (ai_move (ai, 6, 3));
22004        assert_true (ai_move (ai, 2, 5));
22005        assert_true (ai_move (ai, 2, 7));
22006        assert_true (ai_move (ai, 2, 0));
22007        assert_true (ai_move (ai, 4, 0));
22008        assert_true (ai_move (ai, 3, 0));
22009        assert_true (ai_move (ai, 4, 1));
22010        assert_true (ai_move (ai, 6, 0));
22011        assert_true (ai_move (ai, 7, 7));
22012        assert_true (ai_move (ai, 0, 2));
22013        assert_true (ai_move (ai, 7, 5));
22014        assert_true (ai_move (ai, 6, 1));
22015        assert_true (ai_move (ai, 4, 2));
22016        assert_true (ai_move (ai, 0, 5));
22017        assert_true (ai_move (ai, 0, 3));
22018        assert_true (ai_move (ai, 6, 7));
22019        assert_true (ai_move (ai, 7, 1));
22020        assert_true (ai_move (ai, 1, 1));
22021        assert_true (ai_move (ai, 0, 0));
22022        assert_true (ai_move (ai, 0, 1));
22023        assert_true (ai_move (ai, 1, 0));
22024        assert_true (ai_move (ai, 1, 7));
22025        assert_true (ai_move (ai, 0, 7));
22026        assert_true (ai_move (ai, 1, 6));
22027        assert_true (ai_move (ai, 7, 0));
22028        assert_true (game.pass ());
22029        assert_true (ai_move (ai, 0, 6));
22030    }
22031
22032    private static inline void test_complete_reversi_game_278 ()
22033    {
22034                                  /* 0 1 2 3 4 5 6 7 */
22035        string [] board = {/* 0 */ " . . . . . . . .",
22036                           /* 1 */ " . . . . . . . .",
22037                           /* 2 */ " . . . L . . . .",
22038                           /* 3 */ " . . . L L . . .",
22039                           /* 4 */ " . . D D D L . .",
22040                           /* 5 */ " . . . . . D . .",
22041                           /* 6 */ " . . . . . . . .",
22042                           /* 7 */ " . . . . . . . ."};
22043
22044        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22045        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22046
22047        assert_true (ai_move (ai, 5, 3));
22048        assert_true (ai_move (ai, 1, 5));
22049        assert_true (ai_move (ai, 5, 2));
22050        assert_true (ai_move (ai, 3, 5));
22051        assert_true (ai_move (ai, 2, 1));
22052        assert_true (ai_move (ai, 3, 1));
22053        assert_true (ai_move (ai, 2, 6));
22054        assert_true (ai_move (ai, 4, 6));
22055        assert_true (ai_move (ai, 0, 4));
22056        assert_true (ai_move (ai, 6, 5));
22057        assert_true (ai_move (ai, 6, 4));
22058        assert_true (ai_move (ai, 4, 5));
22059        assert_true (ai_move (ai, 5, 6));
22060        assert_true (ai_move (ai, 7, 3));
22061        assert_true (ai_move (ai, 7, 5));
22062        assert_true (ai_move (ai, 6, 3));
22063        assert_true (ai_move (ai, 4, 1));
22064        assert_true (ai_move (ai, 5, 7));
22065        assert_true (ai_move (ai, 2, 3));
22066        assert_true (ai_move (ai, 5, 1));
22067        assert_true (ai_move (ai, 7, 4));
22068        assert_true (ai_move (ai, 7, 6));
22069        assert_true (ai_move (ai, 5, 0));
22070        assert_true (ai_move (ai, 7, 2));
22071        assert_true (ai_move (ai, 4, 2));
22072        assert_true (ai_move (ai, 2, 0));
22073        assert_true (ai_move (ai, 4, 7));
22074        assert_true (ai_move (ai, 1, 4));
22075        assert_true (ai_move (ai, 6, 2));
22076        assert_true (ai_move (ai, 7, 1));
22077        assert_true (ai_move (ai, 0, 5));
22078        assert_true (ai_move (ai, 2, 2));
22079        assert_true (ai_move (ai, 2, 5));
22080        assert_true (ai_move (ai, 3, 6));
22081        assert_true (ai_move (ai, 6, 7));
22082        assert_true (ai_move (ai, 2, 7));
22083        assert_true (ai_move (ai, 1, 2));
22084        assert_true (ai_move (ai, 1, 3));
22085        assert_true (ai_move (ai, 0, 3));
22086        assert_true (ai_move (ai, 3, 0));
22087        assert_true (ai_move (ai, 4, 0));
22088        assert_true (ai_move (ai, 6, 0));
22089        assert_true (ai_move (ai, 6, 6));
22090        assert_true (ai_move (ai, 0, 2));
22091        assert_true (ai_move (ai, 1, 1));
22092        assert_true (ai_move (ai, 0, 6));
22093        assert_true (ai_move (ai, 1, 7));
22094        assert_true (ai_move (ai, 3, 7));
22095        assert_true (ai_move (ai, 6, 1));
22096        assert_true (ai_move (ai, 7, 0));
22097        assert_true (ai_move (ai, 1, 6));
22098        assert_true (ai_move (ai, 7, 7));
22099        assert_true (game.pass ());
22100        assert_true (ai_move (ai, 0, 0));
22101        assert_true (ai_move (ai, 1, 0));
22102        assert_true (ai_move (ai, 0, 1));
22103        assert_true (game.pass ());
22104        assert_true (ai_move (ai, 0, 7));
22105    }
22106
22107    private static inline void test_complete_reversi_game_279 ()
22108    {
22109                                  /* 0 1 2 3 4 5 6 7 */
22110        string [] board = {/* 0 */ " . . . . . . . .",
22111                           /* 1 */ " . . . . . . . .",
22112                           /* 2 */ " . . . L . . . .",
22113                           /* 3 */ " . . . L L L . .",
22114                           /* 4 */ " . . D D D . . .",
22115                           /* 5 */ " . . . . . D . .",
22116                           /* 6 */ " . . . . . . . .",
22117                           /* 7 */ " . . . . . . . ."};
22118
22119        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22120        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22121
22122        assert_true (ai_move (ai, 6, 2));
22123        assert_true (ai_move (ai, 6, 3));
22124        assert_true (ai_move (ai, 6, 4));
22125        assert_true (ai_move (ai, 1, 5));
22126        assert_true (ai_move (ai, 1, 4));
22127        assert_true (ai_move (ai, 7, 3));
22128        assert_true (ai_move (ai, 2, 2));
22129        assert_true (ai_move (ai, 1, 2));
22130        assert_true (ai_move (ai, 3, 1));
22131        assert_true (ai_move (ai, 2, 1));
22132        assert_true (ai_move (ai, 1, 3));
22133        assert_true (ai_move (ai, 5, 1));
22134        assert_true (ai_move (ai, 2, 0));
22135        assert_true (ai_move (ai, 7, 5));
22136        assert_true (ai_move (ai, 0, 2));
22137        assert_true (ai_move (ai, 4, 6));
22138        assert_true (ai_move (ai, 4, 2));
22139        assert_true (ai_move (ai, 3, 5));
22140        assert_true (ai_move (ai, 3, 6));
22141        assert_true (ai_move (ai, 2, 6));
22142        assert_true (ai_move (ai, 3, 7));
22143        assert_true (ai_move (ai, 4, 1));
22144        assert_true (ai_move (ai, 5, 2));
22145        assert_true (ai_move (ai, 2, 3));
22146        assert_true (ai_move (ai, 7, 2));
22147        assert_true (ai_move (ai, 0, 5));
22148        assert_true (ai_move (ai, 5, 0));
22149        assert_true (ai_move (ai, 0, 3));
22150        assert_true (ai_move (ai, 4, 0));
22151        assert_true (ai_move (ai, 4, 5));
22152        assert_true (ai_move (ai, 5, 6));
22153        assert_true (ai_move (ai, 2, 5));
22154        assert_true (ai_move (ai, 2, 7));
22155        assert_true (ai_move (ai, 5, 7));
22156        assert_true (ai_move (ai, 7, 4));
22157        assert_true (ai_move (ai, 7, 1));
22158        assert_true (ai_move (ai, 6, 5));
22159        assert_true (ai_move (ai, 5, 4));
22160        assert_true (ai_move (ai, 4, 7));
22161        assert_true (ai_move (ai, 1, 7));
22162        assert_true (ai_move (ai, 0, 4));
22163        assert_true (ai_move (ai, 0, 1));
22164        assert_true (ai_move (ai, 6, 6));
22165        assert_true (ai_move (ai, 3, 0));
22166        assert_true (ai_move (ai, 1, 0));
22167        assert_true (ai_move (ai, 0, 0));
22168        assert_true (ai_move (ai, 0, 6));
22169        assert_true (ai_move (ai, 1, 1));
22170        assert_true (ai_move (ai, 6, 1));
22171        assert_true (ai_move (ai, 6, 0));
22172        assert_true (ai_move (ai, 1, 6));
22173        assert_true (ai_move (ai, 7, 7));
22174        assert_true (ai_move (ai, 7, 6));
22175        assert_true (ai_move (ai, 7, 0));
22176        assert_true (game.pass ());
22177        assert_true (ai_move (ai, 6, 7));
22178        assert_true (game.pass ());
22179        assert_true (ai_move (ai, 0, 7));
22180    }
22181
22182    private static inline void test_complete_reversi_game_280 ()
22183    {
22184                                  /* 0 1 2 3 4 5 6 7 */
22185        string [] board = {/* 0 */ " . . . . . . . .",
22186                           /* 1 */ " . . . . . . . .",
22187                           /* 2 */ " . . . L . . . .",
22188                           /* 3 */ " . . . L D . . .",
22189                           /* 4 */ " . . D L D . . .",
22190                           /* 5 */ " . . . L . D . .",
22191                           /* 6 */ " . . . . . . . .",
22192                           /* 7 */ " . . . . . . . ."};
22193
22194        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22195        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22196
22197        assert_true (ai_move (ai, 4, 6));
22198        assert_true (ai_move (ai, 1, 5));
22199        assert_true (ai_move (ai, 2, 1));
22200        assert_true (ai_move (ai, 3, 6));
22201        assert_true (ai_move (ai, 1, 3));
22202        assert_true (ai_move (ai, 1, 4));
22203        assert_true (ai_move (ai, 3, 7));
22204        assert_true (ai_move (ai, 3, 1));
22205        assert_true (ai_move (ai, 4, 1));
22206        assert_true (ai_move (ai, 0, 2));
22207        assert_true (ai_move (ai, 2, 2));
22208        assert_true (ai_move (ai, 1, 2));
22209        assert_true (ai_move (ai, 2, 3));
22210        assert_true (ai_move (ai, 2, 0));
22211        assert_true (ai_move (ai, 0, 5));
22212        assert_true (ai_move (ai, 4, 0));
22213        assert_true (ai_move (ai, 3, 0));
22214        assert_true (ai_move (ai, 0, 4));
22215        assert_true (ai_move (ai, 5, 0));
22216        assert_true (ai_move (ai, 6, 0));
22217        assert_true (ai_move (ai, 4, 5));
22218        assert_true (ai_move (ai, 5, 2));
22219        assert_true (ai_move (ai, 2, 5));
22220        assert_true (ai_move (ai, 5, 7));
22221        assert_true (ai_move (ai, 2, 6));
22222        assert_true (ai_move (ai, 6, 4));
22223        assert_true (ai_move (ai, 6, 5));
22224        assert_true (ai_move (ai, 4, 7));
22225        assert_true (ai_move (ai, 2, 7));
22226        assert_true (ai_move (ai, 1, 7));
22227        assert_true (ai_move (ai, 5, 6));
22228        assert_true (ai_move (ai, 7, 5));
22229        assert_true (ai_move (ai, 5, 4));
22230        assert_true (ai_move (ai, 6, 3));
22231        assert_true (ai_move (ai, 5, 3));
22232        assert_true (ai_move (ai, 6, 7));
22233        assert_true (ai_move (ai, 5, 1));
22234        assert_true (ai_move (ai, 6, 2));
22235        assert_true (ai_move (ai, 1, 6));
22236        assert_true (ai_move (ai, 4, 2));
22237        assert_true (ai_move (ai, 6, 1));
22238        assert_true (ai_move (ai, 6, 6));
22239        assert_true (ai_move (ai, 7, 1));
22240        assert_true (ai_move (ai, 7, 3));
22241        assert_true (ai_move (ai, 0, 3));
22242        assert_true (ai_move (ai, 0, 6));
22243        assert_true (ai_move (ai, 0, 7));
22244        assert_true (ai_move (ai, 7, 2));
22245        assert_true (ai_move (ai, 7, 0));
22246        assert_true (game.pass ());
22247        assert_true (ai_move (ai, 1, 0));
22248        assert_true (ai_move (ai, 1, 1));
22249        assert_true (ai_move (ai, 7, 7));
22250        assert_true (ai_move (ai, 7, 6));
22251        assert_true (ai_move (ai, 7, 4));
22252        assert_true (game.pass ());
22253        assert_true (ai_move (ai, 0, 1));
22254        assert_true (ai_move (ai, 0, 0));
22255    }
22256
22257    private static inline void test_complete_reversi_game_281 ()
22258    {
22259                                  /* 0 1 2 3 4 5 6 7 */
22260        string [] board = {/* 0 */ " . . . . . . . .",
22261                           /* 1 */ " . . . . . . . .",
22262                           /* 2 */ " . . . L . . . .",
22263                           /* 3 */ " . . . L D . . .",
22264                           /* 4 */ " . . L D D . . .",
22265                           /* 5 */ " . L . . . D . .",
22266                           /* 6 */ " . . . . . . . .",
22267                           /* 7 */ " . . . . . . . ."};
22268
22269        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22270        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22271
22272        assert_true (ai_move (ai, 1, 4));
22273        assert_true (ai_move (ai, 5, 3));
22274        assert_true (ai_move (ai, 6, 2));
22275        assert_true (ai_move (ai, 6, 3));
22276        assert_true (ai_move (ai, 6, 4));
22277        assert_true (ai_move (ai, 7, 3));
22278        assert_true (ai_move (ai, 2, 2));
22279        assert_true (ai_move (ai, 1, 2));
22280        assert_true (ai_move (ai, 3, 1));
22281        assert_true (ai_move (ai, 2, 1));
22282        assert_true (ai_move (ai, 1, 3));
22283        assert_true (ai_move (ai, 5, 1));
22284        assert_true (ai_move (ai, 2, 0));
22285        assert_true (ai_move (ai, 7, 5));
22286        assert_true (ai_move (ai, 0, 2));
22287        assert_true (ai_move (ai, 4, 6));
22288        assert_true (ai_move (ai, 4, 2));
22289        assert_true (ai_move (ai, 3, 5));
22290        assert_true (ai_move (ai, 3, 6));
22291        assert_true (ai_move (ai, 2, 6));
22292        assert_true (ai_move (ai, 3, 7));
22293        assert_true (ai_move (ai, 4, 1));
22294        assert_true (ai_move (ai, 5, 2));
22295        assert_true (ai_move (ai, 2, 3));
22296        assert_true (ai_move (ai, 7, 2));
22297        assert_true (ai_move (ai, 0, 5));
22298        assert_true (ai_move (ai, 5, 0));
22299        assert_true (ai_move (ai, 0, 3));
22300        assert_true (ai_move (ai, 4, 0));
22301        assert_true (ai_move (ai, 4, 5));
22302        assert_true (ai_move (ai, 5, 6));
22303        assert_true (ai_move (ai, 2, 5));
22304        assert_true (ai_move (ai, 2, 7));
22305        assert_true (ai_move (ai, 5, 7));
22306        assert_true (ai_move (ai, 7, 4));
22307        assert_true (ai_move (ai, 7, 1));
22308        assert_true (ai_move (ai, 6, 5));
22309        assert_true (ai_move (ai, 5, 4));
22310        assert_true (ai_move (ai, 4, 7));
22311        assert_true (ai_move (ai, 1, 7));
22312        assert_true (ai_move (ai, 0, 4));
22313        assert_true (ai_move (ai, 0, 1));
22314        assert_true (ai_move (ai, 6, 6));
22315        assert_true (ai_move (ai, 3, 0));
22316        assert_true (ai_move (ai, 1, 0));
22317        assert_true (ai_move (ai, 0, 0));
22318        assert_true (ai_move (ai, 0, 6));
22319        assert_true (ai_move (ai, 1, 1));
22320        assert_true (ai_move (ai, 6, 1));
22321        assert_true (ai_move (ai, 6, 0));
22322        assert_true (ai_move (ai, 1, 6));
22323        assert_true (ai_move (ai, 7, 7));
22324        assert_true (ai_move (ai, 7, 6));
22325        assert_true (ai_move (ai, 7, 0));
22326        assert_true (game.pass ());
22327        assert_true (ai_move (ai, 6, 7));
22328        assert_true (game.pass ());
22329        assert_true (ai_move (ai, 0, 7));
22330    }
22331
22332    private static inline void test_complete_reversi_game_282 ()
22333    {
22334                                  /* 0 1 2 3 4 5 6 7 */
22335        string [] board = {/* 0 */ " . . . . . . . .",
22336                           /* 1 */ " . . . . . . . .",
22337                           /* 2 */ " . . . L . . . .",
22338                           /* 3 */ " . . D D L . . .",
22339                           /* 4 */ " . . . L L L . .",
22340                           /* 5 */ " . . . . . D . .",
22341                           /* 6 */ " . . . . . . . .",
22342                           /* 7 */ " . . . . . . . ."};
22343
22344        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22345        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22346
22347        assert_true (ai_move (ai, 4, 1));
22348        assert_true (ai_move (ai, 5, 6));
22349        assert_true (ai_move (ai, 5, 3));
22350        assert_true (ai_move (ai, 6, 2));
22351        assert_true (ai_move (ai, 6, 3));
22352        assert_true (ai_move (ai, 5, 2));
22353        assert_true (ai_move (ai, 3, 5));
22354        assert_true (ai_move (ai, 7, 4));
22355        assert_true (ai_move (ai, 6, 4));
22356        assert_true (ai_move (ai, 6, 5));
22357        assert_true (ai_move (ai, 4, 2));
22358        assert_true (ai_move (ai, 3, 1));
22359        assert_true (ai_move (ai, 5, 1));
22360        assert_true (ai_move (ai, 4, 0));
22361        assert_true (ai_move (ai, 2, 0));
22362        assert_true (ai_move (ai, 3, 0));
22363        assert_true (ai_move (ai, 5, 0));
22364        assert_true (ai_move (ai, 2, 5));
22365        assert_true (ai_move (ai, 6, 0));
22366        assert_true (ai_move (ai, 1, 2));
22367        assert_true (ai_move (ai, 7, 2));
22368        assert_true (ai_move (ai, 3, 6));
22369        assert_true (ai_move (ai, 7, 3));
22370        assert_true (ai_move (ai, 7, 1));
22371        assert_true (ai_move (ai, 4, 5));
22372        assert_true (ai_move (ai, 2, 1));
22373        assert_true (ai_move (ai, 5, 7));
22374        assert_true (ai_move (ai, 4, 6));
22375        assert_true (ai_move (ai, 2, 2));
22376        assert_true (ai_move (ai, 4, 7));
22377        assert_true (ai_move (ai, 2, 7));
22378        assert_true (ai_move (ai, 3, 7));
22379        assert_true (ai_move (ai, 1, 3));
22380        assert_true (ai_move (ai, 1, 4));
22381        assert_true (ai_move (ai, 1, 5));
22382        assert_true (ai_move (ai, 2, 4));
22383        assert_true (ai_move (ai, 0, 2));
22384        assert_true (ai_move (ai, 2, 6));
22385        assert_true (ai_move (ai, 0, 5));
22386        assert_true (ai_move (ai, 0, 3));
22387        assert_true (ai_move (ai, 0, 4));
22388        assert_true (ai_move (ai, 6, 1));
22389        assert_true (ai_move (ai, 7, 5));
22390        assert_true (ai_move (ai, 7, 6));
22391        assert_true (ai_move (ai, 1, 6));
22392        assert_true (ai_move (ai, 0, 7));
22393        assert_true (ai_move (ai, 1, 7));
22394        assert_true (ai_move (ai, 0, 6));
22395        assert_true (ai_move (ai, 6, 6));
22396        assert_true (ai_move (ai, 0, 1));
22397        assert_true (ai_move (ai, 1, 1));
22398        assert_true (ai_move (ai, 7, 7));
22399        assert_true (ai_move (ai, 6, 7));
22400        assert_true (ai_move (ai, 1, 0));
22401        assert_true (ai_move (ai, 0, 0));
22402    }
22403
22404    private static inline void test_complete_reversi_game_283 ()
22405    {
22406                                  /* 0 1 2 3 4 5 6 7 */
22407        string [] board = {/* 0 */ " . . . . . . . .",
22408                           /* 1 */ " . . . . . . . .",
22409                           /* 2 */ " . . . L . L . .",
22410                           /* 3 */ " . . D D L . . .",
22411                           /* 4 */ " . . . L D . . .",
22412                           /* 5 */ " . . . . . D . .",
22413                           /* 6 */ " . . . . . . . .",
22414                           /* 7 */ " . . . . . . . ."};
22415
22416        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22417        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22418
22419        assert_true (ai_move (ai, 4, 1));
22420        assert_true (ai_move (ai, 2, 1));
22421        assert_true (ai_move (ai, 6, 3));
22422        assert_true (ai_move (ai, 1, 2));
22423        assert_true (ai_move (ai, 3, 1));
22424        assert_true (ai_move (ai, 4, 5));
22425        assert_true (ai_move (ai, 1, 4));
22426        assert_true (ai_move (ai, 6, 5));
22427        assert_true (ai_move (ai, 5, 3));
22428        assert_true (ai_move (ai, 5, 4));
22429        assert_true (ai_move (ai, 3, 6));
22430        assert_true (ai_move (ai, 4, 6));
22431        assert_true (ai_move (ai, 2, 4));
22432        assert_true (ai_move (ai, 5, 0));
22433        assert_true (ai_move (ai, 5, 1));
22434        assert_true (ai_move (ai, 3, 0));
22435        assert_true (ai_move (ai, 5, 6));
22436        assert_true (ai_move (ai, 1, 3));
22437        assert_true (ai_move (ai, 7, 4));
22438        assert_true (ai_move (ai, 0, 5));
22439        assert_true (ai_move (ai, 0, 2));
22440        assert_true (ai_move (ai, 0, 3));
22441        assert_true (ai_move (ai, 2, 2));
22442        assert_true (ai_move (ai, 2, 5));
22443        assert_true (ai_move (ai, 4, 2));
22444        assert_true (ai_move (ai, 6, 4));
22445        assert_true (ai_move (ai, 2, 6));
22446        assert_true (ai_move (ai, 3, 5));
22447        assert_true (ai_move (ai, 6, 2));
22448        assert_true (ai_move (ai, 4, 0));
22449        assert_true (ai_move (ai, 7, 5));
22450        assert_true (ai_move (ai, 3, 7));
22451        assert_true (ai_move (ai, 2, 0));
22452        assert_true (ai_move (ai, 1, 0));
22453        assert_true (ai_move (ai, 2, 7));
22454        assert_true (ai_move (ai, 1, 5));
22455        assert_true (ai_move (ai, 4, 7));
22456        assert_true (ai_move (ai, 6, 0));
22457        assert_true (ai_move (ai, 1, 7));
22458        assert_true (ai_move (ai, 5, 7));
22459        assert_true (ai_move (ai, 6, 7));
22460        assert_true (ai_move (ai, 6, 1));
22461        assert_true (ai_move (ai, 0, 4));
22462        assert_true (ai_move (ai, 0, 1));
22463        assert_true (ai_move (ai, 6, 6));
22464        assert_true (ai_move (ai, 0, 6));
22465        assert_true (ai_move (ai, 7, 0));
22466        assert_true (ai_move (ai, 1, 6));
22467        assert_true (ai_move (ai, 0, 0));
22468        assert_true (ai_move (ai, 7, 2));
22469        assert_true (ai_move (ai, 0, 7));
22470        assert_true (ai_move (ai, 7, 3));
22471        assert_true (ai_move (ai, 7, 1));
22472        assert_true (ai_move (ai, 1, 1));
22473        assert_true (game.pass ());
22474        assert_true (ai_move (ai, 7, 7));
22475        assert_true (ai_move (ai, 7, 6));
22476    }
22477
22478    private static inline void test_complete_reversi_game_284 ()
22479    {
22480                                  /* 0 1 2 3 4 5 6 7 */
22481        string [] board = {/* 0 */ " . . . . . . . .",
22482                           /* 1 */ " . . . . . . . .",
22483                           /* 2 */ " . . . L . . . .",
22484                           /* 3 */ " . . L D D . . .",
22485                           /* 4 */ " . L . L D . . .",
22486                           /* 5 */ " . . . . . D . .",
22487                           /* 6 */ " . . . . . . . .",
22488                           /* 7 */ " . . . . . . . ."};
22489
22490        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22491        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22492
22493        assert_true (ai_move (ai, 1, 3));
22494        assert_true (ai_move (ai, 5, 2));
22495        assert_true (ai_move (ai, 5, 3));
22496        assert_true (ai_move (ai, 1, 2));
22497        assert_true (ai_move (ai, 5, 1));
22498        assert_true (ai_move (ai, 5, 4));
22499        assert_true (ai_move (ai, 3, 1));
22500        assert_true (ai_move (ai, 5, 6));
22501        assert_true (ai_move (ai, 5, 7));
22502        assert_true (ai_move (ai, 2, 1));
22503        assert_true (ai_move (ai, 0, 3));
22504        assert_true (ai_move (ai, 6, 5));
22505        assert_true (ai_move (ai, 7, 5));
22506        assert_true (ai_move (ai, 6, 3));
22507        assert_true (ai_move (ai, 4, 1));
22508        assert_true (ai_move (ai, 5, 0));
22509        assert_true (ai_move (ai, 2, 5));
22510        assert_true (ai_move (ai, 3, 0));
22511        assert_true (ai_move (ai, 3, 5));
22512        assert_true (ai_move (ai, 0, 5));
22513        assert_true (ai_move (ai, 6, 4));
22514        assert_true (ai_move (ai, 2, 6));
22515        assert_true (ai_move (ai, 3, 6));
22516        assert_true (ai_move (ai, 7, 4));
22517        assert_true (ai_move (ai, 2, 7));
22518        assert_true (ai_move (ai, 7, 6));
22519        assert_true (ai_move (ai, 1, 5));
22520        assert_true (ai_move (ai, 4, 6));
22521        assert_true (ai_move (ai, 6, 6));
22522        assert_true (ai_move (ai, 4, 7));
22523        assert_true (ai_move (ai, 3, 7));
22524        assert_true (ai_move (ai, 2, 4));
22525        assert_true (ai_move (ai, 2, 2));
22526        assert_true (ai_move (ai, 4, 5));
22527        assert_true (ai_move (ai, 7, 2));
22528        assert_true (ai_move (ai, 4, 2));
22529        assert_true (ai_move (ai, 6, 2));
22530        assert_true (ai_move (ai, 6, 1));
22531        assert_true (ai_move (ai, 0, 4));
22532        assert_true (ai_move (ai, 0, 2));
22533        assert_true (ai_move (ai, 6, 7));
22534        assert_true (ai_move (ai, 0, 6));
22535        assert_true (ai_move (ai, 7, 3));
22536        assert_true (ai_move (ai, 7, 1));
22537        assert_true (ai_move (ai, 4, 0));
22538        assert_true (ai_move (ai, 2, 0));
22539        assert_true (ai_move (ai, 1, 6));
22540        assert_true (ai_move (ai, 0, 7));
22541        assert_true (ai_move (ai, 6, 0));
22542        assert_true (ai_move (ai, 1, 7));
22543        assert_true (ai_move (ai, 1, 0));
22544        assert_true (ai_move (ai, 7, 7));
22545        assert_true (ai_move (ai, 1, 1));
22546        assert_true (ai_move (ai, 0, 0));
22547        assert_true (ai_move (ai, 0, 1));
22548        assert_true (ai_move (ai, 7, 0));
22549    }
22550
22551    private static inline void test_complete_reversi_game_285 ()
22552    {
22553                                  /* 0 1 2 3 4 5 6 7 */
22554        string [] board = {/* 0 */ " . . . . . . . .",
22555                           /* 1 */ " . . . . . . . .",
22556                           /* 2 */ " . L . L . . . .",
22557                           /* 3 */ " . . L D D . . .",
22558                           /* 4 */ " . . . L D . . .",
22559                           /* 5 */ " . . . . . D . .",
22560                           /* 6 */ " . . . . . . . .",
22561                           /* 7 */ " . . . . . . . ."};
22562
22563        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22564        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22565
22566        assert_true (ai_move (ai, 1, 3));
22567        assert_true (ai_move (ai, 5, 2));
22568        assert_true (ai_move (ai, 5, 3));
22569        assert_true (ai_move (ai, 1, 4));
22570        assert_true (ai_move (ai, 5, 1));
22571        assert_true (ai_move (ai, 5, 4));
22572        assert_true (ai_move (ai, 3, 1));
22573        assert_true (ai_move (ai, 5, 6));
22574        assert_true (ai_move (ai, 5, 7));
22575        assert_true (ai_move (ai, 2, 1));
22576        assert_true (ai_move (ai, 0, 3));
22577        assert_true (ai_move (ai, 6, 5));
22578        assert_true (ai_move (ai, 7, 5));
22579        assert_true (ai_move (ai, 6, 3));
22580        assert_true (ai_move (ai, 4, 1));
22581        assert_true (ai_move (ai, 5, 0));
22582        assert_true (ai_move (ai, 2, 5));
22583        assert_true (ai_move (ai, 3, 0));
22584        assert_true (ai_move (ai, 3, 5));
22585        assert_true (ai_move (ai, 0, 5));
22586        assert_true (ai_move (ai, 6, 4));
22587        assert_true (ai_move (ai, 2, 6));
22588        assert_true (ai_move (ai, 3, 6));
22589        assert_true (ai_move (ai, 7, 4));
22590        assert_true (ai_move (ai, 2, 7));
22591        assert_true (ai_move (ai, 7, 6));
22592        assert_true (ai_move (ai, 1, 5));
22593        assert_true (ai_move (ai, 4, 6));
22594        assert_true (ai_move (ai, 6, 6));
22595        assert_true (ai_move (ai, 4, 7));
22596        assert_true (ai_move (ai, 3, 7));
22597        assert_true (ai_move (ai, 2, 4));
22598        assert_true (ai_move (ai, 2, 2));
22599        assert_true (ai_move (ai, 4, 5));
22600        assert_true (ai_move (ai, 7, 2));
22601        assert_true (ai_move (ai, 4, 2));
22602        assert_true (ai_move (ai, 6, 2));
22603        assert_true (ai_move (ai, 6, 1));
22604        assert_true (ai_move (ai, 0, 4));
22605        assert_true (ai_move (ai, 0, 2));
22606        assert_true (ai_move (ai, 6, 7));
22607        assert_true (ai_move (ai, 0, 6));
22608        assert_true (ai_move (ai, 7, 3));
22609        assert_true (ai_move (ai, 7, 1));
22610        assert_true (ai_move (ai, 4, 0));
22611        assert_true (ai_move (ai, 2, 0));
22612        assert_true (ai_move (ai, 1, 6));
22613        assert_true (ai_move (ai, 0, 7));
22614        assert_true (ai_move (ai, 6, 0));
22615        assert_true (ai_move (ai, 1, 7));
22616        assert_true (ai_move (ai, 1, 0));
22617        assert_true (ai_move (ai, 7, 7));
22618        assert_true (ai_move (ai, 1, 1));
22619        assert_true (ai_move (ai, 0, 0));
22620        assert_true (ai_move (ai, 0, 1));
22621        assert_true (ai_move (ai, 7, 0));
22622    }
22623
22624    private static inline void test_complete_reversi_game_286 ()
22625    {
22626                                  /* 0 1 2 3 4 5 6 7 */
22627        string [] board = {/* 0 */ " . . . . . . . .",
22628                           /* 1 */ " . . . . . . . .",
22629                           /* 2 */ " . . D L . . . .",
22630                           /* 3 */ " . . . D L . . .",
22631                           /* 4 */ " . . . L L L . .",
22632                           /* 5 */ " . . . . . D . .",
22633                           /* 6 */ " . . . . . . . .",
22634                           /* 7 */ " . . . . . . . ."};
22635
22636        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22637        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22638
22639        assert_true (ai_move (ai, 4, 2));
22640        assert_true (ai_move (ai, 5, 6));
22641        assert_true (ai_move (ai, 5, 3));
22642        assert_true (ai_move (ai, 6, 2));
22643        assert_true (ai_move (ai, 6, 4));
22644        assert_true (ai_move (ai, 5, 2));
22645        assert_true (ai_move (ai, 4, 6));
22646        assert_true (ai_move (ai, 4, 1));
22647        assert_true (ai_move (ai, 6, 5));
22648        assert_true (ai_move (ai, 1, 2));
22649        assert_true (ai_move (ai, 6, 3));
22650        assert_true (ai_move (ai, 7, 5));
22651        assert_true (ai_move (ai, 2, 1));
22652        assert_true (ai_move (ai, 4, 5));
22653        assert_true (ai_move (ai, 2, 3));
22654        assert_true (ai_move (ai, 7, 2));
22655        assert_true (ai_move (ai, 0, 2));
22656        assert_true (ai_move (ai, 2, 4));
22657        assert_true (ai_move (ai, 5, 0));
22658        assert_true (ai_move (ai, 3, 1));
22659        assert_true (ai_move (ai, 4, 0));
22660        assert_true (ai_move (ai, 1, 4));
22661        assert_true (ai_move (ai, 1, 3));
22662        assert_true (ai_move (ai, 2, 0));
22663        assert_true (ai_move (ai, 0, 5));
22664        assert_true (ai_move (ai, 3, 0));
22665        assert_true (ai_move (ai, 1, 0));
22666        assert_true (ai_move (ai, 4, 7));
22667        assert_true (ai_move (ai, 5, 1));
22668        assert_true (ai_move (ai, 0, 3));
22669        assert_true (ai_move (ai, 5, 7));
22670        assert_true (ai_move (ai, 0, 4));
22671        assert_true (ai_move (ai, 3, 7));
22672        assert_true (ai_move (ai, 6, 6));
22673        assert_true (ai_move (ai, 1, 5));
22674        assert_true (ai_move (ai, 2, 5));
22675        assert_true (ai_move (ai, 2, 6));
22676        assert_true (ai_move (ai, 6, 7));
22677        assert_true (ai_move (ai, 7, 3));
22678        assert_true (ai_move (ai, 2, 7));
22679        assert_true (ai_move (ai, 7, 1));
22680        assert_true (ai_move (ai, 3, 6));
22681        assert_true (ai_move (ai, 1, 6));
22682        assert_true (ai_move (ai, 7, 4));
22683        assert_true (ai_move (ai, 3, 5));
22684        assert_true (ai_move (ai, 1, 1));
22685        assert_true (ai_move (ai, 7, 6));
22686        assert_true (ai_move (ai, 7, 7));
22687        assert_true (ai_move (ai, 0, 1));
22688        assert_true (ai_move (ai, 7, 0));
22689        assert_true (game.pass ());
22690        assert_true (ai_move (ai, 6, 0));
22691        assert_true (ai_move (ai, 6, 1));
22692        assert_true (ai_move (ai, 0, 0));
22693        assert_true (game.pass ());
22694        assert_true (ai_move (ai, 0, 7));
22695        assert_true (ai_move (ai, 0, 6));
22696        assert_true (ai_move (ai, 1, 7));
22697    }
22698
22699    private static inline void test_complete_reversi_game_287 ()
22700    {
22701                                  /* 0 1 2 3 4 5 6 7 */
22702        string [] board = {/* 0 */ " . . . . . . . .",
22703                           /* 1 */ " . . . . . . . .",
22704                           /* 2 */ " . . D L . L . .",
22705                           /* 3 */ " . . . D L . . .",
22706                           /* 4 */ " . . . L D . . .",
22707                           /* 5 */ " . . . . . D . .",
22708                           /* 6 */ " . . . . . . . .",
22709                           /* 7 */ " . . . . . . . ."};
22710
22711        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22712        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22713
22714        assert_true (ai_move (ai, 3, 1));
22715        assert_true (ai_move (ai, 5, 4));
22716        assert_true (ai_move (ai, 6, 5));
22717        assert_true (ai_move (ai, 6, 4));
22718        assert_true (ai_move (ai, 5, 3));
22719        assert_true (ai_move (ai, 5, 6));
22720        assert_true (ai_move (ai, 4, 7));
22721        assert_true (ai_move (ai, 5, 7));
22722        assert_true (ai_move (ai, 6, 7));
22723        assert_true (ai_move (ai, 7, 5));
22724        assert_true (ai_move (ai, 6, 3));
22725        assert_true (ai_move (ai, 6, 2));
22726        assert_true (ai_move (ai, 2, 5));
22727        assert_true (ai_move (ai, 4, 2));
22728        assert_true (ai_move (ai, 5, 1));
22729        assert_true (ai_move (ai, 4, 6));
22730        assert_true (ai_move (ai, 3, 6));
22731        assert_true (ai_move (ai, 4, 1));
22732        assert_true (ai_move (ai, 3, 5));
22733        assert_true (ai_move (ai, 1, 2));
22734        assert_true (ai_move (ai, 1, 3));
22735        assert_true (ai_move (ai, 5, 0));
22736        assert_true (ai_move (ai, 2, 1));
22737        assert_true (ai_move (ai, 2, 0));
22738        assert_true (ai_move (ai, 0, 2));
22739        assert_true (ai_move (ai, 2, 6));
22740        assert_true (ai_move (ai, 7, 2));
22741        assert_true (ai_move (ai, 1, 5));
22742        assert_true (ai_move (ai, 1, 4));
22743        assert_true (ai_move (ai, 7, 4));
22744        assert_true (ai_move (ai, 7, 3));
22745        assert_true (ai_move (ai, 7, 1));
22746        assert_true (ai_move (ai, 4, 5));
22747        assert_true (ai_move (ai, 2, 7));
22748        assert_true (ai_move (ai, 0, 5));
22749        assert_true (ai_move (ai, 3, 7));
22750        assert_true (ai_move (ai, 1, 7));
22751        assert_true (ai_move (ai, 0, 4));
22752        assert_true (ai_move (ai, 0, 3));
22753        assert_true (ai_move (ai, 1, 0));
22754        assert_true (ai_move (ai, 2, 4));
22755        assert_true (ai_move (ai, 2, 3));
22756        assert_true (ai_move (ai, 6, 1));
22757        assert_true (ai_move (ai, 0, 1));
22758        assert_true (ai_move (ai, 0, 0));
22759        assert_true (ai_move (ai, 0, 6));
22760        assert_true (ai_move (ai, 1, 6));
22761        assert_true (ai_move (ai, 6, 6));
22762        assert_true (ai_move (ai, 0, 7));
22763        assert_true (ai_move (ai, 6, 0));
22764        assert_true (ai_move (ai, 3, 0));
22765        assert_true (ai_move (ai, 4, 0));
22766        assert_true (ai_move (ai, 1, 1));
22767        assert_true (game.pass ());
22768        assert_true (ai_move (ai, 7, 7));
22769        assert_true (ai_move (ai, 7, 6));
22770        assert_true (ai_move (ai, 7, 0));
22771    }
22772
22773    private static inline void test_complete_reversi_game_288 ()
22774    {
22775                                  /* 0 1 2 3 4 5 6 7 */
22776        string [] board = {/* 0 */ " . . . . . . . .",
22777                           /* 1 */ " . . . . . . . .",
22778                           /* 2 */ " . L L L . . . .",
22779                           /* 3 */ " . . . D D . . .",
22780                           /* 4 */ " . . . L D . . .",
22781                           /* 5 */ " . . . . . D . .",
22782                           /* 6 */ " . . . . . . . .",
22783                           /* 7 */ " . . . . . . . ."};
22784
22785        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22786        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22787
22788        assert_true (ai_move (ai, 1, 1));
22789        assert_true (ai_move (ai, 5, 4));
22790        assert_true (ai_move (ai, 0, 2));
22791        assert_true (ai_move (ai, 5, 6));
22792        assert_true (ai_move (ai, 4, 2));
22793        assert_true (ai_move (ai, 2, 1));
22794        assert_true (ai_move (ai, 3, 0));
22795        assert_true (ai_move (ai, 5, 2));
22796        assert_true (ai_move (ai, 3, 1));
22797        assert_true (ai_move (ai, 2, 4));
22798        assert_true (ai_move (ai, 6, 2));
22799        assert_true (ai_move (ai, 5, 1));
22800        assert_true (ai_move (ai, 5, 3));
22801        assert_true (ai_move (ai, 4, 1));
22802        assert_true (ai_move (ai, 4, 0));
22803        assert_true (ai_move (ai, 2, 3));
22804        assert_true (ai_move (ai, 1, 5));
22805        assert_true (ai_move (ai, 7, 2));
22806        assert_true (ai_move (ai, 6, 5));
22807        assert_true (ai_move (ai, 5, 0));
22808        assert_true (ai_move (ai, 1, 4));
22809        assert_true (ai_move (ai, 2, 0));
22810        assert_true (ai_move (ai, 5, 7));
22811        assert_true (ai_move (ai, 1, 3));
22812        assert_true (ai_move (ai, 0, 3));
22813        assert_true (ai_move (ai, 6, 4));
22814        assert_true (ai_move (ai, 2, 5));
22815        assert_true (ai_move (ai, 1, 0));
22816        assert_true (ai_move (ai, 7, 3));
22817        assert_true (ai_move (ai, 2, 6));
22818        assert_true (ai_move (ai, 3, 5));
22819        assert_true (ai_move (ai, 4, 5));
22820        assert_true (ai_move (ai, 2, 7));
22821        assert_true (ai_move (ai, 3, 6));
22822        assert_true (ai_move (ai, 4, 7));
22823        assert_true (ai_move (ai, 7, 4));
22824        assert_true (ai_move (ai, 4, 6));
22825        assert_true (ai_move (ai, 3, 7));
22826        assert_true (ai_move (ai, 6, 3));
22827        assert_true (ai_move (ai, 7, 5));
22828        assert_true (ai_move (ai, 6, 6));
22829        assert_true (ai_move (ai, 0, 5));
22830        assert_true (ai_move (ai, 0, 4));
22831        assert_true (ai_move (ai, 0, 0));
22832        assert_true (ai_move (ai, 0, 6));
22833        assert_true (ai_move (ai, 0, 1));
22834        assert_true (ai_move (ai, 1, 6));
22835        assert_true (ai_move (ai, 0, 7));
22836        assert_true (ai_move (ai, 1, 7));
22837        assert_true (ai_move (ai, 7, 7));
22838        assert_true (ai_move (ai, 6, 7));
22839        assert_true (ai_move (ai, 7, 6));
22840        assert_true (ai_move (ai, 6, 1));
22841        assert_true (ai_move (ai, 7, 0));
22842        assert_true (ai_move (ai, 6, 0));
22843        assert_true (ai_move (ai, 7, 1));
22844    }
22845
22846    private static inline void test_complete_reversi_game_289 ()
22847    {
22848                                  /* 0 1 2 3 4 5 6 7 */
22849        string [] board = {/* 0 */ " . . . . . . . .",
22850                           /* 1 */ " . . D . . . . .",
22851                           /* 2 */ " . . . D . . . .",
22852                           /* 3 */ " . . . L D . . .",
22853                           /* 4 */ " . . . L L . . .",
22854                           /* 5 */ " . . . . . L . .",
22855                           /* 6 */ " . . . . . . L .",
22856                           /* 7 */ " . . . . . . . ."};
22857
22858        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22859        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22860
22861        assert_true (ai_move (ai, 4, 5));
22862        assert_true (ai_move (ai, 3, 5));
22863        assert_true (ai_move (ai, 2, 4));
22864        assert_true (ai_move (ai, 1, 5));
22865        assert_true (ai_move (ai, 1, 4));
22866        assert_true (ai_move (ai, 3, 1));
22867        assert_true (ai_move (ai, 5, 6));
22868        assert_true (ai_move (ai, 5, 7));
22869        assert_true (ai_move (ai, 2, 5));
22870        assert_true (ai_move (ai, 2, 3));
22871        assert_true (ai_move (ai, 4, 6));
22872        assert_true (ai_move (ai, 2, 6));
22873        assert_true (ai_move (ai, 3, 6));
22874        assert_true (ai_move (ai, 1, 3));
22875        assert_true (ai_move (ai, 0, 4));
22876        assert_true (ai_move (ai, 0, 5));
22877        assert_true (ai_move (ai, 0, 2));
22878        assert_true (ai_move (ai, 4, 7));
22879        assert_true (ai_move (ai, 2, 7));
22880        assert_true (ai_move (ai, 0, 3));
22881        assert_true (ai_move (ai, 0, 6));
22882        assert_true (ai_move (ai, 5, 4));
22883        assert_true (ai_move (ai, 2, 2));
22884        assert_true (ai_move (ai, 1, 2));
22885        assert_true (ai_move (ai, 4, 0));
22886        assert_true (ai_move (ai, 3, 7));
22887        assert_true (ai_move (ai, 6, 7));
22888        assert_true (ai_move (ai, 1, 1));
22889        assert_true (ai_move (ai, 6, 4));
22890        assert_true (ai_move (ai, 6, 3));
22891        assert_true (ai_move (ai, 4, 1));
22892        assert_true (ai_move (ai, 4, 2));
22893        assert_true (ai_move (ai, 5, 2));
22894        assert_true (ai_move (ai, 3, 0));
22895        assert_true (ai_move (ai, 5, 0));
22896        assert_true (ai_move (ai, 5, 1));
22897        assert_true (ai_move (ai, 5, 3));
22898        assert_true (ai_move (ai, 6, 2));
22899        assert_true (ai_move (ai, 7, 2));
22900        assert_true (ai_move (ai, 6, 5));
22901        assert_true (ai_move (ai, 7, 4));
22902        assert_true (ai_move (ai, 6, 0));
22903        assert_true (ai_move (ai, 6, 1));
22904        assert_true (ai_move (ai, 2, 0));
22905        assert_true (ai_move (ai, 0, 0));
22906        assert_true (ai_move (ai, 0, 1));
22907        assert_true (ai_move (ai, 1, 0));
22908        assert_true (ai_move (ai, 7, 0));
22909        assert_true (ai_move (ai, 7, 7));
22910        assert_true (ai_move (ai, 0, 7));
22911        assert_true (ai_move (ai, 7, 1));
22912        assert_true (ai_move (ai, 7, 3));
22913        assert_true (game.pass ());
22914        assert_true (ai_move (ai, 1, 7));
22915        assert_true (ai_move (ai, 1, 6));
22916        assert_true (ai_move (ai, 7, 6));
22917        assert_true (ai_move (ai, 7, 5));
22918    }
22919
22920    private static inline void test_complete_reversi_game_290 ()
22921    {
22922                                  /* 0 1 2 3 4 5 6 7 */
22923        string [] board = {/* 0 */ " . . . . . . . .",
22924                           /* 1 */ " . . D . . . . .",
22925                           /* 2 */ " . . . D . . . .",
22926                           /* 3 */ " . . . L D . . .",
22927                           /* 4 */ " . . . L L L . .",
22928                           /* 5 */ " . . . . . D . .",
22929                           /* 6 */ " . . . . . . . .",
22930                           /* 7 */ " . . . . . . . ."};
22931
22932        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
22933        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
22934
22935        assert_true (ai_move (ai, 6, 5));
22936        assert_true (ai_move (ai, 5, 2));
22937        assert_true (ai_move (ai, 2, 2));
22938        assert_true (ai_move (ai, 4, 5));
22939        assert_true (ai_move (ai, 3, 6));
22940        assert_true (ai_move (ai, 6, 4));
22941        assert_true (ai_move (ai, 7, 3));
22942        assert_true (ai_move (ai, 4, 6));
22943        assert_true (ai_move (ai, 6, 3));
22944        assert_true (ai_move (ai, 5, 6));
22945        assert_true (ai_move (ai, 4, 7));
22946        assert_true (ai_move (ai, 2, 7));
22947        assert_true (ai_move (ai, 4, 1));
22948        assert_true (ai_move (ai, 7, 5));
22949        assert_true (ai_move (ai, 7, 4));
22950        assert_true (ai_move (ai, 5, 3));
22951        assert_true (ai_move (ai, 7, 6));
22952        assert_true (ai_move (ai, 5, 1));
22953        assert_true (ai_move (ai, 5, 0));
22954        assert_true (ai_move (ai, 4, 2));
22955        assert_true (ai_move (ai, 3, 1));
22956        assert_true (ai_move (ai, 4, 0));
22957        assert_true (ai_move (ai, 3, 0));
22958        assert_true (ai_move (ai, 1, 2));
22959        assert_true (ai_move (ai, 0, 2));
22960        assert_true (ai_move (ai, 2, 3));
22961        assert_true (ai_move (ai, 1, 4));
22962        assert_true (ai_move (ai, 1, 3));
22963        assert_true (ai_move (ai, 0, 4));
22964        assert_true (ai_move (ai, 0, 3));
22965        assert_true (ai_move (ai, 3, 7));
22966        assert_true (ai_move (ai, 5, 7));
22967        assert_true (ai_move (ai, 2, 6));
22968        assert_true (ai_move (ai, 6, 7));
22969        assert_true (ai_move (ai, 2, 5));
22970        assert_true (ai_move (ai, 2, 4));
22971        assert_true (ai_move (ai, 3, 5));
22972        assert_true (ai_move (ai, 7, 2));
22973        assert_true (ai_move (ai, 7, 1));
22974        assert_true (ai_move (ai, 2, 0));
22975        assert_true (ai_move (ai, 6, 2));
22976        assert_true (ai_move (ai, 6, 0));
22977        assert_true (ai_move (ai, 1, 5));
22978        assert_true (ai_move (ai, 6, 6));
22979        assert_true (ai_move (ai, 1, 6));
22980        assert_true (ai_move (ai, 1, 7));
22981        assert_true (ai_move (ai, 1, 1));
22982        assert_true (ai_move (ai, 0, 0));
22983        assert_true (ai_move (ai, 0, 1));
22984        assert_true (ai_move (ai, 1, 0));
22985        assert_true (ai_move (ai, 0, 5));
22986        assert_true (ai_move (ai, 0, 6));
22987        assert_true (ai_move (ai, 0, 7));
22988        assert_true (ai_move (ai, 6, 1));
22989        assert_true (ai_move (ai, 7, 7));
22990        assert_true (game.pass ());
22991        assert_true (ai_move (ai, 7, 0));
22992    }
22993
22994    private static inline void test_complete_reversi_game_291 ()
22995    {
22996                                  /* 0 1 2 3 4 5 6 7 */
22997        string [] board = {/* 0 */ " . . . . . . . .",
22998                           /* 1 */ " . . D . . . . .",
22999                           /* 2 */ " . . . D . . . .",
23000                           /* 3 */ " . . . L L L . .",
23001                           /* 4 */ " . . . L D . . .",
23002                           /* 5 */ " . . . . . D . .",
23003                           /* 6 */ " . . . . . . . .",
23004                           /* 7 */ " . . . . . . . ."};
23005
23006        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23007        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23008
23009        assert_true (ai_move (ai, 6, 2));
23010        assert_true (ai_move (ai, 5, 4));
23011        assert_true (ai_move (ai, 6, 5));
23012        assert_true (ai_move (ai, 3, 1));
23013        assert_true (ai_move (ai, 3, 5));
23014        assert_true (ai_move (ai, 3, 6));
23015        assert_true (ai_move (ai, 2, 6));
23016        assert_true (ai_move (ai, 5, 2));
23017        assert_true (ai_move (ai, 5, 1));
23018        assert_true (ai_move (ai, 6, 3));
23019        assert_true (ai_move (ai, 7, 2));
23020        assert_true (ai_move (ai, 4, 5));
23021        assert_true (ai_move (ai, 2, 7));
23022        assert_true (ai_move (ai, 6, 4));
23023        assert_true (ai_move (ai, 7, 3));
23024        assert_true (ai_move (ai, 7, 5));
23025        assert_true (ai_move (ai, 4, 1));
23026        assert_true (ai_move (ai, 4, 6));
23027        assert_true (ai_move (ai, 5, 7));
23028        assert_true (ai_move (ai, 4, 7));
23029        assert_true (ai_move (ai, 3, 7));
23030        assert_true (ai_move (ai, 2, 5));
23031        assert_true (ai_move (ai, 1, 5));
23032        assert_true (ai_move (ai, 5, 6));
23033        assert_true (ai_move (ai, 4, 2));
23034        assert_true (ai_move (ai, 0, 5));
23035        assert_true (ai_move (ai, 1, 4));
23036        assert_true (ai_move (ai, 5, 0));
23037        assert_true (ai_move (ai, 3, 0));
23038        assert_true (ai_move (ai, 2, 0));
23039        assert_true (ai_move (ai, 4, 0));
23040        assert_true (ai_move (ai, 2, 2));
23041        assert_true (ai_move (ai, 1, 2));
23042        assert_true (ai_move (ai, 2, 3));
23043        assert_true (ai_move (ai, 0, 4));
23044        assert_true (ai_move (ai, 0, 2));
23045        assert_true (ai_move (ai, 0, 6));
23046        assert_true (ai_move (ai, 7, 4));
23047        assert_true (ai_move (ai, 7, 6));
23048        assert_true (ai_move (ai, 6, 0));
23049        assert_true (ai_move (ai, 7, 0));
23050        assert_true (ai_move (ai, 7, 1));
23051        assert_true (ai_move (ai, 6, 6));
23052        assert_true (ai_move (ai, 7, 7));
23053        assert_true (ai_move (ai, 6, 1));
23054        assert_true (ai_move (ai, 6, 7));
23055        assert_true (ai_move (ai, 1, 0));
23056        assert_true (ai_move (ai, 1, 7));
23057        assert_true (ai_move (ai, 1, 3));
23058        assert_true (ai_move (ai, 2, 4));
23059        assert_true (ai_move (ai, 1, 6));
23060        assert_true (ai_move (ai, 0, 3));
23061        assert_true (ai_move (ai, 0, 1));
23062        assert_true (ai_move (ai, 1, 1));
23063        assert_true (game.pass ());
23064        assert_true (ai_move (ai, 0, 7));
23065        assert_true (game.pass ());
23066        assert_true (ai_move (ai, 0, 0));
23067    }
23068
23069    private static inline void test_complete_reversi_game_292 ()
23070    {
23071                                  /* 0 1 2 3 4 5 6 7 */
23072        string [] board = {/* 0 */ " . . . . . . . .",
23073                           /* 1 */ " . . D . . . . .",
23074                           /* 2 */ " . . . D . L . .",
23075                           /* 3 */ " . . . L L . . .",
23076                           /* 4 */ " . . . L D . . .",
23077                           /* 5 */ " . . . . . D . .",
23078                           /* 6 */ " . . . . . . . .",
23079                           /* 7 */ " . . . . . . . ."};
23080
23081        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23082        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23083
23084        assert_true (ai_move (ai, 2, 2));
23085        assert_true (ai_move (ai, 5, 4));
23086        assert_true (ai_move (ai, 6, 5));
23087        assert_true (ai_move (ai, 6, 4));
23088        assert_true (ai_move (ai, 5, 3));
23089        assert_true (ai_move (ai, 5, 6));
23090        assert_true (ai_move (ai, 4, 7));
23091        assert_true (ai_move (ai, 5, 7));
23092        assert_true (ai_move (ai, 6, 7));
23093        assert_true (ai_move (ai, 7, 5));
23094        assert_true (ai_move (ai, 6, 3));
23095        assert_true (ai_move (ai, 6, 2));
23096        assert_true (ai_move (ai, 2, 5));
23097        assert_true (ai_move (ai, 4, 2));
23098        assert_true (ai_move (ai, 5, 1));
23099        assert_true (ai_move (ai, 4, 6));
23100        assert_true (ai_move (ai, 3, 6));
23101        assert_true (ai_move (ai, 3, 1));
23102        assert_true (ai_move (ai, 7, 2));
23103        assert_true (ai_move (ai, 5, 0));
23104        assert_true (ai_move (ai, 3, 5));
23105        assert_true (ai_move (ai, 1, 3));
23106        assert_true (ai_move (ai, 1, 2));
23107        assert_true (ai_move (ai, 7, 4));
23108        assert_true (ai_move (ai, 7, 3));
23109        assert_true (ai_move (ai, 7, 1));
23110        assert_true (ai_move (ai, 3, 0));
23111        assert_true (ai_move (ai, 4, 5));
23112        assert_true (ai_move (ai, 4, 0));
23113        assert_true (ai_move (ai, 2, 0));
23114        assert_true (ai_move (ai, 0, 4));
23115        assert_true (ai_move (ai, 1, 5));
23116        assert_true (ai_move (ai, 1, 4));
23117        assert_true (ai_move (ai, 6, 0));
23118        assert_true (ai_move (ai, 2, 4));
23119        assert_true (ai_move (ai, 2, 6));
23120        assert_true (ai_move (ai, 0, 5));
23121        assert_true (ai_move (ai, 1, 0));
23122        assert_true (ai_move (ai, 3, 7));
23123        assert_true (ai_move (ai, 0, 3));
23124        assert_true (ai_move (ai, 0, 2));
23125        assert_true (ai_move (ai, 2, 3));
23126        assert_true (ai_move (ai, 4, 1));
23127        assert_true (ai_move (ai, 2, 7));
23128        assert_true (ai_move (ai, 1, 7));
23129        assert_true (ai_move (ai, 6, 1));
23130        assert_true (ai_move (ai, 7, 0));
23131        assert_true (ai_move (ai, 0, 1));
23132        assert_true (ai_move (ai, 0, 0));
23133        assert_true (ai_move (ai, 6, 6));
23134        assert_true (ai_move (ai, 1, 6));
23135        assert_true (ai_move (ai, 0, 6));
23136        assert_true (ai_move (ai, 7, 6));
23137        assert_true (game.pass ());
23138        assert_true (ai_move (ai, 1, 1));
23139        assert_true (game.pass ());
23140        assert_true (ai_move (ai, 7, 7));
23141        assert_true (game.pass ());
23142        assert_true (ai_move (ai, 0, 7));
23143    }
23144
23145    private static inline void test_complete_reversi_game_293 ()
23146    {
23147                                  /* 0 1 2 3 4 5 6 7 */
23148        string [] board = {/* 0 */ " . . . . . . . .",
23149                           /* 1 */ " . . D L . . . .",
23150                           /* 2 */ " . . . L . . . .",
23151                           /* 3 */ " . . . L D . . .",
23152                           /* 4 */ " . . . L D . . .",
23153                           /* 5 */ " . . . . . D . .",
23154                           /* 6 */ " . . . . . . . .",
23155                           /* 7 */ " . . . . . . . ."};
23156
23157        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23158        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23159
23160        assert_true (ai_move (ai, 2, 5));
23161        assert_true (ai_move (ai, 5, 3));
23162        assert_true (ai_move (ai, 6, 2));
23163        assert_true (ai_move (ai, 6, 3));
23164        assert_true (ai_move (ai, 6, 4));
23165        assert_true (ai_move (ai, 7, 3));
23166        assert_true (ai_move (ai, 4, 1));
23167        assert_true (ai_move (ai, 5, 0));
23168        assert_true (ai_move (ai, 5, 2));
23169        assert_true (ai_move (ai, 5, 1));
23170        assert_true (ai_move (ai, 4, 2));
23171        assert_true (ai_move (ai, 5, 4));
23172        assert_true (ai_move (ai, 7, 2));
23173        assert_true (ai_move (ai, 7, 5));
23174        assert_true (ai_move (ai, 2, 4));
23175        assert_true (ai_move (ai, 5, 6));
23176        assert_true (ai_move (ai, 2, 2));
23177        assert_true (ai_move (ai, 2, 0));
23178        assert_true (ai_move (ai, 5, 7));
23179        assert_true (ai_move (ai, 4, 6));
23180        assert_true (ai_move (ai, 3, 5));
23181        assert_true (ai_move (ai, 6, 5));
23182        assert_true (ai_move (ai, 4, 5));
23183        assert_true (ai_move (ai, 7, 4));
23184        assert_true (ai_move (ai, 7, 6));
23185        assert_true (ai_move (ai, 1, 2));
23186        assert_true (ai_move (ai, 0, 2));
23187        assert_true (ai_move (ai, 1, 5));
23188        assert_true (ai_move (ai, 2, 6));
23189        assert_true (ai_move (ai, 1, 3));
23190        assert_true (ai_move (ai, 3, 6));
23191        assert_true (ai_move (ai, 2, 3));
23192        assert_true (ai_move (ai, 0, 5));
23193        assert_true (ai_move (ai, 2, 7));
23194        assert_true (ai_move (ai, 1, 4));
23195        assert_true (ai_move (ai, 4, 7));
23196        assert_true (ai_move (ai, 3, 7));
23197        assert_true (ai_move (ai, 6, 7));
23198        assert_true (ai_move (ai, 1, 1));
23199        assert_true (ai_move (ai, 0, 4));
23200        assert_true (ai_move (ai, 0, 3));
23201        assert_true (ai_move (ai, 1, 6));
23202        assert_true (ai_move (ai, 4, 0));
23203        assert_true (ai_move (ai, 6, 1));
23204        assert_true (ai_move (ai, 7, 1));
23205        assert_true (ai_move (ai, 7, 0));
23206        assert_true (ai_move (ai, 6, 0));
23207        assert_true (ai_move (ai, 7, 7));
23208        assert_true (ai_move (ai, 0, 7));
23209        assert_true (ai_move (ai, 3, 0));
23210        assert_true (ai_move (ai, 0, 6));
23211        assert_true (ai_move (ai, 6, 6));
23212        assert_true (ai_move (ai, 1, 7));
23213        assert_true (ai_move (ai, 0, 0));
23214        assert_true (ai_move (ai, 0, 1));
23215        assert_true (ai_move (ai, 1, 0));
23216    }
23217
23218    private static inline void test_complete_reversi_game_294 ()
23219    {
23220                                  /* 0 1 2 3 4 5 6 7 */
23221        string [] board = {/* 0 */ " . . . . . . . .",
23222                           /* 1 */ " . . . . . . . .",
23223                           /* 2 */ " . . . . . . . .",
23224                           /* 3 */ " . . . D D . . .",
23225                           /* 4 */ " . . . L L L . .",
23226                           /* 5 */ " . . . . D . . .",
23227                           /* 6 */ " . . . . D L . .",
23228                           /* 7 */ " . . . . . . . ."};
23229
23230        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23231        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23232
23233        assert_true (ai_move (ai, 6, 3));
23234        assert_true (ai_move (ai, 6, 4));
23235        assert_true (ai_move (ai, 2, 5));
23236        assert_true (ai_move (ai, 2, 2));
23237        assert_true (ai_move (ai, 6, 5));
23238        assert_true (ai_move (ai, 3, 6));
23239        assert_true (ai_move (ai, 2, 7));
23240        assert_true (ai_move (ai, 2, 3));
23241        assert_true (ai_move (ai, 1, 3));
23242        assert_true (ai_move (ai, 1, 2));
23243        assert_true (ai_move (ai, 3, 1));
23244        assert_true (ai_move (ai, 2, 1));
23245        assert_true (ai_move (ai, 3, 5));
23246        assert_true (ai_move (ai, 1, 5));
23247        assert_true (ai_move (ai, 1, 4));
23248        assert_true (ai_move (ai, 0, 5));
23249        assert_true (ai_move (ai, 0, 3));
23250        assert_true (ai_move (ai, 0, 4));
23251        assert_true (ai_move (ai, 0, 6));
23252        assert_true (ai_move (ai, 2, 4));
23253        assert_true (ai_move (ai, 2, 0));
23254        assert_true (ai_move (ai, 2, 6));
23255        assert_true (ai_move (ai, 0, 2));
23256        assert_true (ai_move (ai, 3, 2));
23257        assert_true (ai_move (ai, 4, 1));
23258        assert_true (ai_move (ai, 3, 0));
23259        assert_true (ai_move (ai, 4, 0));
23260        assert_true (ai_move (ai, 4, 2));
23261        assert_true (ai_move (ai, 5, 7));
23262        assert_true (ai_move (ai, 7, 2));
23263        assert_true (ai_move (ai, 5, 2));
23264        assert_true (ai_move (ai, 5, 3));
23265        assert_true (ai_move (ai, 7, 4));
23266        assert_true (ai_move (ai, 5, 1));
23267        assert_true (ai_move (ai, 3, 7));
23268        assert_true (ai_move (ai, 4, 7));
23269        assert_true (ai_move (ai, 6, 2));
23270        assert_true (ai_move (ai, 5, 5));
23271        assert_true (ai_move (ai, 6, 7));
23272        assert_true (ai_move (ai, 1, 1));
23273        assert_true (ai_move (ai, 0, 1));
23274        assert_true (ai_move (ai, 0, 0));
23275        assert_true (ai_move (ai, 1, 0));
23276        assert_true (ai_move (ai, 0, 7));
23277        assert_true (ai_move (ai, 6, 6));
23278        assert_true (ai_move (ai, 5, 0));
23279        assert_true (ai_move (ai, 6, 0));
23280        assert_true (ai_move (ai, 1, 7));
23281        assert_true (ai_move (ai, 6, 1));
23282        assert_true (ai_move (ai, 1, 6));
23283        assert_true (game.pass ());
23284        assert_true (ai_move (ai, 7, 0));
23285        assert_true (ai_move (ai, 7, 1));
23286        assert_true (ai_move (ai, 7, 3));
23287        assert_true (ai_move (ai, 7, 5));
23288        assert_true (ai_move (ai, 7, 7));
23289        assert_true (ai_move (ai, 7, 6));
23290    }
23291
23292    private static inline void test_complete_reversi_game_295 ()
23293    {
23294                                  /* 0 1 2 3 4 5 6 7 */
23295        string [] board = {/* 0 */ " . . . . . . . .",
23296                           /* 1 */ " . . . . . . . .",
23297                           /* 2 */ " . . . . . L . .",
23298                           /* 3 */ " . . . D L . . .",
23299                           /* 4 */ " . . . L D . . .",
23300                           /* 5 */ " . . . . D . . .",
23301                           /* 6 */ " . . . . D L . .",
23302                           /* 7 */ " . . . . . . . ."};
23303
23304        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23305        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23306
23307        assert_true (ai_move (ai, 5, 3));
23308        assert_true (ai_move (ai, 3, 6));
23309        assert_true (ai_move (ai, 5, 1));
23310        assert_true (ai_move (ai, 3, 2));
23311        assert_true (ai_move (ai, 2, 1));
23312        assert_true (ai_move (ai, 3, 1));
23313        assert_true (ai_move (ai, 4, 7));
23314        assert_true (ai_move (ai, 5, 5));
23315        assert_true (ai_move (ai, 6, 4));
23316        assert_true (ai_move (ai, 6, 2));
23317        assert_true (ai_move (ai, 4, 2));
23318        assert_true (ai_move (ai, 4, 0));
23319        assert_true (ai_move (ai, 5, 7));
23320        assert_true (ai_move (ai, 4, 1));
23321        assert_true (ai_move (ai, 2, 0));
23322        assert_true (ai_move (ai, 5, 4));
23323        assert_true (ai_move (ai, 7, 2));
23324        assert_true (ai_move (ai, 6, 5));
23325        assert_true (ai_move (ai, 2, 2));
23326        assert_true (ai_move (ai, 2, 3));
23327        assert_true (ai_move (ai, 3, 0));
23328        assert_true (ai_move (ai, 1, 2));
23329        assert_true (ai_move (ai, 5, 0));
23330        assert_true (ai_move (ai, 6, 3));
23331        assert_true (ai_move (ai, 0, 2));
23332        assert_true (ai_move (ai, 3, 7));
23333        assert_true (ai_move (ai, 7, 5));
23334        assert_true (ai_move (ai, 1, 1));
23335        assert_true (ai_move (ai, 1, 3));
23336        assert_true (ai_move (ai, 1, 0));
23337        assert_true (ai_move (ai, 0, 0));
23338        assert_true (ai_move (ai, 2, 4));
23339        assert_true (ai_move (ai, 7, 3));
23340        assert_true (ai_move (ai, 6, 7));
23341        assert_true (ai_move (ai, 2, 5));
23342        assert_true (ai_move (ai, 7, 4));
23343        assert_true (ai_move (ai, 3, 5));
23344        assert_true (ai_move (ai, 1, 4));
23345        assert_true (ai_move (ai, 2, 6));
23346        assert_true (ai_move (ai, 1, 5));
23347        assert_true (ai_move (ai, 0, 4));
23348        assert_true (ai_move (ai, 0, 3));
23349        assert_true (ai_move (ai, 0, 5));
23350        assert_true (ai_move (ai, 0, 1));
23351        assert_true (ai_move (ai, 2, 7));
23352        assert_true (ai_move (ai, 1, 7));
23353        assert_true (ai_move (ai, 1, 6));
23354        assert_true (ai_move (ai, 0, 7));
23355        assert_true (ai_move (ai, 0, 6));
23356        assert_true (ai_move (ai, 6, 6));
23357        assert_true (ai_move (ai, 7, 7));
23358        assert_true (ai_move (ai, 7, 6));
23359        assert_true (game.pass ());
23360        assert_true (ai_move (ai, 6, 1));
23361        assert_true (ai_move (ai, 7, 0));
23362        assert_true (ai_move (ai, 7, 1));
23363        assert_true (ai_move (ai, 6, 0));
23364    }
23365
23366    private static inline void test_complete_reversi_game_296 ()
23367    {
23368                                  /* 0 1 2 3 4 5 6 7 */
23369        string [] board = {/* 0 */ " . . . . . . . .",
23370                           /* 1 */ " . . . . . . . .",
23371                           /* 2 */ " . . . . . . . .",
23372                           /* 3 */ " . . . D D . . .",
23373                           /* 4 */ " . . . L D . . .",
23374                           /* 5 */ " . . . . D . . .",
23375                           /* 6 */ " . . . L L L . .",
23376                           /* 7 */ " . . . . . . . ."};
23377
23378        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23379        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23380
23381        assert_true (ai_move (ai, 2, 7));
23382        assert_true (ai_move (ai, 2, 6));
23383        assert_true (ai_move (ai, 4, 7));
23384        assert_true (ai_move (ai, 5, 2));
23385        assert_true (ai_move (ai, 6, 5));
23386        assert_true (ai_move (ai, 3, 2));
23387        assert_true (ai_move (ai, 2, 5));
23388        assert_true (ai_move (ai, 5, 4));
23389        assert_true (ai_move (ai, 6, 3));
23390        assert_true (ai_move (ai, 6, 4));
23391        assert_true (ai_move (ai, 4, 1));
23392        assert_true (ai_move (ai, 5, 0));
23393        assert_true (ai_move (ai, 3, 0));
23394        assert_true (ai_move (ai, 7, 2));
23395        assert_true (ai_move (ai, 7, 4));
23396        assert_true (ai_move (ai, 6, 2));
23397        assert_true (ai_move (ai, 2, 1));
23398        assert_true (ai_move (ai, 3, 1));
23399        assert_true (ai_move (ai, 2, 3));
23400        assert_true (ai_move (ai, 5, 1));
23401        assert_true (ai_move (ai, 5, 5));
23402        assert_true (ai_move (ai, 3, 7));
23403        assert_true (ai_move (ai, 6, 6));
23404        assert_true (ai_move (ai, 5, 3));
23405        assert_true (ai_move (ai, 7, 3));
23406        assert_true (ai_move (ai, 7, 5));
23407        assert_true (ai_move (ai, 7, 1));
23408        assert_true (ai_move (ai, 7, 0));
23409        assert_true (ai_move (ai, 4, 2));
23410        assert_true (ai_move (ai, 2, 2));
23411        assert_true (ai_move (ai, 2, 0));
23412        assert_true (ai_move (ai, 4, 0));
23413        assert_true (ai_move (ai, 1, 2));
23414        assert_true (ai_move (ai, 0, 2));
23415        assert_true (ai_move (ai, 1, 1));
23416        assert_true (ai_move (ai, 1, 3));
23417        assert_true (ai_move (ai, 6, 0));
23418        assert_true (ai_move (ai, 2, 4));
23419        assert_true (ai_move (ai, 0, 4));
23420        assert_true (ai_move (ai, 3, 5));
23421        assert_true (ai_move (ai, 1, 4));
23422        assert_true (ai_move (ai, 0, 0));
23423        assert_true (ai_move (ai, 1, 0));
23424        assert_true (ai_move (ai, 0, 1));
23425        assert_true (ai_move (ai, 5, 7));
23426        assert_true (ai_move (ai, 0, 3));
23427        assert_true (ai_move (ai, 0, 5));
23428        assert_true (ai_move (ai, 1, 5));
23429        assert_true (ai_move (ai, 7, 6));
23430        assert_true (ai_move (ai, 0, 6));
23431        assert_true (ai_move (ai, 6, 1));
23432        assert_true (ai_move (ai, 7, 7));
23433        assert_true (ai_move (ai, 6, 7));
23434        assert_true (ai_move (ai, 1, 7));
23435        assert_true (ai_move (ai, 0, 7));
23436        assert_true (game.pass ());
23437        assert_true (ai_move (ai, 1, 6));
23438    }
23439
23440    private static inline void test_complete_reversi_game_297 ()
23441    {
23442                                  /* 0 1 2 3 4 5 6 7 */
23443        string [] board = {/* 0 */ " . . . . . . . .",
23444                           /* 1 */ " . . . . . . . .",
23445                           /* 2 */ " . . . L . . . .",
23446                           /* 3 */ " . . . L D . . .",
23447                           /* 4 */ " . . . L D . . .",
23448                           /* 5 */ " . . . . D . . .",
23449                           /* 6 */ " . . . . D L . .",
23450                           /* 7 */ " . . . . . . . ."};
23451
23452        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23453        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23454
23455        assert_true (ai_move (ai, 2, 1));
23456        assert_true (ai_move (ai, 3, 1));
23457        assert_true (ai_move (ai, 2, 5));
23458        assert_true (ai_move (ai, 5, 4));
23459        assert_true (ai_move (ai, 6, 3));
23460        assert_true (ai_move (ai, 6, 5));
23461        assert_true (ai_move (ai, 6, 4));
23462        assert_true (ai_move (ai, 3, 6));
23463        assert_true (ai_move (ai, 2, 7));
23464        assert_true (ai_move (ai, 2, 6));
23465        assert_true (ai_move (ai, 5, 2));
23466        assert_true (ai_move (ai, 2, 4));
23467        assert_true (ai_move (ai, 1, 4));
23468        assert_true (ai_move (ai, 1, 5));
23469        assert_true (ai_move (ai, 2, 2));
23470        assert_true (ai_move (ai, 1, 2));
23471        assert_true (ai_move (ai, 2, 3));
23472        assert_true (ai_move (ai, 1, 3));
23473        assert_true (ai_move (ai, 0, 2));
23474        assert_true (ai_move (ai, 0, 4));
23475        assert_true (ai_move (ai, 4, 2));
23476        assert_true (ai_move (ai, 3, 7));
23477        assert_true (ai_move (ai, 0, 3));
23478        assert_true (ai_move (ai, 2, 0));
23479        assert_true (ai_move (ai, 0, 5));
23480        assert_true (ai_move (ai, 3, 5));
23481        assert_true (ai_move (ai, 4, 1));
23482        assert_true (ai_move (ai, 1, 7));
23483        assert_true (ai_move (ai, 5, 7));
23484        assert_true (ai_move (ai, 5, 1));
23485        assert_true (ai_move (ai, 5, 5));
23486        assert_true (ai_move (ai, 7, 2));
23487        assert_true (ai_move (ai, 5, 3));
23488        assert_true (ai_move (ai, 6, 2));
23489        assert_true (ai_move (ai, 7, 3));
23490        assert_true (ai_move (ai, 7, 5));
23491        assert_true (ai_move (ai, 7, 4));
23492        assert_true (ai_move (ai, 1, 1));
23493        assert_true (ai_move (ai, 4, 0));
23494        assert_true (ai_move (ai, 5, 0));
23495        assert_true (ai_move (ai, 3, 0));
23496        assert_true (ai_move (ai, 1, 0));
23497        assert_true (ai_move (ai, 0, 6));
23498        assert_true (ai_move (ai, 6, 1));
23499        assert_true (ai_move (ai, 4, 7));
23500        assert_true (ai_move (ai, 6, 7));
23501        assert_true (ai_move (ai, 7, 0));
23502        assert_true (ai_move (ai, 7, 1));
23503        assert_true (ai_move (ai, 6, 0));
23504        assert_true (ai_move (ai, 6, 6));
23505        assert_true (ai_move (ai, 1, 6));
23506        assert_true (ai_move (ai, 7, 6));
23507        assert_true (ai_move (ai, 7, 7));
23508        assert_true (ai_move (ai, 0, 7));
23509        assert_true (ai_move (ai, 0, 0));
23510        assert_true (ai_move (ai, 0, 1));
23511    }
23512
23513    private static inline void test_complete_reversi_game_298 ()
23514    {
23515                                  /* 0 1 2 3 4 5 6 7 */
23516        string [] board = {/* 0 */ " . . . . . . . .",
23517                           /* 1 */ " . . . . . . . .",
23518                           /* 2 */ " . . . . L . . .",
23519                           /* 3 */ " . . . D L . . .",
23520                           /* 4 */ " . . . D L . . .",
23521                           /* 5 */ " . . . D L . . .",
23522                           /* 6 */ " . . . . . L . .",
23523                           /* 7 */ " . . . . . . . ."};
23524
23525        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23526        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23527
23528        assert_true (ai_move (ai, 5, 1));
23529        assert_true (ai_move (ai, 2, 6));
23530        assert_true (ai_move (ai, 3, 6));
23531        assert_true (ai_move (ai, 4, 1));
23532        assert_true (ai_move (ai, 3, 1));
23533        assert_true (ai_move (ai, 4, 0));
23534        assert_true (ai_move (ai, 5, 4));
23535        assert_true (ai_move (ai, 6, 5));
23536        assert_true (ai_move (ai, 6, 3));
23537        assert_true (ai_move (ai, 6, 2));
23538        assert_true (ai_move (ai, 3, 2));
23539        assert_true (ai_move (ai, 2, 2));
23540        assert_true (ai_move (ai, 2, 1));
23541        assert_true (ai_move (ai, 2, 0));
23542        assert_true (ai_move (ai, 3, 0));
23543        assert_true (ai_move (ai, 6, 4));
23544        assert_true (ai_move (ai, 1, 3));
23545        assert_true (ai_move (ai, 1, 2));
23546        assert_true (ai_move (ai, 7, 2));
23547        assert_true (ai_move (ai, 2, 3));
23548        assert_true (ai_move (ai, 4, 6));
23549        assert_true (ai_move (ai, 5, 2));
23550        assert_true (ai_move (ai, 0, 2));
23551        assert_true (ai_move (ai, 7, 4));
23552        assert_true (ai_move (ai, 1, 4));
23553        assert_true (ai_move (ai, 2, 4));
23554        assert_true (ai_move (ai, 5, 3));
23555        assert_true (ai_move (ai, 0, 5));
23556        assert_true (ai_move (ai, 7, 3));
23557        assert_true (ai_move (ai, 5, 5));
23558        assert_true (ai_move (ai, 7, 5));
23559        assert_true (ai_move (ai, 6, 6));
23560        assert_true (ai_move (ai, 1, 5));
23561        assert_true (ai_move (ai, 2, 5));
23562        assert_true (ai_move (ai, 4, 7));
23563        assert_true (ai_move (ai, 2, 7));
23564        assert_true (ai_move (ai, 3, 7));
23565        assert_true (ai_move (ai, 5, 7));
23566        assert_true (ai_move (ai, 7, 7));
23567        assert_true (ai_move (ai, 0, 4));
23568        assert_true (ai_move (ai, 0, 3));
23569        assert_true (ai_move (ai, 0, 1));
23570        assert_true (ai_move (ai, 5, 0));
23571        assert_true (ai_move (ai, 6, 0));
23572        assert_true (ai_move (ai, 6, 7));
23573        assert_true (ai_move (ai, 7, 6));
23574        assert_true (ai_move (ai, 1, 7));
23575        assert_true (ai_move (ai, 6, 1));
23576        assert_true (ai_move (ai, 7, 0));
23577        assert_true (ai_move (ai, 7, 1));
23578        assert_true (ai_move (ai, 1, 0));
23579        assert_true (ai_move (ai, 1, 6));
23580        assert_true (ai_move (ai, 0, 7));
23581        assert_true (ai_move (ai, 1, 1));
23582        assert_true (ai_move (ai, 0, 0));
23583        assert_true (ai_move (ai, 0, 6));
23584    }
23585
23586    private static inline void test_complete_reversi_game_299 ()
23587    {
23588                                  /* 0 1 2 3 4 5 6 7 */
23589        string [] board = {/* 0 */ " . . . . . . . .",
23590                           /* 1 */ " . . . . . . . .",
23591                           /* 2 */ " . . . . . . . .",
23592                           /* 3 */ " . . . D D . . .",
23593                           /* 4 */ " . . . D D . . .",
23594                           /* 5 */ " . . L L L . . .",
23595                           /* 6 */ " . . . . . L . .",
23596                           /* 7 */ " . . . . . . . ."};
23597
23598        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23599        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23600
23601        assert_true (ai_move (ai, 3, 6));
23602        assert_true (ai_move (ai, 4, 7));
23603        assert_true (ai_move (ai, 1, 5));
23604        assert_true (ai_move (ai, 1, 4));
23605        assert_true (ai_move (ai, 5, 5));
23606        assert_true (ai_move (ai, 6, 5));
23607        assert_true (ai_move (ai, 2, 6));
23608        assert_true (ai_move (ai, 2, 7));
23609        assert_true (ai_move (ai, 1, 3));
23610        assert_true (ai_move (ai, 0, 5));
23611        assert_true (ai_move (ai, 3, 7));
23612        assert_true (ai_move (ai, 4, 6));
23613        assert_true (ai_move (ai, 7, 5));
23614        assert_true (ai_move (ai, 5, 4));
23615        assert_true (ai_move (ai, 6, 4));
23616        assert_true (ai_move (ai, 7, 4));
23617        assert_true (ai_move (ai, 7, 3));
23618        assert_true (ai_move (ai, 0, 3));
23619        assert_true (ai_move (ai, 6, 7));
23620        assert_true (ai_move (ai, 6, 3));
23621        assert_true (ai_move (ai, 5, 3));
23622        assert_true (ai_move (ai, 7, 2));
23623        assert_true (ai_move (ai, 7, 1));
23624        assert_true (ai_move (ai, 5, 7));
23625        assert_true (ai_move (ai, 7, 6));
23626        assert_true (ai_move (ai, 2, 4));
23627        assert_true (ai_move (ai, 6, 6));
23628        assert_true (ai_move (ai, 5, 2));
23629        assert_true (ai_move (ai, 6, 2));
23630        assert_true (ai_move (ai, 0, 2));
23631        assert_true (ai_move (ai, 5, 1));
23632        assert_true (ai_move (ai, 5, 0));
23633        assert_true (ai_move (ai, 4, 1));
23634        assert_true (ai_move (ai, 2, 3));
23635        assert_true (ai_move (ai, 1, 2));
23636        assert_true (ai_move (ai, 2, 2));
23637        assert_true (ai_move (ai, 4, 0));
23638        assert_true (ai_move (ai, 3, 0));
23639        assert_true (ai_move (ai, 4, 2));
23640        assert_true (ai_move (ai, 3, 2));
23641        assert_true (ai_move (ai, 2, 1));
23642        assert_true (ai_move (ai, 3, 1));
23643        assert_true (ai_move (ai, 1, 6));
23644        assert_true (ai_move (ai, 2, 0));
23645        assert_true (ai_move (ai, 0, 4));
23646        assert_true (ai_move (ai, 6, 0));
23647        assert_true (ai_move (ai, 1, 1));
23648        assert_true (ai_move (ai, 0, 6));
23649        assert_true (ai_move (ai, 1, 0));
23650        assert_true (ai_move (ai, 0, 0));
23651        assert_true (ai_move (ai, 0, 1));
23652        assert_true (ai_move (ai, 1, 7));
23653        assert_true (ai_move (ai, 0, 7));
23654        assert_true (ai_move (ai, 7, 7));
23655        assert_true (ai_move (ai, 6, 1));
23656        assert_true (ai_move (ai, 7, 0));
23657    }
23658
23659    private static inline void test_complete_reversi_game_300 ()
23660    {
23661                                  /* 0 1 2 3 4 5 6 7 */
23662        string [] board = {/* 0 */ " . . . . . . . .",
23663                           /* 1 */ " . . . . . . . .",
23664                           /* 2 */ " . . . . . . . .",
23665                           /* 3 */ " . . L D D . . .",
23666                           /* 4 */ " . . . L D . . .",
23667                           /* 5 */ " . . . D L . . .",
23668                           /* 6 */ " . . . . . L . .",
23669                           /* 7 */ " . . . . . . . ."};
23670
23671        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23672        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23673
23674        assert_true (ai_move (ai, 4, 6));
23675        assert_true (ai_move (ai, 5, 2));
23676        assert_true (ai_move (ai, 1, 3));
23677        assert_true (ai_move (ai, 1, 2));
23678        assert_true (ai_move (ai, 2, 4));
23679        assert_true (ai_move (ai, 2, 5));
23680        assert_true (ai_move (ai, 1, 5));
23681        assert_true (ai_move (ai, 2, 6));
23682        assert_true (ai_move (ai, 1, 4));
23683        assert_true (ai_move (ai, 5, 5));
23684        assert_true (ai_move (ai, 3, 6));
23685        assert_true (ai_move (ai, 0, 5));
23686        assert_true (ai_move (ai, 5, 4));
23687        assert_true (ai_move (ai, 0, 2));
23688        assert_true (ai_move (ai, 6, 5));
23689        assert_true (ai_move (ai, 7, 5));
23690        assert_true (ai_move (ai, 6, 4));
23691        assert_true (ai_move (ai, 3, 7));
23692        assert_true (ai_move (ai, 2, 7));
23693        assert_true (ai_move (ai, 1, 7));
23694        assert_true (ai_move (ai, 5, 7));
23695        assert_true (ai_move (ai, 4, 2));
23696        assert_true (ai_move (ai, 7, 4));
23697        assert_true (ai_move (ai, 6, 3));
23698        assert_true (ai_move (ai, 5, 3));
23699        assert_true (ai_move (ai, 6, 2));
23700        assert_true (ai_move (ai, 5, 1));
23701        assert_true (ai_move (ai, 4, 1));
23702        assert_true (ai_move (ai, 0, 4));
23703        assert_true (ai_move (ai, 0, 3));
23704        assert_true (ai_move (ai, 7, 2));
23705        assert_true (ai_move (ai, 5, 0));
23706        assert_true (ai_move (ai, 3, 1));
23707        assert_true (ai_move (ai, 3, 2));
23708        assert_true (ai_move (ai, 4, 0));
23709        assert_true (ai_move (ai, 3, 0));
23710        assert_true (ai_move (ai, 2, 0));
23711        assert_true (ai_move (ai, 1, 0));
23712        assert_true (ai_move (ai, 2, 2));
23713        assert_true (ai_move (ai, 2, 1));
23714        assert_true (ai_move (ai, 7, 6));
23715        assert_true (ai_move (ai, 7, 3));
23716        assert_true (ai_move (ai, 6, 6));
23717        assert_true (ai_move (ai, 7, 7));
23718        assert_true (ai_move (ai, 6, 1));
23719        assert_true (ai_move (ai, 6, 7));
23720        assert_true (ai_move (ai, 4, 7));
23721        assert_true (ai_move (ai, 7, 0));
23722        assert_true (ai_move (ai, 0, 7));
23723        assert_true (ai_move (ai, 7, 1));
23724        assert_true (ai_move (ai, 0, 6));
23725        assert_true (ai_move (ai, 1, 6));
23726        assert_true (ai_move (ai, 0, 1));
23727        assert_true (ai_move (ai, 1, 1));
23728        assert_true (ai_move (ai, 0, 0));
23729        assert_true (game.pass ());
23730        assert_true (ai_move (ai, 6, 0));
23731    }
23732
23733    private static inline void test_complete_reversi_game_301 ()
23734    {
23735                                  /* 0 1 2 3 4 5 6 7 */
23736        string [] board = {/* 0 */ " . . . . . . . .",
23737                           /* 1 */ " . . . . . . . .",
23738                           /* 2 */ " . . . . L . . .",
23739                           /* 3 */ " . . . D L . . .",
23740                           /* 4 */ " . . . D L . . .",
23741                           /* 5 */ " . . D . L . . .",
23742                           /* 6 */ " . . . . . L . .",
23743                           /* 7 */ " . . . . . . . ."};
23744
23745        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23746        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23747
23748        assert_true (ai_move (ai, 5, 1));
23749        assert_true (ai_move (ai, 4, 1));
23750        assert_true (ai_move (ai, 3, 1));
23751        assert_true (ai_move (ai, 4, 0));
23752        assert_true (ai_move (ai, 5, 3));
23753        assert_true (ai_move (ai, 6, 2));
23754        assert_true (ai_move (ai, 6, 4));
23755        assert_true (ai_move (ai, 2, 1));
23756        assert_true (ai_move (ai, 2, 0));
23757        assert_true (ai_move (ai, 2, 3));
23758        assert_true (ai_move (ai, 1, 3));
23759        assert_true (ai_move (ai, 1, 2));
23760        assert_true (ai_move (ai, 2, 2));
23761        assert_true (ai_move (ai, 0, 3));
23762        assert_true (ai_move (ai, 0, 2));
23763        assert_true (ai_move (ai, 3, 2));
23764        assert_true (ai_move (ai, 1, 4));
23765        assert_true (ai_move (ai, 0, 1));
23766        assert_true (ai_move (ai, 2, 4));
23767        assert_true (ai_move (ai, 3, 5));
23768        assert_true (ai_move (ai, 1, 5));
23769        assert_true (ai_move (ai, 0, 4));
23770        assert_true (ai_move (ai, 0, 5));
23771        assert_true (ai_move (ai, 0, 6));
23772        assert_true (ai_move (ai, 5, 0));
23773        assert_true (ai_move (ai, 6, 0));
23774        assert_true (ai_move (ai, 2, 6));
23775        assert_true (ai_move (ai, 3, 6));
23776        assert_true (ai_move (ai, 3, 7));
23777        assert_true (ai_move (ai, 4, 6));
23778        assert_true (ai_move (ai, 5, 4));
23779        assert_true (ai_move (ai, 5, 5));
23780        assert_true (ai_move (ai, 4, 7));
23781        assert_true (ai_move (ai, 5, 2));
23782        assert_true (ai_move (ai, 6, 5));
23783        assert_true (ai_move (ai, 7, 5));
23784        assert_true (ai_move (ai, 6, 3));
23785        assert_true (ai_move (ai, 7, 2));
23786        assert_true (ai_move (ai, 7, 3));
23787        assert_true (ai_move (ai, 7, 4));
23788        assert_true (ai_move (ai, 1, 6));
23789        assert_true (ai_move (ai, 5, 7));
23790        assert_true (ai_move (ai, 6, 7));
23791        assert_true (ai_move (ai, 1, 0));
23792        assert_true (ai_move (ai, 0, 0));
23793        assert_true (ai_move (ai, 0, 7));
23794        assert_true (ai_move (ai, 1, 1));
23795        assert_true (ai_move (ai, 6, 1));
23796        assert_true (ai_move (ai, 7, 6));
23797        assert_true (ai_move (ai, 2, 7));
23798        assert_true (ai_move (ai, 6, 6));
23799        assert_true (ai_move (ai, 7, 7));
23800        assert_true (ai_move (ai, 1, 7));
23801        assert_true (ai_move (ai, 3, 0));
23802        assert_true (ai_move (ai, 7, 0));
23803        assert_true (ai_move (ai, 7, 1));
23804    }
23805
23806    private static inline void test_complete_reversi_game_302 ()
23807    {
23808                                  /* 0 1 2 3 4 5 6 7 */
23809        string [] board = {/* 0 */ " . . . . . . . .",
23810                           /* 1 */ " . . . . . . . .",
23811                           /* 2 */ " . . . . . . . .",
23812                           /* 3 */ " . . L D D . . .",
23813                           /* 4 */ " . . . L D . . .",
23814                           /* 5 */ " . . D . L . . .",
23815                           /* 6 */ " . . . . . L . .",
23816                           /* 7 */ " . . . . . . . ."};
23817
23818        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23819        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23820
23821        assert_true (ai_move (ai, 4, 6));
23822        assert_true (ai_move (ai, 3, 6));
23823        assert_true (ai_move (ai, 2, 7));
23824        assert_true (ai_move (ai, 2, 6));
23825        assert_true (ai_move (ai, 1, 3));
23826        assert_true (ai_move (ai, 1, 4));
23827        assert_true (ai_move (ai, 4, 7));
23828        assert_true (ai_move (ai, 5, 2));
23829        assert_true (ai_move (ai, 6, 5));
23830        assert_true (ai_move (ai, 1, 2));
23831        assert_true (ai_move (ai, 4, 2));
23832        assert_true (ai_move (ai, 3, 2));
23833        assert_true (ai_move (ai, 4, 1));
23834        assert_true (ai_move (ai, 5, 1));
23835        assert_true (ai_move (ai, 6, 3));
23836        assert_true (ai_move (ai, 6, 2));
23837        assert_true (ai_move (ai, 2, 1));
23838        assert_true (ai_move (ai, 2, 2));
23839        assert_true (ai_move (ai, 2, 4));
23840        assert_true (ai_move (ai, 1, 5));
23841        assert_true (ai_move (ai, 7, 2));
23842        assert_true (ai_move (ai, 2, 0));
23843        assert_true (ai_move (ai, 0, 2));
23844        assert_true (ai_move (ai, 3, 5));
23845        assert_true (ai_move (ai, 0, 5));
23846        assert_true (ai_move (ai, 5, 7));
23847        assert_true (ai_move (ai, 3, 7));
23848        assert_true (ai_move (ai, 1, 7));
23849        assert_true (ai_move (ai, 0, 4));
23850        assert_true (ai_move (ai, 5, 5));
23851        assert_true (ai_move (ai, 5, 0));
23852        assert_true (ai_move (ai, 3, 1));
23853        assert_true (ai_move (ai, 4, 0));
23854        assert_true (ai_move (ai, 0, 3));
23855        assert_true (ai_move (ai, 1, 6));
23856        assert_true (ai_move (ai, 7, 5));
23857        assert_true (ai_move (ai, 6, 6));
23858        assert_true (ai_move (ai, 6, 4));
23859        assert_true (ai_move (ai, 5, 4));
23860        assert_true (ai_move (ai, 5, 3));
23861        assert_true (ai_move (ai, 3, 0));
23862        assert_true (ai_move (ai, 6, 0));
23863        assert_true (ai_move (ai, 7, 6));
23864        assert_true (ai_move (ai, 7, 7));
23865        assert_true (ai_move (ai, 7, 4));
23866        assert_true (ai_move (ai, 1, 1));
23867        assert_true (ai_move (ai, 6, 1));
23868        assert_true (ai_move (ai, 7, 3));
23869        assert_true (ai_move (ai, 6, 7));
23870        assert_true (ai_move (ai, 0, 1));
23871        assert_true (ai_move (ai, 0, 7));
23872        assert_true (ai_move (ai, 7, 1));
23873        assert_true (ai_move (ai, 0, 0));
23874        assert_true (ai_move (ai, 0, 6));
23875        assert_true (ai_move (ai, 1, 0));
23876        assert_true (game.pass ());
23877        assert_true (ai_move (ai, 7, 0));
23878    }
23879
23880    private static inline void test_complete_reversi_game_303 ()
23881    {
23882                                  /* 0 1 2 3 4 5 6 7 */
23883        string [] board = {/* 0 */ " . . . . . . . .",
23884                           /* 1 */ " . . . . . . . .",
23885                           /* 2 */ " . . . . L . . .",
23886                           /* 3 */ " . . . D L . . .",
23887                           /* 4 */ " . . D D L . . .",
23888                           /* 5 */ " . . . . L . . .",
23889                           /* 6 */ " . . . . . L . .",
23890                           /* 7 */ " . . . . . . . ."};
23891
23892        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23893        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23894
23895        assert_true (ai_move (ai, 5, 1));
23896        assert_true (ai_move (ai, 4, 1));
23897        assert_true (ai_move (ai, 3, 1));
23898        assert_true (ai_move (ai, 4, 0));
23899        assert_true (ai_move (ai, 5, 3));
23900        assert_true (ai_move (ai, 6, 2));
23901        assert_true (ai_move (ai, 6, 4));
23902        assert_true (ai_move (ai, 2, 1));
23903        assert_true (ai_move (ai, 2, 0));
23904        assert_true (ai_move (ai, 2, 3));
23905        assert_true (ai_move (ai, 1, 3));
23906        assert_true (ai_move (ai, 1, 2));
23907        assert_true (ai_move (ai, 2, 5));
23908        assert_true (ai_move (ai, 2, 6));
23909        assert_true (ai_move (ai, 1, 4));
23910        assert_true (ai_move (ai, 0, 5));
23911        assert_true (ai_move (ai, 1, 5));
23912        assert_true (ai_move (ai, 2, 2));
23913        assert_true (ai_move (ai, 3, 6));
23914        assert_true (ai_move (ai, 0, 3));
23915        assert_true (ai_move (ai, 0, 2));
23916        assert_true (ai_move (ai, 0, 4));
23917        assert_true (ai_move (ai, 0, 6));
23918        assert_true (ai_move (ai, 3, 5));
23919        assert_true (ai_move (ai, 3, 2));
23920        assert_true (ai_move (ai, 2, 7));
23921        assert_true (ai_move (ai, 5, 4));
23922        assert_true (ai_move (ai, 6, 5));
23923        assert_true (ai_move (ai, 5, 2));
23924        assert_true (ai_move (ai, 7, 5));
23925        assert_true (ai_move (ai, 5, 0));
23926        assert_true (ai_move (ai, 6, 0));
23927        assert_true (ai_move (ai, 6, 3));
23928        assert_true (ai_move (ai, 7, 2));
23929        assert_true (ai_move (ai, 5, 5));
23930        assert_true (ai_move (ai, 4, 6));
23931        assert_true (ai_move (ai, 5, 7));
23932        assert_true (ai_move (ai, 3, 7));
23933        assert_true (ai_move (ai, 6, 6));
23934        assert_true (ai_move (ai, 4, 7));
23935        assert_true (ai_move (ai, 1, 7));
23936        assert_true (ai_move (ai, 6, 1));
23937        assert_true (ai_move (ai, 6, 7));
23938        assert_true (ai_move (ai, 3, 0));
23939        assert_true (ai_move (ai, 7, 0));
23940        assert_true (ai_move (ai, 7, 1));
23941        assert_true (ai_move (ai, 1, 0));
23942        assert_true (ai_move (ai, 1, 1));
23943        assert_true (ai_move (ai, 0, 0));
23944        assert_true (ai_move (ai, 0, 1));
23945        assert_true (ai_move (ai, 7, 3));
23946        assert_true (ai_move (ai, 0, 7));
23947        assert_true (ai_move (ai, 7, 4));
23948        assert_true (ai_move (ai, 7, 7));
23949        assert_true (ai_move (ai, 7, 6));
23950        assert_true (ai_move (ai, 1, 6));
23951    }
23952
23953    private static inline void test_complete_reversi_game_304 ()
23954    {
23955                                  /* 0 1 2 3 4 5 6 7 */
23956        string [] board = {/* 0 */ " . . . . . . . .",
23957                           /* 1 */ " . . . . . . . .",
23958                           /* 2 */ " . . . . . . . .",
23959                           /* 3 */ " . . L D D . . .",
23960                           /* 4 */ " . . D L D . . .",
23961                           /* 5 */ " . . . . L . . .",
23962                           /* 6 */ " . . . . . L . .",
23963                           /* 7 */ " . . . . . . . ."};
23964
23965        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
23966        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
23967
23968        assert_true (ai_move (ai, 2, 2));
23969        assert_true (ai_move (ai, 1, 2));
23970        assert_true (ai_move (ai, 1, 3));
23971        assert_true (ai_move (ai, 3, 2));
23972        assert_true (ai_move (ai, 3, 1));
23973        assert_true (ai_move (ai, 1, 5));
23974        assert_true (ai_move (ai, 2, 1));
23975        assert_true (ai_move (ai, 0, 2));
23976        assert_true (ai_move (ai, 2, 5));
23977        assert_true (ai_move (ai, 4, 0));
23978        assert_true (ai_move (ai, 0, 5));
23979        assert_true (ai_move (ai, 2, 0));
23980        assert_true (ai_move (ai, 0, 3));
23981        assert_true (ai_move (ai, 5, 5));
23982        assert_true (ai_move (ai, 4, 2));
23983        assert_true (ai_move (ai, 5, 2));
23984        assert_true (ai_move (ai, 5, 1));
23985        assert_true (ai_move (ai, 5, 3));
23986        assert_true (ai_move (ai, 6, 3));
23987        assert_true (ai_move (ai, 2, 6));
23988        assert_true (ai_move (ai, 4, 1));
23989        assert_true (ai_move (ai, 5, 0));
23990        assert_true (ai_move (ai, 1, 4));
23991        assert_true (ai_move (ai, 6, 4));
23992        assert_true (ai_move (ai, 3, 5));
23993        assert_true (ai_move (ai, 4, 6));
23994        assert_true (ai_move (ai, 3, 6));
23995        assert_true (ai_move (ai, 5, 4));
23996        assert_true (ai_move (ai, 6, 2));
23997        assert_true (ai_move (ai, 2, 7));
23998        assert_true (ai_move (ai, 6, 5));
23999        assert_true (ai_move (ai, 7, 2));
24000        assert_true (ai_move (ai, 7, 3));
24001        assert_true (ai_move (ai, 7, 4));
24002        assert_true (ai_move (ai, 6, 1));
24003        assert_true (ai_move (ai, 0, 4));
24004        assert_true (ai_move (ai, 0, 1));
24005        assert_true (ai_move (ai, 7, 1));
24006        assert_true (ai_move (ai, 0, 6));
24007        assert_true (ai_move (ai, 1, 6));
24008        assert_true (ai_move (ai, 4, 7));
24009        assert_true (ai_move (ai, 3, 7));
24010        assert_true (ai_move (ai, 5, 7));
24011        assert_true (ai_move (ai, 6, 7));
24012        assert_true (ai_move (ai, 3, 0));
24013        assert_true (ai_move (ai, 1, 0));
24014        assert_true (ai_move (ai, 0, 0));
24015        assert_true (ai_move (ai, 1, 1));
24016        assert_true (ai_move (ai, 6, 0));
24017        assert_true (game.pass ());
24018        assert_true (ai_move (ai, 7, 5));
24019        assert_true (ai_move (ai, 7, 6));
24020        assert_true (ai_move (ai, 7, 0));
24021        assert_true (ai_move (ai, 6, 6));
24022        assert_true (ai_move (ai, 7, 7));
24023        assert_true (game.pass ());
24024        assert_true (ai_move (ai, 1, 7));
24025    }
24026
24027    private static inline void test_complete_reversi_game_305 ()
24028    {
24029                                  /* 0 1 2 3 4 5 6 7 */
24030        string [] board = {/* 0 */ " . . . . . . . .",
24031                           /* 1 */ " . . . . . . . .",
24032                           /* 2 */ " . . . . . . . .",
24033                           /* 3 */ " . . . D D . . .",
24034                           /* 4 */ " . . . L L L L .",
24035                           /* 5 */ " . . . . D . D .",
24036                           /* 6 */ " . . . . . . . .",
24037                           /* 7 */ " . . . . . . . ."};
24038
24039        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24040        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24041
24042        assert_true (ai_move (ai, 2, 5));
24043        assert_true (ai_move (ai, 2, 2));
24044        assert_true (ai_move (ai, 3, 2));
24045        assert_true (ai_move (ai, 4, 6));
24046        assert_true (ai_move (ai, 1, 2));
24047        assert_true (ai_move (ai, 4, 2));
24048        assert_true (ai_move (ai, 5, 6));
24049        assert_true (ai_move (ai, 3, 6));
24050        assert_true (ai_move (ai, 5, 1));
24051        assert_true (ai_move (ai, 1, 4));
24052        assert_true (ai_move (ai, 5, 2));
24053        assert_true (ai_move (ai, 2, 4));
24054        assert_true (ai_move (ai, 2, 3));
24055        assert_true (ai_move (ai, 2, 1));
24056        assert_true (ai_move (ai, 1, 3));
24057        assert_true (ai_move (ai, 0, 4));
24058        assert_true (ai_move (ai, 4, 1));
24059        assert_true (ai_move (ai, 6, 2));
24060        assert_true (ai_move (ai, 3, 1));
24061        assert_true (ai_move (ai, 2, 0));
24062        assert_true (ai_move (ai, 0, 5));
24063        assert_true (ai_move (ai, 5, 0));
24064        assert_true (ai_move (ai, 1, 5));
24065        assert_true (ai_move (ai, 3, 5));
24066        assert_true (ai_move (ai, 7, 2));
24067        assert_true (ai_move (ai, 5, 3));
24068        assert_true (ai_move (ai, 0, 3));
24069        assert_true (ai_move (ai, 5, 5));
24070        assert_true (ai_move (ai, 5, 7));
24071        assert_true (ai_move (ai, 2, 6));
24072        assert_true (ai_move (ai, 2, 7));
24073        assert_true (ai_move (ai, 0, 2));
24074        assert_true (ai_move (ai, 0, 1));
24075        assert_true (ai_move (ai, 4, 0));
24076        assert_true (ai_move (ai, 7, 3));
24077        assert_true (ai_move (ai, 7, 5));
24078        assert_true (ai_move (ai, 4, 7));
24079        assert_true (ai_move (ai, 3, 7));
24080        assert_true (ai_move (ai, 6, 3));
24081        assert_true (ai_move (ai, 7, 4));
24082        assert_true (ai_move (ai, 7, 6));
24083        assert_true (ai_move (ai, 7, 1));
24084        assert_true (ai_move (ai, 7, 0));
24085        assert_true (ai_move (ai, 1, 6));
24086        assert_true (ai_move (ai, 6, 0));
24087        assert_true (ai_move (ai, 6, 1));
24088        assert_true (ai_move (ai, 3, 0));
24089        assert_true (ai_move (ai, 1, 7));
24090        assert_true (ai_move (ai, 0, 7));
24091        assert_true (ai_move (ai, 0, 6));
24092        assert_true (ai_move (ai, 1, 1));
24093        assert_true (ai_move (ai, 0, 0));
24094        assert_true (ai_move (ai, 1, 0));
24095        assert_true (ai_move (ai, 6, 7));
24096        assert_true (ai_move (ai, 7, 7));
24097        assert_true (ai_move (ai, 6, 6));
24098    }
24099
24100    private static inline void test_complete_reversi_game_306 ()
24101    {
24102                                  /* 0 1 2 3 4 5 6 7 */
24103        string [] board = {/* 0 */ " . . . . . . . .",
24104                           /* 1 */ " . . . . . . . .",
24105                           /* 2 */ " . . . . . . . .",
24106                           /* 3 */ " . . . D D . . .",
24107                           /* 4 */ " . . . L L D . .",
24108                           /* 5 */ " . . . . L . D .",
24109                           /* 6 */ " . . . . . L . .",
24110                           /* 7 */ " . . . . . . . ."};
24111
24112        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24113        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24114
24115        assert_true (ai_move (ai, 3, 6));
24116        assert_true (ai_move (ai, 4, 6));
24117        assert_true (ai_move (ai, 2, 5));
24118        assert_true (ai_move (ai, 6, 3));
24119        assert_true (ai_move (ai, 7, 2));
24120        assert_true (ai_move (ai, 6, 4));
24121        assert_true (ai_move (ai, 4, 7));
24122        assert_true (ai_move (ai, 2, 2));
24123        assert_true (ai_move (ai, 3, 2));
24124        assert_true (ai_move (ai, 2, 7));
24125        assert_true (ai_move (ai, 1, 2));
24126        assert_true (ai_move (ai, 1, 4));
24127        assert_true (ai_move (ai, 2, 6));
24128        assert_true (ai_move (ai, 2, 4));
24129        assert_true (ai_move (ai, 0, 3));
24130        assert_true (ai_move (ai, 6, 2));
24131        assert_true (ai_move (ai, 2, 3));
24132        assert_true (ai_move (ai, 4, 2));
24133        assert_true (ai_move (ai, 5, 1));
24134        assert_true (ai_move (ai, 4, 1));
24135        assert_true (ai_move (ai, 7, 3));
24136        assert_true (ai_move (ai, 0, 2));
24137        assert_true (ai_move (ai, 5, 2));
24138        assert_true (ai_move (ai, 1, 5));
24139        assert_true (ai_move (ai, 0, 5));
24140        assert_true (ai_move (ai, 1, 3));
24141        assert_true (ai_move (ai, 2, 1));
24142        assert_true (ai_move (ai, 3, 1));
24143        assert_true (ai_move (ai, 5, 0));
24144        assert_true (ai_move (ai, 2, 0));
24145        assert_true (ai_move (ai, 5, 3));
24146        assert_true (ai_move (ai, 3, 5));
24147        assert_true (ai_move (ai, 5, 5));
24148        assert_true (ai_move (ai, 6, 6));
24149        assert_true (ai_move (ai, 3, 0));
24150        assert_true (ai_move (ai, 0, 4));
24151        assert_true (ai_move (ai, 0, 1));
24152        assert_true (ai_move (ai, 1, 1));
24153        assert_true (ai_move (ai, 1, 0));
24154        assert_true (ai_move (ai, 0, 0));
24155        assert_true (ai_move (ai, 7, 6));
24156        assert_true (ai_move (ai, 0, 6));
24157        assert_true (ai_move (ai, 1, 6));
24158        assert_true (ai_move (ai, 4, 0));
24159        assert_true (game.pass ());
24160        assert_true (ai_move (ai, 6, 0));
24161        assert_true (ai_move (ai, 6, 1));
24162        assert_true (ai_move (ai, 7, 7));
24163        assert_true (ai_move (ai, 6, 7));
24164        assert_true (ai_move (ai, 7, 5));
24165        assert_true (ai_move (ai, 7, 4));
24166        assert_true (ai_move (ai, 0, 7));
24167        assert_true (ai_move (ai, 1, 7));
24168        assert_true (ai_move (ai, 7, 0));
24169        assert_true (ai_move (ai, 7, 1));
24170        assert_true (ai_move (ai, 5, 7));
24171        assert_true (ai_move (ai, 3, 7));
24172    }
24173
24174    private static inline void test_complete_reversi_game_307 ()
24175    {
24176                                  /* 0 1 2 3 4 5 6 7 */
24177        string [] board = {/* 0 */ " . . . . . . . .",
24178                           /* 1 */ " . . . . . . . .",
24179                           /* 2 */ " . . . . . L . .",
24180                           /* 3 */ " . . . D L . . .",
24181                           /* 4 */ " . . . L L D . .",
24182                           /* 5 */ " . . . . D . D .",
24183                           /* 6 */ " . . . . . . . .",
24184                           /* 7 */ " . . . . . . . ."};
24185
24186        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24187        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24188
24189        assert_true (ai_move (ai, 5, 5));
24190        assert_true (ai_move (ai, 5, 6));
24191        assert_true (ai_move (ai, 5, 7));
24192        assert_true (ai_move (ai, 6, 3));
24193        assert_true (ai_move (ai, 4, 6));
24194        assert_true (ai_move (ai, 3, 6));
24195        assert_true (ai_move (ai, 3, 5));
24196        assert_true (ai_move (ai, 4, 7));
24197        assert_true (ai_move (ai, 3, 7));
24198        assert_true (ai_move (ai, 7, 5));
24199        assert_true (ai_move (ai, 6, 4));
24200        assert_true (ai_move (ai, 5, 3));
24201        assert_true (ai_move (ai, 5, 1));
24202        assert_true (ai_move (ai, 4, 1));
24203        assert_true (ai_move (ai, 3, 2));
24204        assert_true (ai_move (ai, 5, 0));
24205        assert_true (ai_move (ai, 7, 2));
24206        assert_true (ai_move (ai, 7, 4));
24207        assert_true (ai_move (ai, 6, 1));
24208        assert_true (ai_move (ai, 4, 2));
24209        assert_true (ai_move (ai, 4, 0));
24210        assert_true (ai_move (ai, 2, 1));
24211        assert_true (ai_move (ai, 3, 1));
24212        assert_true (ai_move (ai, 2, 7));
24213        assert_true (ai_move (ai, 1, 7));
24214        assert_true (ai_move (ai, 2, 0));
24215        assert_true (ai_move (ai, 6, 0));
24216        assert_true (ai_move (ai, 2, 6));
24217        assert_true (ai_move (ai, 2, 4));
24218        assert_true (ai_move (ai, 2, 2));
24219        assert_true (ai_move (ai, 1, 2));
24220        assert_true (ai_move (ai, 1, 3));
24221        assert_true (ai_move (ai, 6, 2));
24222        assert_true (ai_move (ai, 1, 5));
24223        assert_true (ai_move (ai, 2, 5));
24224        assert_true (ai_move (ai, 3, 0));
24225        assert_true (ai_move (ai, 1, 0));
24226        assert_true (ai_move (ai, 0, 2));
24227        assert_true (ai_move (ai, 1, 4));
24228        assert_true (ai_move (ai, 2, 3));
24229        assert_true (ai_move (ai, 0, 5));
24230        assert_true (ai_move (ai, 0, 4));
24231        assert_true (ai_move (ai, 7, 3));
24232        assert_true (ai_move (ai, 6, 6));
24233        assert_true (ai_move (ai, 0, 3));
24234        assert_true (ai_move (ai, 0, 6));
24235        assert_true (ai_move (ai, 7, 7));
24236        assert_true (ai_move (ai, 0, 1));
24237        assert_true (ai_move (ai, 7, 6));
24238        assert_true (ai_move (ai, 6, 7));
24239        assert_true (ai_move (ai, 1, 1));
24240        assert_true (ai_move (ai, 0, 7));
24241        assert_true (ai_move (ai, 1, 6));
24242        assert_true (ai_move (ai, 7, 0));
24243        assert_true (ai_move (ai, 7, 1));
24244        assert_true (ai_move (ai, 0, 0));
24245    }
24246
24247    private static inline void test_complete_reversi_game_308 ()
24248    {
24249                                  /* 0 1 2 3 4 5 6 7 */
24250        string [] board = {/* 0 */ " . . . . . . . .",
24251                           /* 1 */ " . . . . . . . .",
24252                           /* 2 */ " . . . . . . . .",
24253                           /* 3 */ " . . . D D . . .",
24254                           /* 4 */ " . . . L L D . .",
24255                           /* 5 */ " . . . . L . D .",
24256                           /* 6 */ " . . . . L . . .",
24257                           /* 7 */ " . . . . . . . ."};
24258
24259        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24260        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24261
24262        assert_true (ai_move (ai, 3, 6));
24263        assert_true (ai_move (ai, 5, 6));
24264        assert_true (ai_move (ai, 2, 5));
24265        assert_true (ai_move (ai, 6, 3));
24266        assert_true (ai_move (ai, 7, 2));
24267        assert_true (ai_move (ai, 6, 4));
24268        assert_true (ai_move (ai, 4, 7));
24269        assert_true (ai_move (ai, 2, 2));
24270        assert_true (ai_move (ai, 3, 2));
24271        assert_true (ai_move (ai, 2, 7));
24272        assert_true (ai_move (ai, 1, 2));
24273        assert_true (ai_move (ai, 1, 4));
24274        assert_true (ai_move (ai, 2, 6));
24275        assert_true (ai_move (ai, 2, 4));
24276        assert_true (ai_move (ai, 0, 3));
24277        assert_true (ai_move (ai, 6, 2));
24278        assert_true (ai_move (ai, 2, 3));
24279        assert_true (ai_move (ai, 4, 2));
24280        assert_true (ai_move (ai, 5, 1));
24281        assert_true (ai_move (ai, 4, 1));
24282        assert_true (ai_move (ai, 7, 3));
24283        assert_true (ai_move (ai, 0, 2));
24284        assert_true (ai_move (ai, 5, 2));
24285        assert_true (ai_move (ai, 1, 5));
24286        assert_true (ai_move (ai, 0, 5));
24287        assert_true (ai_move (ai, 1, 3));
24288        assert_true (ai_move (ai, 2, 1));
24289        assert_true (ai_move (ai, 3, 1));
24290        assert_true (ai_move (ai, 5, 0));
24291        assert_true (ai_move (ai, 2, 0));
24292        assert_true (ai_move (ai, 5, 3));
24293        assert_true (ai_move (ai, 3, 5));
24294        assert_true (ai_move (ai, 5, 5));
24295        assert_true (ai_move (ai, 6, 6));
24296        assert_true (ai_move (ai, 3, 0));
24297        assert_true (ai_move (ai, 0, 4));
24298        assert_true (ai_move (ai, 0, 1));
24299        assert_true (ai_move (ai, 1, 1));
24300        assert_true (ai_move (ai, 1, 0));
24301        assert_true (ai_move (ai, 0, 0));
24302        assert_true (ai_move (ai, 7, 6));
24303        assert_true (ai_move (ai, 0, 6));
24304        assert_true (ai_move (ai, 1, 6));
24305        assert_true (ai_move (ai, 4, 0));
24306        assert_true (game.pass ());
24307        assert_true (ai_move (ai, 6, 0));
24308        assert_true (ai_move (ai, 6, 1));
24309        assert_true (ai_move (ai, 7, 7));
24310        assert_true (ai_move (ai, 6, 7));
24311        assert_true (ai_move (ai, 7, 5));
24312        assert_true (ai_move (ai, 7, 4));
24313        assert_true (ai_move (ai, 0, 7));
24314        assert_true (ai_move (ai, 1, 7));
24315        assert_true (ai_move (ai, 7, 0));
24316        assert_true (ai_move (ai, 7, 1));
24317        assert_true (ai_move (ai, 5, 7));
24318        assert_true (ai_move (ai, 3, 7));
24319    }
24320
24321    private static inline void test_complete_reversi_game_309 ()
24322    {
24323                                  /* 0 1 2 3 4 5 6 7 */
24324        string [] board = {/* 0 */ " . . . . . . . .",
24325                           /* 1 */ " . . . . . . . .",
24326                           /* 2 */ " . . . . L . . .",
24327                           /* 3 */ " . . . D L . . .",
24328                           /* 4 */ " . . . L L D . .",
24329                           /* 5 */ " . . . . D . D .",
24330                           /* 6 */ " . . . . . . . .",
24331                           /* 7 */ " . . . . . . . ."};
24332
24333        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24334        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24335
24336        assert_true (ai_move (ai, 5, 1));
24337        assert_true (ai_move (ai, 6, 4));
24338        assert_true (ai_move (ai, 2, 3));
24339        assert_true (ai_move (ai, 4, 1));
24340        assert_true (ai_move (ai, 3, 2));
24341        assert_true (ai_move (ai, 1, 4));
24342        assert_true (ai_move (ai, 5, 5));
24343        assert_true (ai_move (ai, 5, 6));
24344        assert_true (ai_move (ai, 4, 6));
24345        assert_true (ai_move (ai, 7, 4));
24346        assert_true (ai_move (ai, 7, 5));
24347        assert_true (ai_move (ai, 5, 2));
24348        assert_true (ai_move (ai, 5, 7));
24349        assert_true (ai_move (ai, 5, 0));
24350        assert_true (ai_move (ai, 7, 3));
24351        assert_true (ai_move (ai, 2, 4));
24352        assert_true (ai_move (ai, 2, 2));
24353        assert_true (ai_move (ai, 2, 1));
24354        assert_true (ai_move (ai, 5, 3));
24355        assert_true (ai_move (ai, 6, 3));
24356        assert_true (ai_move (ai, 6, 2));
24357        assert_true (ai_move (ai, 7, 2));
24358        assert_true (ai_move (ai, 7, 1));
24359        assert_true (ai_move (ai, 4, 7));
24360        assert_true (ai_move (ai, 3, 1));
24361        assert_true (ai_move (ai, 3, 0));
24362        assert_true (ai_move (ai, 4, 0));
24363        assert_true (ai_move (ai, 6, 7));
24364        assert_true (ai_move (ai, 1, 2));
24365        assert_true (ai_move (ai, 1, 3));
24366        assert_true (ai_move (ai, 0, 3));
24367        assert_true (ai_move (ai, 0, 4));
24368        assert_true (ai_move (ai, 0, 5));
24369        assert_true (ai_move (ai, 0, 2));
24370        assert_true (ai_move (ai, 0, 1));
24371        assert_true (ai_move (ai, 1, 5));
24372        assert_true (ai_move (ai, 2, 6));
24373        assert_true (ai_move (ai, 6, 6));
24374        assert_true (ai_move (ai, 3, 7));
24375        assert_true (ai_move (ai, 2, 7));
24376        assert_true (ai_move (ai, 3, 6));
24377        assert_true (ai_move (ai, 7, 6));
24378        assert_true (ai_move (ai, 7, 7));
24379        assert_true (ai_move (ai, 3, 5));
24380        assert_true (ai_move (ai, 1, 7));
24381        assert_true (ai_move (ai, 6, 1));
24382        assert_true (ai_move (ai, 2, 5));
24383        assert_true (ai_move (ai, 1, 6));
24384        assert_true (ai_move (ai, 1, 0));
24385        assert_true (ai_move (ai, 2, 0));
24386        assert_true (ai_move (ai, 7, 0));
24387        assert_true (ai_move (ai, 0, 0));
24388        assert_true (ai_move (ai, 6, 0));
24389        assert_true (ai_move (ai, 0, 6));
24390        assert_true (ai_move (ai, 0, 7));
24391        assert_true (ai_move (ai, 1, 1));
24392    }
24393
24394    private static inline void test_complete_reversi_game_310 ()
24395    {
24396                                  /* 0 1 2 3 4 5 6 7 */
24397        string [] board = {/* 0 */ " . . . . . . . .",
24398                           /* 1 */ " . . . . . . . .",
24399                           /* 2 */ " . . . L . . . .",
24400                           /* 3 */ " . . . L D . . .",
24401                           /* 4 */ " . . . L L D . .",
24402                           /* 5 */ " . . . . D . D .",
24403                           /* 6 */ " . . . . . . . .",
24404                           /* 7 */ " . . . . . . . ."};
24405
24406        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24407        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24408
24409        assert_true (ai_move (ai, 2, 1));
24410        assert_true (ai_move (ai, 6, 4));
24411        assert_true (ai_move (ai, 2, 5));
24412        assert_true (ai_move (ai, 3, 1));
24413        assert_true (ai_move (ai, 6, 3));
24414        assert_true (ai_move (ai, 2, 4));
24415        assert_true (ai_move (ai, 4, 1));
24416        assert_true (ai_move (ai, 2, 6));
24417        assert_true (ai_move (ai, 2, 3));
24418        assert_true (ai_move (ai, 4, 6));
24419        assert_true (ai_move (ai, 5, 6));
24420        assert_true (ai_move (ai, 7, 4));
24421        assert_true (ai_move (ai, 1, 4));
24422        assert_true (ai_move (ai, 3, 6));
24423        assert_true (ai_move (ai, 2, 7));
24424        assert_true (ai_move (ai, 4, 7));
24425        assert_true (ai_move (ai, 7, 6));
24426        assert_true (ai_move (ai, 5, 2));
24427        assert_true (ai_move (ai, 7, 2));
24428        assert_true (ai_move (ai, 3, 0));
24429        assert_true (ai_move (ai, 5, 0));
24430        assert_true (ai_move (ai, 6, 2));
24431        assert_true (ai_move (ai, 4, 2));
24432        assert_true (ai_move (ai, 0, 3));
24433        assert_true (ai_move (ai, 0, 5));
24434        assert_true (ai_move (ai, 2, 2));
24435        assert_true (ai_move (ai, 1, 2));
24436        assert_true (ai_move (ai, 1, 3));
24437        assert_true (ai_move (ai, 1, 5));
24438        assert_true (ai_move (ai, 3, 5));
24439        assert_true (ai_move (ai, 5, 3));
24440        assert_true (ai_move (ai, 2, 0));
24441        assert_true (ai_move (ai, 7, 3));
24442        assert_true (ai_move (ai, 7, 1));
24443        assert_true (ai_move (ai, 3, 7));
24444        assert_true (ai_move (ai, 5, 5));
24445        assert_true (ai_move (ai, 1, 6));
24446        assert_true (ai_move (ai, 5, 1));
24447        assert_true (ai_move (ai, 5, 7));
24448        assert_true (ai_move (ai, 0, 2));
24449        assert_true (ai_move (ai, 4, 0));
24450        assert_true (ai_move (ai, 6, 0));
24451        assert_true (ai_move (ai, 6, 1));
24452        assert_true (ai_move (ai, 6, 6));
24453        assert_true (ai_move (ai, 1, 0));
24454        assert_true (ai_move (ai, 0, 0));
24455        assert_true (ai_move (ai, 0, 1));
24456        assert_true (ai_move (ai, 0, 4));
24457        assert_true (ai_move (ai, 7, 5));
24458        assert_true (ai_move (ai, 7, 7));
24459        assert_true (ai_move (ai, 6, 7));
24460        assert_true (ai_move (ai, 1, 1));
24461        assert_true (game.pass ());
24462        assert_true (ai_move (ai, 1, 7));
24463        assert_true (ai_move (ai, 0, 7));
24464        assert_true (ai_move (ai, 0, 6));
24465        assert_true (game.pass ());
24466        assert_true (ai_move (ai, 7, 0));
24467    }
24468
24469    private static inline void test_complete_reversi_game_311 ()
24470    {
24471                                  /* 0 1 2 3 4 5 6 7 */
24472        string [] board = {/* 0 */ " . . . . . . . .",
24473                           /* 1 */ " . . . . . . . .",
24474                           /* 2 */ " . . L . . . . .",
24475                           /* 3 */ " . . . L D . . .",
24476                           /* 4 */ " . . . L L D . .",
24477                           /* 5 */ " . . . . D . D .",
24478                           /* 6 */ " . . . . . . . .",
24479                           /* 7 */ " . . . . . . . ."};
24480
24481        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24482        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24483
24484        assert_true (ai_move (ai, 2, 5));
24485        assert_true (ai_move (ai, 2, 4));
24486        assert_true (ai_move (ai, 2, 3));
24487        assert_true (ai_move (ai, 6, 4));
24488        assert_true (ai_move (ai, 2, 1));
24489        assert_true (ai_move (ai, 4, 6));
24490        assert_true (ai_move (ai, 5, 6));
24491        assert_true (ai_move (ai, 3, 6));
24492        assert_true (ai_move (ai, 6, 3));
24493        assert_true (ai_move (ai, 7, 4));
24494        assert_true (ai_move (ai, 2, 7));
24495        assert_true (ai_move (ai, 5, 2));
24496        assert_true (ai_move (ai, 4, 7));
24497        assert_true (ai_move (ai, 4, 2));
24498        assert_true (ai_move (ai, 7, 2));
24499        assert_true (ai_move (ai, 6, 2));
24500        assert_true (ai_move (ai, 3, 2));
24501        assert_true (ai_move (ai, 1, 4));
24502        assert_true (ai_move (ai, 1, 5));
24503        assert_true (ai_move (ai, 1, 2));
24504        assert_true (ai_move (ai, 1, 3));
24505        assert_true (ai_move (ai, 3, 1));
24506        assert_true (ai_move (ai, 0, 2));
24507        assert_true (ai_move (ai, 5, 1));
24508        assert_true (ai_move (ai, 5, 0));
24509        assert_true (ai_move (ai, 0, 5));
24510        assert_true (ai_move (ai, 0, 3));
24511        assert_true (ai_move (ai, 3, 5));
24512        assert_true (ai_move (ai, 2, 6));
24513        assert_true (ai_move (ai, 0, 4));
24514        assert_true (ai_move (ai, 0, 6));
24515        assert_true (ai_move (ai, 4, 1));
24516        assert_true (ai_move (ai, 3, 0));
24517        assert_true (ai_move (ai, 4, 0));
24518        assert_true (ai_move (ai, 5, 5));
24519        assert_true (ai_move (ai, 7, 5));
24520        assert_true (ai_move (ai, 5, 3));
24521        assert_true (ai_move (ai, 2, 0));
24522        assert_true (ai_move (ai, 1, 0));
24523        assert_true (ai_move (ai, 5, 7));
24524        assert_true (ai_move (ai, 1, 1));
24525        assert_true (ai_move (ai, 3, 7));
24526        assert_true (ai_move (ai, 6, 7));
24527        assert_true (ai_move (ai, 0, 0));
24528        assert_true (ai_move (ai, 7, 3));
24529        assert_true (ai_move (ai, 6, 0));
24530        assert_true (ai_move (ai, 7, 6));
24531        assert_true (ai_move (ai, 6, 6));
24532        assert_true (ai_move (ai, 6, 1));
24533        assert_true (ai_move (ai, 0, 1));
24534        assert_true (game.pass ());
24535        assert_true (ai_move (ai, 0, 7));
24536        assert_true (game.pass ());
24537        assert_true (ai_move (ai, 1, 7));
24538        assert_true (ai_move (ai, 1, 6));
24539        assert_true (ai_move (ai, 7, 7));
24540        assert_true (game.pass ());
24541        assert_true (ai_move (ai, 7, 1));
24542        assert_true (ai_move (ai, 7, 0));
24543    }
24544
24545    private static inline void test_complete_reversi_game_312 ()
24546    {
24547                                  /* 0 1 2 3 4 5 6 7 */
24548        string [] board = {/* 0 */ " . . . . . . . .",
24549                           /* 1 */ " . . . . . . . .",
24550                           /* 2 */ " . . . . . . . .",
24551                           /* 3 */ " . . . D D . D .",
24552                           /* 4 */ " . . . L L L L .",
24553                           /* 5 */ " . . . . D . . .",
24554                           /* 6 */ " . . . . . . . .",
24555                           /* 7 */ " . . . . . . . ."};
24556
24557        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24558        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24559
24560        assert_true (ai_move (ai, 2, 5));
24561        assert_true (ai_move (ai, 4, 6));
24562        assert_true (ai_move (ai, 3, 6));
24563        assert_true (ai_move (ai, 2, 6));
24564        assert_true (ai_move (ai, 2, 7));
24565        assert_true (ai_move (ai, 6, 2));
24566        assert_true (ai_move (ai, 5, 5));
24567        assert_true (ai_move (ai, 2, 4));
24568        assert_true (ai_move (ai, 6, 5));
24569        assert_true (ai_move (ai, 5, 6));
24570        assert_true (ai_move (ai, 5, 7));
24571        assert_true (ai_move (ai, 7, 5));
24572        assert_true (ai_move (ai, 1, 5));
24573        assert_true (ai_move (ai, 1, 4));
24574        assert_true (ai_move (ai, 6, 6));
24575        assert_true (ai_move (ai, 5, 2));
24576        assert_true (ai_move (ai, 3, 7));
24577        assert_true (ai_move (ai, 0, 6));
24578        assert_true (ai_move (ai, 0, 5));
24579        assert_true (ai_move (ai, 0, 4));
24580        assert_true (ai_move (ai, 3, 5));
24581        assert_true (ai_move (ai, 4, 7));
24582        assert_true (ai_move (ai, 2, 3));
24583        assert_true (ai_move (ai, 5, 3));
24584        assert_true (ai_move (ai, 7, 2));
24585        assert_true (ai_move (ai, 7, 4));
24586        assert_true (ai_move (ai, 5, 1));
24587        assert_true (ai_move (ai, 4, 1));
24588        assert_true (ai_move (ai, 7, 6));
24589        assert_true (ai_move (ai, 1, 6));
24590        assert_true (ai_move (ai, 3, 2));
24591        assert_true (ai_move (ai, 1, 7));
24592        assert_true (ai_move (ai, 7, 3));
24593        assert_true (ai_move (ai, 1, 3));
24594        assert_true (ai_move (ai, 0, 2));
24595        assert_true (ai_move (ai, 5, 0));
24596        assert_true (ai_move (ai, 4, 2));
24597        assert_true (ai_move (ai, 3, 1));
24598        assert_true (ai_move (ai, 2, 2));
24599        assert_true (ai_move (ai, 2, 1));
24600        assert_true (ai_move (ai, 1, 1));
24601        assert_true (ai_move (ai, 6, 7));
24602        assert_true (ai_move (ai, 7, 7));
24603        assert_true (ai_move (ai, 6, 1));
24604        assert_true (ai_move (ai, 1, 2));
24605        assert_true (ai_move (ai, 0, 3));
24606        assert_true (ai_move (ai, 0, 7));
24607        assert_true (ai_move (ai, 0, 0));
24608        assert_true (ai_move (ai, 7, 1));
24609        assert_true (game.pass ());
24610        assert_true (ai_move (ai, 7, 0));
24611        assert_true (ai_move (ai, 6, 0));
24612        assert_true (ai_move (ai, 4, 0));
24613        assert_true (ai_move (ai, 3, 0));
24614        assert_true (ai_move (ai, 2, 0));
24615        assert_true (ai_move (ai, 0, 1));
24616        assert_true (ai_move (ai, 1, 0));
24617    }
24618
24619    private static inline void test_complete_reversi_game_313 ()
24620    {
24621                                  /* 0 1 2 3 4 5 6 7 */
24622        string [] board = {/* 0 */ " . . . . . . . .",
24623                           /* 1 */ " . . . . . . . .",
24624                           /* 2 */ " . . . . . . . .",
24625                           /* 3 */ " . . . D D . D .",
24626                           /* 4 */ " . . . L L D . .",
24627                           /* 5 */ " . . . . L . . .",
24628                           /* 6 */ " . . . . . L . .",
24629                           /* 7 */ " . . . . . . . ."};
24630
24631        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24632        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24633
24634        assert_true (ai_move (ai, 3, 6));
24635        assert_true (ai_move (ai, 4, 6));
24636        assert_true (ai_move (ai, 2, 5));
24637        assert_true (ai_move (ai, 6, 4));
24638        assert_true (ai_move (ai, 6, 5));
24639        assert_true (ai_move (ai, 2, 2));
24640        assert_true (ai_move (ai, 3, 2));
24641        assert_true (ai_move (ai, 2, 7));
24642        assert_true (ai_move (ai, 1, 2));
24643        assert_true (ai_move (ai, 1, 4));
24644        assert_true (ai_move (ai, 6, 7));
24645        assert_true (ai_move (ai, 7, 4));
24646        assert_true (ai_move (ai, 2, 6));
24647        assert_true (ai_move (ai, 2, 4));
24648        assert_true (ai_move (ai, 0, 3));
24649        assert_true (ai_move (ai, 7, 2));
24650        assert_true (ai_move (ai, 2, 3));
24651        assert_true (ai_move (ai, 4, 2));
24652        assert_true (ai_move (ai, 5, 2));
24653        assert_true (ai_move (ai, 4, 1));
24654        assert_true (ai_move (ai, 5, 1));
24655        assert_true (ai_move (ai, 5, 0));
24656        assert_true (ai_move (ai, 4, 0));
24657        assert_true (ai_move (ai, 1, 3));
24658        assert_true (ai_move (ai, 0, 2));
24659        assert_true (ai_move (ai, 3, 0));
24660        assert_true (ai_move (ai, 5, 3));
24661        assert_true (ai_move (ai, 3, 1));
24662        assert_true (ai_move (ai, 7, 3));
24663        assert_true (ai_move (ai, 6, 2));
24664        assert_true (ai_move (ai, 7, 5));
24665        assert_true (ai_move (ai, 7, 6));
24666        assert_true (ai_move (ai, 5, 5));
24667        assert_true (ai_move (ai, 5, 7));
24668        assert_true (ai_move (ai, 4, 7));
24669        assert_true (ai_move (ai, 0, 5));
24670        assert_true (ai_move (ai, 2, 1));
24671        assert_true (ai_move (ai, 2, 0));
24672        assert_true (ai_move (ai, 1, 5));
24673        assert_true (ai_move (ai, 3, 5));
24674        assert_true (ai_move (ai, 0, 4));
24675        assert_true (ai_move (ai, 0, 1));
24676        assert_true (ai_move (ai, 1, 6));
24677        assert_true (ai_move (ai, 0, 7));
24678        assert_true (ai_move (ai, 1, 7));
24679        assert_true (ai_move (ai, 3, 7));
24680        assert_true (ai_move (ai, 6, 1));
24681        assert_true (ai_move (ai, 0, 6));
24682        assert_true (ai_move (ai, 7, 1));
24683        assert_true (ai_move (ai, 7, 7));
24684        assert_true (ai_move (ai, 1, 0));
24685        assert_true (ai_move (ai, 0, 0));
24686        assert_true (ai_move (ai, 1, 1));
24687        assert_true (ai_move (ai, 7, 0));
24688        assert_true (ai_move (ai, 6, 0));
24689        assert_true (game.pass ());
24690        assert_true (ai_move (ai, 6, 6));
24691    }
24692
24693    private static inline void test_complete_reversi_game_314 ()
24694    {
24695                                  /* 0 1 2 3 4 5 6 7 */
24696        string [] board = {/* 0 */ " . . . . . . . .",
24697                           /* 1 */ " . . . . . . . .",
24698                           /* 2 */ " . . . . . L . .",
24699                           /* 3 */ " . . . D L . D .",
24700                           /* 4 */ " . . . L L D . .",
24701                           /* 5 */ " . . . . D . . .",
24702                           /* 6 */ " . . . . . . . .",
24703                           /* 7 */ " . . . . . . . ."};
24704
24705        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24706        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24707
24708        assert_true (ai_move (ai, 4, 1));
24709        assert_true (ai_move (ai, 6, 5));
24710        assert_true (ai_move (ai, 2, 3));
24711        assert_true (ai_move (ai, 3, 6));
24712        assert_true (ai_move (ai, 5, 6));
24713        assert_true (ai_move (ai, 4, 6));
24714        assert_true (ai_move (ai, 7, 4));
24715        assert_true (ai_move (ai, 7, 2));
24716        assert_true (ai_move (ai, 6, 4));
24717        assert_true (ai_move (ai, 2, 5));
24718        assert_true (ai_move (ai, 5, 3));
24719        assert_true (ai_move (ai, 1, 2));
24720        assert_true (ai_move (ai, 6, 2));
24721        assert_true (ai_move (ai, 3, 2));
24722        assert_true (ai_move (ai, 2, 1));
24723        assert_true (ai_move (ai, 3, 1));
24724        assert_true (ai_move (ai, 0, 3));
24725        assert_true (ai_move (ai, 5, 0));
24726        assert_true (ai_move (ai, 3, 0));
24727        assert_true (ai_move (ai, 5, 1));
24728        assert_true (ai_move (ai, 2, 7));
24729        assert_true (ai_move (ai, 4, 7));
24730        assert_true (ai_move (ai, 2, 4));
24731        assert_true (ai_move (ai, 1, 5));
24732        assert_true (ai_move (ai, 1, 4));
24733        assert_true (ai_move (ai, 0, 5));
24734        assert_true (ai_move (ai, 0, 4));
24735        assert_true (ai_move (ai, 0, 2));
24736        assert_true (ai_move (ai, 2, 6));
24737        assert_true (ai_move (ai, 1, 3));
24738        assert_true (ai_move (ai, 4, 0));
24739        assert_true (ai_move (ai, 2, 0));
24740        assert_true (ai_move (ai, 2, 2));
24741        assert_true (ai_move (ai, 1, 0));
24742        assert_true (ai_move (ai, 4, 2));
24743        assert_true (ai_move (ai, 7, 5));
24744        assert_true (ai_move (ai, 1, 6));
24745        assert_true (ai_move (ai, 6, 0));
24746        assert_true (ai_move (ai, 7, 6));
24747        assert_true (ai_move (ai, 7, 1));
24748        assert_true (ai_move (ai, 6, 1));
24749        assert_true (ai_move (ai, 3, 5));
24750        assert_true (ai_move (ai, 5, 5));
24751        assert_true (ai_move (ai, 7, 0));
24752        assert_true (ai_move (ai, 0, 6));
24753        assert_true (ai_move (ai, 0, 7));
24754        assert_true (ai_move (ai, 1, 7));
24755        assert_true (ai_move (ai, 3, 7));
24756        assert_true (ai_move (ai, 5, 7));
24757        assert_true (ai_move (ai, 7, 3));
24758        assert_true (ai_move (ai, 6, 6));
24759        assert_true (ai_move (ai, 0, 1));
24760        assert_true (ai_move (ai, 1, 1));
24761        assert_true (ai_move (ai, 6, 7));
24762        assert_true (ai_move (ai, 7, 7));
24763    }
24764
24765    private static inline void test_complete_reversi_game_315 ()
24766    {
24767                                  /* 0 1 2 3 4 5 6 7 */
24768        string [] board = {/* 0 */ " . . . . . . . .",
24769                           /* 1 */ " . . . . . . . .",
24770                           /* 2 */ " . . . . . . . .",
24771                           /* 3 */ " . . . D D . D .",
24772                           /* 4 */ " . . . L L D . .",
24773                           /* 5 */ " . . . . L . . .",
24774                           /* 6 */ " . . . . L . . .",
24775                           /* 7 */ " . . . . . . . ."};
24776
24777        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24778        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24779
24780        assert_true (ai_move (ai, 3, 6));
24781        assert_true (ai_move (ai, 5, 6));
24782        assert_true (ai_move (ai, 2, 5));
24783        assert_true (ai_move (ai, 6, 4));
24784        assert_true (ai_move (ai, 6, 5));
24785        assert_true (ai_move (ai, 2, 2));
24786        assert_true (ai_move (ai, 3, 2));
24787        assert_true (ai_move (ai, 2, 7));
24788        assert_true (ai_move (ai, 1, 2));
24789        assert_true (ai_move (ai, 1, 4));
24790        assert_true (ai_move (ai, 6, 7));
24791        assert_true (ai_move (ai, 7, 4));
24792        assert_true (ai_move (ai, 2, 6));
24793        assert_true (ai_move (ai, 2, 4));
24794        assert_true (ai_move (ai, 0, 3));
24795        assert_true (ai_move (ai, 7, 2));
24796        assert_true (ai_move (ai, 2, 3));
24797        assert_true (ai_move (ai, 4, 2));
24798        assert_true (ai_move (ai, 5, 2));
24799        assert_true (ai_move (ai, 4, 1));
24800        assert_true (ai_move (ai, 5, 1));
24801        assert_true (ai_move (ai, 5, 0));
24802        assert_true (ai_move (ai, 4, 0));
24803        assert_true (ai_move (ai, 1, 3));
24804        assert_true (ai_move (ai, 0, 2));
24805        assert_true (ai_move (ai, 3, 0));
24806        assert_true (ai_move (ai, 5, 3));
24807        assert_true (ai_move (ai, 3, 1));
24808        assert_true (ai_move (ai, 7, 3));
24809        assert_true (ai_move (ai, 6, 2));
24810        assert_true (ai_move (ai, 7, 5));
24811        assert_true (ai_move (ai, 7, 6));
24812        assert_true (ai_move (ai, 5, 5));
24813        assert_true (ai_move (ai, 5, 7));
24814        assert_true (ai_move (ai, 4, 7));
24815        assert_true (ai_move (ai, 0, 5));
24816        assert_true (ai_move (ai, 2, 1));
24817        assert_true (ai_move (ai, 2, 0));
24818        assert_true (ai_move (ai, 1, 5));
24819        assert_true (ai_move (ai, 3, 5));
24820        assert_true (ai_move (ai, 0, 4));
24821        assert_true (ai_move (ai, 0, 1));
24822        assert_true (ai_move (ai, 1, 6));
24823        assert_true (ai_move (ai, 0, 7));
24824        assert_true (ai_move (ai, 1, 7));
24825        assert_true (ai_move (ai, 3, 7));
24826        assert_true (ai_move (ai, 6, 1));
24827        assert_true (ai_move (ai, 0, 6));
24828        assert_true (ai_move (ai, 7, 1));
24829        assert_true (ai_move (ai, 7, 7));
24830        assert_true (ai_move (ai, 1, 0));
24831        assert_true (ai_move (ai, 0, 0));
24832        assert_true (ai_move (ai, 1, 1));
24833        assert_true (ai_move (ai, 7, 0));
24834        assert_true (ai_move (ai, 6, 0));
24835        assert_true (game.pass ());
24836        assert_true (ai_move (ai, 6, 6));
24837    }
24838
24839    private static inline void test_complete_reversi_game_316 ()
24840    {
24841                                  /* 0 1 2 3 4 5 6 7 */
24842        string [] board = {/* 0 */ " . . . . . . . .",
24843                           /* 1 */ " . . . . . . . .",
24844                           /* 2 */ " . . . . L . . .",
24845                           /* 3 */ " . . . D L . D .",
24846                           /* 4 */ " . . . L L D . .",
24847                           /* 5 */ " . . . . D . . .",
24848                           /* 6 */ " . . . . . . . .",
24849                           /* 7 */ " . . . . . . . ."};
24850
24851        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24852        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24853
24854        assert_true (ai_move (ai, 5, 1));
24855        assert_true (ai_move (ai, 6, 5));
24856        assert_true (ai_move (ai, 2, 3));
24857        assert_true (ai_move (ai, 4, 1));
24858        assert_true (ai_move (ai, 3, 1));
24859        assert_true (ai_move (ai, 3, 6));
24860        assert_true (ai_move (ai, 5, 6));
24861        assert_true (ai_move (ai, 4, 6));
24862        assert_true (ai_move (ai, 7, 4));
24863        assert_true (ai_move (ai, 7, 2));
24864        assert_true (ai_move (ai, 3, 2));
24865        assert_true (ai_move (ai, 6, 4));
24866        assert_true (ai_move (ai, 5, 2));
24867        assert_true (ai_move (ai, 2, 4));
24868        assert_true (ai_move (ai, 1, 5));
24869        assert_true (ai_move (ai, 1, 4));
24870        assert_true (ai_move (ai, 0, 5));
24871        assert_true (ai_move (ai, 1, 2));
24872        assert_true (ai_move (ai, 1, 3));
24873        assert_true (ai_move (ai, 0, 2));
24874        assert_true (ai_move (ai, 0, 3));
24875        assert_true (ai_move (ai, 2, 2));
24876        assert_true (ai_move (ai, 2, 1));
24877        assert_true (ai_move (ai, 5, 0));
24878        assert_true (ai_move (ai, 2, 5));
24879        assert_true (ai_move (ai, 3, 0));
24880        assert_true (ai_move (ai, 2, 0));
24881        assert_true (ai_move (ai, 6, 2));
24882        assert_true (ai_move (ai, 5, 3));
24883        assert_true (ai_move (ai, 4, 0));
24884        assert_true (ai_move (ai, 6, 0));
24885        assert_true (ai_move (ai, 7, 6));
24886        assert_true (ai_move (ai, 5, 5));
24887        assert_true (ai_move (ai, 4, 7));
24888        assert_true (ai_move (ai, 5, 7));
24889        assert_true (ai_move (ai, 3, 5));
24890        assert_true (ai_move (ai, 0, 4));
24891        assert_true (ai_move (ai, 0, 6));
24892        assert_true (ai_move (ai, 2, 7));
24893        assert_true (ai_move (ai, 3, 7));
24894        assert_true (ai_move (ai, 2, 6));
24895        assert_true (ai_move (ai, 0, 1));
24896        assert_true (ai_move (ai, 7, 3));
24897        assert_true (ai_move (ai, 7, 5));
24898        assert_true (ai_move (ai, 6, 6));
24899        assert_true (ai_move (ai, 7, 1));
24900        assert_true (ai_move (ai, 1, 1));
24901        assert_true (ai_move (ai, 7, 7));
24902        assert_true (ai_move (ai, 6, 7));
24903        assert_true (ai_move (ai, 0, 0));
24904        assert_true (ai_move (ai, 6, 1));
24905        assert_true (ai_move (ai, 1, 0));
24906        assert_true (ai_move (ai, 1, 6));
24907        assert_true (ai_move (ai, 7, 0));
24908        assert_true (game.pass ());
24909        assert_true (ai_move (ai, 1, 7));
24910        assert_true (ai_move (ai, 0, 7));
24911    }
24912
24913    private static inline void test_complete_reversi_game_317 ()
24914    {
24915                                  /* 0 1 2 3 4 5 6 7 */
24916        string [] board = {/* 0 */ " . . . . . . . .",
24917                           /* 1 */ " . . . . . . . .",
24918                           /* 2 */ " . . . L . . . .",
24919                           /* 3 */ " . . . L D . D .",
24920                           /* 4 */ " . . . L L D . .",
24921                           /* 5 */ " . . . . D . . .",
24922                           /* 6 */ " . . . . . . . .",
24923                           /* 7 */ " . . . . . . . ."};
24924
24925        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
24926        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
24927
24928        assert_true (ai_move (ai, 2, 1));
24929        assert_true (ai_move (ai, 6, 4));
24930        assert_true (ai_move (ai, 2, 5));
24931        assert_true (ai_move (ai, 3, 1));
24932        assert_true (ai_move (ai, 6, 5));
24933        assert_true (ai_move (ai, 2, 4));
24934        assert_true (ai_move (ai, 4, 1));
24935        assert_true (ai_move (ai, 2, 6));
24936        assert_true (ai_move (ai, 2, 3));
24937        assert_true (ai_move (ai, 4, 6));
24938        assert_true (ai_move (ai, 5, 6));
24939        assert_true (ai_move (ai, 7, 4));
24940        assert_true (ai_move (ai, 1, 4));
24941        assert_true (ai_move (ai, 3, 6));
24942        assert_true (ai_move (ai, 2, 7));
24943        assert_true (ai_move (ai, 4, 7));
24944        assert_true (ai_move (ai, 7, 6));
24945        assert_true (ai_move (ai, 5, 2));
24946        assert_true (ai_move (ai, 7, 2));
24947        assert_true (ai_move (ai, 3, 0));
24948        assert_true (ai_move (ai, 5, 0));
24949        assert_true (ai_move (ai, 6, 2));
24950        assert_true (ai_move (ai, 4, 2));
24951        assert_true (ai_move (ai, 0, 3));
24952        assert_true (ai_move (ai, 0, 5));
24953        assert_true (ai_move (ai, 2, 2));
24954        assert_true (ai_move (ai, 1, 2));
24955        assert_true (ai_move (ai, 1, 3));
24956        assert_true (ai_move (ai, 1, 5));
24957        assert_true (ai_move (ai, 3, 5));
24958        assert_true (ai_move (ai, 5, 3));
24959        assert_true (ai_move (ai, 2, 0));
24960        assert_true (ai_move (ai, 7, 3));
24961        assert_true (ai_move (ai, 7, 1));
24962        assert_true (ai_move (ai, 3, 7));
24963        assert_true (ai_move (ai, 5, 5));
24964        assert_true (ai_move (ai, 1, 6));
24965        assert_true (ai_move (ai, 5, 1));
24966        assert_true (ai_move (ai, 5, 7));
24967        assert_true (ai_move (ai, 0, 2));
24968        assert_true (ai_move (ai, 4, 0));
24969        assert_true (ai_move (ai, 6, 0));
24970        assert_true (ai_move (ai, 6, 1));
24971        assert_true (ai_move (ai, 6, 6));
24972        assert_true (ai_move (ai, 1, 0));
24973        assert_true (ai_move (ai, 0, 0));
24974        assert_true (ai_move (ai, 0, 1));
24975        assert_true (ai_move (ai, 0, 4));
24976        assert_true (ai_move (ai, 7, 5));
24977        assert_true (ai_move (ai, 7, 7));
24978        assert_true (ai_move (ai, 6, 7));
24979        assert_true (ai_move (ai, 1, 1));
24980        assert_true (game.pass ());
24981        assert_true (ai_move (ai, 1, 7));
24982        assert_true (ai_move (ai, 0, 7));
24983        assert_true (ai_move (ai, 0, 6));
24984        assert_true (game.pass ());
24985        assert_true (ai_move (ai, 7, 0));
24986    }
24987
24988    private static inline void test_complete_reversi_game_318 ()
24989    {
24990                                  /* 0 1 2 3 4 5 6 7 */
24991        string [] board = {/* 0 */ " . . . . . . . .",
24992                           /* 1 */ " . . . . . . . .",
24993                           /* 2 */ " . . L . . . . .",
24994                           /* 3 */ " . . . L D . D .",
24995                           /* 4 */ " . . . L L D . .",
24996                           /* 5 */ " . . . . D . . .",
24997                           /* 6 */ " . . . . . . . .",
24998                           /* 7 */ " . . . . . . . ."};
24999
25000        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25001        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25002
25003        assert_true (ai_move (ai, 2, 5));
25004        assert_true (ai_move (ai, 2, 4));
25005        assert_true (ai_move (ai, 2, 3));
25006        assert_true (ai_move (ai, 6, 4));
25007        assert_true (ai_move (ai, 2, 1));
25008        assert_true (ai_move (ai, 4, 6));
25009        assert_true (ai_move (ai, 3, 6));
25010        assert_true (ai_move (ai, 2, 6));
25011        assert_true (ai_move (ai, 7, 4));
25012        assert_true (ai_move (ai, 2, 0));
25013        assert_true (ai_move (ai, 1, 4));
25014        assert_true (ai_move (ai, 0, 5));
25015        assert_true (ai_move (ai, 4, 7));
25016        assert_true (ai_move (ai, 4, 2));
25017        assert_true (ai_move (ai, 5, 1));
25018        assert_true (ai_move (ai, 6, 5));
25019        assert_true (ai_move (ai, 5, 6));
25020        assert_true (ai_move (ai, 4, 1));
25021        assert_true (ai_move (ai, 0, 4));
25022        assert_true (ai_move (ai, 0, 3));
25023        assert_true (ai_move (ai, 2, 7));
25024        assert_true (ai_move (ai, 7, 2));
25025        assert_true (ai_move (ai, 3, 1));
25026        assert_true (ai_move (ai, 1, 5));
25027        assert_true (ai_move (ai, 5, 3));
25028        assert_true (ai_move (ai, 6, 2));
25029        assert_true (ai_move (ai, 7, 3));
25030        assert_true (ai_move (ai, 7, 5));
25031        assert_true (ai_move (ai, 1, 2));
25032        assert_true (ai_move (ai, 1, 3));
25033        assert_true (ai_move (ai, 3, 0));
25034        assert_true (ai_move (ai, 7, 1));
25035        assert_true (ai_move (ai, 1, 0));
25036        assert_true (ai_move (ai, 0, 2));
25037        assert_true (ai_move (ai, 5, 2));
25038        assert_true (ai_move (ai, 5, 5));
25039        assert_true (ai_move (ai, 3, 2));
25040        assert_true (ai_move (ai, 3, 5));
25041        assert_true (ai_move (ai, 1, 6));
25042        assert_true (ai_move (ai, 5, 0));
25043        assert_true (ai_move (ai, 0, 6));
25044        assert_true (ai_move (ai, 0, 7));
25045        assert_true (ai_move (ai, 1, 7));
25046        assert_true (ai_move (ai, 3, 7));
25047        assert_true (ai_move (ai, 5, 7));
25048        assert_true (ai_move (ai, 6, 7));
25049        assert_true (ai_move (ai, 1, 1));
25050        assert_true (ai_move (ai, 4, 0));
25051        assert_true (ai_move (ai, 6, 0));
25052        assert_true (ai_move (ai, 0, 0));
25053        assert_true (ai_move (ai, 7, 6));
25054        assert_true (ai_move (ai, 7, 0));
25055        assert_true (ai_move (ai, 6, 1));
25056        assert_true (ai_move (ai, 0, 1));
25057        assert_true (ai_move (ai, 6, 6));
25058        assert_true (ai_move (ai, 7, 7));
25059    }
25060
25061    private static inline void test_complete_reversi_game_319 ()
25062    {
25063                                  /* 0 1 2 3 4 5 6 7 */
25064        string [] board = {/* 0 */ " . . . . . . . .",
25065                           /* 1 */ " . . . . . . . .",
25066                           /* 2 */ " . . . . . . . .",
25067                           /* 3 */ " . . . D D . . .",
25068                           /* 4 */ " . . . L D L . .",
25069                           /* 5 */ " . . . . L L . .",
25070                           /* 6 */ " . . . . . L . .",
25071                           /* 7 */ " . . . . . . . ."};
25072
25073        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25074        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25075
25076        assert_true (ai_move (ai, 2, 5));
25077        assert_true (ai_move (ai, 3, 2));
25078        assert_true (ai_move (ai, 4, 6));
25079        assert_true (ai_move (ai, 3, 6));
25080        assert_true (ai_move (ai, 3, 1));
25081        assert_true (ai_move (ai, 1, 4));
25082        assert_true (ai_move (ai, 4, 2));
25083        assert_true (ai_move (ai, 2, 3));
25084        assert_true (ai_move (ai, 1, 3));
25085        assert_true (ai_move (ai, 5, 2));
25086        assert_true (ai_move (ai, 6, 2));
25087        assert_true (ai_move (ai, 2, 1));
25088        assert_true (ai_move (ai, 4, 1));
25089        assert_true (ai_move (ai, 4, 0));
25090        assert_true (ai_move (ai, 5, 0));
25091        assert_true (ai_move (ai, 2, 0));
25092        assert_true (ai_move (ai, 5, 3));
25093        assert_true (ai_move (ai, 5, 1));
25094        assert_true (ai_move (ai, 6, 3));
25095        assert_true (ai_move (ai, 6, 4));
25096        assert_true (ai_move (ai, 2, 4));
25097        assert_true (ai_move (ai, 7, 4));
25098        assert_true (ai_move (ai, 2, 6));
25099        assert_true (ai_move (ai, 7, 3));
25100        assert_true (ai_move (ai, 7, 2));
25101        assert_true (ai_move (ai, 7, 1));
25102        assert_true (ai_move (ai, 1, 5));
25103        assert_true (ai_move (ai, 2, 2));
25104        assert_true (ai_move (ai, 5, 7));
25105        assert_true (ai_move (ai, 6, 5));
25106        assert_true (ai_move (ai, 1, 2));
25107        assert_true (ai_move (ai, 0, 2));
25108        assert_true (ai_move (ai, 4, 7));
25109        assert_true (ai_move (ai, 0, 3));
25110        assert_true (ai_move (ai, 3, 5));
25111        assert_true (ai_move (ai, 0, 4));
25112        assert_true (ai_move (ai, 7, 5));
25113        assert_true (ai_move (ai, 7, 6));
25114        assert_true (ai_move (ai, 0, 5));
25115        assert_true (ai_move (ai, 6, 6));
25116        assert_true (ai_move (ai, 0, 1));
25117        assert_true (ai_move (ai, 2, 7));
25118        assert_true (ai_move (ai, 3, 0));
25119        assert_true (ai_move (ai, 6, 0));
25120        assert_true (ai_move (ai, 3, 7));
25121        assert_true (ai_move (ai, 6, 7));
25122        assert_true (ai_move (ai, 6, 1));
25123        assert_true (ai_move (ai, 1, 1));
25124        assert_true (ai_move (ai, 1, 0));
25125        assert_true (ai_move (ai, 0, 0));
25126        assert_true (game.pass ());
25127        assert_true (ai_move (ai, 0, 6));
25128        assert_true (ai_move (ai, 1, 6));
25129        assert_true (ai_move (ai, 1, 7));
25130    }
25131
25132    private static inline void test_complete_reversi_game_320 ()
25133    {
25134                                  /* 0 1 2 3 4 5 6 7 */
25135        string [] board = {/* 0 */ " . . . . . . . .",
25136                           /* 1 */ " . . . . . . . .",
25137                           /* 2 */ " . . . . . L . .",
25138                           /* 3 */ " . . . D L . . .",
25139                           /* 4 */ " . . . L D L . .",
25140                           /* 5 */ " . . . . D D . .",
25141                           /* 6 */ " . . . . . . . .",
25142                           /* 7 */ " . . . . . . . ."};
25143
25144        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25145        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25146
25147        assert_true (ai_move (ai, 6, 4));
25148        assert_true (ai_move (ai, 5, 6));
25149        assert_true (ai_move (ai, 3, 6));
25150        assert_true (ai_move (ai, 6, 5));
25151        assert_true (ai_move (ai, 7, 5));
25152        assert_true (ai_move (ai, 2, 7));
25153        assert_true (ai_move (ai, 4, 6));
25154        assert_true (ai_move (ai, 7, 4));
25155        assert_true (ai_move (ai, 3, 5));
25156        assert_true (ai_move (ai, 2, 5));
25157        assert_true (ai_move (ai, 1, 5));
25158        assert_true (ai_move (ai, 1, 4));
25159        assert_true (ai_move (ai, 3, 7));
25160        assert_true (ai_move (ai, 0, 5));
25161        assert_true (ai_move (ai, 7, 3));
25162        assert_true (ai_move (ai, 4, 7));
25163        assert_true (ai_move (ai, 5, 7));
25164        assert_true (ai_move (ai, 6, 7));
25165        assert_true (ai_move (ai, 2, 6));
25166        assert_true (ai_move (ai, 2, 4));
25167        assert_true (ai_move (ai, 2, 3));
25168        assert_true (ai_move (ai, 1, 7));
25169        assert_true (ai_move (ai, 6, 3));
25170        assert_true (ai_move (ai, 5, 3));
25171        assert_true (ai_move (ai, 4, 1));
25172        assert_true (ai_move (ai, 5, 1));
25173        assert_true (ai_move (ai, 3, 2));
25174        assert_true (ai_move (ai, 7, 2));
25175        assert_true (ai_move (ai, 7, 1));
25176        assert_true (ai_move (ai, 1, 2));
25177        assert_true (ai_move (ai, 2, 2));
25178        assert_true (ai_move (ai, 2, 1));
25179        assert_true (ai_move (ai, 1, 3));
25180        assert_true (ai_move (ai, 4, 2));
25181        assert_true (ai_move (ai, 3, 1));
25182        assert_true (ai_move (ai, 6, 2));
25183        assert_true (ai_move (ai, 2, 0));
25184        assert_true (ai_move (ai, 0, 3));
25185        assert_true (ai_move (ai, 0, 2));
25186        assert_true (ai_move (ai, 4, 0));
25187        assert_true (ai_move (ai, 3, 0));
25188        assert_true (ai_move (ai, 5, 0));
25189        assert_true (ai_move (ai, 6, 0));
25190        assert_true (ai_move (ai, 6, 1));
25191        assert_true (ai_move (ai, 0, 4));
25192        assert_true (ai_move (ai, 0, 1));
25193        assert_true (ai_move (ai, 7, 0));
25194        assert_true (ai_move (ai, 1, 1));
25195        assert_true (ai_move (ai, 0, 0));
25196        assert_true (ai_move (ai, 1, 0));
25197        assert_true (ai_move (ai, 0, 6));
25198        assert_true (ai_move (ai, 6, 6));
25199        assert_true (ai_move (ai, 7, 6));
25200        assert_true (ai_move (ai, 1, 6));
25201        assert_true (ai_move (ai, 7, 7));
25202        assert_true (game.pass ());
25203        assert_true (ai_move (ai, 0, 7));
25204    }
25205
25206    private static inline void test_complete_reversi_game_321 ()
25207    {
25208                                  /* 0 1 2 3 4 5 6 7 */
25209        string [] board = {/* 0 */ " . . . . . . . .",
25210                           /* 1 */ " . . . . . . . .",
25211                           /* 2 */ " . . . . . . . .",
25212                           /* 3 */ " . . . D D . . .",
25213                           /* 4 */ " . . . L D L . .",
25214                           /* 5 */ " . . . . L D . .",
25215                           /* 6 */ " . . . L . . . .",
25216                           /* 7 */ " . . . . . . . ."};
25217
25218        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25219        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25220
25221        assert_true (ai_move (ai, 4, 6));
25222        assert_true (ai_move (ai, 5, 2));
25223        assert_true (ai_move (ai, 6, 4));
25224        assert_true (ai_move (ai, 6, 3));
25225        assert_true (ai_move (ai, 4, 2));
25226        assert_true (ai_move (ai, 6, 5));
25227        assert_true (ai_move (ai, 6, 2));
25228        assert_true (ai_move (ai, 4, 7));
25229        assert_true (ai_move (ai, 2, 4));
25230        assert_true (ai_move (ai, 3, 2));
25231        assert_true (ai_move (ai, 2, 2));
25232        assert_true (ai_move (ai, 4, 1));
25233        assert_true (ai_move (ai, 5, 1));
25234        assert_true (ai_move (ai, 5, 0));
25235        assert_true (ai_move (ai, 5, 6));
25236        assert_true (ai_move (ai, 5, 7));
25237        assert_true (ai_move (ai, 7, 5));
25238        assert_true (ai_move (ai, 2, 1));
25239        assert_true (ai_move (ai, 3, 1));
25240        assert_true (ai_move (ai, 1, 2));
25241        assert_true (ai_move (ai, 1, 3));
25242        assert_true (ai_move (ai, 7, 2));
25243        assert_true (ai_move (ai, 2, 0));
25244        assert_true (ai_move (ai, 7, 4));
25245        assert_true (ai_move (ai, 2, 7));
25246        assert_true (ai_move (ai, 2, 6));
25247        assert_true (ai_move (ai, 2, 5));
25248        assert_true (ai_move (ai, 3, 0));
25249        assert_true (ai_move (ai, 0, 2));
25250        assert_true (ai_move (ai, 0, 4));
25251        assert_true (ai_move (ai, 2, 3));
25252        assert_true (ai_move (ai, 0, 3));
25253        assert_true (ai_move (ai, 0, 5));
25254        assert_true (ai_move (ai, 3, 5));
25255        assert_true (ai_move (ai, 1, 4));
25256        assert_true (ai_move (ai, 5, 3));
25257        assert_true (ai_move (ai, 0, 1));
25258        assert_true (ai_move (ai, 1, 5));
25259        assert_true (ai_move (ai, 3, 7));
25260        assert_true (ai_move (ai, 1, 7));
25261        assert_true (ai_move (ai, 6, 6));
25262        assert_true (ai_move (ai, 1, 0));
25263        assert_true (ai_move (ai, 0, 6));
25264        assert_true (ai_move (ai, 1, 1));
25265        assert_true (ai_move (ai, 0, 0));
25266        assert_true (ai_move (ai, 6, 7));
25267        assert_true (ai_move (ai, 4, 0));
25268        assert_true (ai_move (ai, 7, 6));
25269        assert_true (ai_move (ai, 6, 0));
25270        assert_true (ai_move (ai, 6, 1));
25271        assert_true (ai_move (ai, 7, 3));
25272        assert_true (ai_move (ai, 1, 6));
25273        assert_true (ai_move (ai, 0, 7));
25274        assert_true (ai_move (ai, 7, 1));
25275        assert_true (ai_move (ai, 7, 7));
25276        assert_true (game.pass ());
25277        assert_true (ai_move (ai, 7, 0));
25278    }
25279
25280    private static inline void test_complete_reversi_game_322 ()
25281    {
25282                                  /* 0 1 2 3 4 5 6 7 */
25283        string [] board = {/* 0 */ " . . . . . . . .",
25284                           /* 1 */ " . . . . . . . .",
25285                           /* 2 */ " . . . L . . . .",
25286                           /* 3 */ " . . . L L . . .",
25287                           /* 4 */ " . . . L D L . .",
25288                           /* 5 */ " . . . . D D . .",
25289                           /* 6 */ " . . . . . . . .",
25290                           /* 7 */ " . . . . . . . ."};
25291
25292        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25293        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25294
25295        assert_true (ai_move (ai, 5, 3));
25296        assert_true (ai_move (ai, 6, 5));
25297        assert_true (ai_move (ai, 6, 3));
25298        assert_true (ai_move (ai, 3, 5));
25299        assert_true (ai_move (ai, 5, 6));
25300        assert_true (ai_move (ai, 4, 7));
25301        assert_true (ai_move (ai, 5, 7));
25302        assert_true (ai_move (ai, 6, 4));
25303        assert_true (ai_move (ai, 3, 6));
25304        assert_true (ai_move (ai, 4, 6));
25305        assert_true (ai_move (ai, 3, 7));
25306        assert_true (ai_move (ai, 5, 2));
25307        assert_true (ai_move (ai, 5, 1));
25308        assert_true (ai_move (ai, 4, 2));
25309        assert_true (ai_move (ai, 4, 1));
25310        assert_true (ai_move (ai, 6, 2));
25311        assert_true (ai_move (ai, 7, 2));
25312        assert_true (ai_move (ai, 7, 3));
25313        assert_true (ai_move (ai, 2, 1));
25314        assert_true (ai_move (ai, 2, 2));
25315        assert_true (ai_move (ai, 1, 2));
25316        assert_true (ai_move (ai, 3, 1));
25317        assert_true (ai_move (ai, 7, 5));
25318        assert_true (ai_move (ai, 1, 3));
25319        assert_true (ai_move (ai, 7, 4));
25320        assert_true (ai_move (ai, 2, 0));
25321        assert_true (ai_move (ai, 2, 6));
25322        assert_true (ai_move (ai, 0, 2));
25323        assert_true (ai_move (ai, 2, 5));
25324        assert_true (ai_move (ai, 4, 0));
25325        assert_true (ai_move (ai, 2, 4));
25326        assert_true (ai_move (ai, 5, 0));
25327        assert_true (ai_move (ai, 3, 0));
25328        assert_true (ai_move (ai, 1, 5));
25329        assert_true (ai_move (ai, 2, 3));
25330        assert_true (ai_move (ai, 1, 4));
25331        assert_true (ai_move (ai, 0, 5));
25332        assert_true (ai_move (ai, 2, 7));
25333        assert_true (ai_move (ai, 1, 7));
25334        assert_true (ai_move (ai, 6, 1));
25335        assert_true (ai_move (ai, 0, 4));
25336        assert_true (ai_move (ai, 6, 7));
25337        assert_true (ai_move (ai, 7, 7));
25338        assert_true (ai_move (ai, 7, 6));
25339        assert_true (ai_move (ai, 0, 1));
25340        assert_true (ai_move (ai, 7, 1));
25341        assert_true (ai_move (ai, 0, 3));
25342        assert_true (ai_move (ai, 0, 6));
25343        assert_true (ai_move (ai, 0, 7));
25344        assert_true (ai_move (ai, 1, 1));
25345        assert_true (ai_move (ai, 6, 6));
25346        assert_true (ai_move (ai, 1, 6));
25347        assert_true (ai_move (ai, 7, 0));
25348        assert_true (ai_move (ai, 6, 0));
25349        assert_true (ai_move (ai, 1, 0));
25350        assert_true (ai_move (ai, 0, 0));
25351    }
25352
25353    private static inline void test_complete_reversi_game_323 ()
25354    {
25355                                  /* 0 1 2 3 4 5 6 7 */
25356        string [] board = {/* 0 */ " . . . . . . . .",
25357                           /* 1 */ " . . . . . . . .",
25358                           /* 2 */ " . . . . . . . .",
25359                           /* 3 */ " . . . D D . . .",
25360                           /* 4 */ " . . . D L L . .",
25361                           /* 5 */ " . . . D L . . .",
25362                           /* 6 */ " . . . . L . . .",
25363                           /* 7 */ " . . . . . . . ."};
25364
25365        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25366        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25367
25368        assert_true (ai_move (ai, 5, 6));
25369        assert_true (ai_move (ai, 3, 6));
25370        assert_true (ai_move (ai, 4, 7));
25371        assert_true (ai_move (ai, 2, 4));
25372        assert_true (ai_move (ai, 5, 5));
25373        assert_true (ai_move (ai, 5, 2));
25374        assert_true (ai_move (ai, 6, 3));
25375        assert_true (ai_move (ai, 6, 5));
25376        assert_true (ai_move (ai, 7, 4));
25377        assert_true (ai_move (ai, 7, 2));
25378        assert_true (ai_move (ai, 6, 4));
25379        assert_true (ai_move (ai, 5, 7));
25380        assert_true (ai_move (ai, 2, 5));
25381        assert_true (ai_move (ai, 3, 7));
25382        assert_true (ai_move (ai, 2, 6));
25383        assert_true (ai_move (ai, 5, 3));
25384        assert_true (ai_move (ai, 1, 5));
25385        assert_true (ai_move (ai, 2, 7));
25386        assert_true (ai_move (ai, 3, 2));
25387        assert_true (ai_move (ai, 7, 3));
25388        assert_true (ai_move (ai, 5, 1));
25389        assert_true (ai_move (ai, 7, 5));
25390        assert_true (ai_move (ai, 6, 6));
25391        assert_true (ai_move (ai, 5, 0));
25392        assert_true (ai_move (ai, 7, 6));
25393        assert_true (ai_move (ai, 7, 7));
25394        assert_true (ai_move (ai, 6, 2));
25395        assert_true (ai_move (ai, 4, 2));
25396        assert_true (ai_move (ai, 4, 0));
25397        assert_true (ai_move (ai, 1, 7));
25398        assert_true (ai_move (ai, 4, 1));
25399        assert_true (ai_move (ai, 1, 4));
25400        assert_true (ai_move (ai, 1, 3));
25401        assert_true (ai_move (ai, 0, 2));
25402        assert_true (ai_move (ai, 2, 3));
25403        assert_true (ai_move (ai, 1, 2));
25404        assert_true (ai_move (ai, 0, 3));
25405        assert_true (ai_move (ai, 7, 1));
25406        assert_true (ai_move (ai, 6, 0));
25407        assert_true (ai_move (ai, 0, 5));
25408        assert_true (ai_move (ai, 2, 1));
25409        assert_true (ai_move (ai, 0, 4));
25410        assert_true (ai_move (ai, 6, 7));
25411        assert_true (ai_move (ai, 6, 1));
25412        assert_true (ai_move (ai, 0, 7));
25413        assert_true (ai_move (ai, 1, 1));
25414        assert_true (ai_move (ai, 0, 6));
25415        assert_true (ai_move (ai, 2, 2));
25416        assert_true (ai_move (ai, 3, 1));
25417        assert_true (ai_move (ai, 1, 6));
25418        assert_true (ai_move (ai, 7, 0));
25419        assert_true (ai_move (ai, 2, 0));
25420        assert_true (ai_move (ai, 3, 0));
25421        assert_true (game.pass ());
25422        assert_true (ai_move (ai, 0, 0));
25423        assert_true (ai_move (ai, 1, 0));
25424        assert_true (ai_move (ai, 0, 1));
25425    }
25426
25427    private static inline void test_complete_reversi_game_324 ()
25428    {
25429                                  /* 0 1 2 3 4 5 6 7 */
25430        string [] board = {/* 0 */ " . . . . . . . .",
25431                           /* 1 */ " . . . . . . . .",
25432                           /* 2 */ " . . . . L . . .",
25433                           /* 3 */ " . . . D L . . .",
25434                           /* 4 */ " . . . D L L . .",
25435                           /* 5 */ " . . . D D . . .",
25436                           /* 6 */ " . . . . . . . .",
25437                           /* 7 */ " . . . . . . . ."};
25438
25439        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25440        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25441
25442        assert_true (ai_move (ai, 5, 1));
25443        assert_true (ai_move (ai, 4, 1));
25444        assert_true (ai_move (ai, 6, 3));
25445        assert_true (ai_move (ai, 6, 5));
25446        assert_true (ai_move (ai, 6, 4));
25447        assert_true (ai_move (ai, 2, 3));
25448        assert_true (ai_move (ai, 1, 2));
25449        assert_true (ai_move (ai, 1, 3));
25450        assert_true (ai_move (ai, 3, 1));
25451        assert_true (ai_move (ai, 2, 0));
25452        assert_true (ai_move (ai, 5, 2));
25453        assert_true (ai_move (ai, 4, 0));
25454        assert_true (ai_move (ai, 3, 0));
25455        assert_true (ai_move (ai, 5, 5));
25456        assert_true (ai_move (ai, 5, 6));
25457        assert_true (ai_move (ai, 2, 5));
25458        assert_true (ai_move (ai, 5, 0));
25459        assert_true (ai_move (ai, 6, 0));
25460        assert_true (ai_move (ai, 4, 6));
25461        assert_true (ai_move (ai, 5, 7));
25462        assert_true (ai_move (ai, 3, 7));
25463        assert_true (ai_move (ai, 7, 4));
25464        assert_true (ai_move (ai, 2, 4));
25465        assert_true (ai_move (ai, 1, 5));
25466        assert_true (ai_move (ai, 7, 5));
25467        assert_true (ai_move (ai, 7, 6));
25468        assert_true (ai_move (ai, 7, 2));
25469        assert_true (ai_move (ai, 3, 6));
25470        assert_true (ai_move (ai, 2, 7));
25471        assert_true (ai_move (ai, 6, 6));
25472        assert_true (ai_move (ai, 1, 4));
25473        assert_true (ai_move (ai, 0, 2));
25474        assert_true (ai_move (ai, 2, 6));
25475        assert_true (ai_move (ai, 2, 2));
25476        assert_true (ai_move (ai, 2, 1));
25477        assert_true (ai_move (ai, 3, 2));
25478        assert_true (ai_move (ai, 5, 3));
25479        assert_true (ai_move (ai, 6, 7));
25480        assert_true (ai_move (ai, 0, 4));
25481        assert_true (ai_move (ai, 0, 5));
25482        assert_true (ai_move (ai, 0, 3));
25483        assert_true (ai_move (ai, 4, 7));
25484        assert_true (ai_move (ai, 6, 2));
25485        assert_true (ai_move (ai, 1, 7));
25486        assert_true (ai_move (ai, 7, 7));
25487        assert_true (ai_move (ai, 1, 6));
25488        assert_true (ai_move (ai, 0, 7));
25489        assert_true (ai_move (ai, 7, 3));
25490        assert_true (ai_move (ai, 0, 6));
25491        assert_true (ai_move (ai, 1, 0));
25492        assert_true (ai_move (ai, 0, 1));
25493        assert_true (ai_move (ai, 6, 1));
25494        assert_true (ai_move (ai, 7, 0));
25495        assert_true (ai_move (ai, 7, 1));
25496        assert_true (ai_move (ai, 0, 0));
25497        assert_true (ai_move (ai, 1, 1));
25498    }
25499
25500    private static inline void test_complete_reversi_game_325 ()
25501    {
25502                                  /* 0 1 2 3 4 5 6 7 */
25503        string [] board = {/* 0 */ " . . . . . . . .",
25504                           /* 1 */ " . . . . . . . .",
25505                           /* 2 */ " . . . . . . . .",
25506                           /* 3 */ " . . . D D . . .",
25507                           /* 4 */ " . . . D L L . .",
25508                           /* 5 */ " . . . D L . . .",
25509                           /* 6 */ " . . . L . . . .",
25510                           /* 7 */ " . . . . . . . ."};
25511
25512        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25513        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25514
25515        assert_true (ai_move (ai, 5, 6));
25516        assert_true (ai_move (ai, 4, 6));
25517        assert_true (ai_move (ai, 4, 7));
25518        assert_true (ai_move (ai, 2, 4));
25519        assert_true (ai_move (ai, 5, 5));
25520        assert_true (ai_move (ai, 5, 2));
25521        assert_true (ai_move (ai, 6, 3));
25522        assert_true (ai_move (ai, 6, 5));
25523        assert_true (ai_move (ai, 7, 4));
25524        assert_true (ai_move (ai, 7, 2));
25525        assert_true (ai_move (ai, 6, 4));
25526        assert_true (ai_move (ai, 5, 7));
25527        assert_true (ai_move (ai, 2, 5));
25528        assert_true (ai_move (ai, 3, 7));
25529        assert_true (ai_move (ai, 2, 6));
25530        assert_true (ai_move (ai, 5, 3));
25531        assert_true (ai_move (ai, 1, 5));
25532        assert_true (ai_move (ai, 2, 7));
25533        assert_true (ai_move (ai, 3, 2));
25534        assert_true (ai_move (ai, 7, 3));
25535        assert_true (ai_move (ai, 5, 1));
25536        assert_true (ai_move (ai, 7, 5));
25537        assert_true (ai_move (ai, 6, 6));
25538        assert_true (ai_move (ai, 5, 0));
25539        assert_true (ai_move (ai, 7, 6));
25540        assert_true (ai_move (ai, 7, 7));
25541        assert_true (ai_move (ai, 6, 2));
25542        assert_true (ai_move (ai, 4, 2));
25543        assert_true (ai_move (ai, 4, 0));
25544        assert_true (ai_move (ai, 1, 7));
25545        assert_true (ai_move (ai, 4, 1));
25546        assert_true (ai_move (ai, 1, 4));
25547        assert_true (ai_move (ai, 1, 3));
25548        assert_true (ai_move (ai, 0, 2));
25549        assert_true (ai_move (ai, 2, 3));
25550        assert_true (ai_move (ai, 1, 2));
25551        assert_true (ai_move (ai, 0, 3));
25552        assert_true (ai_move (ai, 7, 1));
25553        assert_true (ai_move (ai, 6, 0));
25554        assert_true (ai_move (ai, 0, 5));
25555        assert_true (ai_move (ai, 2, 1));
25556        assert_true (ai_move (ai, 0, 4));
25557        assert_true (ai_move (ai, 6, 7));
25558        assert_true (ai_move (ai, 6, 1));
25559        assert_true (ai_move (ai, 0, 7));
25560        assert_true (ai_move (ai, 1, 1));
25561        assert_true (ai_move (ai, 0, 6));
25562        assert_true (ai_move (ai, 2, 2));
25563        assert_true (ai_move (ai, 3, 1));
25564        assert_true (ai_move (ai, 1, 6));
25565        assert_true (ai_move (ai, 7, 0));
25566        assert_true (ai_move (ai, 2, 0));
25567        assert_true (ai_move (ai, 3, 0));
25568        assert_true (game.pass ());
25569        assert_true (ai_move (ai, 0, 0));
25570        assert_true (ai_move (ai, 1, 0));
25571        assert_true (ai_move (ai, 0, 1));
25572    }
25573
25574    private static inline void test_complete_reversi_game_326 ()
25575    {
25576                                  /* 0 1 2 3 4 5 6 7 */
25577        string [] board = {/* 0 */ " . . . . . . . .",
25578                           /* 1 */ " . . . . . . . .",
25579                           /* 2 */ " . . . L . . . .",
25580                           /* 3 */ " . . . D L . . .",
25581                           /* 4 */ " . . . D L L . .",
25582                           /* 5 */ " . . . D D . . .",
25583                           /* 6 */ " . . . . . . . .",
25584                           /* 7 */ " . . . . . . . ."};
25585
25586        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25587        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25588
25589        assert_true (ai_move (ai, 6, 3));
25590        assert_true (ai_move (ai, 6, 5));
25591        assert_true (ai_move (ai, 3, 1));
25592        assert_true (ai_move (ai, 2, 1));
25593        assert_true (ai_move (ai, 5, 2));
25594        assert_true (ai_move (ai, 4, 6));
25595        assert_true (ai_move (ai, 3, 6));
25596        assert_true (ai_move (ai, 6, 4));
25597        assert_true (ai_move (ai, 4, 7));
25598        assert_true (ai_move (ai, 7, 2));
25599        assert_true (ai_move (ai, 5, 3));
25600        assert_true (ai_move (ai, 5, 1));
25601        assert_true (ai_move (ai, 6, 2));
25602        assert_true (ai_move (ai, 4, 2));
25603        assert_true (ai_move (ai, 2, 2));
25604        assert_true (ai_move (ai, 1, 2));
25605        assert_true (ai_move (ai, 1, 3));
25606        assert_true (ai_move (ai, 4, 1));
25607        assert_true (ai_move (ai, 0, 2));
25608        assert_true (ai_move (ai, 2, 3));
25609        assert_true (ai_move (ai, 7, 4));
25610        assert_true (ai_move (ai, 5, 5));
25611        assert_true (ai_move (ai, 7, 5));
25612        assert_true (ai_move (ai, 5, 6));
25613        assert_true (ai_move (ai, 2, 0));
25614        assert_true (ai_move (ai, 7, 3));
25615        assert_true (ai_move (ai, 7, 1));
25616        assert_true (ai_move (ai, 6, 6));
25617        assert_true (ai_move (ai, 5, 0));
25618        assert_true (ai_move (ai, 2, 7));
25619        assert_true (ai_move (ai, 2, 6));
25620        assert_true (ai_move (ai, 0, 4));
25621        assert_true (ai_move (ai, 0, 3));
25622        assert_true (ai_move (ai, 2, 4));
25623        assert_true (ai_move (ai, 1, 5));
25624        assert_true (ai_move (ai, 2, 5));
25625        assert_true (ai_move (ai, 1, 4));
25626        assert_true (ai_move (ai, 0, 5));
25627        assert_true (ai_move (ai, 0, 6));
25628        assert_true (ai_move (ai, 5, 7));
25629        assert_true (ai_move (ai, 3, 7));
25630        assert_true (ai_move (ai, 3, 0));
25631        assert_true (ai_move (ai, 4, 0));
25632        assert_true (ai_move (ai, 1, 1));
25633        assert_true (ai_move (ai, 0, 0));
25634        assert_true (ai_move (ai, 0, 1));
25635        assert_true (ai_move (ai, 1, 6));
25636        assert_true (ai_move (ai, 0, 7));
25637        assert_true (ai_move (ai, 1, 7));
25638        assert_true (ai_move (ai, 6, 0));
25639        assert_true (ai_move (ai, 1, 0));
25640        assert_true (ai_move (ai, 6, 1));
25641        assert_true (ai_move (ai, 7, 7));
25642        assert_true (ai_move (ai, 6, 7));
25643        assert_true (ai_move (ai, 7, 6));
25644        assert_true (game.pass ());
25645        assert_true (ai_move (ai, 7, 0));
25646    }
25647
25648    private static inline void test_complete_reversi_game_327 ()
25649    {
25650                                  /* 0 1 2 3 4 5 6 7 */
25651        string [] board = {/* 0 */ " . . . . . . . .",
25652                           /* 1 */ " . . . . . . . .",
25653                           /* 2 */ " . . . . . . . .",
25654                           /* 3 */ " . . . D D . . .",
25655                           /* 4 */ " . . . D L L . .",
25656                           /* 5 */ " . . . L D . . .",
25657                           /* 6 */ " . . L . . . . .",
25658                           /* 7 */ " . . . . . . . ."};
25659
25660        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25661        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25662
25663        assert_true (ai_move (ai, 2, 5));
25664        assert_true (ai_move (ai, 4, 6));
25665        assert_true (ai_move (ai, 5, 6));
25666        assert_true (ai_move (ai, 3, 6));
25667        assert_true (ai_move (ai, 6, 5));
25668        assert_true (ai_move (ai, 1, 5));
25669        assert_true (ai_move (ai, 3, 7));
25670        assert_true (ai_move (ai, 2, 4));
25671        assert_true (ai_move (ai, 0, 4));
25672        assert_true (ai_move (ai, 0, 5));
25673        assert_true (ai_move (ai, 5, 3));
25674        assert_true (ai_move (ai, 0, 3));
25675        assert_true (ai_move (ai, 5, 7));
25676        assert_true (ai_move (ai, 6, 3));
25677        assert_true (ai_move (ai, 6, 4));
25678        assert_true (ai_move (ai, 7, 4));
25679        assert_true (ai_move (ai, 1, 4));
25680        assert_true (ai_move (ai, 6, 2));
25681        assert_true (ai_move (ai, 1, 3));
25682        assert_true (ai_move (ai, 5, 2));
25683        assert_true (ai_move (ai, 7, 3));
25684        assert_true (ai_move (ai, 7, 2));
25685        assert_true (ai_move (ai, 5, 1));
25686        assert_true (ai_move (ai, 4, 1));
25687        assert_true (ai_move (ai, 3, 1));
25688        assert_true (ai_move (ai, 5, 0));
25689        assert_true (ai_move (ai, 7, 5));
25690        assert_true (ai_move (ai, 5, 5));
25691        assert_true (ai_move (ai, 7, 1));
25692        assert_true (ai_move (ai, 3, 0));
25693        assert_true (ai_move (ai, 4, 2));
25694        assert_true (ai_move (ai, 2, 0));
25695        assert_true (ai_move (ai, 3, 2));
25696        assert_true (ai_move (ai, 2, 1));
25697        assert_true (ai_move (ai, 2, 2));
25698        assert_true (ai_move (ai, 2, 7));
25699        assert_true (ai_move (ai, 2, 3));
25700        assert_true (ai_move (ai, 4, 7));
25701        assert_true (ai_move (ai, 1, 7));
25702        assert_true (ai_move (ai, 0, 2));
25703        assert_true (ai_move (ai, 6, 6));
25704        assert_true (ai_move (ai, 1, 2));
25705        assert_true (ai_move (ai, 1, 1));
25706        assert_true (ai_move (ai, 6, 1));
25707        assert_true (ai_move (ai, 7, 0));
25708        assert_true (ai_move (ai, 6, 0));
25709        assert_true (ai_move (ai, 4, 0));
25710        assert_true (ai_move (ai, 1, 6));
25711        assert_true (ai_move (ai, 1, 0));
25712        assert_true (ai_move (ai, 0, 1));
25713        assert_true (ai_move (ai, 0, 0));
25714        assert_true (ai_move (ai, 7, 6));
25715        assert_true (ai_move (ai, 0, 6));
25716        assert_true (game.pass ());
25717        assert_true (ai_move (ai, 0, 7));
25718        assert_true (game.pass ());
25719        assert_true (ai_move (ai, 7, 7));
25720        assert_true (ai_move (ai, 6, 7));
25721    }
25722
25723    private static inline void test_complete_reversi_game_328 ()
25724    {
25725                                  /* 0 1 2 3 4 5 6 7 */
25726        string [] board = {/* 0 */ " . . . . . . . .",
25727                           /* 1 */ " . . . . . . . .",
25728                           /* 2 */ " . . . . . . . .",
25729                           /* 3 */ " . . . D D . . .",
25730                           /* 4 */ " . . L L L L . .",
25731                           /* 5 */ " . . . D D . . .",
25732                           /* 6 */ " . . . . . . . .",
25733                           /* 7 */ " . . . . . . . ."};
25734
25735        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25736        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25737
25738        assert_true (ai_move (ai, 6, 5));
25739        assert_true (ai_move (ai, 2, 6));
25740        assert_true (ai_move (ai, 5, 5));
25741        assert_true (ai_move (ai, 5, 6));
25742        assert_true (ai_move (ai, 4, 6));
25743        assert_true (ai_move (ai, 5, 7));
25744        assert_true (ai_move (ai, 1, 5));
25745        assert_true (ai_move (ai, 1, 3));
25746        assert_true (ai_move (ai, 2, 5));
25747        assert_true (ai_move (ai, 0, 4));
25748        assert_true (ai_move (ai, 2, 3));
25749        assert_true (ai_move (ai, 6, 4));
25750        assert_true (ai_move (ai, 0, 5));
25751        assert_true (ai_move (ai, 7, 5));
25752        assert_true (ai_move (ai, 3, 7));
25753        assert_true (ai_move (ai, 0, 6));
25754        assert_true (ai_move (ai, 7, 3));
25755        assert_true (ai_move (ai, 3, 2));
25756        assert_true (ai_move (ai, 6, 3));
25757        assert_true (ai_move (ai, 1, 4));
25758        assert_true (ai_move (ai, 2, 2));
25759        assert_true (ai_move (ai, 3, 1));
25760        assert_true (ai_move (ai, 4, 1));
25761        assert_true (ai_move (ai, 2, 7));
25762        assert_true (ai_move (ai, 0, 2));
25763        assert_true (ai_move (ai, 2, 1));
25764        assert_true (ai_move (ai, 1, 2));
25765        assert_true (ai_move (ai, 4, 2));
25766        assert_true (ai_move (ai, 5, 2));
25767        assert_true (ai_move (ai, 5, 0));
25768        assert_true (ai_move (ai, 1, 6));
25769        assert_true (ai_move (ai, 3, 6));
25770        assert_true (ai_move (ai, 3, 0));
25771        assert_true (ai_move (ai, 4, 7));
25772        assert_true (ai_move (ai, 6, 6));
25773        assert_true (ai_move (ai, 6, 7));
25774        assert_true (ai_move (ai, 1, 7));
25775        assert_true (ai_move (ai, 0, 7));
25776        assert_true (game.pass ());
25777        assert_true (ai_move (ai, 5, 3));
25778        assert_true (ai_move (ai, 7, 4));
25779        assert_true (ai_move (ai, 7, 2));
25780        assert_true (ai_move (ai, 6, 2));
25781        assert_true (ai_move (ai, 7, 1));
25782        assert_true (ai_move (ai, 6, 1));
25783        assert_true (ai_move (ai, 7, 0));
25784        assert_true (ai_move (ai, 6, 0));
25785        assert_true (ai_move (ai, 0, 3));
25786        assert_true (ai_move (ai, 4, 0));
25787        assert_true (ai_move (ai, 0, 1));
25788        assert_true (ai_move (ai, 1, 1));
25789        assert_true (ai_move (ai, 0, 0));
25790        assert_true (ai_move (ai, 1, 0));
25791        assert_true (ai_move (ai, 2, 0));
25792        assert_true (ai_move (ai, 5, 1));
25793        assert_true (ai_move (ai, 7, 7));
25794        assert_true (ai_move (ai, 7, 6));
25795    }
25796
25797    private static inline void test_complete_reversi_game_329 ()
25798    {
25799                                  /* 0 1 2 3 4 5 6 7 */
25800        string [] board = {/* 0 */ " . . . . . . . .",
25801                           /* 1 */ " . . . . . . . .",
25802                           /* 2 */ " . . L . . . . .",
25803                           /* 3 */ " . . . L D . . .",
25804                           /* 4 */ " . . . D L L . .",
25805                           /* 5 */ " . . . D D . . .",
25806                           /* 6 */ " . . . . . . . .",
25807                           /* 7 */ " . . . . . . . ."};
25808
25809        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25810        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25811
25812        assert_true (ai_move (ai, 6, 5));
25813        assert_true (ai_move (ai, 6, 4));
25814        assert_true (ai_move (ai, 3, 2));
25815        assert_true (ai_move (ai, 3, 6));
25816        assert_true (ai_move (ai, 5, 6));
25817        assert_true (ai_move (ai, 4, 6));
25818        assert_true (ai_move (ai, 1, 2));
25819        assert_true (ai_move (ai, 2, 5));
25820        assert_true (ai_move (ai, 6, 3));
25821        assert_true (ai_move (ai, 7, 4));
25822        assert_true (ai_move (ai, 3, 7));
25823        assert_true (ai_move (ai, 2, 6));
25824        assert_true (ai_move (ai, 1, 5));
25825        assert_true (ai_move (ai, 2, 7));
25826        assert_true (ai_move (ai, 1, 7));
25827        assert_true (ai_move (ai, 0, 5));
25828        assert_true (ai_move (ai, 2, 4));
25829        assert_true (ai_move (ai, 5, 2));
25830        assert_true (ai_move (ai, 5, 7));
25831        assert_true (ai_move (ai, 1, 4));
25832        assert_true (ai_move (ai, 5, 3));
25833        assert_true (ai_move (ai, 4, 7));
25834        assert_true (ai_move (ai, 1, 6));
25835        assert_true (ai_move (ai, 2, 1));
25836        assert_true (ai_move (ai, 5, 5));
25837        assert_true (ai_move (ai, 2, 3));
25838        assert_true (ai_move (ai, 2, 0));
25839        assert_true (ai_move (ai, 4, 2));
25840        assert_true (ai_move (ai, 6, 2));
25841        assert_true (ai_move (ai, 1, 3));
25842        assert_true (ai_move (ai, 0, 2));
25843        assert_true (ai_move (ai, 0, 3));
25844        assert_true (ai_move (ai, 7, 5));
25845        assert_true (ai_move (ai, 3, 1));
25846        assert_true (ai_move (ai, 7, 3));
25847        assert_true (ai_move (ai, 4, 1));
25848        assert_true (ai_move (ai, 1, 1));
25849        assert_true (ai_move (ai, 7, 2));
25850        assert_true (ai_move (ai, 7, 1));
25851        assert_true (ai_move (ai, 0, 7));
25852        assert_true (ai_move (ai, 3, 0));
25853        assert_true (ai_move (ai, 4, 0));
25854        assert_true (ai_move (ai, 5, 0));
25855        assert_true (ai_move (ai, 5, 1));
25856        assert_true (ai_move (ai, 6, 0));
25857        assert_true (ai_move (ai, 0, 0));
25858        assert_true (ai_move (ai, 0, 1));
25859        assert_true (ai_move (ai, 1, 0));
25860        assert_true (ai_move (ai, 0, 4));
25861        assert_true (ai_move (ai, 7, 0));
25862        assert_true (ai_move (ai, 0, 6));
25863        assert_true (ai_move (ai, 7, 6));
25864        assert_true (ai_move (ai, 6, 1));
25865        assert_true (ai_move (ai, 6, 6));
25866        assert_true (ai_move (ai, 6, 7));
25867        assert_true (ai_move (ai, 7, 7));
25868    }
25869
25870    private static inline void test_complete_reversi_game_330 ()
25871    {
25872                                  /* 0 1 2 3 4 5 6 7 */
25873        string [] board = {/* 0 */ " . . . . . . . .",
25874                           /* 1 */ " . . . . . . . .",
25875                           /* 2 */ " . . . . . . . .",
25876                           /* 3 */ " . . . D D . . .",
25877                           /* 4 */ " . . . D L L . .",
25878                           /* 5 */ " . . D . L . . .",
25879                           /* 6 */ " . . . . L . . .",
25880                           /* 7 */ " . . . . . . . ."};
25881
25882        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25883        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25884
25885        assert_true (ai_move (ai, 6, 5));
25886        assert_true (ai_move (ai, 6, 3));
25887        assert_true (ai_move (ai, 5, 6));
25888        assert_true (ai_move (ai, 3, 6));
25889        assert_true (ai_move (ai, 6, 4));
25890        assert_true (ai_move (ai, 1, 4));
25891        assert_true (ai_move (ai, 4, 7));
25892        assert_true (ai_move (ai, 5, 2));
25893        assert_true (ai_move (ai, 3, 2));
25894        assert_true (ai_move (ai, 6, 7));
25895        assert_true (ai_move (ai, 7, 2));
25896        assert_true (ai_move (ai, 3, 1));
25897        assert_true (ai_move (ai, 4, 1));
25898        assert_true (ai_move (ai, 5, 0));
25899        assert_true (ai_move (ai, 2, 7));
25900        assert_true (ai_move (ai, 2, 6));
25901        assert_true (ai_move (ai, 3, 0));
25902        assert_true (ai_move (ai, 5, 1));
25903        assert_true (ai_move (ai, 2, 1));
25904        assert_true (ai_move (ai, 2, 3));
25905        assert_true (ai_move (ai, 1, 2));
25906        assert_true (ai_move (ai, 1, 3));
25907        assert_true (ai_move (ai, 2, 4));
25908        assert_true (ai_move (ai, 1, 5));
25909        assert_true (ai_move (ai, 0, 5));
25910        assert_true (ai_move (ai, 3, 5));
25911        assert_true (ai_move (ai, 0, 4));
25912        assert_true (ai_move (ai, 0, 3));
25913        assert_true (ai_move (ai, 3, 7));
25914        assert_true (ai_move (ai, 0, 6));
25915        assert_true (ai_move (ai, 5, 5));
25916        assert_true (ai_move (ai, 7, 5));
25917        assert_true (ai_move (ai, 7, 4));
25918        assert_true (ai_move (ai, 7, 3));
25919        assert_true (ai_move (ai, 7, 6));
25920        assert_true (ai_move (ai, 6, 2));
25921        assert_true (ai_move (ai, 5, 3));
25922        assert_true (ai_move (ai, 1, 0));
25923        assert_true (ai_move (ai, 7, 1));
25924        assert_true (ai_move (ai, 1, 7));
25925        assert_true (ai_move (ai, 0, 7));
25926        assert_true (ai_move (ai, 4, 2));
25927        assert_true (ai_move (ai, 0, 2));
25928        assert_true (ai_move (ai, 5, 7));
25929        assert_true (ai_move (ai, 1, 6));
25930        assert_true (ai_move (ai, 0, 1));
25931        assert_true (ai_move (ai, 7, 7));
25932        assert_true (ai_move (ai, 6, 1));
25933        assert_true (ai_move (ai, 2, 2));
25934        assert_true (ai_move (ai, 6, 6));
25935        assert_true (ai_move (ai, 0, 0));
25936        assert_true (ai_move (ai, 1, 1));
25937        assert_true (ai_move (ai, 2, 0));
25938        assert_true (game.pass ());
25939        assert_true (ai_move (ai, 4, 0));
25940        assert_true (ai_move (ai, 6, 0));
25941        assert_true (ai_move (ai, 7, 0));
25942    }
25943
25944    private static inline void test_complete_reversi_game_331 ()
25945    {
25946                                  /* 0 1 2 3 4 5 6 7 */
25947        string [] board = {/* 0 */ " . . . . . . . .",
25948                           /* 1 */ " . . . . . . . .",
25949                           /* 2 */ " . . . . L . . .",
25950                           /* 3 */ " . . . D L . . .",
25951                           /* 4 */ " . . . D L L . .",
25952                           /* 5 */ " . . D . D . . .",
25953                           /* 6 */ " . . . . . . . .",
25954                           /* 7 */ " . . . . . . . ."};
25955
25956        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
25957        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
25958
25959        assert_true (ai_move (ai, 5, 1));
25960        assert_true (ai_move (ai, 4, 1));
25961        assert_true (ai_move (ai, 6, 3));
25962        assert_true (ai_move (ai, 6, 5));
25963        assert_true (ai_move (ai, 6, 4));
25964        assert_true (ai_move (ai, 2, 3));
25965        assert_true (ai_move (ai, 1, 2));
25966        assert_true (ai_move (ai, 1, 3));
25967        assert_true (ai_move (ai, 1, 4));
25968        assert_true (ai_move (ai, 0, 3));
25969        assert_true (ai_move (ai, 3, 1));
25970        assert_true (ai_move (ai, 2, 0));
25971        assert_true (ai_move (ai, 5, 2));
25972        assert_true (ai_move (ai, 2, 1));
25973        assert_true (ai_move (ai, 3, 2));
25974        assert_true (ai_move (ai, 1, 5));
25975        assert_true (ai_move (ai, 0, 5));
25976        assert_true (ai_move (ai, 3, 6));
25977        assert_true (ai_move (ai, 3, 5));
25978        assert_true (ai_move (ai, 6, 2));
25979        assert_true (ai_move (ai, 7, 2));
25980        assert_true (ai_move (ai, 5, 0));
25981        assert_true (ai_move (ai, 2, 2));
25982        assert_true (ai_move (ai, 5, 6));
25983        assert_true (ai_move (ai, 7, 4));
25984        assert_true (ai_move (ai, 1, 6));
25985        assert_true (ai_move (ai, 5, 5));
25986        assert_true (ai_move (ai, 5, 3));
25987        assert_true (ai_move (ai, 2, 4));
25988        assert_true (ai_move (ai, 4, 6));
25989        assert_true (ai_move (ai, 7, 5));
25990        assert_true (ai_move (ai, 2, 6));
25991        assert_true (ai_move (ai, 0, 4));
25992        assert_true (ai_move (ai, 0, 6));
25993        assert_true (ai_move (ai, 5, 7));
25994        assert_true (ai_move (ai, 4, 7));
25995        assert_true (ai_move (ai, 3, 7));
25996        assert_true (ai_move (ai, 2, 7));
25997        assert_true (ai_move (ai, 3, 0));
25998        assert_true (ai_move (ai, 6, 7));
25999        assert_true (ai_move (ai, 4, 0));
26000        assert_true (ai_move (ai, 0, 2));
26001        assert_true (ai_move (ai, 0, 7));
26002        assert_true (ai_move (ai, 1, 1));
26003        assert_true (ai_move (ai, 1, 7));
26004        assert_true (ai_move (ai, 6, 6));
26005        assert_true (ai_move (ai, 7, 7));
26006        assert_true (ai_move (ai, 7, 3));
26007        assert_true (ai_move (ai, 7, 6));
26008        assert_true (ai_move (ai, 6, 0));
26009        assert_true (ai_move (ai, 0, 0));
26010        assert_true (ai_move (ai, 0, 1));
26011        assert_true (ai_move (ai, 1, 0));
26012        assert_true (ai_move (ai, 6, 1));
26013        assert_true (ai_move (ai, 7, 0));
26014        assert_true (ai_move (ai, 7, 1));
26015    }
26016
26017    private static inline void test_complete_reversi_game_332 ()
26018    {
26019                                  /* 0 1 2 3 4 5 6 7 */
26020        string [] board = {/* 0 */ " . . . . . . . .",
26021                           /* 1 */ " . . . . . . . .",
26022                           /* 2 */ " . . . . . . . .",
26023                           /* 3 */ " . . . D D . . .",
26024                           /* 4 */ " . . . D L L . .",
26025                           /* 5 */ " . . D . L . . .",
26026                           /* 6 */ " . . . L . . . .",
26027                           /* 7 */ " . . . . . . . ."};
26028
26029        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26030        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26031
26032        assert_true (ai_move (ai, 5, 6));
26033        assert_true (ai_move (ai, 1, 4));
26034        assert_true (ai_move (ai, 6, 5));
26035        assert_true (ai_move (ai, 4, 6));
26036        assert_true (ai_move (ai, 2, 7));
26037        assert_true (ai_move (ai, 6, 4));
26038        assert_true (ai_move (ai, 4, 7));
26039        assert_true (ai_move (ai, 2, 2));
26040        assert_true (ai_move (ai, 0, 3));
26041        assert_true (ai_move (ai, 2, 4));
26042        assert_true (ai_move (ai, 6, 3));
26043        assert_true (ai_move (ai, 2, 6));
26044        assert_true (ai_move (ai, 2, 3));
26045        assert_true (ai_move (ai, 7, 4));
26046        assert_true (ai_move (ai, 2, 1));
26047        assert_true (ai_move (ai, 5, 2));
26048        assert_true (ai_move (ai, 7, 2));
26049        assert_true (ai_move (ai, 6, 2));
26050        assert_true (ai_move (ai, 4, 2));
26051        assert_true (ai_move (ai, 4, 1));
26052        assert_true (ai_move (ai, 3, 2));
26053        assert_true (ai_move (ai, 0, 5));
26054        assert_true (ai_move (ai, 3, 1));
26055        assert_true (ai_move (ai, 2, 0));
26056        assert_true (ai_move (ai, 1, 2));
26057        assert_true (ai_move (ai, 5, 3));
26058        assert_true (ai_move (ai, 7, 3));
26059        assert_true (ai_move (ai, 0, 2));
26060        assert_true (ai_move (ai, 5, 1));
26061        assert_true (ai_move (ai, 0, 4));
26062        assert_true (ai_move (ai, 7, 5));
26063        assert_true (ai_move (ai, 3, 5));
26064        assert_true (ai_move (ai, 3, 0));
26065        assert_true (ai_move (ai, 5, 0));
26066        assert_true (ai_move (ai, 4, 0));
26067        assert_true (ai_move (ai, 5, 5));
26068        assert_true (ai_move (ai, 1, 3));
26069        assert_true (ai_move (ai, 1, 5));
26070        assert_true (ai_move (ai, 6, 1));
26071        assert_true (ai_move (ai, 7, 0));
26072        assert_true (ai_move (ai, 6, 0));
26073        assert_true (ai_move (ai, 1, 1));
26074        assert_true (ai_move (ai, 0, 6));
26075        assert_true (ai_move (ai, 0, 7));
26076        assert_true (ai_move (ai, 1, 6));
26077        assert_true (ai_move (ai, 1, 7));
26078        assert_true (ai_move (ai, 0, 0));
26079        assert_true (ai_move (ai, 1, 0));
26080        assert_true (ai_move (ai, 0, 1));
26081        assert_true (ai_move (ai, 7, 1));
26082        assert_true (ai_move (ai, 6, 6));
26083        assert_true (ai_move (ai, 3, 7));
26084        assert_true (game.pass ());
26085        assert_true (ai_move (ai, 5, 7));
26086        assert_true (ai_move (ai, 6, 7));
26087        assert_true (ai_move (ai, 7, 6));
26088        assert_true (ai_move (ai, 7, 7));
26089    }
26090
26091    private static inline void test_complete_reversi_game_333 ()
26092    {
26093                                  /* 0 1 2 3 4 5 6 7 */
26094        string [] board = {/* 0 */ " . . . . . . . .",
26095                           /* 1 */ " . . . . . . . .",
26096                           /* 2 */ " . . . L . . . .",
26097                           /* 3 */ " . . . D L . . .",
26098                           /* 4 */ " . . . D L L . .",
26099                           /* 5 */ " . . D . D . . .",
26100                           /* 6 */ " . . . . . . . .",
26101                           /* 7 */ " . . . . . . . ."};
26102
26103        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26104        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26105
26106        assert_true (ai_move (ai, 6, 3));
26107        assert_true (ai_move (ai, 6, 5));
26108        assert_true (ai_move (ai, 3, 1));
26109        assert_true (ai_move (ai, 2, 1));
26110        assert_true (ai_move (ai, 5, 2));
26111        assert_true (ai_move (ai, 4, 6));
26112        assert_true (ai_move (ai, 3, 6));
26113        assert_true (ai_move (ai, 6, 4));
26114        assert_true (ai_move (ai, 4, 7));
26115        assert_true (ai_move (ai, 7, 2));
26116        assert_true (ai_move (ai, 7, 6));
26117        assert_true (ai_move (ai, 3, 0));
26118        assert_true (ai_move (ai, 5, 5));
26119        assert_true (ai_move (ai, 4, 1));
26120        assert_true (ai_move (ai, 6, 1));
26121        assert_true (ai_move (ai, 3, 7));
26122        assert_true (ai_move (ai, 2, 7));
26123        assert_true (ai_move (ai, 5, 3));
26124        assert_true (ai_move (ai, 5, 6));
26125        assert_true (ai_move (ai, 4, 2));
26126        assert_true (ai_move (ai, 2, 2));
26127        assert_true (ai_move (ai, 5, 1));
26128        assert_true (ai_move (ai, 5, 0));
26129        assert_true (ai_move (ai, 2, 3));
26130        assert_true (ai_move (ai, 1, 2));
26131        assert_true (ai_move (ai, 1, 3));
26132        assert_true (ai_move (ai, 2, 0));
26133        assert_true (ai_move (ai, 4, 0));
26134        assert_true (ai_move (ai, 7, 5));
26135        assert_true (ai_move (ai, 6, 2));
26136        assert_true (ai_move (ai, 2, 4));
26137        assert_true (ai_move (ai, 5, 7));
26138        assert_true (ai_move (ai, 7, 1));
26139        assert_true (ai_move (ai, 1, 7));
26140        assert_true (ai_move (ai, 1, 4));
26141        assert_true (ai_move (ai, 0, 5));
26142        assert_true (ai_move (ai, 0, 3));
26143        assert_true (ai_move (ai, 0, 2));
26144        assert_true (ai_move (ai, 0, 1));
26145        assert_true (ai_move (ai, 2, 6));
26146        assert_true (ai_move (ai, 3, 5));
26147        assert_true (ai_move (ai, 1, 5));
26148        assert_true (ai_move (ai, 7, 3));
26149        assert_true (ai_move (ai, 7, 4));
26150        assert_true (ai_move (ai, 6, 6));
26151        assert_true (ai_move (ai, 7, 7));
26152        assert_true (ai_move (ai, 6, 7));
26153        assert_true (ai_move (ai, 7, 0));
26154        assert_true (ai_move (ai, 0, 7));
26155        assert_true (ai_move (ai, 6, 0));
26156        assert_true (ai_move (ai, 1, 6));
26157        assert_true (ai_move (ai, 1, 0));
26158        assert_true (ai_move (ai, 1, 1));
26159        assert_true (ai_move (ai, 0, 0));
26160        assert_true (game.pass ());
26161        assert_true (ai_move (ai, 0, 6));
26162        assert_true (ai_move (ai, 0, 4));
26163    }
26164
26165    private static inline void test_complete_reversi_game_334 ()
26166    {
26167                                  /* 0 1 2 3 4 5 6 7 */
26168        string [] board = {/* 0 */ " . . . . . . . .",
26169                           /* 1 */ " . . . . . . . .",
26170                           /* 2 */ " . . . . . . . .",
26171                           /* 3 */ " . . . D D . . .",
26172                           /* 4 */ " . . L L L L . .",
26173                           /* 5 */ " . . D . D . . .",
26174                           /* 6 */ " . . . . . . . .",
26175                           /* 7 */ " . . . . . . . ."};
26176
26177        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26178        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26179
26180        assert_true (ai_move (ai, 1, 5));
26181        assert_true (ai_move (ai, 5, 6));
26182        assert_true (ai_move (ai, 6, 5));
26183        assert_true (ai_move (ai, 6, 3));
26184        assert_true (ai_move (ai, 4, 7));
26185        assert_true (ai_move (ai, 1, 4));
26186        assert_true (ai_move (ai, 0, 3));
26187        assert_true (ai_move (ai, 2, 2));
26188        assert_true (ai_move (ai, 4, 2));
26189        assert_true (ai_move (ai, 5, 2));
26190        assert_true (ai_move (ai, 6, 2));
26191        assert_true (ai_move (ai, 4, 1));
26192        assert_true (ai_move (ai, 5, 1));
26193        assert_true (ai_move (ai, 5, 0));
26194        assert_true (ai_move (ai, 5, 5));
26195        assert_true (ai_move (ai, 5, 7));
26196        assert_true (ai_move (ai, 4, 6));
26197        assert_true (ai_move (ai, 7, 5));
26198        assert_true (ai_move (ai, 7, 4));
26199        assert_true (ai_move (ai, 7, 3));
26200        assert_true (ai_move (ai, 4, 0));
26201        assert_true (ai_move (ai, 3, 7));
26202        assert_true (ai_move (ai, 3, 6));
26203        assert_true (ai_move (ai, 3, 0));
26204        assert_true (ai_move (ai, 5, 3));
26205        assert_true (ai_move (ai, 3, 2));
26206        assert_true (ai_move (ai, 3, 1));
26207        assert_true (ai_move (ai, 2, 1));
26208        assert_true (ai_move (ai, 1, 2));
26209        assert_true (ai_move (ai, 2, 3));
26210        assert_true (ai_move (ai, 1, 3));
26211        assert_true (ai_move (ai, 2, 6));
26212        assert_true (ai_move (ai, 3, 5));
26213        assert_true (ai_move (ai, 6, 4));
26214        assert_true (ai_move (ai, 7, 2));
26215        assert_true (ai_move (ai, 7, 1));
26216        assert_true (ai_move (ai, 2, 7));
26217        assert_true (ai_move (ai, 0, 2));
26218        assert_true (ai_move (ai, 6, 7));
26219        assert_true (ai_move (ai, 0, 4));
26220        assert_true (ai_move (ai, 2, 0));
26221        assert_true (ai_move (ai, 0, 5));
26222        assert_true (ai_move (ai, 6, 0));
26223        assert_true (ai_move (ai, 7, 6));
26224        assert_true (ai_move (ai, 6, 6));
26225        assert_true (ai_move (ai, 1, 1));
26226        assert_true (ai_move (ai, 0, 0));
26227        assert_true (ai_move (ai, 1, 0));
26228        assert_true (ai_move (ai, 0, 1));
26229        assert_true (ai_move (ai, 7, 0));
26230        assert_true (ai_move (ai, 0, 6));
26231        assert_true (ai_move (ai, 1, 7));
26232        assert_true (ai_move (ai, 0, 7));
26233        assert_true (ai_move (ai, 1, 6));
26234        assert_true (ai_move (ai, 6, 1));
26235    }
26236
26237    private static inline void test_complete_reversi_game_335 ()
26238    {
26239                                  /* 0 1 2 3 4 5 6 7 */
26240        string [] board = {/* 0 */ " . . . . . . . .",
26241                           /* 1 */ " . . . . . . . .",
26242                           /* 2 */ " . . L . . . . .",
26243                           /* 3 */ " . . . L D . . .",
26244                           /* 4 */ " . . . D L L . .",
26245                           /* 5 */ " . . D . D . . .",
26246                           /* 6 */ " . . . . . . . .",
26247                           /* 7 */ " . . . . . . . ."};
26248
26249        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26250        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26251
26252        assert_true (ai_move (ai, 6, 5));
26253        assert_true (ai_move (ai, 2, 4));
26254        assert_true (ai_move (ai, 2, 3));
26255        assert_true (ai_move (ai, 6, 4));
26256        assert_true (ai_move (ai, 2, 1));
26257        assert_true (ai_move (ai, 4, 6));
26258        assert_true (ai_move (ai, 5, 6));
26259        assert_true (ai_move (ai, 3, 6));
26260        assert_true (ai_move (ai, 6, 3));
26261        assert_true (ai_move (ai, 7, 4));
26262        assert_true (ai_move (ai, 2, 7));
26263        assert_true (ai_move (ai, 5, 2));
26264        assert_true (ai_move (ai, 4, 7));
26265        assert_true (ai_move (ai, 4, 2));
26266        assert_true (ai_move (ai, 7, 2));
26267        assert_true (ai_move (ai, 6, 2));
26268        assert_true (ai_move (ai, 3, 2));
26269        assert_true (ai_move (ai, 1, 4));
26270        assert_true (ai_move (ai, 1, 5));
26271        assert_true (ai_move (ai, 1, 2));
26272        assert_true (ai_move (ai, 1, 3));
26273        assert_true (ai_move (ai, 3, 1));
26274        assert_true (ai_move (ai, 0, 2));
26275        assert_true (ai_move (ai, 5, 1));
26276        assert_true (ai_move (ai, 5, 0));
26277        assert_true (ai_move (ai, 0, 5));
26278        assert_true (ai_move (ai, 0, 3));
26279        assert_true (ai_move (ai, 3, 5));
26280        assert_true (ai_move (ai, 2, 6));
26281        assert_true (ai_move (ai, 0, 4));
26282        assert_true (ai_move (ai, 0, 6));
26283        assert_true (ai_move (ai, 4, 1));
26284        assert_true (ai_move (ai, 3, 0));
26285        assert_true (ai_move (ai, 4, 0));
26286        assert_true (ai_move (ai, 5, 5));
26287        assert_true (ai_move (ai, 7, 5));
26288        assert_true (ai_move (ai, 5, 3));
26289        assert_true (ai_move (ai, 2, 0));
26290        assert_true (ai_move (ai, 1, 0));
26291        assert_true (ai_move (ai, 5, 7));
26292        assert_true (ai_move (ai, 1, 1));
26293        assert_true (ai_move (ai, 3, 7));
26294        assert_true (ai_move (ai, 6, 7));
26295        assert_true (ai_move (ai, 0, 0));
26296        assert_true (ai_move (ai, 7, 3));
26297        assert_true (ai_move (ai, 6, 0));
26298        assert_true (ai_move (ai, 7, 6));
26299        assert_true (ai_move (ai, 6, 6));
26300        assert_true (ai_move (ai, 6, 1));
26301        assert_true (ai_move (ai, 0, 1));
26302        assert_true (game.pass ());
26303        assert_true (ai_move (ai, 0, 7));
26304        assert_true (game.pass ());
26305        assert_true (ai_move (ai, 1, 7));
26306        assert_true (ai_move (ai, 1, 6));
26307        assert_true (ai_move (ai, 7, 7));
26308        assert_true (game.pass ());
26309        assert_true (ai_move (ai, 7, 1));
26310        assert_true (ai_move (ai, 7, 0));
26311    }
26312
26313    private static inline void test_complete_reversi_game_336 ()
26314    {
26315                                  /* 0 1 2 3 4 5 6 7 */
26316        string [] board = {/* 0 */ " . . . . . . . .",
26317                           /* 1 */ " . . . . . . . .",
26318                           /* 2 */ " . . . . . . . .",
26319                           /* 3 */ " . . D D D . . .",
26320                           /* 4 */ " . . . D L L . .",
26321                           /* 5 */ " . . . . L . . .",
26322                           /* 6 */ " . . . . L . . .",
26323                           /* 7 */ " . . . . . . . ."};
26324
26325        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26326        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26327
26328        assert_true (ai_move (ai, 6, 5));
26329        assert_true (ai_move (ai, 6, 3));
26330        assert_true (ai_move (ai, 6, 4));
26331        assert_true (ai_move (ai, 1, 2));
26332        assert_true (ai_move (ai, 2, 5));
26333        assert_true (ai_move (ai, 4, 2));
26334        assert_true (ai_move (ai, 5, 6));
26335        assert_true (ai_move (ai, 3, 6));
26336        assert_true (ai_move (ai, 1, 3));
26337        assert_true (ai_move (ai, 7, 4));
26338        assert_true (ai_move (ai, 5, 1));
26339        assert_true (ai_move (ai, 4, 1));
26340        assert_true (ai_move (ai, 4, 7));
26341        assert_true (ai_move (ai, 2, 7));
26342        assert_true (ai_move (ai, 3, 2));
26343        assert_true (ai_move (ai, 2, 2));
26344        assert_true (ai_move (ai, 2, 1));
26345        assert_true (ai_move (ai, 5, 3));
26346        assert_true (ai_move (ai, 0, 2));
26347        assert_true (ai_move (ai, 1, 4));
26348        assert_true (ai_move (ai, 5, 2));
26349        assert_true (ai_move (ai, 6, 2));
26350        assert_true (ai_move (ai, 7, 5));
26351        assert_true (ai_move (ai, 3, 1));
26352        assert_true (ai_move (ai, 2, 0));
26353        assert_true (ai_move (ai, 2, 4));
26354        assert_true (ai_move (ai, 3, 0));
26355        assert_true (ai_move (ai, 0, 3));
26356        assert_true (ai_move (ai, 0, 5));
26357        assert_true (ai_move (ai, 0, 4));
26358        assert_true (ai_move (ai, 1, 5));
26359        assert_true (ai_move (ai, 2, 6));
26360        assert_true (ai_move (ai, 7, 3));
26361        assert_true (ai_move (ai, 6, 1));
26362        assert_true (ai_move (ai, 3, 5));
26363        assert_true (ai_move (ai, 1, 6));
26364        assert_true (ai_move (ai, 5, 5));
26365        assert_true (ai_move (ai, 5, 7));
26366        assert_true (ai_move (ai, 3, 7));
26367        assert_true (ai_move (ai, 7, 2));
26368        assert_true (ai_move (ai, 6, 6));
26369        assert_true (ai_move (ai, 5, 0));
26370        assert_true (ai_move (ai, 4, 0));
26371        assert_true (ai_move (ai, 1, 0));
26372        assert_true (ai_move (ai, 7, 1));
26373        assert_true (ai_move (ai, 7, 0));
26374        assert_true (ai_move (ai, 6, 0));
26375        assert_true (ai_move (ai, 1, 7));
26376        assert_true (ai_move (ai, 0, 0));
26377        assert_true (ai_move (ai, 0, 1));
26378        assert_true (ai_move (ai, 0, 7));
26379        assert_true (ai_move (ai, 1, 1));
26380        assert_true (ai_move (ai, 6, 7));
26381        assert_true (ai_move (ai, 0, 6));
26382        assert_true (game.pass ());
26383        assert_true (ai_move (ai, 7, 6));
26384        assert_true (ai_move (ai, 7, 7));
26385    }
26386
26387    private static inline void test_complete_reversi_game_337 ()
26388    {
26389                                  /* 0 1 2 3 4 5 6 7 */
26390        string [] board = {/* 0 */ " . . . . . . . .",
26391                           /* 1 */ " . . . . . . . .",
26392                           /* 2 */ " . . . . L . . .",
26393                           /* 3 */ " . . D D L . . .",
26394                           /* 4 */ " . . . D L L . .",
26395                           /* 5 */ " . . . . D . . .",
26396                           /* 6 */ " . . . . . . . .",
26397                           /* 7 */ " . . . . . . . ."};
26398
26399        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26400        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26401
26402        assert_true (ai_move (ai, 5, 1));
26403        assert_true (ai_move (ai, 4, 1));
26404        assert_true (ai_move (ai, 6, 3));
26405        assert_true (ai_move (ai, 6, 5));
26406        assert_true (ai_move (ai, 3, 1));
26407        assert_true (ai_move (ai, 3, 6));
26408        assert_true (ai_move (ai, 5, 6));
26409        assert_true (ai_move (ai, 4, 6));
26410        assert_true (ai_move (ai, 7, 4));
26411        assert_true (ai_move (ai, 7, 2));
26412        assert_true (ai_move (ai, 3, 2));
26413        assert_true (ai_move (ai, 6, 4));
26414        assert_true (ai_move (ai, 5, 2));
26415        assert_true (ai_move (ai, 2, 4));
26416        assert_true (ai_move (ai, 1, 5));
26417        assert_true (ai_move (ai, 1, 4));
26418        assert_true (ai_move (ai, 0, 5));
26419        assert_true (ai_move (ai, 1, 2));
26420        assert_true (ai_move (ai, 1, 3));
26421        assert_true (ai_move (ai, 0, 2));
26422        assert_true (ai_move (ai, 0, 3));
26423        assert_true (ai_move (ai, 2, 2));
26424        assert_true (ai_move (ai, 2, 1));
26425        assert_true (ai_move (ai, 5, 0));
26426        assert_true (ai_move (ai, 2, 5));
26427        assert_true (ai_move (ai, 3, 0));
26428        assert_true (ai_move (ai, 2, 0));
26429        assert_true (ai_move (ai, 6, 2));
26430        assert_true (ai_move (ai, 5, 3));
26431        assert_true (ai_move (ai, 4, 0));
26432        assert_true (ai_move (ai, 6, 0));
26433        assert_true (ai_move (ai, 7, 6));
26434        assert_true (ai_move (ai, 5, 5));
26435        assert_true (ai_move (ai, 4, 7));
26436        assert_true (ai_move (ai, 5, 7));
26437        assert_true (ai_move (ai, 3, 5));
26438        assert_true (ai_move (ai, 0, 4));
26439        assert_true (ai_move (ai, 0, 6));
26440        assert_true (ai_move (ai, 2, 7));
26441        assert_true (ai_move (ai, 3, 7));
26442        assert_true (ai_move (ai, 2, 6));
26443        assert_true (ai_move (ai, 0, 1));
26444        assert_true (ai_move (ai, 7, 3));
26445        assert_true (ai_move (ai, 7, 5));
26446        assert_true (ai_move (ai, 6, 6));
26447        assert_true (ai_move (ai, 7, 1));
26448        assert_true (ai_move (ai, 1, 1));
26449        assert_true (ai_move (ai, 7, 7));
26450        assert_true (ai_move (ai, 6, 7));
26451        assert_true (ai_move (ai, 0, 0));
26452        assert_true (ai_move (ai, 6, 1));
26453        assert_true (ai_move (ai, 1, 0));
26454        assert_true (ai_move (ai, 1, 6));
26455        assert_true (ai_move (ai, 7, 0));
26456        assert_true (game.pass ());
26457        assert_true (ai_move (ai, 1, 7));
26458        assert_true (ai_move (ai, 0, 7));
26459    }
26460
26461    private static inline void test_complete_reversi_game_338 ()
26462    {
26463                                  /* 0 1 2 3 4 5 6 7 */
26464        string [] board = {/* 0 */ " . . . . . . . .",
26465                           /* 1 */ " . . . . . . . .",
26466                           /* 2 */ " . . . . . . . .",
26467                           /* 3 */ " . . D D D . . .",
26468                           /* 4 */ " . . . D L L . .",
26469                           /* 5 */ " . . . . L . . .",
26470                           /* 6 */ " . . . L . . . .",
26471                           /* 7 */ " . . . . . . . ."};
26472
26473        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26474        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26475
26476        assert_true (ai_move (ai, 6, 5));
26477        assert_true (ai_move (ai, 6, 3));
26478        assert_true (ai_move (ai, 6, 4));
26479        assert_true (ai_move (ai, 1, 2));
26480        assert_true (ai_move (ai, 4, 6));
26481        assert_true (ai_move (ai, 5, 2));
26482        assert_true (ai_move (ai, 1, 3));
26483        assert_true (ai_move (ai, 1, 4));
26484        assert_true (ai_move (ai, 7, 2));
26485        assert_true (ai_move (ai, 5, 6));
26486        assert_true (ai_move (ai, 4, 1));
26487        assert_true (ai_move (ai, 3, 2));
26488        assert_true (ai_move (ai, 2, 7));
26489        assert_true (ai_move (ai, 5, 0));
26490        assert_true (ai_move (ai, 3, 0));
26491        assert_true (ai_move (ai, 2, 6));
26492        assert_true (ai_move (ai, 4, 7));
26493        assert_true (ai_move (ai, 5, 5));
26494        assert_true (ai_move (ai, 2, 1));
26495        assert_true (ai_move (ai, 3, 5));
26496        assert_true (ai_move (ai, 2, 5));
26497        assert_true (ai_move (ai, 3, 1));
26498        assert_true (ai_move (ai, 5, 3));
26499        assert_true (ai_move (ai, 5, 1));
26500        assert_true (ai_move (ai, 2, 2));
26501        assert_true (ai_move (ai, 2, 0));
26502        assert_true (ai_move (ai, 1, 1));
26503        assert_true (ai_move (ai, 5, 7));
26504        assert_true (ai_move (ai, 2, 4));
26505        assert_true (ai_move (ai, 4, 0));
26506        assert_true (ai_move (ai, 6, 2));
26507        assert_true (ai_move (ai, 1, 5));
26508        assert_true (ai_move (ai, 0, 5));
26509        assert_true (ai_move (ai, 0, 4));
26510        assert_true (ai_move (ai, 4, 2));
26511        assert_true (ai_move (ai, 7, 5));
26512        assert_true (ai_move (ai, 7, 3));
26513        assert_true (ai_move (ai, 0, 6));
26514        assert_true (ai_move (ai, 0, 2));
26515        assert_true (ai_move (ai, 3, 7));
26516        assert_true (ai_move (ai, 6, 7));
26517        assert_true (ai_move (ai, 0, 0));
26518        assert_true (ai_move (ai, 1, 7));
26519        assert_true (ai_move (ai, 0, 1));
26520        assert_true (ai_move (ai, 0, 3));
26521        assert_true (ai_move (ai, 6, 6));
26522        assert_true (ai_move (ai, 0, 7));
26523        assert_true (ai_move (ai, 1, 6));
26524        assert_true (ai_move (ai, 1, 0));
26525        assert_true (ai_move (ai, 7, 4));
26526        assert_true (ai_move (ai, 7, 7));
26527        assert_true (ai_move (ai, 7, 1));
26528        assert_true (ai_move (ai, 7, 6));
26529        assert_true (game.pass ());
26530        assert_true (ai_move (ai, 7, 0));
26531        assert_true (game.pass ());
26532        assert_true (ai_move (ai, 6, 1));
26533        assert_true (ai_move (ai, 6, 0));
26534    }
26535
26536    private static inline void test_complete_reversi_game_339 ()
26537    {
26538                                  /* 0 1 2 3 4 5 6 7 */
26539        string [] board = {/* 0 */ " . . . . . . . .",
26540                           /* 1 */ " . . . . . . . .",
26541                           /* 2 */ " . . . L . . . .",
26542                           /* 3 */ " . . D D L . . .",
26543                           /* 4 */ " . . . D L L . .",
26544                           /* 5 */ " . . . . D . . .",
26545                           /* 6 */ " . . . . . . . .",
26546                           /* 7 */ " . . . . . . . ."};
26547
26548        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26549        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26550
26551        assert_true (ai_move (ai, 6, 3));
26552        assert_true (ai_move (ai, 6, 5));
26553        assert_true (ai_move (ai, 4, 1));
26554        assert_true (ai_move (ai, 2, 1));
26555        assert_true (ai_move (ai, 3, 1));
26556        assert_true (ai_move (ai, 3, 6));
26557        assert_true (ai_move (ai, 5, 6));
26558        assert_true (ai_move (ai, 4, 6));
26559        assert_true (ai_move (ai, 7, 4));
26560        assert_true (ai_move (ai, 7, 2));
26561        assert_true (ai_move (ai, 6, 4));
26562        assert_true (ai_move (ai, 2, 5));
26563        assert_true (ai_move (ai, 5, 2));
26564        assert_true (ai_move (ai, 1, 2));
26565        assert_true (ai_move (ai, 1, 4));
26566        assert_true (ai_move (ai, 0, 3));
26567        assert_true (ai_move (ai, 5, 3));
26568        assert_true (ai_move (ai, 5, 0));
26569        assert_true (ai_move (ai, 3, 0));
26570        assert_true (ai_move (ai, 5, 1));
26571        assert_true (ai_move (ai, 1, 3));
26572        assert_true (ai_move (ai, 5, 5));
26573        assert_true (ai_move (ai, 4, 2));
26574        assert_true (ai_move (ai, 5, 7));
26575        assert_true (ai_move (ai, 6, 2));
26576        assert_true (ai_move (ai, 2, 4));
26577        assert_true (ai_move (ai, 2, 6));
26578        assert_true (ai_move (ai, 1, 5));
26579        assert_true (ai_move (ai, 2, 2));
26580        assert_true (ai_move (ai, 3, 5));
26581        assert_true (ai_move (ai, 2, 7));
26582        assert_true (ai_move (ai, 7, 5));
26583        assert_true (ai_move (ai, 0, 5));
26584        assert_true (ai_move (ai, 3, 7));
26585        assert_true (ai_move (ai, 2, 0));
26586        assert_true (ai_move (ai, 7, 3));
26587        assert_true (ai_move (ai, 0, 2));
26588        assert_true (ai_move (ai, 0, 4));
26589        assert_true (ai_move (ai, 4, 0));
26590        assert_true (ai_move (ai, 1, 0));
26591        assert_true (ai_move (ai, 4, 7));
26592        assert_true (ai_move (ai, 1, 7));
26593        assert_true (ai_move (ai, 1, 1));
26594        assert_true (ai_move (ai, 0, 0));
26595        assert_true (ai_move (ai, 0, 1));
26596        assert_true (ai_move (ai, 1, 6));
26597        assert_true (ai_move (ai, 0, 7));
26598        assert_true (ai_move (ai, 0, 6));
26599        assert_true (ai_move (ai, 6, 7));
26600        assert_true (ai_move (ai, 6, 1));
26601        assert_true (ai_move (ai, 7, 0));
26602        assert_true (ai_move (ai, 6, 0));
26603        assert_true (ai_move (ai, 7, 1));
26604        assert_true (ai_move (ai, 6, 6));
26605        assert_true (ai_move (ai, 7, 6));
26606        assert_true (game.pass ());
26607        assert_true (ai_move (ai, 7, 7));
26608    }
26609
26610    private static inline void test_complete_reversi_game_340 ()
26611    {
26612                                  /* 0 1 2 3 4 5 6 7 */
26613        string [] board = {/* 0 */ " . . . . . . . .",
26614                           /* 1 */ " . . . . . . . .",
26615                           /* 2 */ " . . . . . . . .",
26616                           /* 3 */ " . . D D D . . .",
26617                           /* 4 */ " . . L L L L . .",
26618                           /* 5 */ " . . . . D . . .",
26619                           /* 6 */ " . . . . . . . .",
26620                           /* 7 */ " . . . . . . . ."};
26621
26622        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26623        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26624
26625        assert_true (ai_move (ai, 1, 5));
26626        assert_true (ai_move (ai, 5, 6));
26627        assert_true (ai_move (ai, 6, 5));
26628        assert_true (ai_move (ai, 6, 3));
26629        assert_true (ai_move (ai, 4, 7));
26630        assert_true (ai_move (ai, 1, 4));
26631        assert_true (ai_move (ai, 0, 5));
26632        assert_true (ai_move (ai, 1, 2));
26633        assert_true (ai_move (ai, 3, 2));
26634        assert_true (ai_move (ai, 2, 2));
26635        assert_true (ai_move (ai, 0, 2));
26636        assert_true (ai_move (ai, 4, 1));
26637        assert_true (ai_move (ai, 2, 1));
26638        assert_true (ai_move (ai, 3, 1));
26639        assert_true (ai_move (ai, 4, 0));
26640        assert_true (ai_move (ai, 2, 0));
26641        assert_true (ai_move (ai, 1, 3));
26642        assert_true (ai_move (ai, 3, 0));
26643        assert_true (ai_move (ai, 1, 0));
26644        assert_true (ai_move (ai, 5, 2));
26645        assert_true (ai_move (ai, 5, 0));
26646        assert_true (ai_move (ai, 4, 2));
26647        assert_true (ai_move (ai, 2, 5));
26648        assert_true (ai_move (ai, 5, 1));
26649        assert_true (ai_move (ai, 3, 5));
26650        assert_true (ai_move (ai, 2, 6));
26651        assert_true (ai_move (ai, 3, 6));
26652        assert_true (ai_move (ai, 2, 7));
26653        assert_true (ai_move (ai, 5, 3));
26654        assert_true (ai_move (ai, 6, 2));
26655        assert_true (ai_move (ai, 7, 2));
26656        assert_true (ai_move (ai, 6, 7));
26657        assert_true (ai_move (ai, 7, 4));
26658        assert_true (ai_move (ai, 7, 3));
26659        assert_true (ai_move (ai, 5, 5));
26660        assert_true (ai_move (ai, 7, 5));
26661        assert_true (ai_move (ai, 7, 6));
26662        assert_true (ai_move (ai, 4, 6));
26663        assert_true (ai_move (ai, 6, 4));
26664        assert_true (ai_move (ai, 0, 3));
26665        assert_true (ai_move (ai, 0, 4));
26666        assert_true (ai_move (ai, 6, 6));
26667        assert_true (ai_move (ai, 7, 7));
26668        assert_true (ai_move (ai, 7, 1));
26669        assert_true (ai_move (ai, 5, 7));
26670        assert_true (ai_move (ai, 6, 1));
26671        assert_true (ai_move (ai, 3, 7));
26672        assert_true (ai_move (ai, 1, 1));
26673        assert_true (ai_move (ai, 1, 7));
26674        assert_true (ai_move (ai, 0, 1));
26675        assert_true (ai_move (ai, 0, 0));
26676        assert_true (ai_move (ai, 1, 6));
26677        assert_true (ai_move (ai, 0, 7));
26678        assert_true (game.pass ());
26679        assert_true (ai_move (ai, 0, 6));
26680        assert_true (game.pass ());
26681        assert_true (ai_move (ai, 7, 0));
26682        assert_true (ai_move (ai, 6, 0));
26683    }
26684
26685    private static inline void test_complete_reversi_game_341 ()
26686    {
26687                                  /* 0 1 2 3 4 5 6 7 */
26688        string [] board = {/* 0 */ " . . . . . . . .",
26689                           /* 1 */ " . . . . . . . .",
26690                           /* 2 */ " . . L . . . . .",
26691                           /* 3 */ " . . D L D . . .",
26692                           /* 4 */ " . . . D L L . .",
26693                           /* 5 */ " . . . . D . . .",
26694                           /* 6 */ " . . . . . . . .",
26695                           /* 7 */ " . . . . . . . ."};
26696
26697        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26698        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26699
26700        assert_true (ai_move (ai, 2, 1));
26701        assert_true (ai_move (ai, 3, 6));
26702        assert_true (ai_move (ai, 6, 5));
26703        assert_true (ai_move (ai, 6, 3));
26704        assert_true (ai_move (ai, 5, 6));
26705        assert_true (ai_move (ai, 4, 6));
26706        assert_true (ai_move (ai, 3, 2));
26707        assert_true (ai_move (ai, 4, 2));
26708        assert_true (ai_move (ai, 5, 1));
26709        assert_true (ai_move (ai, 4, 1));
26710        assert_true (ai_move (ai, 3, 1));
26711        assert_true (ai_move (ai, 4, 0));
26712        assert_true (ai_move (ai, 5, 0));
26713        assert_true (ai_move (ai, 6, 0));
26714        assert_true (ai_move (ai, 6, 4));
26715        assert_true (ai_move (ai, 1, 2));
26716        assert_true (ai_move (ai, 1, 4));
26717        assert_true (ai_move (ai, 3, 0));
26718        assert_true (ai_move (ai, 7, 2));
26719        assert_true (ai_move (ai, 2, 4));
26720        assert_true (ai_move (ai, 4, 7));
26721        assert_true (ai_move (ai, 5, 2));
26722        assert_true (ai_move (ai, 2, 7));
26723        assert_true (ai_move (ai, 0, 5));
26724        assert_true (ai_move (ai, 0, 4));
26725        assert_true (ai_move (ai, 1, 5));
26726        assert_true (ai_move (ai, 0, 6));
26727        assert_true (ai_move (ai, 1, 3));
26728        assert_true (ai_move (ai, 2, 6));
26729        assert_true (ai_move (ai, 5, 5));
26730        assert_true (ai_move (ai, 0, 1));
26731        assert_true (ai_move (ai, 5, 3));
26732        assert_true (ai_move (ai, 6, 2));
26733        assert_true (ai_move (ai, 2, 5));
26734        assert_true (ai_move (ai, 3, 5));
26735        assert_true (ai_move (ai, 7, 5));
26736        assert_true (ai_move (ai, 7, 3));
26737        assert_true (ai_move (ai, 7, 4));
26738        assert_true (ai_move (ai, 7, 6));
26739        assert_true (ai_move (ai, 3, 7));
26740        assert_true (ai_move (ai, 2, 0));
26741        assert_true (ai_move (ai, 1, 0));
26742        assert_true (ai_move (ai, 6, 1));
26743        assert_true (ai_move (ai, 5, 7));
26744        assert_true (ai_move (ai, 6, 7));
26745        assert_true (ai_move (ai, 7, 0));
26746        assert_true (ai_move (ai, 6, 6));
26747        assert_true (ai_move (ai, 7, 1));
26748        assert_true (ai_move (ai, 1, 1));
26749        assert_true (ai_move (ai, 7, 7));
26750        assert_true (ai_move (ai, 0, 2));
26751        assert_true (ai_move (ai, 0, 3));
26752        assert_true (game.pass ());
26753        assert_true (ai_move (ai, 1, 7));
26754        assert_true (ai_move (ai, 1, 6));
26755        assert_true (ai_move (ai, 0, 7));
26756        assert_true (game.pass ());
26757        assert_true (ai_move (ai, 0, 0));
26758    }
26759
26760    private static inline void test_complete_reversi_game_342 ()
26761    {
26762                                  /* 0 1 2 3 4 5 6 7 */
26763        string [] board = {/* 0 */ " . . . . . . . .",
26764                           /* 1 */ " . . . . . . . .",
26765                           /* 2 */ " . . . . . L . .",
26766                           /* 3 */ " . . . D D D . .",
26767                           /* 4 */ " . . . L D . . .",
26768                           /* 5 */ " . . . . L . . .",
26769                           /* 6 */ " . . . . . L . .",
26770                           /* 7 */ " . . . . . . . ."};
26771
26772        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26773        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26774
26775        assert_true (ai_move (ai, 5, 1));
26776        assert_true (ai_move (ai, 3, 2));
26777        assert_true (ai_move (ai, 4, 6));
26778        assert_true (ai_move (ai, 3, 6));
26779        assert_true (ai_move (ai, 2, 1));
26780        assert_true (ai_move (ai, 3, 1));
26781        assert_true (ai_move (ai, 4, 7));
26782        assert_true (ai_move (ai, 5, 5));
26783        assert_true (ai_move (ai, 6, 4));
26784        assert_true (ai_move (ai, 6, 2));
26785        assert_true (ai_move (ai, 4, 2));
26786        assert_true (ai_move (ai, 4, 0));
26787        assert_true (ai_move (ai, 5, 7));
26788        assert_true (ai_move (ai, 4, 1));
26789        assert_true (ai_move (ai, 2, 0));
26790        assert_true (ai_move (ai, 5, 4));
26791        assert_true (ai_move (ai, 7, 2));
26792        assert_true (ai_move (ai, 6, 5));
26793        assert_true (ai_move (ai, 2, 2));
26794        assert_true (ai_move (ai, 2, 3));
26795        assert_true (ai_move (ai, 3, 0));
26796        assert_true (ai_move (ai, 1, 2));
26797        assert_true (ai_move (ai, 5, 0));
26798        assert_true (ai_move (ai, 6, 3));
26799        assert_true (ai_move (ai, 0, 2));
26800        assert_true (ai_move (ai, 3, 7));
26801        assert_true (ai_move (ai, 7, 5));
26802        assert_true (ai_move (ai, 1, 1));
26803        assert_true (ai_move (ai, 1, 3));
26804        assert_true (ai_move (ai, 1, 0));
26805        assert_true (ai_move (ai, 0, 0));
26806        assert_true (ai_move (ai, 2, 4));
26807        assert_true (ai_move (ai, 7, 3));
26808        assert_true (ai_move (ai, 6, 7));
26809        assert_true (ai_move (ai, 2, 5));
26810        assert_true (ai_move (ai, 7, 4));
26811        assert_true (ai_move (ai, 3, 5));
26812        assert_true (ai_move (ai, 1, 4));
26813        assert_true (ai_move (ai, 2, 6));
26814        assert_true (ai_move (ai, 1, 5));
26815        assert_true (ai_move (ai, 0, 4));
26816        assert_true (ai_move (ai, 0, 3));
26817        assert_true (ai_move (ai, 0, 5));
26818        assert_true (ai_move (ai, 0, 1));
26819        assert_true (ai_move (ai, 2, 7));
26820        assert_true (ai_move (ai, 1, 7));
26821        assert_true (ai_move (ai, 1, 6));
26822        assert_true (ai_move (ai, 0, 7));
26823        assert_true (ai_move (ai, 0, 6));
26824        assert_true (ai_move (ai, 6, 6));
26825        assert_true (ai_move (ai, 7, 7));
26826        assert_true (ai_move (ai, 7, 6));
26827        assert_true (game.pass ());
26828        assert_true (ai_move (ai, 6, 1));
26829        assert_true (ai_move (ai, 7, 0));
26830        assert_true (ai_move (ai, 7, 1));
26831        assert_true (ai_move (ai, 6, 0));
26832    }
26833
26834    private static inline void test_complete_reversi_game_343 ()
26835    {
26836                                  /* 0 1 2 3 4 5 6 7 */
26837        string [] board = {/* 0 */ " . . . . . . . .",
26838                           /* 1 */ " . . . . . . . .",
26839                           /* 2 */ " . . . . . L . .",
26840                           /* 3 */ " . . . D D L . .",
26841                           /* 4 */ " . . . L L L . .",
26842                           /* 5 */ " . . . . D . . .",
26843                           /* 6 */ " . . . . . . . .",
26844                           /* 7 */ " . . . . . . . ."};
26845
26846        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26847        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26848
26849        assert_true (ai_move (ai, 2, 5));
26850        assert_true (ai_move (ai, 4, 6));
26851        assert_true (ai_move (ai, 5, 6));
26852        assert_true (ai_move (ai, 3, 6));
26853        assert_true (ai_move (ai, 6, 3));
26854        assert_true (ai_move (ai, 6, 2));
26855        assert_true (ai_move (ai, 4, 1));
26856        assert_true (ai_move (ai, 5, 1));
26857        assert_true (ai_move (ai, 6, 5));
26858        assert_true (ai_move (ai, 1, 4));
26859        assert_true (ai_move (ai, 5, 0));
26860        assert_true (ai_move (ai, 7, 2));
26861        assert_true (ai_move (ai, 7, 4));
26862        assert_true (ai_move (ai, 6, 4));
26863        assert_true (ai_move (ai, 7, 5));
26864        assert_true (ai_move (ai, 3, 0));
26865        assert_true (ai_move (ai, 3, 2));
26866        assert_true (ai_move (ai, 4, 0));
26867        assert_true (ai_move (ai, 2, 0));
26868        assert_true (ai_move (ai, 2, 4));
26869        assert_true (ai_move (ai, 1, 5));
26870        assert_true (ai_move (ai, 0, 5));
26871        assert_true (ai_move (ai, 2, 3));
26872        assert_true (ai_move (ai, 3, 1));
26873        assert_true (ai_move (ai, 2, 2));
26874        assert_true (ai_move (ai, 4, 2));
26875        assert_true (ai_move (ai, 2, 7));
26876        assert_true (ai_move (ai, 1, 3));
26877        assert_true (ai_move (ai, 1, 2));
26878        assert_true (ai_move (ai, 3, 5));
26879        assert_true (ai_move (ai, 2, 6));
26880        assert_true (ai_move (ai, 5, 5));
26881        assert_true (ai_move (ai, 4, 7));
26882        assert_true (ai_move (ai, 2, 1));
26883        assert_true (ai_move (ai, 1, 0));
26884        assert_true (ai_move (ai, 0, 2));
26885        assert_true (ai_move (ai, 6, 0));
26886        assert_true (ai_move (ai, 7, 3));
26887        assert_true (ai_move (ai, 7, 1));
26888        assert_true (ai_move (ai, 6, 7));
26889        assert_true (ai_move (ai, 5, 7));
26890        assert_true (ai_move (ai, 6, 6));
26891        assert_true (ai_move (ai, 7, 7));
26892        assert_true (ai_move (ai, 3, 7));
26893        assert_true (ai_move (ai, 7, 6));
26894        assert_true (ai_move (ai, 1, 1));
26895        assert_true (ai_move (ai, 0, 0));
26896        assert_true (ai_move (ai, 0, 1));
26897        assert_true (ai_move (ai, 0, 3));
26898        assert_true (ai_move (ai, 0, 4));
26899        assert_true (ai_move (ai, 0, 6));
26900        assert_true (ai_move (ai, 1, 6));
26901        assert_true (ai_move (ai, 0, 7));
26902        assert_true (ai_move (ai, 1, 7));
26903        assert_true (ai_move (ai, 6, 1));
26904        assert_true (ai_move (ai, 7, 0));
26905    }
26906
26907    private static inline void test_complete_reversi_game_344 ()
26908    {
26909                                  /* 0 1 2 3 4 5 6 7 */
26910        string [] board = {/* 0 */ " . . . . . . . .",
26911                           /* 1 */ " . . . . . . . .",
26912                           /* 2 */ " . . . L . L . .",
26913                           /* 3 */ " . . . L D D . .",
26914                           /* 4 */ " . . . L D . . .",
26915                           /* 5 */ " . . . . D . . .",
26916                           /* 6 */ " . . . . . . . .",
26917                           /* 7 */ " . . . . . . . ."};
26918
26919        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26920        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26921
26922        assert_true (ai_move (ai, 5, 1));
26923        assert_true (ai_move (ai, 5, 6));
26924        assert_true (ai_move (ai, 4, 6));
26925        assert_true (ai_move (ai, 3, 6));
26926        assert_true (ai_move (ai, 2, 1));
26927        assert_true (ai_move (ai, 3, 1));
26928        assert_true (ai_move (ai, 4, 7));
26929        assert_true (ai_move (ai, 5, 5));
26930        assert_true (ai_move (ai, 6, 4));
26931        assert_true (ai_move (ai, 6, 2));
26932        assert_true (ai_move (ai, 4, 2));
26933        assert_true (ai_move (ai, 4, 0));
26934        assert_true (ai_move (ai, 5, 7));
26935        assert_true (ai_move (ai, 4, 1));
26936        assert_true (ai_move (ai, 2, 0));
26937        assert_true (ai_move (ai, 5, 4));
26938        assert_true (ai_move (ai, 7, 2));
26939        assert_true (ai_move (ai, 6, 5));
26940        assert_true (ai_move (ai, 2, 2));
26941        assert_true (ai_move (ai, 2, 3));
26942        assert_true (ai_move (ai, 3, 0));
26943        assert_true (ai_move (ai, 1, 2));
26944        assert_true (ai_move (ai, 5, 0));
26945        assert_true (ai_move (ai, 6, 3));
26946        assert_true (ai_move (ai, 0, 2));
26947        assert_true (ai_move (ai, 3, 7));
26948        assert_true (ai_move (ai, 7, 5));
26949        assert_true (ai_move (ai, 1, 1));
26950        assert_true (ai_move (ai, 1, 3));
26951        assert_true (ai_move (ai, 1, 0));
26952        assert_true (ai_move (ai, 0, 0));
26953        assert_true (ai_move (ai, 2, 4));
26954        assert_true (ai_move (ai, 7, 3));
26955        assert_true (ai_move (ai, 6, 7));
26956        assert_true (ai_move (ai, 2, 5));
26957        assert_true (ai_move (ai, 7, 4));
26958        assert_true (ai_move (ai, 3, 5));
26959        assert_true (ai_move (ai, 1, 4));
26960        assert_true (ai_move (ai, 2, 6));
26961        assert_true (ai_move (ai, 1, 5));
26962        assert_true (ai_move (ai, 0, 4));
26963        assert_true (ai_move (ai, 0, 3));
26964        assert_true (ai_move (ai, 0, 5));
26965        assert_true (ai_move (ai, 0, 1));
26966        assert_true (ai_move (ai, 2, 7));
26967        assert_true (ai_move (ai, 1, 7));
26968        assert_true (ai_move (ai, 1, 6));
26969        assert_true (ai_move (ai, 0, 7));
26970        assert_true (ai_move (ai, 0, 6));
26971        assert_true (ai_move (ai, 6, 6));
26972        assert_true (ai_move (ai, 7, 7));
26973        assert_true (ai_move (ai, 7, 6));
26974        assert_true (game.pass ());
26975        assert_true (ai_move (ai, 6, 1));
26976        assert_true (ai_move (ai, 7, 0));
26977        assert_true (ai_move (ai, 7, 1));
26978        assert_true (ai_move (ai, 6, 0));
26979    }
26980
26981    private static inline void test_complete_reversi_game_345 ()
26982    {
26983                                  /* 0 1 2 3 4 5 6 7 */
26984        string [] board = {/* 0 */ " . . . . . . . .",
26985                           /* 1 */ " . . . . . . . .",
26986                           /* 2 */ " . . . . D L . .",
26987                           /* 3 */ " . . . D D . . .",
26988                           /* 4 */ " . . . L D . . .",
26989                           /* 5 */ " . . . . L . . .",
26990                           /* 6 */ " . . . . . L . .",
26991                           /* 7 */ " . . . . . . . ."};
26992
26993        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
26994        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
26995
26996        assert_true (ai_move (ai, 6, 2));
26997        assert_true (ai_move (ai, 5, 4));
26998        assert_true (ai_move (ai, 6, 5));
26999        assert_true (ai_move (ai, 6, 4));
27000        assert_true (ai_move (ai, 4, 7));
27001        assert_true (ai_move (ai, 2, 2));
27002        assert_true (ai_move (ai, 2, 4));
27003        assert_true (ai_move (ai, 1, 4));
27004        assert_true (ai_move (ai, 1, 5));
27005        assert_true (ai_move (ai, 7, 6));
27006        assert_true (ai_move (ai, 0, 4));
27007        assert_true (ai_move (ai, 6, 7));
27008        assert_true (ai_move (ai, 2, 5));
27009        assert_true (ai_move (ai, 3, 2));
27010        assert_true (ai_move (ai, 1, 2));
27011        assert_true (ai_move (ai, 1, 1));
27012        assert_true (ai_move (ai, 4, 6));
27013        assert_true (ai_move (ai, 5, 1));
27014        assert_true (ai_move (ai, 6, 3));
27015        assert_true (ai_move (ai, 3, 1));
27016        assert_true (ai_move (ai, 4, 1));
27017        assert_true (ai_move (ai, 7, 2));
27018        assert_true (ai_move (ai, 2, 3));
27019        assert_true (ai_move (ai, 2, 6));
27020        assert_true (ai_move (ai, 3, 5));
27021        assert_true (ai_move (ai, 1, 3));
27022        assert_true (ai_move (ai, 0, 3));
27023        assert_true (ai_move (ai, 0, 2));
27024        assert_true (ai_move (ai, 0, 1));
27025        assert_true (ai_move (ai, 5, 3));
27026        assert_true (ai_move (ai, 4, 0));
27027        assert_true (ai_move (ai, 5, 5));
27028        assert_true (ai_move (ai, 7, 5));
27029        assert_true (ai_move (ai, 7, 3));
27030        assert_true (ai_move (ai, 7, 4));
27031        assert_true (ai_move (ai, 2, 0));
27032        assert_true (ai_move (ai, 3, 0));
27033        assert_true (ai_move (ai, 5, 0));
27034        assert_true (ai_move (ai, 0, 0));
27035        assert_true (ai_move (ai, 2, 1));
27036        assert_true (ai_move (ai, 1, 0));
27037        assert_true (ai_move (ai, 3, 6));
27038        assert_true (ai_move (ai, 6, 0));
27039        assert_true (ai_move (ai, 0, 5));
27040        assert_true (ai_move (ai, 1, 6));
27041        assert_true (ai_move (ai, 6, 6));
27042        assert_true (ai_move (ai, 0, 6));
27043        assert_true (ai_move (ai, 6, 1));
27044        assert_true (ai_move (ai, 7, 0));
27045        assert_true (ai_move (ai, 7, 1));
27046        assert_true (ai_move (ai, 2, 7));
27047        assert_true (ai_move (ai, 0, 7));
27048        assert_true (ai_move (ai, 3, 7));
27049        assert_true (ai_move (ai, 1, 7));
27050        assert_true (ai_move (ai, 5, 7));
27051        assert_true (ai_move (ai, 7, 7));
27052    }
27053
27054    private static inline void test_complete_reversi_game_346 ()
27055    {
27056                                  /* 0 1 2 3 4 5 6 7 */
27057        string [] board = {/* 0 */ " . . . . . . . .",
27058                           /* 1 */ " . . . . . . . .",
27059                           /* 2 */ " . . . . D L . .",
27060                           /* 3 */ " . . . D D . . .",
27061                           /* 4 */ " . . . L L L . .",
27062                           /* 5 */ " . . . . D . . .",
27063                           /* 6 */ " . . . . . . . .",
27064                           /* 7 */ " . . . . . . . ."};
27065
27066        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27067        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27068
27069        assert_true (ai_move (ai, 6, 2));
27070        assert_true (ai_move (ai, 5, 6));
27071        assert_true (ai_move (ai, 6, 5));
27072        assert_true (ai_move (ai, 6, 4));
27073        assert_true (ai_move (ai, 4, 7));
27074        assert_true (ai_move (ai, 2, 2));
27075        assert_true (ai_move (ai, 2, 4));
27076        assert_true (ai_move (ai, 1, 4));
27077        assert_true (ai_move (ai, 1, 5));
27078        assert_true (ai_move (ai, 7, 6));
27079        assert_true (ai_move (ai, 0, 4));
27080        assert_true (ai_move (ai, 6, 7));
27081        assert_true (ai_move (ai, 2, 5));
27082        assert_true (ai_move (ai, 3, 2));
27083        assert_true (ai_move (ai, 1, 2));
27084        assert_true (ai_move (ai, 1, 1));
27085        assert_true (ai_move (ai, 4, 6));
27086        assert_true (ai_move (ai, 5, 1));
27087        assert_true (ai_move (ai, 6, 3));
27088        assert_true (ai_move (ai, 3, 1));
27089        assert_true (ai_move (ai, 4, 1));
27090        assert_true (ai_move (ai, 7, 2));
27091        assert_true (ai_move (ai, 2, 3));
27092        assert_true (ai_move (ai, 2, 6));
27093        assert_true (ai_move (ai, 3, 5));
27094        assert_true (ai_move (ai, 1, 3));
27095        assert_true (ai_move (ai, 0, 3));
27096        assert_true (ai_move (ai, 0, 2));
27097        assert_true (ai_move (ai, 0, 1));
27098        assert_true (ai_move (ai, 5, 3));
27099        assert_true (ai_move (ai, 4, 0));
27100        assert_true (ai_move (ai, 5, 5));
27101        assert_true (ai_move (ai, 7, 5));
27102        assert_true (ai_move (ai, 7, 3));
27103        assert_true (ai_move (ai, 7, 4));
27104        assert_true (ai_move (ai, 2, 0));
27105        assert_true (ai_move (ai, 3, 0));
27106        assert_true (ai_move (ai, 5, 0));
27107        assert_true (ai_move (ai, 0, 0));
27108        assert_true (ai_move (ai, 2, 1));
27109        assert_true (ai_move (ai, 1, 0));
27110        assert_true (ai_move (ai, 3, 6));
27111        assert_true (ai_move (ai, 6, 0));
27112        assert_true (ai_move (ai, 0, 5));
27113        assert_true (ai_move (ai, 1, 6));
27114        assert_true (ai_move (ai, 6, 6));
27115        assert_true (ai_move (ai, 0, 6));
27116        assert_true (ai_move (ai, 6, 1));
27117        assert_true (ai_move (ai, 7, 0));
27118        assert_true (ai_move (ai, 7, 1));
27119        assert_true (ai_move (ai, 2, 7));
27120        assert_true (ai_move (ai, 0, 7));
27121        assert_true (ai_move (ai, 3, 7));
27122        assert_true (ai_move (ai, 1, 7));
27123        assert_true (ai_move (ai, 5, 7));
27124        assert_true (ai_move (ai, 7, 7));
27125    }
27126
27127    private static inline void test_complete_reversi_game_347 ()
27128    {
27129                                  /* 0 1 2 3 4 5 6 7 */
27130        string [] board = {/* 0 */ " . . . . . . . .",
27131                           /* 1 */ " . . . . . . . .",
27132                           /* 2 */ " . . . L L L . .",
27133                           /* 3 */ " . . . L D . . .",
27134                           /* 4 */ " . . . L D . . .",
27135                           /* 5 */ " . . . . D . . .",
27136                           /* 6 */ " . . . . . . . .",
27137                           /* 7 */ " . . . . . . . ."};
27138
27139        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27140        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27141
27142        assert_true (ai_move (ai, 4, 1));
27143        assert_true (ai_move (ai, 5, 1));
27144        assert_true (ai_move (ai, 6, 3));
27145        assert_true (ai_move (ai, 6, 2));
27146        assert_true (ai_move (ai, 2, 1));
27147        assert_true (ai_move (ai, 2, 2));
27148        assert_true (ai_move (ai, 2, 5));
27149        assert_true (ai_move (ai, 2, 0));
27150        assert_true (ai_move (ai, 2, 3));
27151        assert_true (ai_move (ai, 3, 0));
27152        assert_true (ai_move (ai, 1, 2));
27153        assert_true (ai_move (ai, 0, 2));
27154        assert_true (ai_move (ai, 5, 0));
27155        assert_true (ai_move (ai, 3, 1));
27156        assert_true (ai_move (ai, 7, 2));
27157        assert_true (ai_move (ai, 1, 4));
27158        assert_true (ai_move (ai, 6, 0));
27159        assert_true (ai_move (ai, 3, 6));
27160        assert_true (ai_move (ai, 2, 7));
27161        assert_true (ai_move (ai, 4, 7));
27162        assert_true (ai_move (ai, 1, 3));
27163        assert_true (ai_move (ai, 0, 4));
27164        assert_true (ai_move (ai, 1, 6));
27165        assert_true (ai_move (ai, 2, 4));
27166        assert_true (ai_move (ai, 1, 5));
27167        assert_true (ai_move (ai, 2, 6));
27168        assert_true (ai_move (ai, 0, 3));
27169        assert_true (ai_move (ai, 5, 3));
27170        assert_true (ai_move (ai, 5, 4));
27171        assert_true (ai_move (ai, 6, 5));
27172        assert_true (ai_move (ai, 3, 5));
27173        assert_true (ai_move (ai, 4, 6));
27174        assert_true (ai_move (ai, 3, 7));
27175        assert_true (ai_move (ai, 6, 4));
27176        assert_true (ai_move (ai, 0, 5));
27177        assert_true (ai_move (ai, 7, 3));
27178        assert_true (ai_move (ai, 0, 1));
27179        assert_true (ai_move (ai, 7, 1));
27180        assert_true (ai_move (ai, 1, 7));
27181        assert_true (ai_move (ai, 0, 7));
27182        assert_true (ai_move (ai, 5, 5));
27183        assert_true (ai_move (ai, 0, 6));
27184        assert_true (ai_move (ai, 4, 0));
27185        assert_true (ai_move (ai, 7, 0));
27186        assert_true (ai_move (ai, 1, 0));
27187        assert_true (ai_move (ai, 0, 0));
27188        assert_true (ai_move (ai, 5, 6));
27189        assert_true (ai_move (ai, 6, 1));
27190        assert_true (ai_move (ai, 7, 5));
27191        assert_true (ai_move (ai, 1, 1));
27192        assert_true (game.pass ());
27193        assert_true (ai_move (ai, 5, 7));
27194        assert_true (ai_move (ai, 6, 6));
27195        assert_true (ai_move (ai, 7, 7));
27196        assert_true (ai_move (ai, 6, 7));
27197        assert_true (ai_move (ai, 7, 4));
27198        assert_true (ai_move (ai, 7, 6));
27199    }
27200
27201    private static inline void test_complete_reversi_game_348 ()
27202    {
27203                                  /* 0 1 2 3 4 5 6 7 */
27204        string [] board = {/* 0 */ " . . . . . . . .",
27205                           /* 1 */ " . . . . . . . .",
27206                           /* 2 */ " . . . . . L . .",
27207                           /* 3 */ " . . . D L . . .",
27208                           /* 4 */ " . . . D L . . .",
27209                           /* 5 */ " . . . D L . . .",
27210                           /* 6 */ " . . . . L . . .",
27211                           /* 7 */ " . . . . . . . ."};
27212
27213        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27214        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27215
27216        assert_true (ai_move (ai, 5, 6));
27217        assert_true (ai_move (ai, 2, 6));
27218        assert_true (ai_move (ai, 2, 5));
27219        assert_true (ai_move (ai, 2, 2));
27220        assert_true (ai_move (ai, 2, 7));
27221        assert_true (ai_move (ai, 3, 6));
27222        assert_true (ai_move (ai, 2, 3));
27223        assert_true (ai_move (ai, 5, 5));
27224        assert_true (ai_move (ai, 2, 1));
27225        assert_true (ai_move (ai, 5, 7));
27226        assert_true (ai_move (ai, 3, 7));
27227        assert_true (ai_move (ai, 1, 5));
27228        assert_true (ai_move (ai, 2, 4));
27229        assert_true (ai_move (ai, 1, 3));
27230        assert_true (ai_move (ai, 1, 4));
27231        assert_true (ai_move (ai, 3, 1));
27232        assert_true (ai_move (ai, 6, 5));
27233        assert_true (ai_move (ai, 7, 5));
27234        assert_true (ai_move (ai, 0, 4));
27235        assert_true (ai_move (ai, 2, 0));
27236        assert_true (ai_move (ai, 5, 3));
27237        assert_true (ai_move (ai, 4, 7));
27238        assert_true (ai_move (ai, 6, 7));
27239        assert_true (ai_move (ai, 5, 4));
27240        assert_true (ai_move (ai, 6, 3));
27241        assert_true (ai_move (ai, 0, 3));
27242        assert_true (ai_move (ai, 6, 4));
27243        assert_true (ai_move (ai, 0, 5));
27244        assert_true (ai_move (ai, 7, 4));
27245        assert_true (ai_move (ai, 7, 3));
27246        assert_true (ai_move (ai, 5, 1));
27247        assert_true (ai_move (ai, 4, 1));
27248        assert_true (ai_move (ai, 7, 2));
27249        assert_true (ai_move (ai, 7, 1));
27250        assert_true (ai_move (ai, 1, 2));
27251        assert_true (ai_move (ai, 3, 2));
27252        assert_true (ai_move (ai, 0, 2));
27253        assert_true (ai_move (ai, 0, 1));
27254        assert_true (ai_move (ai, 4, 0));
27255        assert_true (ai_move (ai, 3, 0));
27256        assert_true (ai_move (ai, 4, 2));
27257        assert_true (ai_move (ai, 7, 6));
27258        assert_true (ai_move (ai, 6, 2));
27259        assert_true (ai_move (ai, 5, 0));
27260        assert_true (ai_move (ai, 6, 6));
27261        assert_true (ai_move (ai, 1, 7));
27262        assert_true (ai_move (ai, 0, 7));
27263        assert_true (ai_move (ai, 7, 7));
27264        assert_true (ai_move (ai, 0, 6));
27265        assert_true (ai_move (ai, 1, 1));
27266        assert_true (ai_move (ai, 0, 0));
27267        assert_true (ai_move (ai, 1, 6));
27268        assert_true (ai_move (ai, 1, 0));
27269        assert_true (ai_move (ai, 6, 1));
27270        assert_true (ai_move (ai, 6, 0));
27271        assert_true (ai_move (ai, 7, 0));
27272    }
27273
27274    private static inline void test_complete_reversi_game_349 ()
27275    {
27276                                  /* 0 1 2 3 4 5 6 7 */
27277        string [] board = {/* 0 */ " . . . . . . . .",
27278                           /* 1 */ " . . . . . . . .",
27279                           /* 2 */ " . . . . . L . .",
27280                           /* 3 */ " . . . D L . . .",
27281                           /* 4 */ " . . . L D . . .",
27282                           /* 5 */ " . . L D D . . .",
27283                           /* 6 */ " . . . . . . . .",
27284                           /* 7 */ " . . . . . . . ."};
27285
27286        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27287        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27288
27289        assert_true (ai_move (ai, 1, 5));
27290        assert_true (ai_move (ai, 3, 6));
27291        assert_true (ai_move (ai, 2, 6));
27292        assert_true (ai_move (ai, 1, 4));
27293        assert_true (ai_move (ai, 2, 4));
27294        assert_true (ai_move (ai, 2, 3));
27295        assert_true (ai_move (ai, 2, 2));
27296        assert_true (ai_move (ai, 3, 2));
27297        assert_true (ai_move (ai, 4, 6));
27298        assert_true (ai_move (ai, 2, 1));
27299        assert_true (ai_move (ai, 1, 2));
27300        assert_true (ai_move (ai, 2, 7));
27301        assert_true (ai_move (ai, 3, 7));
27302        assert_true (ai_move (ai, 0, 5));
27303        assert_true (ai_move (ai, 1, 3));
27304        assert_true (ai_move (ai, 0, 2));
27305        assert_true (ai_move (ai, 2, 0));
27306        assert_true (ai_move (ai, 0, 3));
27307        assert_true (ai_move (ai, 1, 7));
27308        assert_true (ai_move (ai, 3, 1));
27309        assert_true (ai_move (ai, 4, 1));
27310        assert_true (ai_move (ai, 5, 7));
27311        assert_true (ai_move (ai, 5, 6));
27312        assert_true (ai_move (ai, 4, 0));
27313        assert_true (ai_move (ai, 6, 3));
27314        assert_true (ai_move (ai, 4, 2));
27315        assert_true (ai_move (ai, 5, 3));
27316        assert_true (ai_move (ai, 5, 1));
27317        assert_true (ai_move (ai, 3, 0));
27318        assert_true (ai_move (ai, 6, 4));
27319        assert_true (ai_move (ai, 5, 0));
27320        assert_true (ai_move (ai, 7, 3));
27321        assert_true (ai_move (ai, 5, 4));
27322        assert_true (ai_move (ai, 6, 2));
27323        assert_true (ai_move (ai, 7, 5));
27324        assert_true (ai_move (ai, 5, 5));
27325        assert_true (ai_move (ai, 6, 5));
27326        assert_true (ai_move (ai, 7, 4));
27327        assert_true (ai_move (ai, 7, 2));
27328        assert_true (ai_move (ai, 6, 1));
27329        assert_true (ai_move (ai, 0, 4));
27330        assert_true (ai_move (ai, 6, 0));
27331        assert_true (ai_move (ai, 7, 0));
27332        assert_true (ai_move (ai, 7, 1));
27333        assert_true (ai_move (ai, 1, 6));
27334        assert_true (ai_move (ai, 4, 7));
27335        assert_true (ai_move (ai, 6, 7));
27336        assert_true (ai_move (ai, 0, 7));
27337        assert_true (ai_move (ai, 6, 6));
27338        assert_true (ai_move (ai, 0, 6));
27339        assert_true (ai_move (ai, 0, 1));
27340        assert_true (ai_move (ai, 7, 7));
27341        assert_true (ai_move (ai, 7, 6));
27342        assert_true (ai_move (ai, 0, 0));
27343        assert_true (game.pass ());
27344        assert_true (ai_move (ai, 1, 1));
27345        assert_true (ai_move (ai, 1, 0));
27346    }
27347
27348    private static inline void test_complete_reversi_game_350 ()
27349    {
27350                                  /* 0 1 2 3 4 5 6 7 */
27351        string [] board = {/* 0 */ " . . . . . . . .",
27352                           /* 1 */ " . . . . . . . .",
27353                           /* 2 */ " . . . . . L . .",
27354                           /* 3 */ " . . L L L . . .",
27355                           /* 4 */ " . . . D D . . .",
27356                           /* 5 */ " . . . D D . . .",
27357                           /* 6 */ " . . . . . . . .",
27358                           /* 7 */ " . . . . . . . ."};
27359
27360        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27361        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27362
27363        assert_true (ai_move (ai, 1, 2));
27364        assert_true (ai_move (ai, 1, 3));
27365        assert_true (ai_move (ai, 1, 4));
27366        assert_true (ai_move (ai, 0, 3));
27367        assert_true (ai_move (ai, 3, 2));
27368        assert_true (ai_move (ai, 2, 1));
27369        assert_true (ai_move (ai, 3, 1));
27370        assert_true (ai_move (ai, 1, 5));
27371        assert_true (ai_move (ai, 0, 5));
27372        assert_true (ai_move (ai, 4, 1));
27373        assert_true (ai_move (ai, 2, 5));
27374        assert_true (ai_move (ai, 4, 6));
27375        assert_true (ai_move (ai, 5, 6));
27376        assert_true (ai_move (ai, 2, 6));
27377        assert_true (ai_move (ai, 2, 7));
27378        assert_true (ai_move (ai, 5, 5));
27379        assert_true (ai_move (ai, 6, 5));
27380        assert_true (ai_move (ai, 6, 4));
27381        assert_true (ai_move (ai, 3, 6));
27382        assert_true (ai_move (ai, 7, 5));
27383        assert_true (ai_move (ai, 6, 6));
27384        assert_true (ai_move (ai, 4, 7));
27385        assert_true (ai_move (ai, 2, 4));
27386        assert_true (ai_move (ai, 5, 4));
27387        assert_true (ai_move (ai, 6, 7));
27388        assert_true (ai_move (ai, 2, 2));
27389        assert_true (ai_move (ai, 3, 7));
27390        assert_true (ai_move (ai, 1, 7));
27391        assert_true (ai_move (ai, 0, 4));
27392        assert_true (ai_move (ai, 0, 6));
27393        assert_true (ai_move (ai, 2, 0));
27394        assert_true (ai_move (ai, 1, 6));
27395        assert_true (ai_move (ai, 5, 3));
27396        assert_true (ai_move (ai, 6, 2));
27397        assert_true (ai_move (ai, 4, 2));
27398        assert_true (ai_move (ai, 6, 3));
27399        assert_true (ai_move (ai, 5, 1));
27400        assert_true (ai_move (ai, 5, 0));
27401        assert_true (ai_move (ai, 3, 0));
27402        assert_true (ai_move (ai, 4, 0));
27403        assert_true (ai_move (ai, 6, 0));
27404        assert_true (ai_move (ai, 6, 1));
27405        assert_true (ai_move (ai, 0, 1));
27406        assert_true (ai_move (ai, 0, 2));
27407        assert_true (ai_move (ai, 0, 7));
27408        assert_true (ai_move (ai, 5, 7));
27409        assert_true (ai_move (ai, 7, 7));
27410        assert_true (ai_move (ai, 7, 6));
27411        assert_true (ai_move (ai, 7, 4));
27412        assert_true (ai_move (ai, 7, 2));
27413        assert_true (ai_move (ai, 7, 3));
27414        assert_true (ai_move (ai, 7, 1));
27415        assert_true (ai_move (ai, 7, 0));
27416        assert_true (ai_move (ai, 1, 1));
27417        assert_true (ai_move (ai, 1, 0));
27418        assert_true (ai_move (ai, 0, 0));
27419    }
27420
27421    private static inline void test_complete_reversi_game_351 ()
27422    {
27423                                  /* 0 1 2 3 4 5 6 7 */
27424        string [] board = {/* 0 */ " . . . . . . . .",
27425                           /* 1 */ " . . . . . . . .",
27426                           /* 2 */ " . . . . . L . .",
27427                           /* 3 */ " . . . D L . . .",
27428                           /* 4 */ " . . D D L . . .",
27429                           /* 5 */ " . . . . L . . .",
27430                           /* 6 */ " . . . . L . . .",
27431                           /* 7 */ " . . . . . . . ."};
27432
27433        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27434        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27435
27436        assert_true (ai_move (ai, 5, 6));
27437        assert_true (ai_move (ai, 2, 2));
27438        assert_true (ai_move (ai, 4, 7));
27439        assert_true (ai_move (ai, 1, 5));
27440        assert_true (ai_move (ai, 1, 4));
27441        assert_true (ai_move (ai, 1, 3));
27442        assert_true (ai_move (ai, 0, 4));
27443        assert_true (ai_move (ai, 2, 5));
27444        assert_true (ai_move (ai, 3, 6));
27445        assert_true (ai_move (ai, 3, 5));
27446        assert_true (ai_move (ai, 0, 5));
27447        assert_true (ai_move (ai, 2, 6));
27448        assert_true (ai_move (ai, 3, 7));
27449        assert_true (ai_move (ai, 5, 5));
27450        assert_true (ai_move (ai, 6, 5));
27451        assert_true (ai_move (ai, 5, 7));
27452        assert_true (ai_move (ai, 6, 7));
27453        assert_true (ai_move (ai, 6, 4));
27454        assert_true (ai_move (ai, 0, 2));
27455        assert_true (ai_move (ai, 7, 5));
27456        assert_true (ai_move (ai, 3, 1));
27457        assert_true (ai_move (ai, 1, 1));
27458        assert_true (ai_move (ai, 7, 3));
27459        assert_true (ai_move (ai, 5, 3));
27460        assert_true (ai_move (ai, 7, 4));
27461        assert_true (ai_move (ai, 7, 2));
27462        assert_true (ai_move (ai, 2, 3));
27463        assert_true (ai_move (ai, 2, 7));
27464        assert_true (ai_move (ai, 1, 7));
27465        assert_true (ai_move (ai, 4, 0));
27466        assert_true (ai_move (ai, 2, 1));
27467        assert_true (ai_move (ai, 0, 3));
27468        assert_true (ai_move (ai, 1, 2));
27469        assert_true (ai_move (ai, 3, 0));
27470        assert_true (ai_move (ai, 3, 2));
27471        assert_true (ai_move (ai, 4, 2));
27472        assert_true (ai_move (ai, 5, 1));
27473        assert_true (ai_move (ai, 4, 1));
27474        assert_true (ai_move (ai, 5, 0));
27475        assert_true (ai_move (ai, 6, 2));
27476        assert_true (ai_move (ai, 0, 0));
27477        assert_true (ai_move (ai, 0, 1));
27478        assert_true (ai_move (ai, 2, 0));
27479        assert_true (ai_move (ai, 1, 0));
27480        assert_true (ai_move (ai, 5, 4));
27481        assert_true (ai_move (ai, 6, 3));
27482        assert_true (ai_move (ai, 7, 1));
27483        assert_true (ai_move (ai, 7, 0));
27484        assert_true (game.pass ());
27485        assert_true (ai_move (ai, 6, 0));
27486        assert_true (ai_move (ai, 6, 1));
27487        assert_true (ai_move (ai, 7, 6));
27488        assert_true (ai_move (ai, 6, 6));
27489        assert_true (ai_move (ai, 7, 7));
27490        assert_true (game.pass ());
27491        assert_true (ai_move (ai, 0, 7));
27492        assert_true (game.pass ());
27493        assert_true (ai_move (ai, 1, 6));
27494        assert_true (ai_move (ai, 0, 6));
27495    }
27496
27497    private static inline void test_complete_reversi_game_352 ()
27498    {
27499                                  /* 0 1 2 3 4 5 6 7 */
27500        string [] board = {/* 0 */ " . . . . . . . .",
27501                           /* 1 */ " . . . . . . . .",
27502                           /* 2 */ " . . . . . L . .",
27503                           /* 3 */ " . . . D L . . .",
27504                           /* 4 */ " . . D L D . . .",
27505                           /* 5 */ " . . L . D . . .",
27506                           /* 6 */ " . . . . . . . .",
27507                           /* 7 */ " . . . . . . . ."};
27508
27509        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27510        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27511
27512        assert_true (ai_move (ai, 2, 6));
27513        assert_true (ai_move (ai, 5, 6));
27514        assert_true (ai_move (ai, 4, 6));
27515        assert_true (ai_move (ai, 2, 3));
27516        assert_true (ai_move (ai, 2, 2));
27517        assert_true (ai_move (ai, 1, 2));
27518        assert_true (ai_move (ai, 1, 3));
27519        assert_true (ai_move (ai, 3, 2));
27520        assert_true (ai_move (ai, 2, 1));
27521        assert_true (ai_move (ai, 0, 3));
27522        assert_true (ai_move (ai, 0, 4));
27523        assert_true (ai_move (ai, 0, 5));
27524        assert_true (ai_move (ai, 0, 2));
27525        assert_true (ai_move (ai, 0, 1));
27526        assert_true (ai_move (ai, 5, 4));
27527        assert_true (ai_move (ai, 1, 4));
27528        assert_true (ai_move (ai, 3, 5));
27529        assert_true (ai_move (ai, 3, 1));
27530        assert_true (ai_move (ai, 3, 0));
27531        assert_true (ai_move (ai, 4, 1));
27532        assert_true (ai_move (ai, 1, 5));
27533        assert_true (ai_move (ai, 2, 7));
27534        assert_true (ai_move (ai, 3, 7));
27535        assert_true (ai_move (ai, 4, 7));
27536        assert_true (ai_move (ai, 5, 1));
27537        assert_true (ai_move (ai, 5, 0));
27538        assert_true (ai_move (ai, 6, 3));
27539        assert_true (ai_move (ai, 0, 6));
27540        assert_true (ai_move (ai, 1, 6));
27541        assert_true (ai_move (ai, 6, 4));
27542        assert_true (ai_move (ai, 5, 3));
27543        assert_true (ai_move (ai, 2, 0));
27544        assert_true (ai_move (ai, 5, 5));
27545        assert_true (ai_move (ai, 4, 0));
27546        assert_true (ai_move (ai, 5, 7));
27547        assert_true (ai_move (ai, 6, 7));
27548        assert_true (ai_move (ai, 3, 6));
27549        assert_true (ai_move (ai, 6, 5));
27550        assert_true (ai_move (ai, 7, 4));
27551        assert_true (ai_move (ai, 4, 2));
27552        assert_true (ai_move (ai, 1, 1));
27553        assert_true (ai_move (ai, 7, 5));
27554        assert_true (ai_move (ai, 7, 3));
27555        assert_true (ai_move (ai, 7, 2));
27556        assert_true (ai_move (ai, 6, 6));
27557        assert_true (ai_move (ai, 6, 2));
27558        assert_true (ai_move (ai, 6, 1));
27559        assert_true (ai_move (ai, 1, 7));
27560        assert_true (game.pass ());
27561        assert_true (ai_move (ai, 7, 6));
27562        assert_true (ai_move (ai, 7, 7));
27563        assert_true (ai_move (ai, 1, 0));
27564        assert_true (ai_move (ai, 0, 7));
27565        assert_true (ai_move (ai, 7, 1));
27566        assert_true (ai_move (ai, 0, 0));
27567        assert_true (game.pass ());
27568        assert_true (ai_move (ai, 7, 0));
27569        assert_true (ai_move (ai, 6, 0));
27570    }
27571
27572    private static inline void test_complete_reversi_game_353 ()
27573    {
27574                                  /* 0 1 2 3 4 5 6 7 */
27575        string [] board = {/* 0 */ " . . . . . . . .",
27576                           /* 1 */ " . . . . . . . .",
27577                           /* 2 */ " . . . . . L . .",
27578                           /* 3 */ " . . L L L . . .",
27579                           /* 4 */ " . . D D D . . .",
27580                           /* 5 */ " . . . . D . . .",
27581                           /* 6 */ " . . . . . . . .",
27582                           /* 7 */ " . . . . . . . ."};
27583
27584        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27585        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27586
27587        assert_true (ai_move (ai, 1, 2));
27588        assert_true (ai_move (ai, 1, 3));
27589        assert_true (ai_move (ai, 0, 2));
27590        assert_true (ai_move (ai, 1, 5));
27591        assert_true (ai_move (ai, 3, 5));
27592        assert_true (ai_move (ai, 2, 5));
27593        assert_true (ai_move (ai, 1, 4));
27594        assert_true (ai_move (ai, 0, 5));
27595        assert_true (ai_move (ai, 2, 6));
27596        assert_true (ai_move (ai, 2, 7));
27597        assert_true (ai_move (ai, 0, 4));
27598        assert_true (ai_move (ai, 3, 6));
27599        assert_true (ai_move (ai, 4, 6));
27600        assert_true (ai_move (ai, 5, 3));
27601        assert_true (ai_move (ai, 2, 2));
27602        assert_true (ai_move (ai, 3, 2));
27603        assert_true (ai_move (ai, 3, 7));
27604        assert_true (ai_move (ai, 5, 4));
27605        assert_true (ai_move (ai, 5, 6));
27606        assert_true (ai_move (ai, 2, 1));
27607        assert_true (ai_move (ai, 2, 0));
27608        assert_true (ai_move (ai, 5, 5));
27609        assert_true (ai_move (ai, 0, 3));
27610        assert_true (ai_move (ai, 0, 1));
27611        assert_true (ai_move (ai, 4, 7));
27612        assert_true (ai_move (ai, 0, 6));
27613        assert_true (ai_move (ai, 4, 1));
27614        assert_true (ai_move (ai, 4, 2));
27615        assert_true (ai_move (ai, 6, 5));
27616        assert_true (ai_move (ai, 7, 5));
27617        assert_true (ai_move (ai, 3, 1));
27618        assert_true (ai_move (ai, 5, 7));
27619        assert_true (ai_move (ai, 6, 2));
27620        assert_true (ai_move (ai, 5, 0));
27621        assert_true (ai_move (ai, 3, 0));
27622        assert_true (ai_move (ai, 7, 2));
27623        assert_true (ai_move (ai, 5, 1));
27624        assert_true (ai_move (ai, 1, 7));
27625        assert_true (ai_move (ai, 6, 4));
27626        assert_true (ai_move (ai, 1, 1));
27627        assert_true (ai_move (ai, 7, 3));
27628        assert_true (ai_move (ai, 6, 3));
27629        assert_true (ai_move (ai, 7, 4));
27630        assert_true (ai_move (ai, 4, 0));
27631        assert_true (ai_move (ai, 6, 0));
27632        assert_true (ai_move (ai, 6, 1));
27633        assert_true (ai_move (ai, 7, 6));
27634        assert_true (ai_move (ai, 7, 7));
27635        assert_true (ai_move (ai, 7, 0));
27636        assert_true (ai_move (ai, 6, 6));
27637        assert_true (ai_move (ai, 6, 7));
27638        assert_true (ai_move (ai, 1, 0));
27639        assert_true (ai_move (ai, 0, 7));
27640        assert_true (ai_move (ai, 7, 1));
27641        assert_true (ai_move (ai, 0, 0));
27642        assert_true (game.pass ());
27643        assert_true (ai_move (ai, 1, 6));
27644    }
27645
27646    private static inline void test_complete_reversi_game_354 ()
27647    {
27648                                  /* 0 1 2 3 4 5 6 7 */
27649        string [] board = {/* 0 */ " . . . . . . . .",
27650                           /* 1 */ " . . . . . . . .",
27651                           /* 2 */ " . . . . . L . .",
27652                           /* 3 */ " . . D D L . . .",
27653                           /* 4 */ " . . . D L . . .",
27654                           /* 5 */ " . . . . L . . .",
27655                           /* 6 */ " . . . . L . . .",
27656                           /* 7 */ " . . . . . . . ."};
27657
27658        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27659        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27660
27661        assert_true (ai_move (ai, 5, 6));
27662        assert_true (ai_move (ai, 2, 5));
27663        assert_true (ai_move (ai, 4, 7));
27664        assert_true (ai_move (ai, 1, 2));
27665        assert_true (ai_move (ai, 1, 3));
27666        assert_true (ai_move (ai, 0, 3));
27667        assert_true (ai_move (ai, 0, 1));
27668        assert_true (ai_move (ai, 2, 1));
27669        assert_true (ai_move (ai, 5, 4));
27670        assert_true (ai_move (ai, 6, 5));
27671        assert_true (ai_move (ai, 6, 3));
27672        assert_true (ai_move (ai, 7, 4));
27673        assert_true (ai_move (ai, 7, 2));
27674        assert_true (ai_move (ai, 3, 5));
27675        assert_true (ai_move (ai, 4, 1));
27676        assert_true (ai_move (ai, 5, 7));
27677        assert_true (ai_move (ai, 6, 7));
27678        assert_true (ai_move (ai, 5, 5));
27679        assert_true (ai_move (ai, 3, 2));
27680        assert_true (ai_move (ai, 3, 1));
27681        assert_true (ai_move (ai, 3, 6));
27682        assert_true (ai_move (ai, 1, 4));
27683        assert_true (ai_move (ai, 6, 4));
27684        assert_true (ai_move (ai, 5, 0));
27685        assert_true (ai_move (ai, 7, 5));
27686        assert_true (ai_move (ai, 4, 2));
27687        assert_true (ai_move (ai, 7, 3));
27688        assert_true (ai_move (ai, 6, 2));
27689        assert_true (ai_move (ai, 1, 5));
27690        assert_true (ai_move (ai, 2, 6));
27691        assert_true (ai_move (ai, 3, 7));
27692        assert_true (ai_move (ai, 0, 5));
27693        assert_true (ai_move (ai, 5, 3));
27694        assert_true (ai_move (ai, 1, 7));
27695        assert_true (ai_move (ai, 5, 1));
27696        assert_true (ai_move (ai, 6, 0));
27697        assert_true (ai_move (ai, 2, 4));
27698        assert_true (ai_move (ai, 7, 1));
27699        assert_true (ai_move (ai, 7, 0));
27700        assert_true (ai_move (ai, 6, 1));
27701        assert_true (ai_move (ai, 2, 2));
27702        assert_true (ai_move (ai, 7, 6));
27703        assert_true (ai_move (ai, 7, 7));
27704        assert_true (ai_move (ai, 2, 7));
27705        assert_true (ai_move (ai, 6, 6));
27706        assert_true (game.pass ());
27707        assert_true (ai_move (ai, 0, 7));
27708        assert_true (game.pass ());
27709        assert_true (ai_move (ai, 1, 6));
27710        assert_true (game.pass ());
27711        assert_true (ai_move (ai, 0, 6));
27712        assert_true (game.pass ());
27713        assert_true (ai_move (ai, 4, 0));
27714        assert_true (ai_move (ai, 2, 0));
27715        assert_true (ai_move (ai, 3, 0));
27716        assert_true (game.pass ());
27717        assert_true (ai_move (ai, 1, 0));
27718        assert_true (ai_move (ai, 1, 1));
27719        assert_true (ai_move (ai, 0, 0));
27720        assert_true (game.pass ());
27721        assert_true (ai_move (ai, 0, 4));
27722        assert_true (ai_move (ai, 0, 2));
27723    }
27724
27725    private static inline void test_complete_reversi_game_355 ()
27726    {
27727                                  /* 0 1 2 3 4 5 6 7 */
27728        string [] board = {/* 0 */ " . . . . . . . .",
27729                           /* 1 */ " . . . . . . . .",
27730                           /* 2 */ " . . . . . L . .",
27731                           /* 3 */ " . . D D L . . .",
27732                           /* 4 */ " . . . L D . . .",
27733                           /* 5 */ " . . L . D . . .",
27734                           /* 6 */ " . . . . . . . .",
27735                           /* 7 */ " . . . . . . . ."};
27736
27737        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27738        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27739
27740        assert_true (ai_move (ai, 5, 3));
27741        assert_true (ai_move (ai, 5, 6));
27742        assert_true (ai_move (ai, 5, 1));
27743        assert_true (ai_move (ai, 1, 2));
27744        assert_true (ai_move (ai, 2, 4));
27745        assert_true (ai_move (ai, 4, 2));
27746        assert_true (ai_move (ai, 2, 6));
27747        assert_true (ai_move (ai, 6, 2));
27748        assert_true (ai_move (ai, 1, 3));
27749        assert_true (ai_move (ai, 5, 0));
27750        assert_true (ai_move (ai, 6, 1));
27751        assert_true (ai_move (ai, 2, 2));
27752        assert_true (ai_move (ai, 2, 1));
27753        assert_true (ai_move (ai, 3, 5));
27754        assert_true (ai_move (ai, 3, 2));
27755        assert_true (ai_move (ai, 3, 1));
27756        assert_true (ai_move (ai, 0, 2));
27757        assert_true (ai_move (ai, 1, 4));
27758        assert_true (ai_move (ai, 4, 0));
27759        assert_true (ai_move (ai, 1, 5));
27760        assert_true (ai_move (ai, 6, 0));
27761        assert_true (ai_move (ai, 5, 4));
27762        assert_true (ai_move (ai, 4, 6));
27763        assert_true (ai_move (ai, 0, 3));
27764        assert_true (ai_move (ai, 0, 5));
27765        assert_true (ai_move (ai, 2, 7));
27766        assert_true (ai_move (ai, 0, 4));
27767        assert_true (ai_move (ai, 2, 0));
27768        assert_true (ai_move (ai, 3, 6));
27769        assert_true (ai_move (ai, 3, 7));
27770        assert_true (ai_move (ai, 4, 1));
27771        assert_true (ai_move (ai, 5, 7));
27772        assert_true (ai_move (ai, 5, 5));
27773        assert_true (ai_move (ai, 6, 4));
27774        assert_true (ai_move (ai, 7, 2));
27775        assert_true (ai_move (ai, 0, 1));
27776        assert_true (ai_move (ai, 0, 0));
27777        assert_true (ai_move (ai, 7, 0));
27778        assert_true (ai_move (ai, 3, 0));
27779        assert_true (ai_move (ai, 1, 0));
27780        assert_true (ai_move (ai, 1, 1));
27781        assert_true (ai_move (ai, 7, 1));
27782        assert_true (ai_move (ai, 7, 3));
27783        assert_true (ai_move (ai, 7, 4));
27784        assert_true (ai_move (ai, 6, 3));
27785        assert_true (ai_move (ai, 6, 5));
27786        assert_true (ai_move (ai, 4, 7));
27787        assert_true (ai_move (ai, 1, 6));
27788        assert_true (ai_move (ai, 7, 5));
27789        assert_true (ai_move (ai, 7, 6));
27790        assert_true (ai_move (ai, 0, 7));
27791        assert_true (ai_move (ai, 1, 7));
27792        assert_true (ai_move (ai, 0, 6));
27793        assert_true (ai_move (ai, 6, 6));
27794        assert_true (ai_move (ai, 7, 7));
27795        assert_true (ai_move (ai, 6, 7));
27796    }
27797
27798    private static inline void test_complete_reversi_game_356 ()
27799    {
27800                                  /* 0 1 2 3 4 5 6 7 */
27801        string [] board = {/* 0 */ " . . . . . . . .",
27802                           /* 1 */ " . . . . . . . .",
27803                           /* 2 */ " . . . . . L . .",
27804                           /* 3 */ " . L L L L . . .",
27805                           /* 4 */ " . . . D D . . .",
27806                           /* 5 */ " . . . . D . . .",
27807                           /* 6 */ " . . . . . . . .",
27808                           /* 7 */ " . . . . . . . ."};
27809
27810        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27811        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27812
27813        assert_true (ai_move (ai, 1, 2));
27814        assert_true (ai_move (ai, 2, 5));
27815        assert_true (ai_move (ai, 0, 3));
27816        assert_true (ai_move (ai, 5, 6));
27817        assert_true (ai_move (ai, 4, 6));
27818        assert_true (ai_move (ai, 4, 7));
27819        assert_true (ai_move (ai, 6, 7));
27820        assert_true (ai_move (ai, 6, 5));
27821        assert_true (ai_move (ai, 3, 2));
27822        assert_true (ai_move (ai, 2, 1));
27823        assert_true (ai_move (ai, 4, 1));
27824        assert_true (ai_move (ai, 3, 0));
27825        assert_true (ai_move (ai, 5, 0));
27826        assert_true (ai_move (ai, 2, 4));
27827        assert_true (ai_move (ai, 6, 3));
27828        assert_true (ai_move (ai, 0, 2));
27829        assert_true (ai_move (ai, 0, 1));
27830        assert_true (ai_move (ai, 2, 2));
27831        assert_true (ai_move (ai, 5, 4));
27832        assert_true (ai_move (ai, 6, 4));
27833        assert_true (ai_move (ai, 1, 4));
27834        assert_true (ai_move (ai, 3, 6));
27835        assert_true (ai_move (ai, 3, 1));
27836        assert_true (ai_move (ai, 7, 2));
27837        assert_true (ai_move (ai, 2, 0));
27838        assert_true (ai_move (ai, 5, 3));
27839        assert_true (ai_move (ai, 4, 0));
27840        assert_true (ai_move (ai, 5, 1));
27841        assert_true (ai_move (ai, 2, 6));
27842        assert_true (ai_move (ai, 1, 5));
27843        assert_true (ai_move (ai, 0, 4));
27844        assert_true (ai_move (ai, 2, 7));
27845        assert_true (ai_move (ai, 4, 2));
27846        assert_true (ai_move (ai, 0, 6));
27847        assert_true (ai_move (ai, 6, 2));
27848        assert_true (ai_move (ai, 7, 1));
27849        assert_true (ai_move (ai, 3, 5));
27850        assert_true (ai_move (ai, 6, 0));
27851        assert_true (ai_move (ai, 7, 0));
27852        assert_true (ai_move (ai, 6, 1));
27853        assert_true (ai_move (ai, 5, 5));
27854        assert_true (ai_move (ai, 1, 0));
27855        assert_true (ai_move (ai, 0, 0));
27856        assert_true (ai_move (ai, 0, 5));
27857        assert_true (ai_move (ai, 1, 1));
27858        assert_true (game.pass ());
27859        assert_true (ai_move (ai, 0, 7));
27860        assert_true (game.pass ());
27861        assert_true (ai_move (ai, 1, 6));
27862        assert_true (game.pass ());
27863        assert_true (ai_move (ai, 1, 7));
27864        assert_true (game.pass ());
27865        assert_true (ai_move (ai, 7, 3));
27866        assert_true (ai_move (ai, 7, 5));
27867        assert_true (ai_move (ai, 7, 4));
27868        assert_true (game.pass ());
27869        assert_true (ai_move (ai, 7, 6));
27870        assert_true (ai_move (ai, 6, 6));
27871        assert_true (ai_move (ai, 7, 7));
27872        assert_true (game.pass ());
27873        assert_true (ai_move (ai, 3, 7));
27874        assert_true (ai_move (ai, 5, 7));
27875    }
27876
27877    private static inline void test_complete_reversi_game_357 ()
27878    {
27879                                  /* 0 1 2 3 4 5 6 7 */
27880        string [] board = {/* 0 */ " . . . . . . . .",
27881                           /* 1 */ " . . . . . . . .",
27882                           /* 2 */ " . . . L . . . .",
27883                           /* 3 */ " . . . L D . . .",
27884                           /* 4 */ " . . . D L . . .",
27885                           /* 5 */ " . . D . D L . .",
27886                           /* 6 */ " . . . . . . . .",
27887                           /* 7 */ " . . . . . . . ."};
27888
27889        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27890        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27891
27892        assert_true (ai_move (ai, 6, 5));
27893        assert_true (ai_move (ai, 4, 2));
27894        assert_true (ai_move (ai, 5, 4));
27895        assert_true (ai_move (ai, 3, 5));
27896        assert_true (ai_move (ai, 2, 6));
27897        assert_true (ai_move (ai, 3, 6));
27898        assert_true (ai_move (ai, 2, 7));
27899        assert_true (ai_move (ai, 5, 3));
27900        assert_true (ai_move (ai, 6, 2));
27901        assert_true (ai_move (ai, 6, 3));
27902        assert_true (ai_move (ai, 7, 2));
27903        assert_true (ai_move (ai, 5, 6));
27904        assert_true (ai_move (ai, 6, 4));
27905        assert_true (ai_move (ai, 1, 5));
27906        assert_true (ai_move (ai, 1, 4));
27907        assert_true (ai_move (ai, 7, 4));
27908        assert_true (ai_move (ai, 0, 5));
27909        assert_true (ai_move (ai, 5, 2));
27910        assert_true (ai_move (ai, 2, 2));
27911        assert_true (ai_move (ai, 5, 1));
27912        assert_true (ai_move (ai, 4, 0));
27913        assert_true (ai_move (ai, 5, 0));
27914        assert_true (ai_move (ai, 7, 5));
27915        assert_true (ai_move (ai, 7, 3));
27916        assert_true (ai_move (ai, 3, 1));
27917        assert_true (ai_move (ai, 4, 6));
27918        assert_true (ai_move (ai, 5, 7));
27919        assert_true (ai_move (ai, 4, 1));
27920        assert_true (ai_move (ai, 2, 4));
27921        assert_true (ai_move (ai, 1, 2));
27922        assert_true (ai_move (ai, 1, 3));
27923        assert_true (ai_move (ai, 2, 3));
27924        assert_true (ai_move (ai, 2, 1));
27925        assert_true (ai_move (ai, 3, 0));
27926        assert_true (ai_move (ai, 0, 2));
27927        assert_true (ai_move (ai, 3, 7));
27928        assert_true (ai_move (ai, 4, 7));
27929        assert_true (ai_move (ai, 0, 4));
27930        assert_true (ai_move (ai, 0, 3));
27931        assert_true (ai_move (ai, 1, 6));
27932        assert_true (ai_move (ai, 2, 0));
27933        assert_true (ai_move (ai, 1, 0));
27934        assert_true (ai_move (ai, 6, 6));
27935        assert_true (ai_move (ai, 1, 7));
27936        assert_true (ai_move (ai, 0, 7));
27937        assert_true (ai_move (ai, 0, 6));
27938        assert_true (ai_move (ai, 1, 1));
27939        assert_true (ai_move (ai, 6, 7));
27940        assert_true (ai_move (ai, 7, 7));
27941        assert_true (ai_move (ai, 7, 6));
27942        assert_true (ai_move (ai, 7, 1));
27943        assert_true (ai_move (ai, 0, 0));
27944        assert_true (ai_move (ai, 0, 1));
27945        assert_true (ai_move (ai, 7, 0));
27946        assert_true (ai_move (ai, 6, 0));
27947        assert_true (ai_move (ai, 6, 1));
27948    }
27949
27950    private static inline void test_complete_reversi_game_358 ()
27951    {
27952                                  /* 0 1 2 3 4 5 6 7 */
27953        string [] board = {/* 0 */ " . . . . . . . .",
27954                           /* 1 */ " . . . . . . . .",
27955                           /* 2 */ " . . . L . . . .",
27956                           /* 3 */ " . . . L L . . .",
27957                           /* 4 */ " . . . D D L . .",
27958                           /* 5 */ " . . D . D . . .",
27959                           /* 6 */ " . . . . . . . .",
27960                           /* 7 */ " . . . . . . . ."};
27961
27962        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
27963        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
27964
27965        assert_true (ai_move (ai, 6, 3));
27966        assert_true (ai_move (ai, 6, 5));
27967        assert_true (ai_move (ai, 6, 4));
27968        assert_true (ai_move (ai, 3, 5));
27969        assert_true (ai_move (ai, 2, 6));
27970        assert_true (ai_move (ai, 3, 6));
27971        assert_true (ai_move (ai, 2, 7));
27972        assert_true (ai_move (ai, 5, 3));
27973        assert_true (ai_move (ai, 6, 2));
27974        assert_true (ai_move (ai, 3, 7));
27975        assert_true (ai_move (ai, 4, 7));
27976        assert_true (ai_move (ai, 1, 5));
27977        assert_true (ai_move (ai, 1, 4));
27978        assert_true (ai_move (ai, 7, 3));
27979        assert_true (ai_move (ai, 0, 5));
27980        assert_true (ai_move (ai, 5, 1));
27981        assert_true (ai_move (ai, 2, 4));
27982        assert_true (ai_move (ai, 1, 3));
27983        assert_true (ai_move (ai, 2, 3));
27984        assert_true (ai_move (ai, 7, 5));
27985        assert_true (ai_move (ai, 4, 6));
27986        assert_true (ai_move (ai, 5, 7));
27987        assert_true (ai_move (ai, 6, 7));
27988        assert_true (ai_move (ai, 2, 2));
27989        assert_true (ai_move (ai, 5, 5));
27990        assert_true (ai_move (ai, 5, 6));
27991        assert_true (ai_move (ai, 0, 2));
27992        assert_true (ai_move (ai, 0, 4));
27993        assert_true (ai_move (ai, 7, 2));
27994        assert_true (ai_move (ai, 0, 6));
27995        assert_true (ai_move (ai, 1, 2));
27996        assert_true (ai_move (ai, 7, 1));
27997        assert_true (ai_move (ai, 7, 4));
27998        assert_true (ai_move (ai, 1, 6));
27999        assert_true (ai_move (ai, 7, 0));
28000        assert_true (ai_move (ai, 1, 7));
28001        assert_true (ai_move (ai, 0, 7));
28002        assert_true (ai_move (ai, 0, 1));
28003        assert_true (ai_move (ai, 0, 3));
28004        assert_true (ai_move (ai, 5, 2));
28005        assert_true (ai_move (ai, 5, 0));
28006        assert_true (ai_move (ai, 4, 2));
28007        assert_true (ai_move (ai, 7, 6));
28008        assert_true (ai_move (ai, 6, 6));
28009        assert_true (ai_move (ai, 3, 1));
28010        assert_true (ai_move (ai, 2, 1));
28011        assert_true (ai_move (ai, 7, 7));
28012        assert_true (ai_move (ai, 4, 1));
28013        assert_true (ai_move (ai, 6, 1));
28014        assert_true (ai_move (ai, 6, 0));
28015        assert_true (ai_move (ai, 2, 0));
28016        assert_true (ai_move (ai, 4, 0));
28017        assert_true (ai_move (ai, 3, 0));
28018        assert_true (ai_move (ai, 1, 1));
28019        assert_true (ai_move (ai, 0, 0));
28020        assert_true (ai_move (ai, 1, 0));
28021    }
28022
28023    private static inline void test_complete_reversi_game_359 ()
28024    {
28025                                  /* 0 1 2 3 4 5 6 7 */
28026        string [] board = {/* 0 */ " . . . . . . . .",
28027                           /* 1 */ " . . . . . . . .",
28028                           /* 2 */ " . . . L . . . .",
28029                           /* 3 */ " . . . L L L . .",
28030                           /* 4 */ " . . . D D . . .",
28031                           /* 5 */ " . . D . D . . .",
28032                           /* 6 */ " . . . . . . . .",
28033                           /* 7 */ " . . . . . . . ."};
28034
28035        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28036        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28037
28038        assert_true (ai_move (ai, 6, 2));
28039        assert_true (ai_move (ai, 6, 3));
28040        assert_true (ai_move (ai, 6, 4));
28041        assert_true (ai_move (ai, 7, 3));
28042        assert_true (ai_move (ai, 5, 2));
28043        assert_true (ai_move (ai, 4, 1));
28044        assert_true (ai_move (ai, 4, 2));
28045        assert_true (ai_move (ai, 7, 2));
28046        assert_true (ai_move (ai, 5, 1));
28047        assert_true (ai_move (ai, 4, 0));
28048        assert_true (ai_move (ai, 5, 0));
28049        assert_true (ai_move (ai, 6, 5));
28050        assert_true (ai_move (ai, 7, 5));
28051        assert_true (ai_move (ai, 5, 4));
28052        assert_true (ai_move (ai, 5, 5));
28053        assert_true (ai_move (ai, 3, 6));
28054        assert_true (ai_move (ai, 2, 1));
28055        assert_true (ai_move (ai, 3, 1));
28056        assert_true (ai_move (ai, 5, 6));
28057        assert_true (ai_move (ai, 1, 4));
28058        assert_true (ai_move (ai, 2, 4));
28059        assert_true (ai_move (ai, 6, 0));
28060        assert_true (ai_move (ai, 2, 2));
28061        assert_true (ai_move (ai, 5, 7));
28062        assert_true (ai_move (ai, 4, 6));
28063        assert_true (ai_move (ai, 1, 2));
28064        assert_true (ai_move (ai, 2, 0));
28065        assert_true (ai_move (ai, 1, 5));
28066        assert_true (ai_move (ai, 1, 3));
28067        assert_true (ai_move (ai, 0, 2));
28068        assert_true (ai_move (ai, 4, 7));
28069        assert_true (ai_move (ai, 7, 4));
28070        assert_true (ai_move (ai, 7, 1));
28071        assert_true (ai_move (ai, 3, 7));
28072        assert_true (ai_move (ai, 2, 7));
28073        assert_true (ai_move (ai, 1, 7));
28074        assert_true (ai_move (ai, 3, 0));
28075        assert_true (ai_move (ai, 1, 0));
28076        assert_true (ai_move (ai, 2, 3));
28077        assert_true (ai_move (ai, 2, 6));
28078        assert_true (ai_move (ai, 0, 5));
28079        assert_true (ai_move (ai, 3, 5));
28080        assert_true (ai_move (ai, 0, 4));
28081        assert_true (ai_move (ai, 6, 1));
28082        assert_true (ai_move (ai, 6, 6));
28083        assert_true (ai_move (ai, 7, 7));
28084        assert_true (ai_move (ai, 6, 7));
28085        assert_true (ai_move (ai, 1, 1));
28086        assert_true (ai_move (ai, 0, 7));
28087        assert_true (ai_move (ai, 7, 6));
28088        assert_true (ai_move (ai, 1, 6));
28089        assert_true (ai_move (ai, 7, 0));
28090        assert_true (ai_move (ai, 0, 1));
28091        assert_true (ai_move (ai, 0, 3));
28092        assert_true (game.pass ());
28093        assert_true (ai_move (ai, 0, 6));
28094        assert_true (game.pass ());
28095        assert_true (ai_move (ai, 0, 0));
28096    }
28097
28098    private static inline void test_complete_reversi_game_360 ()
28099    {
28100                                  /* 0 1 2 3 4 5 6 7 */
28101        string [] board = {/* 0 */ " . . . . . . . .",
28102                           /* 1 */ " . . . . . . . .",
28103                           /* 2 */ " . . . L . . . .",
28104                           /* 3 */ " . . . L D . . .",
28105                           /* 4 */ " . . . L D . . .",
28106                           /* 5 */ " . . D L D . . .",
28107                           /* 6 */ " . . . . . . . .",
28108                           /* 7 */ " . . . . . . . ."};
28109
28110        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28111        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28112
28113        assert_true (ai_move (ai, 2, 6));
28114        assert_true (ai_move (ai, 3, 6));
28115        assert_true (ai_move (ai, 2, 1));
28116        assert_true (ai_move (ai, 1, 5));
28117        assert_true (ai_move (ai, 2, 7));
28118        assert_true (ai_move (ai, 3, 1));
28119        assert_true (ai_move (ai, 1, 4));
28120        assert_true (ai_move (ai, 5, 6));
28121        assert_true (ai_move (ai, 5, 4));
28122        assert_true (ai_move (ai, 5, 2));
28123        assert_true (ai_move (ai, 0, 5));
28124        assert_true (ai_move (ai, 6, 5));
28125        assert_true (ai_move (ai, 6, 4));
28126        assert_true (ai_move (ai, 3, 7));
28127        assert_true (ai_move (ai, 4, 6));
28128        assert_true (ai_move (ai, 1, 7));
28129        assert_true (ai_move (ai, 2, 4));
28130        assert_true (ai_move (ai, 5, 3));
28131        assert_true (ai_move (ai, 5, 1));
28132        assert_true (ai_move (ai, 1, 3));
28133        assert_true (ai_move (ai, 0, 2));
28134        assert_true (ai_move (ai, 6, 2));
28135        assert_true (ai_move (ai, 7, 3));
28136        assert_true (ai_move (ai, 5, 0));
28137        assert_true (ai_move (ai, 4, 0));
28138        assert_true (ai_move (ai, 3, 0));
28139        assert_true (ai_move (ai, 7, 6));
28140        assert_true (ai_move (ai, 7, 2));
28141        assert_true (ai_move (ai, 4, 1));
28142        assert_true (ai_move (ai, 4, 2));
28143        assert_true (ai_move (ai, 6, 7));
28144        assert_true (ai_move (ai, 2, 3));
28145        assert_true (ai_move (ai, 1, 2));
28146        assert_true (ai_move (ai, 2, 0));
28147        assert_true (ai_move (ai, 6, 1));
28148        assert_true (ai_move (ai, 7, 0));
28149        assert_true (ai_move (ai, 6, 3));
28150        assert_true (ai_move (ai, 5, 5));
28151        assert_true (ai_move (ai, 5, 7));
28152        assert_true (ai_move (ai, 6, 0));
28153        assert_true (ai_move (ai, 6, 6));
28154        assert_true (ai_move (ai, 7, 4));
28155        assert_true (ai_move (ai, 7, 1));
28156        assert_true (ai_move (ai, 7, 5));
28157        assert_true (ai_move (ai, 2, 2));
28158        assert_true (ai_move (ai, 1, 0));
28159        assert_true (ai_move (ai, 1, 1));
28160        assert_true (ai_move (ai, 0, 4));
28161        assert_true (ai_move (ai, 0, 3));
28162        assert_true (ai_move (ai, 1, 6));
28163        assert_true (ai_move (ai, 0, 7));
28164        assert_true (ai_move (ai, 4, 7));
28165        assert_true (ai_move (ai, 0, 6));
28166        assert_true (ai_move (ai, 0, 0));
28167        assert_true (ai_move (ai, 0, 1));
28168        assert_true (ai_move (ai, 7, 7));
28169    }
28170
28171    private static inline void test_complete_reversi_game_361 ()
28172    {
28173                                  /* 0 1 2 3 4 5 6 7 */
28174        string [] board = {/* 0 */ " . . . . . . . .",
28175                           /* 1 */ " . . . . . . . .",
28176                           /* 2 */ " . . . L . . . .",
28177                           /* 3 */ " . . . L D . . .",
28178                           /* 4 */ " . . D D L . . .",
28179                           /* 5 */ " . . . . D L . .",
28180                           /* 6 */ " . . . . . . . .",
28181                           /* 7 */ " . . . . . . . ."};
28182
28183        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28184        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28185
28186        assert_true (ai_move (ai, 6, 5));
28187        assert_true (ai_move (ai, 1, 5));
28188        assert_true (ai_move (ai, 2, 1));
28189        assert_true (ai_move (ai, 3, 1));
28190        assert_true (ai_move (ai, 1, 4));
28191        assert_true (ai_move (ai, 4, 2));
28192        assert_true (ai_move (ai, 5, 2));
28193        assert_true (ai_move (ai, 6, 2));
28194        assert_true (ai_move (ai, 5, 4));
28195        assert_true (ai_move (ai, 5, 3));
28196        assert_true (ai_move (ai, 2, 2));
28197        assert_true (ai_move (ai, 5, 6));
28198        assert_true (ai_move (ai, 6, 4));
28199        assert_true (ai_move (ai, 7, 3));
28200        assert_true (ai_move (ai, 5, 1));
28201        assert_true (ai_move (ai, 4, 1));
28202        assert_true (ai_move (ai, 2, 0));
28203        assert_true (ai_move (ai, 6, 3));
28204        assert_true (ai_move (ai, 7, 5));
28205        assert_true (ai_move (ai, 5, 0));
28206        assert_true (ai_move (ai, 4, 6));
28207        assert_true (ai_move (ai, 1, 2));
28208        assert_true (ai_move (ai, 2, 3));
28209        assert_true (ai_move (ai, 0, 5));
28210        assert_true (ai_move (ai, 1, 3));
28211        assert_true (ai_move (ai, 0, 3));
28212        assert_true (ai_move (ai, 0, 2));
28213        assert_true (ai_move (ai, 2, 5));
28214        assert_true (ai_move (ai, 2, 6));
28215        assert_true (ai_move (ai, 3, 5));
28216        assert_true (ai_move (ai, 3, 6));
28217        assert_true (ai_move (ai, 2, 7));
28218        assert_true (ai_move (ai, 4, 0));
28219        assert_true (ai_move (ai, 4, 7));
28220        assert_true (ai_move (ai, 7, 4));
28221        assert_true (ai_move (ai, 7, 2));
28222        assert_true (ai_move (ai, 7, 1));
28223        assert_true (ai_move (ai, 3, 0));
28224        assert_true (ai_move (ai, 6, 0));
28225        assert_true (ai_move (ai, 0, 4));
28226        assert_true (ai_move (ai, 0, 6));
28227        assert_true (ai_move (ai, 6, 6));
28228        assert_true (ai_move (ai, 3, 7));
28229        assert_true (ai_move (ai, 5, 7));
28230        assert_true (ai_move (ai, 1, 0));
28231        assert_true (ai_move (ai, 1, 1));
28232        assert_true (ai_move (ai, 0, 0));
28233        assert_true (ai_move (ai, 0, 1));
28234        assert_true (ai_move (ai, 1, 6));
28235        assert_true (ai_move (ai, 0, 7));
28236        assert_true (ai_move (ai, 1, 7));
28237        assert_true (ai_move (ai, 6, 1));
28238        assert_true (ai_move (ai, 7, 0));
28239        assert_true (game.pass ());
28240        assert_true (ai_move (ai, 7, 7));
28241        assert_true (ai_move (ai, 6, 7));
28242        assert_true (ai_move (ai, 7, 6));
28243    }
28244
28245    private static inline void test_complete_reversi_game_362 ()
28246    {
28247                                  /* 0 1 2 3 4 5 6 7 */
28248        string [] board = {/* 0 */ " . . . . . . . .",
28249                           /* 1 */ " . . . . . . . .",
28250                           /* 2 */ " . . . L . . . .",
28251                           /* 3 */ " . . . L L . . .",
28252                           /* 4 */ " . . D D D L . .",
28253                           /* 5 */ " . . . . D . . .",
28254                           /* 6 */ " . . . . . . . .",
28255                           /* 7 */ " . . . . . . . ."};
28256
28257        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28258        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28259
28260        assert_true (ai_move (ai, 6, 3));
28261        assert_true (ai_move (ai, 1, 5));
28262        assert_true (ai_move (ai, 1, 4));
28263        assert_true (ai_move (ai, 6, 5));
28264        assert_true (ai_move (ai, 6, 4));
28265        assert_true (ai_move (ai, 1, 3));
28266        assert_true (ai_move (ai, 0, 4));
28267        assert_true (ai_move (ai, 2, 5));
28268        assert_true (ai_move (ai, 3, 6));
28269        assert_true (ai_move (ai, 3, 5));
28270        assert_true (ai_move (ai, 0, 5));
28271        assert_true (ai_move (ai, 2, 6));
28272        assert_true (ai_move (ai, 3, 7));
28273        assert_true (ai_move (ai, 2, 7));
28274        assert_true (ai_move (ai, 1, 2));
28275        assert_true (ai_move (ai, 0, 2));
28276        assert_true (ai_move (ai, 2, 3));
28277        assert_true (ai_move (ai, 2, 2));
28278        assert_true (ai_move (ai, 4, 1));
28279        assert_true (ai_move (ai, 5, 6));
28280        assert_true (ai_move (ai, 4, 6));
28281        assert_true (ai_move (ai, 2, 1));
28282        assert_true (ai_move (ai, 4, 2));
28283        assert_true (ai_move (ai, 0, 3));
28284        assert_true (ai_move (ai, 0, 1));
28285        assert_true (ai_move (ai, 5, 7));
28286        assert_true (ai_move (ai, 4, 7));
28287        assert_true (ai_move (ai, 5, 0));
28288        assert_true (ai_move (ai, 7, 4));
28289        assert_true (ai_move (ai, 5, 1));
28290        assert_true (ai_move (ai, 1, 6));
28291        assert_true (ai_move (ai, 7, 2));
28292        assert_true (ai_move (ai, 5, 5));
28293        assert_true (ai_move (ai, 5, 3));
28294        assert_true (ai_move (ai, 5, 2));
28295        assert_true (ai_move (ai, 7, 3));
28296        assert_true (ai_move (ai, 6, 2));
28297        assert_true (ai_move (ai, 7, 5));
28298        assert_true (ai_move (ai, 2, 0));
28299        assert_true (ai_move (ai, 7, 6));
28300        assert_true (ai_move (ai, 3, 0));
28301        assert_true (ai_move (ai, 4, 0));
28302        assert_true (ai_move (ai, 3, 1));
28303        assert_true (ai_move (ai, 1, 0));
28304        assert_true (ai_move (ai, 1, 7));
28305        assert_true (ai_move (ai, 0, 7));
28306        assert_true (ai_move (ai, 6, 1));
28307        assert_true (ai_move (ai, 0, 6));
28308        assert_true (ai_move (ai, 1, 1));
28309        assert_true (ai_move (ai, 0, 0));
28310        assert_true (ai_move (ai, 6, 6));
28311        assert_true (ai_move (ai, 6, 7));
28312        assert_true (game.pass ());
28313        assert_true (ai_move (ai, 7, 0));
28314        assert_true (ai_move (ai, 7, 1));
28315        assert_true (ai_move (ai, 6, 0));
28316        assert_true (ai_move (ai, 7, 7));
28317    }
28318
28319    private static inline void test_complete_reversi_game_363 ()
28320    {
28321                                  /* 0 1 2 3 4 5 6 7 */
28322        string [] board = {/* 0 */ " . . . . . . . .",
28323                           /* 1 */ " . . . . . . . .",
28324                           /* 2 */ " . . . L . . . .",
28325                           /* 3 */ " . . . L L L . .",
28326                           /* 4 */ " . . D D D . . .",
28327                           /* 5 */ " . . . . D . . .",
28328                           /* 6 */ " . . . . . . . .",
28329                           /* 7 */ " . . . . . . . ."};
28330
28331        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28332        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28333
28334        assert_true (ai_move (ai, 6, 2));
28335        assert_true (ai_move (ai, 6, 3));
28336        assert_true (ai_move (ai, 6, 4));
28337        assert_true (ai_move (ai, 1, 5));
28338        assert_true (ai_move (ai, 1, 4));
28339        assert_true (ai_move (ai, 7, 3));
28340        assert_true (ai_move (ai, 2, 2));
28341        assert_true (ai_move (ai, 1, 2));
28342        assert_true (ai_move (ai, 3, 1));
28343        assert_true (ai_move (ai, 2, 1));
28344        assert_true (ai_move (ai, 1, 3));
28345        assert_true (ai_move (ai, 5, 1));
28346        assert_true (ai_move (ai, 2, 0));
28347        assert_true (ai_move (ai, 7, 5));
28348        assert_true (ai_move (ai, 0, 2));
28349        assert_true (ai_move (ai, 3, 0));
28350        assert_true (ai_move (ai, 4, 0));
28351        assert_true (ai_move (ai, 2, 5));
28352        assert_true (ai_move (ai, 3, 6));
28353        assert_true (ai_move (ai, 5, 6));
28354        assert_true (ai_move (ai, 4, 6));
28355        assert_true (ai_move (ai, 4, 2));
28356        assert_true (ai_move (ai, 0, 5));
28357        assert_true (ai_move (ai, 5, 4));
28358        assert_true (ai_move (ai, 2, 3));
28359        assert_true (ai_move (ai, 2, 7));
28360        assert_true (ai_move (ai, 5, 2));
28361        assert_true (ai_move (ai, 4, 7));
28362        assert_true (ai_move (ai, 5, 0));
28363        assert_true (ai_move (ai, 3, 5));
28364        assert_true (ai_move (ai, 7, 2));
28365        assert_true (ai_move (ai, 0, 3));
28366        assert_true (ai_move (ai, 0, 4));
28367        assert_true (ai_move (ai, 4, 1));
28368        assert_true (ai_move (ai, 2, 6));
28369        assert_true (ai_move (ai, 5, 5));
28370        assert_true (ai_move (ai, 6, 1));
28371        assert_true (ai_move (ai, 1, 1));
28372        assert_true (ai_move (ai, 3, 7));
28373        assert_true (ai_move (ai, 1, 7));
28374        assert_true (ai_move (ai, 1, 6));
28375        assert_true (ai_move (ai, 0, 1));
28376        assert_true (ai_move (ai, 0, 0));
28377        assert_true (ai_move (ai, 0, 6));
28378        assert_true (ai_move (ai, 0, 7));
28379        assert_true (ai_move (ai, 7, 1));
28380        assert_true (ai_move (ai, 5, 7));
28381        assert_true (ai_move (ai, 6, 5));
28382        assert_true (ai_move (ai, 6, 0));
28383        assert_true (ai_move (ai, 6, 6));
28384        assert_true (ai_move (ai, 1, 0));
28385        assert_true (game.pass ());
28386        assert_true (ai_move (ai, 7, 7));
28387        assert_true (ai_move (ai, 7, 6));
28388        assert_true (ai_move (ai, 7, 4));
28389        assert_true (ai_move (ai, 6, 7));
28390        assert_true (ai_move (ai, 7, 0));
28391    }
28392
28393    private static inline void test_complete_reversi_game_364 ()
28394    {
28395                                  /* 0 1 2 3 4 5 6 7 */
28396        string [] board = {/* 0 */ " . . . . . . . .",
28397                           /* 1 */ " . . . . . . . .",
28398                           /* 2 */ " . . . L . . . .",
28399                           /* 3 */ " . . . L D . . .",
28400                           /* 4 */ " . . D L D . . .",
28401                           /* 5 */ " . . . L D . . .",
28402                           /* 6 */ " . . . . . . . .",
28403                           /* 7 */ " . . . . . . . ."};
28404
28405        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28406        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28407
28408        assert_true (ai_move (ai, 2, 6));
28409        assert_true (ai_move (ai, 3, 6));
28410        assert_true (ai_move (ai, 2, 1));
28411        assert_true (ai_move (ai, 5, 6));
28412        assert_true (ai_move (ai, 2, 2));
28413        assert_true (ai_move (ai, 1, 4));
28414        assert_true (ai_move (ai, 1, 5));
28415        assert_true (ai_move (ai, 1, 3));
28416        assert_true (ai_move (ai, 1, 2));
28417        assert_true (ai_move (ai, 5, 2));
28418        assert_true (ai_move (ai, 4, 2));
28419        assert_true (ai_move (ai, 0, 4));
28420        assert_true (ai_move (ai, 6, 2));
28421        assert_true (ai_move (ai, 0, 2));
28422        assert_true (ai_move (ai, 2, 5));
28423        assert_true (ai_move (ai, 2, 7));
28424        assert_true (ai_move (ai, 5, 5));
28425        assert_true (ai_move (ai, 2, 3));
28426        assert_true (ai_move (ai, 4, 6));
28427        assert_true (ai_move (ai, 3, 1));
28428        assert_true (ai_move (ai, 5, 7));
28429        assert_true (ai_move (ai, 5, 1));
28430        assert_true (ai_move (ai, 1, 1));
28431        assert_true (ai_move (ai, 5, 4));
28432        assert_true (ai_move (ai, 5, 3));
28433        assert_true (ai_move (ai, 6, 4));
28434        assert_true (ai_move (ai, 6, 3));
28435        assert_true (ai_move (ai, 0, 5));
28436        assert_true (ai_move (ai, 0, 3));
28437        assert_true (ai_move (ai, 6, 5));
28438        assert_true (ai_move (ai, 4, 7));
28439        assert_true (ai_move (ai, 7, 3));
28440        assert_true (ai_move (ai, 7, 5));
28441        assert_true (ai_move (ai, 7, 2));
28442        assert_true (ai_move (ai, 7, 4));
28443        assert_true (ai_move (ai, 7, 6));
28444        assert_true (ai_move (ai, 4, 1));
28445        assert_true (ai_move (ai, 5, 0));
28446        assert_true (ai_move (ai, 3, 0));
28447        assert_true (ai_move (ai, 4, 0));
28448        assert_true (ai_move (ai, 2, 0));
28449        assert_true (ai_move (ai, 3, 7));
28450        assert_true (ai_move (ai, 1, 7));
28451        assert_true (ai_move (ai, 6, 1));
28452        assert_true (ai_move (ai, 7, 0));
28453        assert_true (ai_move (ai, 6, 0));
28454        assert_true (ai_move (ai, 7, 1));
28455        assert_true (ai_move (ai, 6, 6));
28456        assert_true (ai_move (ai, 7, 7));
28457        assert_true (ai_move (ai, 6, 7));
28458        assert_true (ai_move (ai, 1, 6));
28459        assert_true (ai_move (ai, 0, 7));
28460        assert_true (ai_move (ai, 0, 6));
28461        assert_true (ai_move (ai, 0, 0));
28462        assert_true (ai_move (ai, 1, 0));
28463        assert_true (ai_move (ai, 0, 1));
28464    }
28465
28466    private static inline void test_complete_reversi_game_365 ()
28467    {
28468                                  /* 0 1 2 3 4 5 6 7 */
28469        string [] board = {/* 0 */ " . . . . . . . .",
28470                           /* 1 */ " . . . . . . . .",
28471                           /* 2 */ " . . . L . . . .",
28472                           /* 3 */ " . . . L D . . .",
28473                           /* 4 */ " . . L D D . . .",
28474                           /* 5 */ " . L . . D . . .",
28475                           /* 6 */ " . . . . . . . .",
28476                           /* 7 */ " . . . . . . . ."};
28477
28478        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28479        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28480
28481        assert_true (ai_move (ai, 1, 4));
28482        assert_true (ai_move (ai, 5, 4));
28483        assert_true (ai_move (ai, 6, 3));
28484        assert_true (ai_move (ai, 6, 5));
28485        assert_true (ai_move (ai, 6, 4));
28486        assert_true (ai_move (ai, 1, 3));
28487        assert_true (ai_move (ai, 0, 4));
28488        assert_true (ai_move (ai, 2, 5));
28489        assert_true (ai_move (ai, 3, 6));
28490        assert_true (ai_move (ai, 3, 5));
28491        assert_true (ai_move (ai, 0, 5));
28492        assert_true (ai_move (ai, 2, 6));
28493        assert_true (ai_move (ai, 3, 7));
28494        assert_true (ai_move (ai, 2, 7));
28495        assert_true (ai_move (ai, 1, 2));
28496        assert_true (ai_move (ai, 0, 2));
28497        assert_true (ai_move (ai, 2, 3));
28498        assert_true (ai_move (ai, 2, 2));
28499        assert_true (ai_move (ai, 4, 1));
28500        assert_true (ai_move (ai, 5, 6));
28501        assert_true (ai_move (ai, 4, 6));
28502        assert_true (ai_move (ai, 2, 1));
28503        assert_true (ai_move (ai, 4, 2));
28504        assert_true (ai_move (ai, 0, 3));
28505        assert_true (ai_move (ai, 0, 1));
28506        assert_true (ai_move (ai, 5, 7));
28507        assert_true (ai_move (ai, 4, 7));
28508        assert_true (ai_move (ai, 5, 0));
28509        assert_true (ai_move (ai, 7, 4));
28510        assert_true (ai_move (ai, 5, 1));
28511        assert_true (ai_move (ai, 1, 6));
28512        assert_true (ai_move (ai, 7, 2));
28513        assert_true (ai_move (ai, 5, 5));
28514        assert_true (ai_move (ai, 5, 3));
28515        assert_true (ai_move (ai, 5, 2));
28516        assert_true (ai_move (ai, 7, 3));
28517        assert_true (ai_move (ai, 6, 2));
28518        assert_true (ai_move (ai, 7, 5));
28519        assert_true (ai_move (ai, 2, 0));
28520        assert_true (ai_move (ai, 7, 6));
28521        assert_true (ai_move (ai, 3, 0));
28522        assert_true (ai_move (ai, 4, 0));
28523        assert_true (ai_move (ai, 3, 1));
28524        assert_true (ai_move (ai, 1, 0));
28525        assert_true (ai_move (ai, 1, 7));
28526        assert_true (ai_move (ai, 0, 7));
28527        assert_true (ai_move (ai, 6, 1));
28528        assert_true (ai_move (ai, 0, 6));
28529        assert_true (ai_move (ai, 1, 1));
28530        assert_true (ai_move (ai, 0, 0));
28531        assert_true (ai_move (ai, 6, 6));
28532        assert_true (ai_move (ai, 6, 7));
28533        assert_true (game.pass ());
28534        assert_true (ai_move (ai, 7, 0));
28535        assert_true (ai_move (ai, 7, 1));
28536        assert_true (ai_move (ai, 6, 0));
28537        assert_true (ai_move (ai, 7, 7));
28538    }
28539
28540    private static inline void test_complete_reversi_game_366 ()
28541    {
28542                                  /* 0 1 2 3 4 5 6 7 */
28543        string [] board = {/* 0 */ " . . . . . . . .",
28544                           /* 1 */ " . . . . . . . .",
28545                           /* 2 */ " . . . L . . . .",
28546                           /* 3 */ " . . D D L . . .",
28547                           /* 4 */ " . . . D D L . .",
28548                           /* 5 */ " . . . . D . . .",
28549                           /* 6 */ " . . . . . . . .",
28550                           /* 7 */ " . . . . . . . ."};
28551
28552        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28553        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28554
28555        assert_true (ai_move (ai, 6, 3));
28556        assert_true (ai_move (ai, 6, 5));
28557        assert_true (ai_move (ai, 6, 4));
28558        assert_true (ai_move (ai, 1, 4));
28559        assert_true (ai_move (ai, 5, 3));
28560        assert_true (ai_move (ai, 5, 6));
28561        assert_true (ai_move (ai, 3, 6));
28562        assert_true (ai_move (ai, 5, 2));
28563        assert_true (ai_move (ai, 5, 1));
28564        assert_true (ai_move (ai, 7, 3));
28565        assert_true (ai_move (ai, 6, 2));
28566        assert_true (ai_move (ai, 5, 5));
28567        assert_true (ai_move (ai, 5, 7));
28568        assert_true (ai_move (ai, 4, 2));
28569        assert_true (ai_move (ai, 2, 2));
28570        assert_true (ai_move (ai, 2, 1));
28571        assert_true (ai_move (ai, 3, 1));
28572        assert_true (ai_move (ai, 7, 2));
28573        assert_true (ai_move (ai, 4, 1));
28574        assert_true (ai_move (ai, 4, 6));
28575        assert_true (ai_move (ai, 7, 5));
28576        assert_true (ai_move (ai, 3, 5));
28577        assert_true (ai_move (ai, 1, 3));
28578        assert_true (ai_move (ai, 2, 4));
28579        assert_true (ai_move (ai, 1, 2));
28580        assert_true (ai_move (ai, 0, 2));
28581        assert_true (ai_move (ai, 2, 5));
28582        assert_true (ai_move (ai, 1, 5));
28583        assert_true (ai_move (ai, 2, 0));
28584        assert_true (ai_move (ai, 2, 6));
28585        assert_true (ai_move (ai, 2, 7));
28586        assert_true (ai_move (ai, 4, 7));
28587        assert_true (ai_move (ai, 0, 5));
28588        assert_true (ai_move (ai, 0, 3));
28589        assert_true (ai_move (ai, 3, 7));
28590        assert_true (ai_move (ai, 7, 4));
28591        assert_true (ai_move (ai, 7, 1));
28592        assert_true (ai_move (ai, 5, 0));
28593        assert_true (ai_move (ai, 3, 0));
28594        assert_true (ai_move (ai, 4, 0));
28595        assert_true (ai_move (ai, 6, 0));
28596        assert_true (ai_move (ai, 6, 1));
28597        assert_true (ai_move (ai, 0, 4));
28598        assert_true (ai_move (ai, 0, 6));
28599        assert_true (ai_move (ai, 1, 6));
28600        assert_true (ai_move (ai, 0, 7));
28601        assert_true (ai_move (ai, 1, 7));
28602        assert_true (ai_move (ai, 6, 7));
28603        assert_true (ai_move (ai, 7, 0));
28604        assert_true (ai_move (ai, 6, 6));
28605        assert_true (ai_move (ai, 7, 7));
28606        assert_true (ai_move (ai, 7, 6));
28607        assert_true (ai_move (ai, 1, 1));
28608        assert_true (ai_move (ai, 0, 0));
28609        assert_true (ai_move (ai, 1, 0));
28610        assert_true (ai_move (ai, 0, 1));
28611    }
28612
28613    private static inline void test_complete_reversi_game_367 ()
28614    {
28615                                  /* 0 1 2 3 4 5 6 7 */
28616        string [] board = {/* 0 */ " . . . . . . . .",
28617                           /* 1 */ " . . . . . . . .",
28618                           /* 2 */ " . . . L . . . .",
28619                           /* 3 */ " . . D L D . . .",
28620                           /* 4 */ " . . . L D . . .",
28621                           /* 5 */ " . . . L D . . .",
28622                           /* 6 */ " . . . . . . . .",
28623                           /* 7 */ " . . . . . . . ."};
28624
28625        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28626        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28627
28628        assert_true (ai_move (ai, 2, 6));
28629        assert_true (ai_move (ai, 1, 2));
28630        assert_true (ai_move (ai, 2, 1));
28631        assert_true (ai_move (ai, 4, 1));
28632        assert_true (ai_move (ai, 0, 3));
28633        assert_true (ai_move (ai, 3, 6));
28634        assert_true (ai_move (ai, 2, 7));
28635        assert_true (ai_move (ai, 5, 6));
28636        assert_true (ai_move (ai, 5, 4));
28637        assert_true (ai_move (ai, 5, 5));
28638        assert_true (ai_move (ai, 5, 7));
28639        assert_true (ai_move (ai, 6, 3));
28640        assert_true (ai_move (ai, 6, 5));
28641        assert_true (ai_move (ai, 6, 4));
28642        assert_true (ai_move (ai, 7, 3));
28643        assert_true (ai_move (ai, 7, 5));
28644        assert_true (ai_move (ai, 4, 6));
28645        assert_true (ai_move (ai, 7, 4));
28646        assert_true (ai_move (ai, 7, 6));
28647        assert_true (ai_move (ai, 5, 2));
28648        assert_true (ai_move (ai, 7, 2));
28649        assert_true (ai_move (ai, 5, 3));
28650        assert_true (ai_move (ai, 2, 5));
28651        assert_true (ai_move (ai, 6, 2));
28652        assert_true (ai_move (ai, 2, 4));
28653        assert_true (ai_move (ai, 1, 5));
28654        assert_true (ai_move (ai, 1, 4));
28655        assert_true (ai_move (ai, 0, 5));
28656        assert_true (ai_move (ai, 4, 2));
28657        assert_true (ai_move (ai, 5, 1));
28658        assert_true (ai_move (ai, 5, 0));
28659        assert_true (ai_move (ai, 0, 1));
28660        assert_true (ai_move (ai, 3, 0));
28661        assert_true (ai_move (ai, 4, 0));
28662        assert_true (ai_move (ai, 2, 2));
28663        assert_true (ai_move (ai, 2, 0));
28664        assert_true (ai_move (ai, 1, 0));
28665        assert_true (ai_move (ai, 1, 3));
28666        assert_true (ai_move (ai, 3, 1));
28667        assert_true (ai_move (ai, 4, 7));
28668        assert_true (ai_move (ai, 3, 7));
28669        assert_true (ai_move (ai, 1, 1));
28670        assert_true (ai_move (ai, 0, 0));
28671        assert_true (ai_move (ai, 6, 0));
28672        assert_true (ai_move (ai, 0, 2));
28673        assert_true (ai_move (ai, 6, 1));
28674        assert_true (ai_move (ai, 0, 4));
28675        assert_true (ai_move (ai, 6, 6));
28676        assert_true (ai_move (ai, 0, 6));
28677        assert_true (ai_move (ai, 6, 7));
28678        assert_true (ai_move (ai, 7, 7));
28679        assert_true (ai_move (ai, 1, 6));
28680        assert_true (ai_move (ai, 0, 7));
28681        assert_true (game.pass ());
28682        assert_true (ai_move (ai, 1, 7));
28683        assert_true (game.pass ());
28684        assert_true (ai_move (ai, 7, 0));
28685        assert_true (ai_move (ai, 7, 1));
28686    }
28687
28688    private static inline void test_complete_reversi_game_368 ()
28689    {
28690                                  /* 0 1 2 3 4 5 6 7 */
28691        string [] board = {/* 0 */ " . . . . . . . .",
28692                           /* 1 */ " . . . . . . . .",
28693                           /* 2 */ " . . . L . . . .",
28694                           /* 3 */ " . . L D D . . .",
28695                           /* 4 */ " . L . D D . . .",
28696                           /* 5 */ " . . . . D . . .",
28697                           /* 6 */ " . . . . . . . .",
28698                           /* 7 */ " . . . . . . . ."};
28699
28700        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28701        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28702
28703        assert_true (ai_move (ai, 1, 2));
28704        assert_true (ai_move (ai, 5, 4));
28705        assert_true (ai_move (ai, 6, 3));
28706        assert_true (ai_move (ai, 6, 5));
28707        assert_true (ai_move (ai, 6, 4));
28708        assert_true (ai_move (ai, 2, 5));
28709        assert_true (ai_move (ai, 4, 1));
28710        assert_true (ai_move (ai, 5, 6));
28711        assert_true (ai_move (ai, 4, 6));
28712        assert_true (ai_move (ai, 2, 1));
28713        assert_true (ai_move (ai, 3, 0));
28714        assert_true (ai_move (ai, 5, 0));
28715        assert_true (ai_move (ai, 3, 1));
28716        assert_true (ai_move (ai, 3, 6));
28717        assert_true (ai_move (ai, 4, 7));
28718        assert_true (ai_move (ai, 7, 2));
28719        assert_true (ai_move (ai, 7, 4));
28720        assert_true (ai_move (ai, 7, 6));
28721        assert_true (ai_move (ai, 2, 6));
28722        assert_true (ai_move (ai, 2, 7));
28723        assert_true (ai_move (ai, 0, 5));
28724        assert_true (ai_move (ai, 0, 3));
28725        assert_true (ai_move (ai, 3, 5));
28726        assert_true (ai_move (ai, 5, 3));
28727        assert_true (ai_move (ai, 2, 4));
28728        assert_true (ai_move (ai, 2, 2));
28729        assert_true (ai_move (ai, 1, 3));
28730        assert_true (ai_move (ai, 1, 5));
28731        assert_true (ai_move (ai, 0, 4));
28732        assert_true (ai_move (ai, 0, 6));
28733        assert_true (ai_move (ai, 5, 1));
28734        assert_true (ai_move (ai, 2, 0));
28735        assert_true (ai_move (ai, 5, 5));
28736        assert_true (ai_move (ai, 0, 2));
28737        assert_true (ai_move (ai, 5, 2));
28738        assert_true (ai_move (ai, 4, 0));
28739        assert_true (ai_move (ai, 4, 2));
28740        assert_true (ai_move (ai, 6, 0));
28741        assert_true (ai_move (ai, 7, 5));
28742        assert_true (ai_move (ai, 7, 3));
28743        assert_true (ai_move (ai, 3, 7));
28744        assert_true (ai_move (ai, 5, 7));
28745        assert_true (ai_move (ai, 6, 2));
28746        assert_true (ai_move (ai, 7, 1));
28747        assert_true (ai_move (ai, 0, 1));
28748        assert_true (ai_move (ai, 0, 0));
28749        assert_true (ai_move (ai, 1, 0));
28750        assert_true (ai_move (ai, 6, 1));
28751        assert_true (ai_move (ai, 7, 0));
28752        assert_true (ai_move (ai, 1, 1));
28753        assert_true (ai_move (ai, 7, 7));
28754        assert_true (ai_move (ai, 6, 6));
28755        assert_true (ai_move (ai, 6, 7));
28756        assert_true (game.pass ());
28757        assert_true (ai_move (ai, 1, 7));
28758        assert_true (ai_move (ai, 1, 6));
28759        assert_true (ai_move (ai, 0, 7));
28760    }
28761
28762    private static inline void test_complete_reversi_game_369 ()
28763    {
28764                                  /* 0 1 2 3 4 5 6 7 */
28765        string [] board = {/* 0 */ " . . . . . . . .",
28766                           /* 1 */ " . . . . . . . .",
28767                           /* 2 */ " . . D L . . . .",
28768                           /* 3 */ " . . . D D . . .",
28769                           /* 4 */ " . . . L D . . .",
28770                           /* 5 */ " . . . . L . . .",
28771                           /* 6 */ " . . . . . L . .",
28772                           /* 7 */ " . . . . . . . ."};
28773
28774        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28775        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28776
28777        assert_true (ai_move (ai, 2, 1));
28778        assert_true (ai_move (ai, 5, 2));
28779        assert_true (ai_move (ai, 4, 6));
28780        assert_true (ai_move (ai, 2, 3));
28781        assert_true (ai_move (ai, 1, 4));
28782        assert_true (ai_move (ai, 3, 1));
28783        assert_true (ai_move (ai, 4, 0));
28784        assert_true (ai_move (ai, 1, 3));
28785        assert_true (ai_move (ai, 4, 1));
28786        assert_true (ai_move (ai, 1, 2));
28787        assert_true (ai_move (ai, 0, 3));
28788        assert_true (ai_move (ai, 0, 5));
28789        assert_true (ai_move (ai, 6, 3));
28790        assert_true (ai_move (ai, 2, 0));
28791        assert_true (ai_move (ai, 3, 0));
28792        assert_true (ai_move (ai, 4, 2));
28793        assert_true (ai_move (ai, 1, 0));
28794        assert_true (ai_move (ai, 6, 2));
28795        assert_true (ai_move (ai, 7, 2));
28796        assert_true (ai_move (ai, 5, 3));
28797        assert_true (ai_move (ai, 6, 4));
28798        assert_true (ai_move (ai, 5, 4));
28799        assert_true (ai_move (ai, 6, 5));
28800        assert_true (ai_move (ai, 4, 7));
28801        assert_true (ai_move (ai, 3, 6));
28802        assert_true (ai_move (ai, 2, 5));
28803        assert_true (ai_move (ai, 2, 7));
28804        assert_true (ai_move (ai, 2, 6));
28805        assert_true (ai_move (ai, 0, 4));
28806        assert_true (ai_move (ai, 0, 2));
28807        assert_true (ai_move (ai, 1, 5));
28808        assert_true (ai_move (ai, 2, 4));
28809        assert_true (ai_move (ai, 3, 7));
28810        assert_true (ai_move (ai, 1, 7));
28811        assert_true (ai_move (ai, 5, 5));
28812        assert_true (ai_move (ai, 5, 1));
28813        assert_true (ai_move (ai, 3, 5));
28814        assert_true (ai_move (ai, 0, 6));
28815        assert_true (ai_move (ai, 5, 7));
28816        assert_true (ai_move (ai, 6, 7));
28817        assert_true (ai_move (ai, 6, 6));
28818        assert_true (ai_move (ai, 5, 0));
28819        assert_true (ai_move (ai, 6, 0));
28820        assert_true (ai_move (ai, 7, 3));
28821        assert_true (ai_move (ai, 6, 1));
28822        assert_true (ai_move (ai, 0, 1));
28823        assert_true (ai_move (ai, 7, 4));
28824        assert_true (ai_move (ai, 7, 7));
28825        assert_true (ai_move (ai, 7, 6));
28826        assert_true (ai_move (ai, 7, 5));
28827        assert_true (game.pass ());
28828        assert_true (ai_move (ai, 1, 1));
28829        assert_true (ai_move (ai, 1, 6));
28830        assert_true (ai_move (ai, 0, 0));
28831        assert_true (game.pass ());
28832        assert_true (ai_move (ai, 7, 1));
28833        assert_true (ai_move (ai, 7, 0));
28834    }
28835
28836    private static inline void test_complete_reversi_game_370 ()
28837    {
28838                                  /* 0 1 2 3 4 5 6 7 */
28839        string [] board = {/* 0 */ " . . . . . . . .",
28840                           /* 1 */ " . . . . . . . .",
28841                           /* 2 */ " . . D L . . . .",
28842                           /* 3 */ " . . . D L . . .",
28843                           /* 4 */ " . . . L L L . .",
28844                           /* 5 */ " . . . . D . . .",
28845                           /* 6 */ " . . . . . . . .",
28846                           /* 7 */ " . . . . . . . ."};
28847
28848        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28849        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28850
28851        assert_true (ai_move (ai, 3, 1));
28852        assert_true (ai_move (ai, 5, 6));
28853        assert_true (ai_move (ai, 5, 3));
28854        assert_true (ai_move (ai, 6, 2));
28855        assert_true (ai_move (ai, 6, 3));
28856        assert_true (ai_move (ai, 7, 2));
28857        assert_true (ai_move (ai, 6, 5));
28858        assert_true (ai_move (ai, 6, 4));
28859        assert_true (ai_move (ai, 4, 7));
28860        assert_true (ai_move (ai, 5, 2));
28861        assert_true (ai_move (ai, 3, 5));
28862        assert_true (ai_move (ai, 2, 6));
28863        assert_true (ai_move (ai, 3, 6));
28864        assert_true (ai_move (ai, 2, 1));
28865        assert_true (ai_move (ai, 4, 2));
28866        assert_true (ai_move (ai, 1, 2));
28867        assert_true (ai_move (ai, 1, 3));
28868        assert_true (ai_move (ai, 2, 0));
28869        assert_true (ai_move (ai, 0, 2));
28870        assert_true (ai_move (ai, 0, 4));
28871        assert_true (ai_move (ai, 5, 1));
28872        assert_true (ai_move (ai, 4, 0));
28873        assert_true (ai_move (ai, 7, 5));
28874        assert_true (ai_move (ai, 4, 1));
28875        assert_true (ai_move (ai, 5, 0));
28876        assert_true (ai_move (ai, 0, 3));
28877        assert_true (ai_move (ai, 0, 5));
28878        assert_true (ai_move (ai, 2, 7));
28879        assert_true (ai_move (ai, 5, 5));
28880        assert_true (ai_move (ai, 4, 6));
28881        assert_true (ai_move (ai, 2, 5));
28882        assert_true (ai_move (ai, 7, 3));
28883        assert_true (ai_move (ai, 2, 4));
28884        assert_true (ai_move (ai, 5, 7));
28885        assert_true (ai_move (ai, 6, 7));
28886        assert_true (ai_move (ai, 1, 5));
28887        assert_true (ai_move (ai, 1, 4));
28888        assert_true (ai_move (ai, 2, 3));
28889        assert_true (ai_move (ai, 0, 6));
28890        assert_true (ai_move (ai, 3, 7));
28891        assert_true (ai_move (ai, 1, 7));
28892        assert_true (ai_move (ai, 6, 1));
28893        assert_true (ai_move (ai, 0, 1));
28894        assert_true (ai_move (ai, 6, 0));
28895        assert_true (ai_move (ai, 3, 0));
28896        assert_true (ai_move (ai, 1, 0));
28897        assert_true (ai_move (ai, 7, 4));
28898        assert_true (ai_move (ai, 7, 6));
28899        assert_true (ai_move (ai, 0, 0));
28900        assert_true (ai_move (ai, 6, 6));
28901        assert_true (ai_move (ai, 1, 1));
28902        assert_true (ai_move (ai, 1, 6));
28903        assert_true (ai_move (ai, 7, 7));
28904        assert_true (game.pass ());
28905        assert_true (ai_move (ai, 0, 7));
28906        assert_true (game.pass ());
28907        assert_true (ai_move (ai, 7, 1));
28908        assert_true (ai_move (ai, 7, 0));
28909    }
28910
28911    private static inline void test_complete_reversi_game_371 ()
28912    {
28913                                  /* 0 1 2 3 4 5 6 7 */
28914        string [] board = {/* 0 */ " . . . . . . . .",
28915                           /* 1 */ " . . . . . . . .",
28916                           /* 2 */ " . . D L . L . .",
28917                           /* 3 */ " . . . D L . . .",
28918                           /* 4 */ " . . . L D . . .",
28919                           /* 5 */ " . . . . D . . .",
28920                           /* 6 */ " . . . . . . . .",
28921                           /* 7 */ " . . . . . . . ."};
28922
28923        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
28924        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
28925
28926        assert_true (ai_move (ai, 3, 1));
28927        assert_true (ai_move (ai, 5, 6));
28928        assert_true (ai_move (ai, 5, 3));
28929        assert_true (ai_move (ai, 5, 4));
28930        assert_true (ai_move (ai, 6, 3));
28931        assert_true (ai_move (ai, 6, 2));
28932        assert_true (ai_move (ai, 4, 1));
28933        assert_true (ai_move (ai, 5, 1));
28934        assert_true (ai_move (ai, 6, 5));
28935        assert_true (ai_move (ai, 5, 5));
28936        assert_true (ai_move (ai, 4, 7));
28937        assert_true (ai_move (ai, 5, 7));
28938        assert_true (ai_move (ai, 3, 6));
28939        assert_true (ai_move (ai, 3, 5));
28940        assert_true (ai_move (ai, 4, 6));
28941        assert_true (ai_move (ai, 3, 7));
28942        assert_true (ai_move (ai, 5, 0));
28943        assert_true (ai_move (ai, 7, 2));
28944        assert_true (ai_move (ai, 6, 4));
28945        assert_true (ai_move (ai, 7, 5));
28946        assert_true (ai_move (ai, 2, 7));
28947        assert_true (ai_move (ai, 1, 7));
28948        assert_true (ai_move (ai, 2, 6));
28949        assert_true (ai_move (ai, 2, 5));
28950        assert_true (ai_move (ai, 2, 4));
28951        assert_true (ai_move (ai, 1, 3));
28952        assert_true (ai_move (ai, 1, 5));
28953        assert_true (ai_move (ai, 0, 4));
28954        assert_true (ai_move (ai, 0, 2));
28955        assert_true (ai_move (ai, 7, 3));
28956        assert_true (ai_move (ai, 7, 4));
28957        assert_true (ai_move (ai, 2, 1));
28958        assert_true (ai_move (ai, 2, 3));
28959        assert_true (ai_move (ai, 4, 2));
28960        assert_true (ai_move (ai, 1, 4));
28961        assert_true (ai_move (ai, 2, 0));
28962        assert_true (ai_move (ai, 3, 0));
28963        assert_true (ai_move (ai, 1, 2));
28964        assert_true (ai_move (ai, 0, 5));
28965        assert_true (ai_move (ai, 0, 3));
28966        assert_true (ai_move (ai, 1, 0));
28967        assert_true (ai_move (ai, 4, 0));
28968        assert_true (ai_move (ai, 1, 1));
28969        assert_true (ai_move (ai, 0, 0));
28970        assert_true (ai_move (ai, 0, 1));
28971        assert_true (ai_move (ai, 6, 0));
28972        assert_true (ai_move (ai, 6, 6));
28973        assert_true (ai_move (ai, 7, 7));
28974        assert_true (ai_move (ai, 7, 6));
28975        assert_true (ai_move (ai, 0, 6));
28976        assert_true (ai_move (ai, 0, 7));
28977        assert_true (game.pass ());
28978        assert_true (ai_move (ai, 6, 7));
28979        assert_true (game.pass ());
28980        assert_true (ai_move (ai, 1, 6));
28981        assert_true (game.pass ());
28982        assert_true (ai_move (ai, 6, 1));
28983        assert_true (ai_move (ai, 7, 1));
28984        assert_true (ai_move (ai, 7, 0));
28985    }
28986
28987    private static inline void test_complete_reversi_game_372 ()
28988    {
28989                                  /* 0 1 2 3 4 5 6 7 */
28990        string [] board = {/* 0 */ " . . . . . . . .",
28991                           /* 1 */ " . . . . . . . .",
28992                           /* 2 */ " . L L L . . . .",
28993                           /* 3 */ " . . . D D . . .",
28994                           /* 4 */ " . . . L D . . .",
28995                           /* 5 */ " . . . . D . . .",
28996                           /* 6 */ " . . . . . . . .",
28997                           /* 7 */ " . . . . . . . ."};
28998
28999        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29000        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29001
29002        assert_true (ai_move (ai, 2, 5));
29003        assert_true (ai_move (ai, 5, 4));
29004        assert_true (ai_move (ai, 6, 3));
29005        assert_true (ai_move (ai, 6, 5));
29006        assert_true (ai_move (ai, 6, 4));
29007        assert_true (ai_move (ai, 2, 3));
29008        assert_true (ai_move (ai, 5, 2));
29009        assert_true (ai_move (ai, 3, 5));
29010        assert_true (ai_move (ai, 2, 6));
29011        assert_true (ai_move (ai, 3, 6));
29012        assert_true (ai_move (ai, 2, 1));
29013        assert_true (ai_move (ai, 1, 5));
29014        assert_true (ai_move (ai, 0, 2));
29015        assert_true (ai_move (ai, 5, 6));
29016        assert_true (ai_move (ai, 1, 4));
29017        assert_true (ai_move (ai, 2, 7));
29018        assert_true (ai_move (ai, 4, 6));
29019        assert_true (ai_move (ai, 3, 1));
29020        assert_true (ai_move (ai, 4, 2));
29021        assert_true (ai_move (ai, 5, 1));
29022        assert_true (ai_move (ai, 5, 0));
29023        assert_true (ai_move (ai, 1, 3));
29024        assert_true (ai_move (ai, 4, 1));
29025        assert_true (ai_move (ai, 3, 0));
29026        assert_true (ai_move (ai, 2, 0));
29027        assert_true (ai_move (ai, 4, 0));
29028        assert_true (ai_move (ai, 7, 6));
29029        assert_true (ai_move (ai, 5, 7));
29030        assert_true (ai_move (ai, 1, 1));
29031        assert_true (ai_move (ai, 0, 3));
29032        assert_true (ai_move (ai, 0, 4));
29033        assert_true (ai_move (ai, 7, 2));
29034        assert_true (ai_move (ai, 6, 2));
29035        assert_true (ai_move (ai, 7, 3));
29036        assert_true (ai_move (ai, 2, 4));
29037        assert_true (ai_move (ai, 0, 5));
29038        assert_true (ai_move (ai, 1, 6));
29039        assert_true (ai_move (ai, 5, 5));
29040        assert_true (ai_move (ai, 0, 6));
29041        assert_true (ai_move (ai, 0, 0));
29042        assert_true (ai_move (ai, 1, 0));
29043        assert_true (ai_move (ai, 5, 3));
29044        assert_true (ai_move (ai, 7, 5));
29045        assert_true (ai_move (ai, 0, 1));
29046        assert_true (ai_move (ai, 3, 7));
29047        assert_true (ai_move (ai, 0, 7));
29048        assert_true (ai_move (ai, 4, 7));
29049        assert_true (ai_move (ai, 1, 7));
29050        assert_true (ai_move (ai, 6, 7));
29051        assert_true (ai_move (ai, 7, 7));
29052        assert_true (ai_move (ai, 6, 0));
29053        assert_true (ai_move (ai, 7, 4));
29054        assert_true (ai_move (ai, 6, 6));
29055        assert_true (ai_move (ai, 6, 1));
29056        assert_true (ai_move (ai, 7, 1));
29057        assert_true (ai_move (ai, 7, 0));
29058    }
29059
29060    private static inline void test_complete_reversi_game_373 ()
29061    {
29062                                  /* 0 1 2 3 4 5 6 7 */
29063        string [] board = {/* 0 */ " . . . . . . . .",
29064                           /* 1 */ " . . D . . . . .",
29065                           /* 2 */ " . . . D . . . .",
29066                           /* 3 */ " . . . L D . . .",
29067                           /* 4 */ " . . . L D . . .",
29068                           /* 5 */ " . . . . L . . .",
29069                           /* 6 */ " . . . . . L . .",
29070                           /* 7 */ " . . . . . . . ."};
29071
29072        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29073        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29074
29075        assert_true (ai_move (ai, 4, 6));
29076        assert_true (ai_move (ai, 3, 1));
29077        assert_true (ai_move (ai, 2, 5));
29078        assert_true (ai_move (ai, 5, 4));
29079        assert_true (ai_move (ai, 6, 3));
29080        assert_true (ai_move (ai, 6, 5));
29081        assert_true (ai_move (ai, 6, 4));
29082        assert_true (ai_move (ai, 3, 6));
29083        assert_true (ai_move (ai, 2, 7));
29084        assert_true (ai_move (ai, 2, 6));
29085        assert_true (ai_move (ai, 5, 2));
29086        assert_true (ai_move (ai, 2, 4));
29087        assert_true (ai_move (ai, 1, 4));
29088        assert_true (ai_move (ai, 1, 5));
29089        assert_true (ai_move (ai, 2, 2));
29090        assert_true (ai_move (ai, 1, 2));
29091        assert_true (ai_move (ai, 2, 3));
29092        assert_true (ai_move (ai, 1, 3));
29093        assert_true (ai_move (ai, 0, 2));
29094        assert_true (ai_move (ai, 0, 4));
29095        assert_true (ai_move (ai, 4, 2));
29096        assert_true (ai_move (ai, 3, 7));
29097        assert_true (ai_move (ai, 0, 3));
29098        assert_true (ai_move (ai, 2, 0));
29099        assert_true (ai_move (ai, 0, 5));
29100        assert_true (ai_move (ai, 3, 5));
29101        assert_true (ai_move (ai, 4, 1));
29102        assert_true (ai_move (ai, 1, 7));
29103        assert_true (ai_move (ai, 5, 7));
29104        assert_true (ai_move (ai, 5, 1));
29105        assert_true (ai_move (ai, 5, 5));
29106        assert_true (ai_move (ai, 7, 2));
29107        assert_true (ai_move (ai, 5, 3));
29108        assert_true (ai_move (ai, 6, 2));
29109        assert_true (ai_move (ai, 7, 3));
29110        assert_true (ai_move (ai, 7, 5));
29111        assert_true (ai_move (ai, 7, 4));
29112        assert_true (ai_move (ai, 1, 1));
29113        assert_true (ai_move (ai, 4, 0));
29114        assert_true (ai_move (ai, 5, 0));
29115        assert_true (ai_move (ai, 3, 0));
29116        assert_true (ai_move (ai, 1, 0));
29117        assert_true (ai_move (ai, 0, 6));
29118        assert_true (ai_move (ai, 6, 1));
29119        assert_true (ai_move (ai, 4, 7));
29120        assert_true (ai_move (ai, 6, 7));
29121        assert_true (ai_move (ai, 7, 0));
29122        assert_true (ai_move (ai, 7, 1));
29123        assert_true (ai_move (ai, 6, 0));
29124        assert_true (ai_move (ai, 6, 6));
29125        assert_true (ai_move (ai, 1, 6));
29126        assert_true (ai_move (ai, 7, 6));
29127        assert_true (ai_move (ai, 7, 7));
29128        assert_true (ai_move (ai, 0, 7));
29129        assert_true (ai_move (ai, 0, 0));
29130        assert_true (ai_move (ai, 0, 1));
29131    }
29132
29133    private static inline void test_complete_reversi_game_374 ()
29134    {
29135                                  /* 0 1 2 3 4 5 6 7 */
29136        string [] board = {/* 0 */ " . . . . . . . .",
29137                           /* 1 */ " . . D . . . . .",
29138                           /* 2 */ " . . . D . . . .",
29139                           /* 3 */ " . . . L D . . .",
29140                           /* 4 */ " . . . L L . . .",
29141                           /* 5 */ " . . . . D L . .",
29142                           /* 6 */ " . . . . . . . .",
29143                           /* 7 */ " . . . . . . . ."};
29144
29145        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29146        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29147
29148        assert_true (ai_move (ai, 6, 5));
29149        assert_true (ai_move (ai, 3, 1));
29150        assert_true (ai_move (ai, 2, 5));
29151        assert_true (ai_move (ai, 2, 4));
29152        assert_true (ai_move (ai, 4, 1));
29153        assert_true (ai_move (ai, 2, 6));
29154        assert_true (ai_move (ai, 2, 3));
29155        assert_true (ai_move (ai, 4, 6));
29156        assert_true (ai_move (ai, 3, 5));
29157        assert_true (ai_move (ai, 6, 4));
29158        assert_true (ai_move (ai, 1, 5));
29159        assert_true (ai_move (ai, 7, 5));
29160        assert_true (ai_move (ai, 2, 7));
29161        assert_true (ai_move (ai, 1, 4));
29162        assert_true (ai_move (ai, 1, 3));
29163        assert_true (ai_move (ai, 5, 6));
29164        assert_true (ai_move (ai, 5, 7));
29165        assert_true (ai_move (ai, 3, 7));
29166        assert_true (ai_move (ai, 5, 3));
29167        assert_true (ai_move (ai, 5, 4));
29168        assert_true (ai_move (ai, 4, 7));
29169        assert_true (ai_move (ai, 0, 4));
29170        assert_true (ai_move (ai, 6, 3));
29171        assert_true (ai_move (ai, 3, 6));
29172        assert_true (ai_move (ai, 0, 3));
29173        assert_true (ai_move (ai, 0, 5));
29174        assert_true (ai_move (ai, 6, 7));
29175        assert_true (ai_move (ai, 0, 2));
29176        assert_true (ai_move (ai, 7, 3));
29177        assert_true (ai_move (ai, 7, 4));
29178        assert_true (ai_move (ai, 7, 6));
29179        assert_true (ai_move (ai, 2, 2));
29180        assert_true (ai_move (ai, 1, 2));
29181        assert_true (ai_move (ai, 2, 0));
29182        assert_true (ai_move (ai, 3, 0));
29183        assert_true (ai_move (ai, 4, 0));
29184        assert_true (ai_move (ai, 1, 6));
29185        assert_true (ai_move (ai, 0, 6));
29186        assert_true (ai_move (ai, 1, 1));
29187        assert_true (ai_move (ai, 5, 1));
29188        assert_true (ai_move (ai, 5, 0));
29189        assert_true (ai_move (ai, 6, 0));
29190        assert_true (ai_move (ai, 6, 1));
29191        assert_true (ai_move (ai, 5, 2));
29192        assert_true (game.pass ());
29193        assert_true (ai_move (ai, 4, 2));
29194        assert_true (ai_move (ai, 0, 1));
29195        assert_true (ai_move (ai, 0, 7));
29196        assert_true (ai_move (ai, 6, 2));
29197        assert_true (ai_move (ai, 1, 7));
29198        assert_true (game.pass ());
29199        assert_true (ai_move (ai, 7, 0));
29200        assert_true (ai_move (ai, 7, 1));
29201        assert_true (ai_move (ai, 7, 7));
29202        assert_true (game.pass ());
29203        assert_true (ai_move (ai, 7, 2));
29204        assert_true (game.pass ());
29205        assert_true (ai_move (ai, 6, 6));
29206        assert_true (game.pass ());
29207        assert_true (ai_move (ai, 1, 0));
29208        assert_true (ai_move (ai, 0, 0));
29209    }
29210
29211    private static inline void test_complete_reversi_game_375 ()
29212    {
29213                                  /* 0 1 2 3 4 5 6 7 */
29214        string [] board = {/* 0 */ " . . . . . . . .",
29215                           /* 1 */ " . . D . . . . .",
29216                           /* 2 */ " . . . D . . . .",
29217                           /* 3 */ " . . . L D . . .",
29218                           /* 4 */ " . . . L L L . .",
29219                           /* 5 */ " . . . . D . . .",
29220                           /* 6 */ " . . . . . . . .",
29221                           /* 7 */ " . . . . . . . ."};
29222
29223        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29224        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29225
29226        assert_true (ai_move (ai, 6, 5));
29227        assert_true (ai_move (ai, 6, 4));
29228        assert_true (ai_move (ai, 2, 5));
29229        assert_true (ai_move (ai, 3, 1));
29230        assert_true (ai_move (ai, 6, 3));
29231        assert_true (ai_move (ai, 2, 4));
29232        assert_true (ai_move (ai, 4, 1));
29233        assert_true (ai_move (ai, 2, 6));
29234        assert_true (ai_move (ai, 2, 3));
29235        assert_true (ai_move (ai, 4, 6));
29236        assert_true (ai_move (ai, 5, 6));
29237        assert_true (ai_move (ai, 7, 4));
29238        assert_true (ai_move (ai, 1, 4));
29239        assert_true (ai_move (ai, 3, 6));
29240        assert_true (ai_move (ai, 2, 7));
29241        assert_true (ai_move (ai, 4, 7));
29242        assert_true (ai_move (ai, 7, 6));
29243        assert_true (ai_move (ai, 5, 2));
29244        assert_true (ai_move (ai, 7, 2));
29245        assert_true (ai_move (ai, 3, 0));
29246        assert_true (ai_move (ai, 5, 0));
29247        assert_true (ai_move (ai, 6, 2));
29248        assert_true (ai_move (ai, 4, 2));
29249        assert_true (ai_move (ai, 0, 3));
29250        assert_true (ai_move (ai, 0, 5));
29251        assert_true (ai_move (ai, 2, 2));
29252        assert_true (ai_move (ai, 1, 2));
29253        assert_true (ai_move (ai, 1, 3));
29254        assert_true (ai_move (ai, 1, 5));
29255        assert_true (ai_move (ai, 3, 5));
29256        assert_true (ai_move (ai, 5, 3));
29257        assert_true (ai_move (ai, 2, 0));
29258        assert_true (ai_move (ai, 7, 3));
29259        assert_true (ai_move (ai, 7, 1));
29260        assert_true (ai_move (ai, 3, 7));
29261        assert_true (ai_move (ai, 5, 5));
29262        assert_true (ai_move (ai, 1, 6));
29263        assert_true (ai_move (ai, 5, 1));
29264        assert_true (ai_move (ai, 5, 7));
29265        assert_true (ai_move (ai, 0, 2));
29266        assert_true (ai_move (ai, 4, 0));
29267        assert_true (ai_move (ai, 6, 0));
29268        assert_true (ai_move (ai, 6, 1));
29269        assert_true (ai_move (ai, 6, 6));
29270        assert_true (ai_move (ai, 1, 0));
29271        assert_true (ai_move (ai, 0, 0));
29272        assert_true (ai_move (ai, 0, 1));
29273        assert_true (ai_move (ai, 0, 4));
29274        assert_true (ai_move (ai, 7, 5));
29275        assert_true (ai_move (ai, 7, 7));
29276        assert_true (ai_move (ai, 6, 7));
29277        assert_true (ai_move (ai, 1, 1));
29278        assert_true (game.pass ());
29279        assert_true (ai_move (ai, 1, 7));
29280        assert_true (ai_move (ai, 0, 7));
29281        assert_true (ai_move (ai, 0, 6));
29282        assert_true (game.pass ());
29283        assert_true (ai_move (ai, 7, 0));
29284    }
29285
29286    private static inline void test_complete_reversi_game_376 ()
29287    {
29288                                  /* 0 1 2 3 4 5 6 7 */
29289        string [] board = {/* 0 */ " . . . . . . . .",
29290                           /* 1 */ " . . D . . . . .",
29291                           /* 2 */ " . . . D . . . .",
29292                           /* 3 */ " . . . L L L . .",
29293                           /* 4 */ " . . . L D . . .",
29294                           /* 5 */ " . . . . D . . .",
29295                           /* 6 */ " . . . . . . . .",
29296                           /* 7 */ " . . . . . . . ."};
29297
29298        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29299        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29300
29301        assert_true (ai_move (ai, 6, 2));
29302        assert_true (ai_move (ai, 3, 1));
29303        assert_true (ai_move (ai, 2, 4));
29304        assert_true (ai_move (ai, 6, 3));
29305        assert_true (ai_move (ai, 4, 1));
29306        assert_true (ai_move (ai, 5, 0));
29307        assert_true (ai_move (ai, 6, 4));
29308        assert_true (ai_move (ai, 1, 5));
29309        assert_true (ai_move (ai, 1, 4));
29310        assert_true (ai_move (ai, 3, 0));
29311        assert_true (ai_move (ai, 2, 2));
29312        assert_true (ai_move (ai, 1, 2));
29313        assert_true (ai_move (ai, 5, 2));
29314        assert_true (ai_move (ai, 5, 1));
29315        assert_true (ai_move (ai, 4, 2));
29316        assert_true (ai_move (ai, 5, 4));
29317        assert_true (ai_move (ai, 0, 2));
29318        assert_true (ai_move (ai, 3, 6));
29319        assert_true (ai_move (ai, 5, 6));
29320        assert_true (ai_move (ai, 7, 5));
29321        assert_true (ai_move (ai, 2, 0));
29322        assert_true (ai_move (ai, 7, 4));
29323        assert_true (ai_move (ai, 7, 3));
29324        assert_true (ai_move (ai, 2, 3));
29325        assert_true (ai_move (ai, 1, 3));
29326        assert_true (ai_move (ai, 0, 5));
29327        assert_true (ai_move (ai, 7, 6));
29328        assert_true (ai_move (ai, 4, 6));
29329        assert_true (ai_move (ai, 0, 4));
29330        assert_true (ai_move (ai, 2, 5));
29331        assert_true (ai_move (ai, 4, 0));
29332        assert_true (ai_move (ai, 1, 0));
29333        assert_true (ai_move (ai, 6, 5));
29334        assert_true (ai_move (ai, 6, 0));
29335        assert_true (ai_move (ai, 5, 5));
29336        assert_true (ai_move (ai, 5, 7));
29337        assert_true (ai_move (ai, 3, 5));
29338        assert_true (ai_move (ai, 2, 6));
29339        assert_true (ai_move (ai, 1, 7));
29340        assert_true (ai_move (ai, 3, 7));
29341        assert_true (ai_move (ai, 1, 1));
29342        assert_true (ai_move (ai, 0, 3));
29343        assert_true (ai_move (ai, 0, 6));
29344        assert_true (ai_move (ai, 7, 1));
29345        assert_true (ai_move (ai, 0, 1));
29346        assert_true (ai_move (ai, 7, 2));
29347        assert_true (ai_move (ai, 7, 0));
29348        assert_true (ai_move (ai, 0, 0));
29349        assert_true (ai_move (ai, 6, 1));
29350        assert_true (ai_move (ai, 0, 7));
29351        assert_true (ai_move (ai, 1, 6));
29352        assert_true (ai_move (ai, 2, 7));
29353        assert_true (ai_move (ai, 4, 7));
29354        assert_true (ai_move (ai, 6, 6));
29355        assert_true (ai_move (ai, 6, 7));
29356        assert_true (ai_move (ai, 7, 7));
29357    }
29358
29359    private static inline void test_complete_reversi_game_377 ()
29360    {
29361                                  /* 0 1 2 3 4 5 6 7 */
29362        string [] board = {/* 0 */ " . . . . . . . .",
29363                           /* 1 */ " . . D . . . . .",
29364                           /* 2 */ " . . . D . L . .",
29365                           /* 3 */ " . . . L L . . .",
29366                           /* 4 */ " . . . L D . . .",
29367                           /* 5 */ " . . . . D . . .",
29368                           /* 6 */ " . . . . . . . .",
29369                           /* 7 */ " . . . . . . . ."};
29370
29371        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29372        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29373
29374        assert_true (ai_move (ai, 2, 2));
29375        assert_true (ai_move (ai, 5, 6));
29376        assert_true (ai_move (ai, 4, 6));
29377        assert_true (ai_move (ai, 2, 3));
29378        assert_true (ai_move (ai, 1, 4));
29379        assert_true (ai_move (ai, 3, 1));
29380        assert_true (ai_move (ai, 4, 0));
29381        assert_true (ai_move (ai, 1, 3));
29382        assert_true (ai_move (ai, 4, 1));
29383        assert_true (ai_move (ai, 1, 2));
29384        assert_true (ai_move (ai, 0, 3));
29385        assert_true (ai_move (ai, 0, 5));
29386        assert_true (ai_move (ai, 6, 3));
29387        assert_true (ai_move (ai, 2, 0));
29388        assert_true (ai_move (ai, 3, 0));
29389        assert_true (ai_move (ai, 4, 2));
29390        assert_true (ai_move (ai, 1, 0));
29391        assert_true (ai_move (ai, 6, 2));
29392        assert_true (ai_move (ai, 7, 2));
29393        assert_true (ai_move (ai, 5, 3));
29394        assert_true (ai_move (ai, 6, 4));
29395        assert_true (ai_move (ai, 5, 4));
29396        assert_true (ai_move (ai, 6, 5));
29397        assert_true (ai_move (ai, 4, 7));
29398        assert_true (ai_move (ai, 3, 6));
29399        assert_true (ai_move (ai, 2, 5));
29400        assert_true (ai_move (ai, 2, 7));
29401        assert_true (ai_move (ai, 2, 6));
29402        assert_true (ai_move (ai, 0, 4));
29403        assert_true (ai_move (ai, 0, 2));
29404        assert_true (ai_move (ai, 1, 5));
29405        assert_true (ai_move (ai, 2, 4));
29406        assert_true (ai_move (ai, 3, 7));
29407        assert_true (ai_move (ai, 1, 7));
29408        assert_true (ai_move (ai, 5, 5));
29409        assert_true (ai_move (ai, 5, 1));
29410        assert_true (ai_move (ai, 3, 5));
29411        assert_true (ai_move (ai, 0, 6));
29412        assert_true (ai_move (ai, 5, 7));
29413        assert_true (ai_move (ai, 6, 7));
29414        assert_true (ai_move (ai, 6, 6));
29415        assert_true (ai_move (ai, 5, 0));
29416        assert_true (ai_move (ai, 6, 0));
29417        assert_true (ai_move (ai, 7, 3));
29418        assert_true (ai_move (ai, 6, 1));
29419        assert_true (ai_move (ai, 0, 1));
29420        assert_true (ai_move (ai, 7, 4));
29421        assert_true (ai_move (ai, 7, 7));
29422        assert_true (ai_move (ai, 7, 6));
29423        assert_true (ai_move (ai, 7, 5));
29424        assert_true (game.pass ());
29425        assert_true (ai_move (ai, 1, 1));
29426        assert_true (ai_move (ai, 1, 6));
29427        assert_true (ai_move (ai, 0, 0));
29428        assert_true (game.pass ());
29429        assert_true (ai_move (ai, 7, 1));
29430        assert_true (ai_move (ai, 7, 0));
29431    }
29432
29433    private static inline void test_complete_reversi_game_378 ()
29434    {
29435                                  /* 0 1 2 3 4 5 6 7 */
29436        string [] board = {/* 0 */ " . . . . . . . .",
29437                           /* 1 */ " . . D L . . . .",
29438                           /* 2 */ " . . . L . . . .",
29439                           /* 3 */ " . . . L D . . .",
29440                           /* 4 */ " . . . L D . . .",
29441                           /* 5 */ " . . . . D . . .",
29442                           /* 6 */ " . . . . . . . .",
29443                           /* 7 */ " . . . . . . . ."};
29444
29445        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29446        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29447
29448        assert_true (ai_move (ai, 2, 5));
29449        assert_true (ai_move (ai, 5, 4));
29450        assert_true (ai_move (ai, 6, 3));
29451        assert_true (ai_move (ai, 6, 5));
29452        assert_true (ai_move (ai, 6, 4));
29453        assert_true (ai_move (ai, 3, 5));
29454        assert_true (ai_move (ai, 2, 6));
29455        assert_true (ai_move (ai, 3, 6));
29456        assert_true (ai_move (ai, 2, 7));
29457        assert_true (ai_move (ai, 5, 3));
29458        assert_true (ai_move (ai, 6, 2));
29459        assert_true (ai_move (ai, 3, 7));
29460        assert_true (ai_move (ai, 4, 7));
29461        assert_true (ai_move (ai, 1, 5));
29462        assert_true (ai_move (ai, 1, 4));
29463        assert_true (ai_move (ai, 7, 3));
29464        assert_true (ai_move (ai, 0, 5));
29465        assert_true (ai_move (ai, 5, 1));
29466        assert_true (ai_move (ai, 2, 4));
29467        assert_true (ai_move (ai, 1, 3));
29468        assert_true (ai_move (ai, 2, 3));
29469        assert_true (ai_move (ai, 7, 5));
29470        assert_true (ai_move (ai, 4, 6));
29471        assert_true (ai_move (ai, 5, 7));
29472        assert_true (ai_move (ai, 5, 5));
29473        assert_true (ai_move (ai, 1, 7));
29474        assert_true (ai_move (ai, 7, 4));
29475        assert_true (ai_move (ai, 5, 6));
29476        assert_true (ai_move (ai, 0, 3));
29477        assert_true (ai_move (ai, 2, 2));
29478        assert_true (ai_move (ai, 1, 2));
29479        assert_true (ai_move (ai, 2, 0));
29480        assert_true (ai_move (ai, 4, 0));
29481        assert_true (ai_move (ai, 4, 2));
29482        assert_true (ai_move (ai, 4, 1));
29483        assert_true (ai_move (ai, 0, 1));
29484        assert_true (ai_move (ai, 5, 2));
29485        assert_true (ai_move (ai, 7, 2));
29486        assert_true (ai_move (ai, 0, 2));
29487        assert_true (ai_move (ai, 3, 0));
29488        assert_true (ai_move (ai, 0, 0));
29489        assert_true (ai_move (ai, 5, 0));
29490        assert_true (ai_move (ai, 1, 0));
29491        assert_true (ai_move (ai, 1, 6));
29492        assert_true (ai_move (ai, 6, 0));
29493        assert_true (ai_move (ai, 0, 6));
29494        assert_true (ai_move (ai, 0, 7));
29495        assert_true (ai_move (ai, 0, 4));
29496        assert_true (ai_move (ai, 6, 7));
29497        assert_true (ai_move (ai, 1, 1));
29498        assert_true (ai_move (ai, 6, 1));
29499        assert_true (ai_move (ai, 6, 6));
29500        assert_true (ai_move (ai, 7, 7));
29501        assert_true (ai_move (ai, 7, 6));
29502        assert_true (ai_move (ai, 7, 1));
29503        assert_true (ai_move (ai, 7, 0));
29504    }
29505
29506    private static inline void test_complete_reversi_game_379 ()
29507    {
29508                                  /* 0 1 2 3 4 5 6 7 */
29509        string [] board = {/* 0 */ " . . . . . . . .",
29510                           /* 1 */ " . . . . . . . .",
29511                           /* 2 */ " . . . . L . . .",
29512                           /* 3 */ " . . . D L . . .",
29513                           /* 4 */ " . . . D L . . .",
29514                           /* 5 */ " . . . D L D . .",
29515                           /* 6 */ " . . . . . . . .",
29516                           /* 7 */ " . . . . . . . ."};
29517
29518        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29519        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29520
29521        assert_true (ai_move (ai, 5, 6));
29522        assert_true (ai_move (ai, 4, 6));
29523        assert_true (ai_move (ai, 5, 1));
29524        assert_true (ai_move (ai, 6, 5));
29525        assert_true (ai_move (ai, 5, 7));
29526        assert_true (ai_move (ai, 4, 1));
29527        assert_true (ai_move (ai, 6, 4));
29528        assert_true (ai_move (ai, 2, 6));
29529        assert_true (ai_move (ai, 2, 4));
29530        assert_true (ai_move (ai, 2, 2));
29531        assert_true (ai_move (ai, 7, 5));
29532        assert_true (ai_move (ai, 1, 5));
29533        assert_true (ai_move (ai, 1, 4));
29534        assert_true (ai_move (ai, 4, 7));
29535        assert_true (ai_move (ai, 3, 6));
29536        assert_true (ai_move (ai, 6, 7));
29537        assert_true (ai_move (ai, 5, 4));
29538        assert_true (ai_move (ai, 2, 3));
29539        assert_true (ai_move (ai, 2, 1));
29540        assert_true (ai_move (ai, 6, 3));
29541        assert_true (ai_move (ai, 7, 2));
29542        assert_true (ai_move (ai, 1, 2));
29543        assert_true (ai_move (ai, 0, 3));
29544        assert_true (ai_move (ai, 2, 0));
29545        assert_true (ai_move (ai, 3, 0));
29546        assert_true (ai_move (ai, 4, 0));
29547        assert_true (ai_move (ai, 0, 6));
29548        assert_true (ai_move (ai, 0, 2));
29549        assert_true (ai_move (ai, 3, 1));
29550        assert_true (ai_move (ai, 3, 2));
29551        assert_true (ai_move (ai, 1, 7));
29552        assert_true (ai_move (ai, 5, 3));
29553        assert_true (ai_move (ai, 6, 2));
29554        assert_true (ai_move (ai, 5, 0));
29555        assert_true (ai_move (ai, 1, 1));
29556        assert_true (ai_move (ai, 0, 0));
29557        assert_true (ai_move (ai, 1, 3));
29558        assert_true (ai_move (ai, 2, 5));
29559        assert_true (ai_move (ai, 2, 7));
29560        assert_true (ai_move (ai, 1, 0));
29561        assert_true (ai_move (ai, 1, 6));
29562        assert_true (ai_move (ai, 0, 4));
29563        assert_true (ai_move (ai, 0, 1));
29564        assert_true (ai_move (ai, 0, 5));
29565        assert_true (ai_move (ai, 5, 2));
29566        assert_true (ai_move (ai, 6, 0));
29567        assert_true (ai_move (ai, 6, 1));
29568        assert_true (ai_move (ai, 7, 4));
29569        assert_true (ai_move (ai, 7, 3));
29570        assert_true (ai_move (ai, 6, 6));
29571        assert_true (ai_move (ai, 7, 7));
29572        assert_true (ai_move (ai, 3, 7));
29573        assert_true (ai_move (ai, 7, 6));
29574        assert_true (ai_move (ai, 7, 0));
29575        assert_true (ai_move (ai, 7, 1));
29576        assert_true (ai_move (ai, 0, 7));
29577    }
29578
29579    private static inline void test_complete_reversi_game_380 ()
29580    {
29581                                  /* 0 1 2 3 4 5 6 7 */
29582        string [] board = {/* 0 */ " . . . . . . . .",
29583                           /* 1 */ " . . . . . . . .",
29584                           /* 2 */ " . . . . L . . .",
29585                           /* 3 */ " . . . D L . . .",
29586                           /* 4 */ " . . . L D . . .",
29587                           /* 5 */ " . . L D . D . .",
29588                           /* 6 */ " . . . . . . . .",
29589                           /* 7 */ " . . . . . . . ."};
29590
29591        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29592        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29593
29594        assert_true (ai_move (ai, 1, 5));
29595        assert_true (ai_move (ai, 3, 2));
29596        assert_true (ai_move (ai, 2, 4));
29597        assert_true (ai_move (ai, 4, 5));
29598        assert_true (ai_move (ai, 5, 6));
29599        assert_true (ai_move (ai, 4, 6));
29600        assert_true (ai_move (ai, 5, 7));
29601        assert_true (ai_move (ai, 2, 3));
29602        assert_true (ai_move (ai, 1, 2));
29603        assert_true (ai_move (ai, 1, 3));
29604        assert_true (ai_move (ai, 0, 2));
29605        assert_true (ai_move (ai, 2, 6));
29606        assert_true (ai_move (ai, 1, 4));
29607        assert_true (ai_move (ai, 6, 5));
29608        assert_true (ai_move (ai, 6, 4));
29609        assert_true (ai_move (ai, 0, 4));
29610        assert_true (ai_move (ai, 7, 5));
29611        assert_true (ai_move (ai, 2, 2));
29612        assert_true (ai_move (ai, 5, 2));
29613        assert_true (ai_move (ai, 2, 1));
29614        assert_true (ai_move (ai, 3, 0));
29615        assert_true (ai_move (ai, 2, 0));
29616        assert_true (ai_move (ai, 0, 5));
29617        assert_true (ai_move (ai, 0, 3));
29618        assert_true (ai_move (ai, 4, 1));
29619        assert_true (ai_move (ai, 3, 6));
29620        assert_true (ai_move (ai, 2, 7));
29621        assert_true (ai_move (ai, 3, 1));
29622        assert_true (ai_move (ai, 5, 4));
29623        assert_true (ai_move (ai, 6, 2));
29624        assert_true (ai_move (ai, 6, 3));
29625        assert_true (ai_move (ai, 5, 3));
29626        assert_true (ai_move (ai, 5, 1));
29627        assert_true (ai_move (ai, 4, 0));
29628        assert_true (ai_move (ai, 7, 2));
29629        assert_true (ai_move (ai, 4, 7));
29630        assert_true (ai_move (ai, 3, 7));
29631        assert_true (ai_move (ai, 7, 4));
29632        assert_true (ai_move (ai, 7, 3));
29633        assert_true (ai_move (ai, 6, 6));
29634        assert_true (ai_move (ai, 5, 0));
29635        assert_true (ai_move (ai, 6, 0));
29636        assert_true (ai_move (ai, 1, 6));
29637        assert_true (ai_move (ai, 7, 6));
29638        assert_true (ai_move (ai, 7, 7));
29639        assert_true (ai_move (ai, 6, 7));
29640        assert_true (ai_move (ai, 6, 1));
29641        assert_true (ai_move (ai, 0, 1));
29642        assert_true (ai_move (ai, 0, 0));
29643        assert_true (ai_move (ai, 0, 6));
29644        assert_true (ai_move (ai, 0, 7));
29645        assert_true (ai_move (ai, 1, 7));
29646        assert_true (ai_move (ai, 1, 0));
29647        assert_true (ai_move (ai, 7, 0));
29648        assert_true (ai_move (ai, 7, 1));
29649        assert_true (ai_move (ai, 1, 1));
29650    }
29651
29652    private static inline void test_complete_reversi_game_381 ()
29653    {
29654                                  /* 0 1 2 3 4 5 6 7 */
29655        string [] board = {/* 0 */ " . . . . . . . .",
29656                           /* 1 */ " . . . . . . . .",
29657                           /* 2 */ " . . . . L . . .",
29658                           /* 3 */ " . . . L L . . .",
29659                           /* 4 */ " . . L D D . . .",
29660                           /* 5 */ " . . . D . D . .",
29661                           /* 6 */ " . . . . . . . .",
29662                           /* 7 */ " . . . . . . . ."};
29663
29664        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29665        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29666
29667        assert_true (ai_move (ai, 1, 3));
29668        assert_true (ai_move (ai, 1, 5));
29669        assert_true (ai_move (ai, 1, 4));
29670        assert_true (ai_move (ai, 4, 5));
29671        assert_true (ai_move (ai, 5, 6));
29672        assert_true (ai_move (ai, 4, 6));
29673        assert_true (ai_move (ai, 5, 7));
29674        assert_true (ai_move (ai, 2, 3));
29675        assert_true (ai_move (ai, 1, 2));
29676        assert_true (ai_move (ai, 4, 7));
29677        assert_true (ai_move (ai, 3, 7));
29678        assert_true (ai_move (ai, 6, 5));
29679        assert_true (ai_move (ai, 6, 4));
29680        assert_true (ai_move (ai, 0, 3));
29681        assert_true (ai_move (ai, 7, 5));
29682        assert_true (ai_move (ai, 2, 1));
29683        assert_true (ai_move (ai, 5, 4));
29684        assert_true (ai_move (ai, 6, 3));
29685        assert_true (ai_move (ai, 5, 3));
29686        assert_true (ai_move (ai, 0, 5));
29687        assert_true (ai_move (ai, 3, 6));
29688        assert_true (ai_move (ai, 2, 7));
29689        assert_true (ai_move (ai, 1, 7));
29690        assert_true (ai_move (ai, 5, 2));
29691        assert_true (ai_move (ai, 2, 5));
29692        assert_true (ai_move (ai, 2, 6));
29693        assert_true (ai_move (ai, 7, 2));
29694        assert_true (ai_move (ai, 7, 4));
29695        assert_true (ai_move (ai, 0, 2));
29696        assert_true (ai_move (ai, 7, 6));
29697        assert_true (ai_move (ai, 6, 2));
29698        assert_true (ai_move (ai, 0, 1));
29699        assert_true (ai_move (ai, 0, 4));
29700        assert_true (ai_move (ai, 6, 6));
29701        assert_true (ai_move (ai, 0, 0));
29702        assert_true (ai_move (ai, 6, 7));
29703        assert_true (ai_move (ai, 7, 7));
29704        assert_true (ai_move (ai, 7, 1));
29705        assert_true (ai_move (ai, 7, 3));
29706        assert_true (ai_move (ai, 2, 2));
29707        assert_true (ai_move (ai, 2, 0));
29708        assert_true (ai_move (ai, 3, 2));
29709        assert_true (ai_move (ai, 0, 6));
29710        assert_true (ai_move (ai, 1, 6));
29711        assert_true (ai_move (ai, 4, 1));
29712        assert_true (ai_move (ai, 5, 1));
29713        assert_true (ai_move (ai, 0, 7));
29714        assert_true (ai_move (ai, 3, 1));
29715        assert_true (ai_move (ai, 1, 1));
29716        assert_true (ai_move (ai, 1, 0));
29717        assert_true (ai_move (ai, 5, 0));
29718        assert_true (ai_move (ai, 3, 0));
29719        assert_true (ai_move (ai, 4, 0));
29720        assert_true (ai_move (ai, 6, 1));
29721        assert_true (ai_move (ai, 7, 0));
29722        assert_true (ai_move (ai, 6, 0));
29723    }
29724
29725    private static inline void test_complete_reversi_game_382 ()
29726    {
29727                                  /* 0 1 2 3 4 5 6 7 */
29728        string [] board = {/* 0 */ " . . . . . . . .",
29729                           /* 1 */ " . . . . . . . .",
29730                           /* 2 */ " . . . . L . . .",
29731                           /* 3 */ " . . L L L . . .",
29732                           /* 4 */ " . . . D D . . .",
29733                           /* 5 */ " . . . D . D . .",
29734                           /* 6 */ " . . . . . . . .",
29735                           /* 7 */ " . . . . . . . ."};
29736
29737        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29738        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29739
29740        assert_true (ai_move (ai, 1, 2));
29741        assert_true (ai_move (ai, 1, 3));
29742        assert_true (ai_move (ai, 1, 4));
29743        assert_true (ai_move (ai, 0, 3));
29744        assert_true (ai_move (ai, 2, 2));
29745        assert_true (ai_move (ai, 3, 1));
29746        assert_true (ai_move (ai, 3, 2));
29747        assert_true (ai_move (ai, 0, 2));
29748        assert_true (ai_move (ai, 2, 1));
29749        assert_true (ai_move (ai, 3, 0));
29750        assert_true (ai_move (ai, 2, 0));
29751        assert_true (ai_move (ai, 1, 5));
29752        assert_true (ai_move (ai, 0, 5));
29753        assert_true (ai_move (ai, 2, 4));
29754        assert_true (ai_move (ai, 2, 5));
29755        assert_true (ai_move (ai, 4, 6));
29756        assert_true (ai_move (ai, 5, 1));
29757        assert_true (ai_move (ai, 4, 1));
29758        assert_true (ai_move (ai, 2, 6));
29759        assert_true (ai_move (ai, 6, 4));
29760        assert_true (ai_move (ai, 5, 4));
29761        assert_true (ai_move (ai, 1, 0));
29762        assert_true (ai_move (ai, 5, 2));
29763        assert_true (ai_move (ai, 2, 7));
29764        assert_true (ai_move (ai, 3, 6));
29765        assert_true (ai_move (ai, 6, 2));
29766        assert_true (ai_move (ai, 5, 0));
29767        assert_true (ai_move (ai, 6, 5));
29768        assert_true (ai_move (ai, 6, 3));
29769        assert_true (ai_move (ai, 7, 2));
29770        assert_true (ai_move (ai, 3, 7));
29771        assert_true (ai_move (ai, 0, 4));
29772        assert_true (ai_move (ai, 0, 1));
29773        assert_true (ai_move (ai, 4, 7));
29774        assert_true (ai_move (ai, 5, 7));
29775        assert_true (ai_move (ai, 6, 7));
29776        assert_true (ai_move (ai, 4, 0));
29777        assert_true (ai_move (ai, 6, 0));
29778        assert_true (ai_move (ai, 5, 3));
29779        assert_true (ai_move (ai, 5, 6));
29780        assert_true (ai_move (ai, 7, 5));
29781        assert_true (ai_move (ai, 4, 5));
29782        assert_true (ai_move (ai, 7, 4));
29783        assert_true (ai_move (ai, 1, 1));
29784        assert_true (ai_move (ai, 1, 6));
29785        assert_true (ai_move (ai, 0, 7));
29786        assert_true (ai_move (ai, 1, 7));
29787        assert_true (ai_move (ai, 6, 1));
29788        assert_true (ai_move (ai, 7, 7));
29789        assert_true (ai_move (ai, 0, 6));
29790        assert_true (ai_move (ai, 6, 6));
29791        assert_true (ai_move (ai, 0, 0));
29792        assert_true (ai_move (ai, 7, 1));
29793        assert_true (ai_move (ai, 7, 3));
29794        assert_true (game.pass ());
29795        assert_true (ai_move (ai, 7, 6));
29796        assert_true (game.pass ());
29797        assert_true (ai_move (ai, 7, 0));
29798    }
29799
29800    private static inline void test_complete_reversi_game_383 ()
29801    {
29802                                  /* 0 1 2 3 4 5 6 7 */
29803        string [] board = {/* 0 */ " . . . . . . . .",
29804                           /* 1 */ " . . . . . . . .",
29805                           /* 2 */ " . . . . L . . .",
29806                           /* 3 */ " . . . D L . . .",
29807                           /* 4 */ " . . . D D L . .",
29808                           /* 5 */ " . . . D . . L .",
29809                           /* 6 */ " . . . . . . . .",
29810                           /* 7 */ " . . . . . . . ."};
29811
29812        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29813        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29814
29815        assert_true (ai_move (ai, 6, 4));
29816        assert_true (ai_move (ai, 2, 4));
29817        assert_true (ai_move (ai, 1, 3));
29818        assert_true (ai_move (ai, 1, 5));
29819        assert_true (ai_move (ai, 1, 4));
29820        assert_true (ai_move (ai, 6, 3));
29821        assert_true (ai_move (ai, 7, 4));
29822        assert_true (ai_move (ai, 5, 5));
29823        assert_true (ai_move (ai, 4, 6));
29824        assert_true (ai_move (ai, 4, 5));
29825        assert_true (ai_move (ai, 7, 5));
29826        assert_true (ai_move (ai, 5, 6));
29827        assert_true (ai_move (ai, 4, 7));
29828        assert_true (ai_move (ai, 5, 7));
29829        assert_true (ai_move (ai, 6, 2));
29830        assert_true (ai_move (ai, 7, 2));
29831        assert_true (ai_move (ai, 5, 3));
29832        assert_true (ai_move (ai, 5, 2));
29833        assert_true (ai_move (ai, 3, 1));
29834        assert_true (ai_move (ai, 2, 6));
29835        assert_true (ai_move (ai, 3, 6));
29836        assert_true (ai_move (ai, 5, 1));
29837        assert_true (ai_move (ai, 3, 2));
29838        assert_true (ai_move (ai, 7, 3));
29839        assert_true (ai_move (ai, 7, 1));
29840        assert_true (ai_move (ai, 2, 7));
29841        assert_true (ai_move (ai, 3, 7));
29842        assert_true (ai_move (ai, 2, 0));
29843        assert_true (ai_move (ai, 0, 4));
29844        assert_true (ai_move (ai, 2, 1));
29845        assert_true (ai_move (ai, 6, 6));
29846        assert_true (ai_move (ai, 0, 2));
29847        assert_true (ai_move (ai, 2, 5));
29848        assert_true (ai_move (ai, 2, 3));
29849        assert_true (ai_move (ai, 2, 2));
29850        assert_true (ai_move (ai, 0, 3));
29851        assert_true (ai_move (ai, 1, 2));
29852        assert_true (ai_move (ai, 0, 5));
29853        assert_true (ai_move (ai, 5, 0));
29854        assert_true (ai_move (ai, 0, 6));
29855        assert_true (ai_move (ai, 4, 0));
29856        assert_true (ai_move (ai, 3, 0));
29857        assert_true (ai_move (ai, 4, 1));
29858        assert_true (ai_move (ai, 6, 0));
29859        assert_true (ai_move (ai, 6, 7));
29860        assert_true (ai_move (ai, 7, 7));
29861        assert_true (ai_move (ai, 1, 1));
29862        assert_true (ai_move (ai, 7, 6));
29863        assert_true (ai_move (ai, 6, 1));
29864        assert_true (ai_move (ai, 7, 0));
29865        assert_true (ai_move (ai, 1, 6));
29866        assert_true (ai_move (ai, 1, 7));
29867        assert_true (game.pass ());
29868        assert_true (ai_move (ai, 0, 0));
29869        assert_true (ai_move (ai, 1, 0));
29870        assert_true (ai_move (ai, 0, 1));
29871        assert_true (game.pass ());
29872        assert_true (ai_move (ai, 0, 7));
29873    }
29874
29875    private static inline void test_complete_reversi_game_384 ()
29876    {
29877                                  /* 0 1 2 3 4 5 6 7 */
29878        string [] board = {/* 0 */ " . . . . . . . .",
29879                           /* 1 */ " . . . . . . . .",
29880                           /* 2 */ " . . . . L . . .",
29881                           /* 3 */ " . . . D L . . .",
29882                           /* 4 */ " . . . D L D . .",
29883                           /* 5 */ " . . . D L . . .",
29884                           /* 6 */ " . . . . . . . .",
29885                           /* 7 */ " . . . . . . . ."};
29886
29887        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29888        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29889
29890        assert_true (ai_move (ai, 5, 6));
29891        assert_true (ai_move (ai, 4, 6));
29892        assert_true (ai_move (ai, 5, 1));
29893        assert_true (ai_move (ai, 2, 6));
29894        assert_true (ai_move (ai, 5, 2));
29895        assert_true (ai_move (ai, 6, 4));
29896        assert_true (ai_move (ai, 6, 5));
29897        assert_true (ai_move (ai, 6, 3));
29898        assert_true (ai_move (ai, 6, 2));
29899        assert_true (ai_move (ai, 2, 2));
29900        assert_true (ai_move (ai, 3, 2));
29901        assert_true (ai_move (ai, 7, 4));
29902        assert_true (ai_move (ai, 1, 2));
29903        assert_true (ai_move (ai, 7, 2));
29904        assert_true (ai_move (ai, 5, 5));
29905        assert_true (ai_move (ai, 5, 7));
29906        assert_true (ai_move (ai, 2, 5));
29907        assert_true (ai_move (ai, 5, 3));
29908        assert_true (ai_move (ai, 3, 6));
29909        assert_true (ai_move (ai, 4, 1));
29910        assert_true (ai_move (ai, 2, 7));
29911        assert_true (ai_move (ai, 2, 1));
29912        assert_true (ai_move (ai, 6, 1));
29913        assert_true (ai_move (ai, 2, 4));
29914        assert_true (ai_move (ai, 2, 3));
29915        assert_true (ai_move (ai, 1, 4));
29916        assert_true (ai_move (ai, 1, 3));
29917        assert_true (ai_move (ai, 7, 5));
29918        assert_true (ai_move (ai, 7, 3));
29919        assert_true (ai_move (ai, 1, 5));
29920        assert_true (ai_move (ai, 3, 7));
29921        assert_true (ai_move (ai, 0, 3));
29922        assert_true (ai_move (ai, 0, 5));
29923        assert_true (ai_move (ai, 0, 2));
29924        assert_true (ai_move (ai, 0, 4));
29925        assert_true (ai_move (ai, 0, 6));
29926        assert_true (ai_move (ai, 3, 1));
29927        assert_true (ai_move (ai, 2, 0));
29928        assert_true (ai_move (ai, 4, 0));
29929        assert_true (ai_move (ai, 3, 0));
29930        assert_true (ai_move (ai, 5, 0));
29931        assert_true (ai_move (ai, 4, 7));
29932        assert_true (ai_move (ai, 6, 7));
29933        assert_true (ai_move (ai, 1, 1));
29934        assert_true (ai_move (ai, 0, 0));
29935        assert_true (ai_move (ai, 1, 0));
29936        assert_true (ai_move (ai, 0, 1));
29937        assert_true (ai_move (ai, 1, 6));
29938        assert_true (ai_move (ai, 0, 7));
29939        assert_true (ai_move (ai, 1, 7));
29940        assert_true (ai_move (ai, 6, 6));
29941        assert_true (ai_move (ai, 7, 7));
29942        assert_true (ai_move (ai, 7, 6));
29943        assert_true (ai_move (ai, 7, 0));
29944        assert_true (ai_move (ai, 6, 0));
29945        assert_true (ai_move (ai, 7, 1));
29946    }
29947
29948    private static inline void test_complete_reversi_game_385 ()
29949    {
29950                                  /* 0 1 2 3 4 5 6 7 */
29951        string [] board = {/* 0 */ " . . . . . . . .",
29952                           /* 1 */ " . . . . . . . .",
29953                           /* 2 */ " . . . . L . . .",
29954                           /* 3 */ " . . . D L . . .",
29955                           /* 4 */ " . . . L D D . .",
29956                           /* 5 */ " . . L D . . . .",
29957                           /* 6 */ " . . . . . . . .",
29958                           /* 7 */ " . . . . . . . ."};
29959
29960        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
29961        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
29962
29963        assert_true (ai_move (ai, 1, 5));
29964        assert_true (ai_move (ai, 6, 5));
29965        assert_true (ai_move (ai, 5, 1));
29966        assert_true (ai_move (ai, 4, 1));
29967        assert_true (ai_move (ai, 6, 4));
29968        assert_true (ai_move (ai, 3, 2));
29969        assert_true (ai_move (ai, 2, 2));
29970        assert_true (ai_move (ai, 1, 2));
29971        assert_true (ai_move (ai, 2, 4));
29972        assert_true (ai_move (ai, 2, 3));
29973        assert_true (ai_move (ai, 5, 2));
29974        assert_true (ai_move (ai, 2, 6));
29975        assert_true (ai_move (ai, 1, 4));
29976        assert_true (ai_move (ai, 0, 3));
29977        assert_true (ai_move (ai, 2, 1));
29978        assert_true (ai_move (ai, 3, 1));
29979        assert_true (ai_move (ai, 5, 0));
29980        assert_true (ai_move (ai, 1, 3));
29981        assert_true (ai_move (ai, 0, 5));
29982        assert_true (ai_move (ai, 2, 0));
29983        assert_true (ai_move (ai, 3, 6));
29984        assert_true (ai_move (ai, 6, 2));
29985        assert_true (ai_move (ai, 5, 3));
29986        assert_true (ai_move (ai, 7, 5));
29987        assert_true (ai_move (ai, 6, 3));
29988        assert_true (ai_move (ai, 7, 3));
29989        assert_true (ai_move (ai, 7, 2));
29990        assert_true (ai_move (ai, 5, 5));
29991        assert_true (ai_move (ai, 5, 6));
29992        assert_true (ai_move (ai, 4, 5));
29993        assert_true (ai_move (ai, 4, 6));
29994        assert_true (ai_move (ai, 5, 7));
29995        assert_true (ai_move (ai, 3, 0));
29996        assert_true (ai_move (ai, 3, 7));
29997        assert_true (ai_move (ai, 0, 4));
29998        assert_true (ai_move (ai, 0, 2));
29999        assert_true (ai_move (ai, 0, 1));
30000        assert_true (ai_move (ai, 4, 0));
30001        assert_true (ai_move (ai, 1, 0));
30002        assert_true (ai_move (ai, 7, 4));
30003        assert_true (ai_move (ai, 7, 6));
30004        assert_true (ai_move (ai, 1, 6));
30005        assert_true (ai_move (ai, 4, 7));
30006        assert_true (ai_move (ai, 2, 7));
30007        assert_true (ai_move (ai, 7, 1));
30008        assert_true (ai_move (ai, 6, 1));
30009        assert_true (ai_move (ai, 7, 0));
30010        assert_true (ai_move (ai, 6, 0));
30011        assert_true (ai_move (ai, 1, 1));
30012        assert_true (ai_move (ai, 0, 0));
30013        assert_true (ai_move (ai, 6, 7));
30014        assert_true (ai_move (ai, 0, 6));
30015        assert_true (ai_move (ai, 1, 7));
30016        assert_true (ai_move (ai, 0, 7));
30017        assert_true (ai_move (ai, 6, 6));
30018        assert_true (ai_move (ai, 7, 7));
30019    }
30020
30021    private static inline void test_complete_reversi_game_386 ()
30022    {
30023                                  /* 0 1 2 3 4 5 6 7 */
30024        string [] board = {/* 0 */ " . . . . . . . .",
30025                           /* 1 */ " . . . . . . . .",
30026                           /* 2 */ " . . . . L . . .",
30027                           /* 3 */ " . . . L L . . .",
30028                           /* 4 */ " . . L D D D . .",
30029                           /* 5 */ " . . . D . . . .",
30030                           /* 6 */ " . . . . . . . .",
30031                           /* 7 */ " . . . . . . . ."};
30032
30033        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30034        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30035
30036        assert_true (ai_move (ai, 1, 3));
30037        assert_true (ai_move (ai, 6, 5));
30038        assert_true (ai_move (ai, 6, 4));
30039        assert_true (ai_move (ai, 1, 5));
30040        assert_true (ai_move (ai, 1, 4));
30041        assert_true (ai_move (ai, 6, 3));
30042        assert_true (ai_move (ai, 7, 4));
30043        assert_true (ai_move (ai, 5, 5));
30044        assert_true (ai_move (ai, 4, 6));
30045        assert_true (ai_move (ai, 4, 5));
30046        assert_true (ai_move (ai, 7, 5));
30047        assert_true (ai_move (ai, 5, 6));
30048        assert_true (ai_move (ai, 4, 7));
30049        assert_true (ai_move (ai, 5, 7));
30050        assert_true (ai_move (ai, 6, 2));
30051        assert_true (ai_move (ai, 7, 2));
30052        assert_true (ai_move (ai, 5, 3));
30053        assert_true (ai_move (ai, 5, 2));
30054        assert_true (ai_move (ai, 3, 1));
30055        assert_true (ai_move (ai, 2, 6));
30056        assert_true (ai_move (ai, 3, 6));
30057        assert_true (ai_move (ai, 5, 1));
30058        assert_true (ai_move (ai, 3, 2));
30059        assert_true (ai_move (ai, 7, 3));
30060        assert_true (ai_move (ai, 7, 1));
30061        assert_true (ai_move (ai, 2, 7));
30062        assert_true (ai_move (ai, 3, 7));
30063        assert_true (ai_move (ai, 2, 0));
30064        assert_true (ai_move (ai, 0, 4));
30065        assert_true (ai_move (ai, 2, 1));
30066        assert_true (ai_move (ai, 6, 6));
30067        assert_true (ai_move (ai, 0, 2));
30068        assert_true (ai_move (ai, 2, 5));
30069        assert_true (ai_move (ai, 2, 3));
30070        assert_true (ai_move (ai, 2, 2));
30071        assert_true (ai_move (ai, 0, 3));
30072        assert_true (ai_move (ai, 1, 2));
30073        assert_true (ai_move (ai, 0, 5));
30074        assert_true (ai_move (ai, 5, 0));
30075        assert_true (ai_move (ai, 0, 6));
30076        assert_true (ai_move (ai, 4, 0));
30077        assert_true (ai_move (ai, 3, 0));
30078        assert_true (ai_move (ai, 4, 1));
30079        assert_true (ai_move (ai, 6, 0));
30080        assert_true (ai_move (ai, 6, 7));
30081        assert_true (ai_move (ai, 7, 7));
30082        assert_true (ai_move (ai, 1, 1));
30083        assert_true (ai_move (ai, 7, 6));
30084        assert_true (ai_move (ai, 6, 1));
30085        assert_true (ai_move (ai, 7, 0));
30086        assert_true (ai_move (ai, 1, 6));
30087        assert_true (ai_move (ai, 1, 7));
30088        assert_true (game.pass ());
30089        assert_true (ai_move (ai, 0, 0));
30090        assert_true (ai_move (ai, 1, 0));
30091        assert_true (ai_move (ai, 0, 1));
30092        assert_true (game.pass ());
30093        assert_true (ai_move (ai, 0, 7));
30094    }
30095
30096    private static inline void test_complete_reversi_game_387 ()
30097    {
30098                                  /* 0 1 2 3 4 5 6 7 */
30099        string [] board = {/* 0 */ " . . . . . . . .",
30100                           /* 1 */ " . . . . . . . .",
30101                           /* 2 */ " . . . . L . . .",
30102                           /* 3 */ " . . L L L . . .",
30103                           /* 4 */ " . . . D D D . .",
30104                           /* 5 */ " . . . D . . . .",
30105                           /* 6 */ " . . . . . . . .",
30106                           /* 7 */ " . . . . . . . ."};
30107
30108        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30109        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30110
30111        assert_true (ai_move (ai, 1, 2));
30112        assert_true (ai_move (ai, 1, 3));
30113        assert_true (ai_move (ai, 1, 4));
30114        assert_true (ai_move (ai, 6, 5));
30115        assert_true (ai_move (ai, 6, 4));
30116        assert_true (ai_move (ai, 0, 3));
30117        assert_true (ai_move (ai, 5, 2));
30118        assert_true (ai_move (ai, 6, 2));
30119        assert_true (ai_move (ai, 4, 1));
30120        assert_true (ai_move (ai, 5, 1));
30121        assert_true (ai_move (ai, 6, 3));
30122        assert_true (ai_move (ai, 2, 1));
30123        assert_true (ai_move (ai, 5, 0));
30124        assert_true (ai_move (ai, 0, 5));
30125        assert_true (ai_move (ai, 7, 2));
30126        assert_true (ai_move (ai, 4, 0));
30127        assert_true (ai_move (ai, 3, 0));
30128        assert_true (ai_move (ai, 5, 5));
30129        assert_true (ai_move (ai, 4, 6));
30130        assert_true (ai_move (ai, 2, 6));
30131        assert_true (ai_move (ai, 3, 6));
30132        assert_true (ai_move (ai, 3, 2));
30133        assert_true (ai_move (ai, 7, 5));
30134        assert_true (ai_move (ai, 2, 4));
30135        assert_true (ai_move (ai, 5, 3));
30136        assert_true (ai_move (ai, 5, 7));
30137        assert_true (ai_move (ai, 2, 2));
30138        assert_true (ai_move (ai, 3, 7));
30139        assert_true (ai_move (ai, 2, 0));
30140        assert_true (ai_move (ai, 4, 5));
30141        assert_true (ai_move (ai, 0, 2));
30142        assert_true (ai_move (ai, 7, 3));
30143        assert_true (ai_move (ai, 7, 4));
30144        assert_true (ai_move (ai, 3, 1));
30145        assert_true (ai_move (ai, 5, 6));
30146        assert_true (ai_move (ai, 2, 5));
30147        assert_true (ai_move (ai, 1, 1));
30148        assert_true (ai_move (ai, 6, 1));
30149        assert_true (ai_move (ai, 4, 7));
30150        assert_true (ai_move (ai, 6, 7));
30151        assert_true (ai_move (ai, 6, 6));
30152        assert_true (ai_move (ai, 7, 1));
30153        assert_true (ai_move (ai, 7, 0));
30154        assert_true (ai_move (ai, 7, 6));
30155        assert_true (ai_move (ai, 7, 7));
30156        assert_true (ai_move (ai, 0, 1));
30157        assert_true (ai_move (ai, 2, 7));
30158        assert_true (ai_move (ai, 1, 5));
30159        assert_true (ai_move (ai, 1, 0));
30160        assert_true (ai_move (ai, 1, 6));
30161        assert_true (ai_move (ai, 6, 0));
30162        assert_true (game.pass ());
30163        assert_true (ai_move (ai, 0, 7));
30164        assert_true (ai_move (ai, 0, 6));
30165        assert_true (ai_move (ai, 0, 4));
30166        assert_true (ai_move (ai, 1, 7));
30167        assert_true (ai_move (ai, 0, 0));
30168    }
30169
30170    private static inline void test_complete_reversi_game_388 ()
30171    {
30172                                  /* 0 1 2 3 4 5 6 7 */
30173        string [] board = {/* 0 */ " . . . . . . . .",
30174                           /* 1 */ " . . . . . . . .",
30175                           /* 2 */ " . . . . L . . .",
30176                           /* 3 */ " . . . D D L . .",
30177                           /* 4 */ " . . . D D . L .",
30178                           /* 5 */ " . . . D . . . .",
30179                           /* 6 */ " . . . . . . . .",
30180                           /* 7 */ " . . . . . . . ."};
30181
30182        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30183        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30184
30185        assert_true (ai_move (ai, 6, 2));
30186        assert_true (ai_move (ai, 2, 4));
30187        assert_true (ai_move (ai, 1, 3));
30188        assert_true (ai_move (ai, 1, 5));
30189        assert_true (ai_move (ai, 1, 4));
30190        assert_true (ai_move (ai, 5, 5));
30191        assert_true (ai_move (ai, 3, 1));
30192        assert_true (ai_move (ai, 2, 6));
30193        assert_true (ai_move (ai, 4, 6));
30194        assert_true (ai_move (ai, 5, 1));
30195        assert_true (ai_move (ai, 4, 1));
30196        assert_true (ai_move (ai, 7, 3));
30197        assert_true (ai_move (ai, 7, 5));
30198        assert_true (ai_move (ai, 3, 7));
30199        assert_true (ai_move (ai, 5, 7));
30200        assert_true (ai_move (ai, 6, 3));
30201        assert_true (ai_move (ai, 3, 2));
30202        assert_true (ai_move (ai, 6, 5));
30203        assert_true (ai_move (ai, 5, 2));
30204        assert_true (ai_move (ai, 2, 0));
30205        assert_true (ai_move (ai, 5, 0));
30206        assert_true (ai_move (ai, 4, 0));
30207        assert_true (ai_move (ai, 7, 2));
30208        assert_true (ai_move (ai, 7, 1));
30209        assert_true (ai_move (ai, 5, 4));
30210        assert_true (ai_move (ai, 2, 1));
30211        assert_true (ai_move (ai, 2, 2));
30212        assert_true (ai_move (ai, 6, 1));
30213        assert_true (ai_move (ai, 5, 6));
30214        assert_true (ai_move (ai, 2, 5));
30215        assert_true (ai_move (ai, 2, 7));
30216        assert_true (ai_move (ai, 4, 7));
30217        assert_true (ai_move (ai, 0, 4));
30218        assert_true (ai_move (ai, 1, 2));
30219        assert_true (ai_move (ai, 2, 3));
30220        assert_true (ai_move (ai, 3, 0));
30221        assert_true (ai_move (ai, 1, 0));
30222        assert_true (ai_move (ai, 0, 5));
30223        assert_true (ai_move (ai, 6, 0));
30224        assert_true (ai_move (ai, 3, 6));
30225        assert_true (ai_move (ai, 4, 5));
30226        assert_true (ai_move (ai, 0, 2));
30227        assert_true (ai_move (ai, 7, 4));
30228        assert_true (ai_move (ai, 7, 6));
30229        assert_true (ai_move (ai, 0, 3));
30230        assert_true (ai_move (ai, 6, 6));
30231        assert_true (ai_move (ai, 7, 0));
30232        assert_true (ai_move (ai, 1, 1));
30233        assert_true (ai_move (ai, 7, 7));
30234        assert_true (ai_move (ai, 6, 7));
30235        assert_true (ai_move (ai, 0, 0));
30236        assert_true (ai_move (ai, 0, 1));
30237        assert_true (ai_move (ai, 0, 6));
30238        assert_true (ai_move (ai, 0, 7));
30239        assert_true (game.pass ());
30240        assert_true (ai_move (ai, 1, 7));
30241        assert_true (ai_move (ai, 1, 6));
30242    }
30243
30244    private static inline void test_complete_reversi_game_389 ()
30245    {
30246                                  /* 0 1 2 3 4 5 6 7 */
30247        string [] board = {/* 0 */ " . . . . . . . .",
30248                           /* 1 */ " . . . . . . . .",
30249                           /* 2 */ " . . . . L . . .",
30250                           /* 3 */ " . . . D L D . .",
30251                           /* 4 */ " . . . D L . . .",
30252                           /* 5 */ " . . . D L . . .",
30253                           /* 6 */ " . . . . . . . .",
30254                           /* 7 */ " . . . . . . . ."};
30255
30256        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30257        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30258
30259        assert_true (ai_move (ai, 5, 6));
30260        assert_true (ai_move (ai, 6, 2));
30261        assert_true (ai_move (ai, 5, 1));
30262        assert_true (ai_move (ai, 3, 1));
30263        assert_true (ai_move (ai, 7, 3));
30264        assert_true (ai_move (ai, 4, 6));
30265        assert_true (ai_move (ai, 5, 7));
30266        assert_true (ai_move (ai, 2, 6));
30267        assert_true (ai_move (ai, 2, 4));
30268        assert_true (ai_move (ai, 2, 5));
30269        assert_true (ai_move (ai, 2, 7));
30270        assert_true (ai_move (ai, 1, 3));
30271        assert_true (ai_move (ai, 1, 5));
30272        assert_true (ai_move (ai, 1, 4));
30273        assert_true (ai_move (ai, 0, 3));
30274        assert_true (ai_move (ai, 0, 5));
30275        assert_true (ai_move (ai, 3, 6));
30276        assert_true (ai_move (ai, 0, 4));
30277        assert_true (ai_move (ai, 0, 6));
30278        assert_true (ai_move (ai, 2, 2));
30279        assert_true (ai_move (ai, 0, 2));
30280        assert_true (ai_move (ai, 2, 3));
30281        assert_true (ai_move (ai, 5, 5));
30282        assert_true (ai_move (ai, 1, 2));
30283        assert_true (ai_move (ai, 5, 4));
30284        assert_true (ai_move (ai, 6, 5));
30285        assert_true (ai_move (ai, 6, 4));
30286        assert_true (ai_move (ai, 7, 5));
30287        assert_true (ai_move (ai, 3, 2));
30288        assert_true (ai_move (ai, 2, 1));
30289        assert_true (ai_move (ai, 2, 0));
30290        assert_true (ai_move (ai, 7, 1));
30291        assert_true (ai_move (ai, 4, 0));
30292        assert_true (ai_move (ai, 3, 0));
30293        assert_true (ai_move (ai, 5, 2));
30294        assert_true (ai_move (ai, 5, 0));
30295        assert_true (ai_move (ai, 6, 0));
30296        assert_true (ai_move (ai, 6, 3));
30297        assert_true (ai_move (ai, 4, 1));
30298        assert_true (ai_move (ai, 3, 7));
30299        assert_true (ai_move (ai, 4, 7));
30300        assert_true (ai_move (ai, 6, 1));
30301        assert_true (ai_move (ai, 7, 0));
30302        assert_true (ai_move (ai, 1, 0));
30303        assert_true (ai_move (ai, 7, 2));
30304        assert_true (ai_move (ai, 1, 1));
30305        assert_true (ai_move (ai, 7, 4));
30306        assert_true (ai_move (ai, 1, 6));
30307        assert_true (ai_move (ai, 7, 6));
30308        assert_true (ai_move (ai, 1, 7));
30309        assert_true (ai_move (ai, 0, 7));
30310        assert_true (ai_move (ai, 6, 6));
30311        assert_true (ai_move (ai, 7, 7));
30312        assert_true (game.pass ());
30313        assert_true (ai_move (ai, 6, 7));
30314        assert_true (game.pass ());
30315        assert_true (ai_move (ai, 0, 0));
30316        assert_true (ai_move (ai, 0, 1));
30317    }
30318
30319    private static inline void test_complete_reversi_game_390 ()
30320    {
30321                                  /* 0 1 2 3 4 5 6 7 */
30322        string [] board = {/* 0 */ " . . . . . . . .",
30323                           /* 1 */ " . . . . . . . .",
30324                           /* 2 */ " . . . . L . . .",
30325                           /* 3 */ " . . . L D D . .",
30326                           /* 4 */ " . . L D D . . .",
30327                           /* 5 */ " . . . D . . . .",
30328                           /* 6 */ " . . . . . . . .",
30329                           /* 7 */ " . . . . . . . ."};
30330
30331        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30332        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30333
30334        assert_true (ai_move (ai, 3, 1));
30335        assert_true (ai_move (ai, 5, 1));
30336        assert_true (ai_move (ai, 4, 1));
30337        assert_true (ai_move (ai, 4, 6));
30338        assert_true (ai_move (ai, 3, 2));
30339        assert_true (ai_move (ai, 6, 2));
30340        assert_true (ai_move (ai, 6, 4));
30341        assert_true (ai_move (ai, 2, 2));
30342        assert_true (ai_move (ai, 1, 2));
30343        assert_true (ai_move (ai, 3, 0));
30344        assert_true (ai_move (ai, 2, 1));
30345        assert_true (ai_move (ai, 5, 2));
30346        assert_true (ai_move (ai, 7, 2));
30347        assert_true (ai_move (ai, 2, 3));
30348        assert_true (ai_move (ai, 2, 5));
30349        assert_true (ai_move (ai, 1, 5));
30350        assert_true (ai_move (ai, 1, 4));
30351        assert_true (ai_move (ai, 2, 0));
30352        assert_true (ai_move (ai, 1, 3));
30353        assert_true (ai_move (ai, 6, 3));
30354        assert_true (ai_move (ai, 5, 0));
30355        assert_true (ai_move (ai, 5, 4));
30356        assert_true (ai_move (ai, 3, 6));
30357        assert_true (ai_move (ai, 4, 5));
30358        assert_true (ai_move (ai, 2, 6));
30359        assert_true (ai_move (ai, 2, 7));
30360        assert_true (ai_move (ai, 5, 5));
30361        assert_true (ai_move (ai, 5, 6));
30362        assert_true (ai_move (ai, 0, 5));
30363        assert_true (ai_move (ai, 6, 5));
30364        assert_true (ai_move (ai, 7, 5));
30365        assert_true (ai_move (ai, 7, 3));
30366        assert_true (ai_move (ai, 5, 7));
30367        assert_true (ai_move (ai, 3, 7));
30368        assert_true (ai_move (ai, 7, 4));
30369        assert_true (ai_move (ai, 4, 0));
30370        assert_true (ai_move (ai, 1, 0));
30371        assert_true (ai_move (ai, 0, 2));
30372        assert_true (ai_move (ai, 0, 4));
30373        assert_true (ai_move (ai, 0, 3));
30374        assert_true (ai_move (ai, 0, 1));
30375        assert_true (ai_move (ai, 1, 1));
30376        assert_true (ai_move (ai, 4, 7));
30377        assert_true (ai_move (ai, 6, 7));
30378        assert_true (ai_move (ai, 6, 6));
30379        assert_true (ai_move (ai, 7, 7));
30380        assert_true (ai_move (ai, 7, 6));
30381        assert_true (ai_move (ai, 7, 1));
30382        assert_true (ai_move (ai, 0, 0));
30383        assert_true (ai_move (ai, 6, 1));
30384        assert_true (ai_move (ai, 7, 0));
30385        assert_true (ai_move (ai, 6, 0));
30386        assert_true (ai_move (ai, 1, 6));
30387        assert_true (ai_move (ai, 0, 7));
30388        assert_true (ai_move (ai, 0, 6));
30389        assert_true (ai_move (ai, 1, 7));
30390    }
30391
30392    private static inline void test_complete_reversi_game_391 ()
30393    {
30394                                  /* 0 1 2 3 4 5 6 7 */
30395        string [] board = {/* 0 */ " . . . . . . . .",
30396                           /* 1 */ " . . . . . . . .",
30397                           /* 2 */ " . . . . L L L .",
30398                           /* 3 */ " . . . D D . . .",
30399                           /* 4 */ " . . . D L . . .",
30400                           /* 5 */ " . . . D . . . .",
30401                           /* 6 */ " . . . . . . . .",
30402                           /* 7 */ " . . . . . . . ."};
30403
30404        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30405        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30406
30407        assert_true (ai_move (ai, 5, 5));
30408        assert_true (ai_move (ai, 2, 4));
30409        assert_true (ai_move (ai, 1, 3));
30410        assert_true (ai_move (ai, 1, 5));
30411        assert_true (ai_move (ai, 1, 4));
30412        assert_true (ai_move (ai, 5, 3));
30413        assert_true (ai_move (ai, 2, 2));
30414        assert_true (ai_move (ai, 4, 5));
30415        assert_true (ai_move (ai, 5, 6));
30416        assert_true (ai_move (ai, 4, 6));
30417        assert_true (ai_move (ai, 5, 1));
30418        assert_true (ai_move (ai, 6, 5));
30419        assert_true (ai_move (ai, 7, 2));
30420        assert_true (ai_move (ai, 2, 6));
30421        assert_true (ai_move (ai, 6, 4));
30422        assert_true (ai_move (ai, 5, 7));
30423        assert_true (ai_move (ai, 3, 6));
30424        assert_true (ai_move (ai, 4, 1));
30425        assert_true (ai_move (ai, 3, 2));
30426        assert_true (ai_move (ai, 2, 1));
30427        assert_true (ai_move (ai, 2, 0));
30428        assert_true (ai_move (ai, 6, 3));
30429        assert_true (ai_move (ai, 3, 1));
30430        assert_true (ai_move (ai, 4, 0));
30431        assert_true (ai_move (ai, 5, 0));
30432        assert_true (ai_move (ai, 3, 0));
30433        assert_true (ai_move (ai, 1, 7));
30434        assert_true (ai_move (ai, 2, 7));
30435        assert_true (ai_move (ai, 3, 7));
30436        assert_true (ai_move (ai, 2, 5));
30437        assert_true (ai_move (ai, 0, 4));
30438        assert_true (ai_move (ai, 0, 5));
30439        assert_true (ai_move (ai, 0, 6));
30440        assert_true (ai_move (ai, 2, 3));
30441        assert_true (ai_move (ai, 5, 4));
30442        assert_true (ai_move (ai, 1, 2));
30443        assert_true (ai_move (ai, 1, 6));
30444        assert_true (ai_move (ai, 7, 3));
30445        assert_true (ai_move (ai, 0, 2));
30446        assert_true (ai_move (ai, 7, 1));
30447        assert_true (ai_move (ai, 4, 7));
30448        assert_true (ai_move (ai, 0, 7));
30449        assert_true (ai_move (ai, 7, 5));
30450        assert_true (ai_move (ai, 6, 1));
30451        assert_true (ai_move (ai, 1, 1));
30452        assert_true (ai_move (ai, 0, 0));
30453        assert_true (ai_move (ai, 1, 0));
30454        assert_true (ai_move (ai, 0, 1));
30455        assert_true (ai_move (ai, 6, 6));
30456        assert_true (ai_move (ai, 0, 3));
30457        assert_true (ai_move (ai, 6, 0));
30458        assert_true (ai_move (ai, 7, 0));
30459        assert_true (game.pass ());
30460        assert_true (ai_move (ai, 7, 7));
30461        assert_true (ai_move (ai, 6, 7));
30462        assert_true (ai_move (ai, 7, 4));
30463        assert_true (ai_move (ai, 7, 6));
30464    }
30465
30466    private static inline void test_complete_reversi_game_392 ()
30467    {
30468                                  /* 0 1 2 3 4 5 6 7 */
30469        string [] board = {/* 0 */ " . . . . . . . .",
30470                           /* 1 */ " . . . . . . . .",
30471                           /* 2 */ " . . . . L D . .",
30472                           /* 3 */ " . . . D D . . .",
30473                           /* 4 */ " . . . D L . . .",
30474                           /* 5 */ " . . . L . . . .",
30475                           /* 6 */ " . . L . . . . .",
30476                           /* 7 */ " . . . . . . . ."};
30477
30478        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30479        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30480
30481        assert_true (ai_move (ai, 5, 1));
30482        assert_true (ai_move (ai, 2, 2));
30483        assert_true (ai_move (ai, 3, 6));
30484        assert_true (ai_move (ai, 5, 3));
30485        assert_true (ai_move (ai, 6, 4));
30486        assert_true (ai_move (ai, 4, 1));
30487        assert_true (ai_move (ai, 3, 0));
30488        assert_true (ai_move (ai, 6, 3));
30489        assert_true (ai_move (ai, 3, 1));
30490        assert_true (ai_move (ai, 6, 2));
30491        assert_true (ai_move (ai, 7, 3));
30492        assert_true (ai_move (ai, 7, 5));
30493        assert_true (ai_move (ai, 1, 3));
30494        assert_true (ai_move (ai, 5, 0));
30495        assert_true (ai_move (ai, 4, 0));
30496        assert_true (ai_move (ai, 3, 2));
30497        assert_true (ai_move (ai, 6, 0));
30498        assert_true (ai_move (ai, 1, 2));
30499        assert_true (ai_move (ai, 0, 2));
30500        assert_true (ai_move (ai, 2, 3));
30501        assert_true (ai_move (ai, 1, 4));
30502        assert_true (ai_move (ai, 2, 4));
30503        assert_true (ai_move (ai, 1, 5));
30504        assert_true (ai_move (ai, 3, 7));
30505        assert_true (ai_move (ai, 4, 6));
30506        assert_true (ai_move (ai, 5, 5));
30507        assert_true (ai_move (ai, 5, 7));
30508        assert_true (ai_move (ai, 5, 6));
30509        assert_true (ai_move (ai, 7, 4));
30510        assert_true (ai_move (ai, 7, 2));
30511        assert_true (ai_move (ai, 6, 5));
30512        assert_true (ai_move (ai, 5, 4));
30513        assert_true (ai_move (ai, 4, 7));
30514        assert_true (ai_move (ai, 6, 7));
30515        assert_true (ai_move (ai, 2, 5));
30516        assert_true (ai_move (ai, 2, 1));
30517        assert_true (ai_move (ai, 4, 5));
30518        assert_true (ai_move (ai, 7, 6));
30519        assert_true (ai_move (ai, 2, 7));
30520        assert_true (ai_move (ai, 1, 7));
30521        assert_true (ai_move (ai, 1, 6));
30522        assert_true (ai_move (ai, 2, 0));
30523        assert_true (ai_move (ai, 1, 0));
30524        assert_true (ai_move (ai, 0, 3));
30525        assert_true (ai_move (ai, 1, 1));
30526        assert_true (ai_move (ai, 7, 1));
30527        assert_true (ai_move (ai, 0, 4));
30528        assert_true (ai_move (ai, 0, 7));
30529        assert_true (ai_move (ai, 0, 6));
30530        assert_true (ai_move (ai, 0, 5));
30531        assert_true (game.pass ());
30532        assert_true (ai_move (ai, 6, 1));
30533        assert_true (ai_move (ai, 6, 6));
30534        assert_true (ai_move (ai, 7, 0));
30535        assert_true (game.pass ());
30536        assert_true (ai_move (ai, 0, 1));
30537        assert_true (ai_move (ai, 0, 0));
30538    }
30539
30540    private static inline void test_complete_reversi_game_393 ()
30541    {
30542                                  /* 0 1 2 3 4 5 6 7 */
30543        string [] board = {/* 0 */ " . . . . . . . .",
30544                           /* 1 */ " . . . . . . . .",
30545                           /* 2 */ " . . . . L D . .",
30546                           /* 3 */ " . . . L D . . .",
30547                           /* 4 */ " . . L L L . . .",
30548                           /* 5 */ " . . . D . . . .",
30549                           /* 6 */ " . . . . . . . .",
30550                           /* 7 */ " . . . . . . . ."};
30551
30552        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30553        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30554
30555        assert_true (ai_move (ai, 4, 1));
30556        assert_true (ai_move (ai, 2, 6));
30557        assert_true (ai_move (ai, 2, 3));
30558        assert_true (ai_move (ai, 1, 2));
30559        assert_true (ai_move (ai, 1, 3));
30560        assert_true (ai_move (ai, 0, 2));
30561        assert_true (ai_move (ai, 1, 5));
30562        assert_true (ai_move (ai, 1, 4));
30563        assert_true (ai_move (ai, 3, 7));
30564        assert_true (ai_move (ai, 2, 2));
30565        assert_true (ai_move (ai, 4, 5));
30566        assert_true (ai_move (ai, 5, 6));
30567        assert_true (ai_move (ai, 4, 6));
30568        assert_true (ai_move (ai, 5, 1));
30569        assert_true (ai_move (ai, 3, 2));
30570        assert_true (ai_move (ai, 6, 2));
30571        assert_true (ai_move (ai, 6, 3));
30572        assert_true (ai_move (ai, 5, 0));
30573        assert_true (ai_move (ai, 7, 2));
30574        assert_true (ai_move (ai, 7, 4));
30575        assert_true (ai_move (ai, 2, 1));
30576        assert_true (ai_move (ai, 3, 0));
30577        assert_true (ai_move (ai, 0, 5));
30578        assert_true (ai_move (ai, 3, 1));
30579        assert_true (ai_move (ai, 2, 0));
30580        assert_true (ai_move (ai, 7, 3));
30581        assert_true (ai_move (ai, 7, 5));
30582        assert_true (ai_move (ai, 5, 7));
30583        assert_true (ai_move (ai, 2, 5));
30584        assert_true (ai_move (ai, 3, 6));
30585        assert_true (ai_move (ai, 5, 5));
30586        assert_true (ai_move (ai, 0, 3));
30587        assert_true (ai_move (ai, 5, 4));
30588        assert_true (ai_move (ai, 2, 7));
30589        assert_true (ai_move (ai, 1, 7));
30590        assert_true (ai_move (ai, 6, 5));
30591        assert_true (ai_move (ai, 6, 4));
30592        assert_true (ai_move (ai, 5, 3));
30593        assert_true (ai_move (ai, 7, 6));
30594        assert_true (ai_move (ai, 4, 7));
30595        assert_true (ai_move (ai, 6, 7));
30596        assert_true (ai_move (ai, 1, 1));
30597        assert_true (ai_move (ai, 7, 1));
30598        assert_true (ai_move (ai, 1, 0));
30599        assert_true (ai_move (ai, 4, 0));
30600        assert_true (ai_move (ai, 6, 0));
30601        assert_true (ai_move (ai, 0, 4));
30602        assert_true (ai_move (ai, 0, 6));
30603        assert_true (ai_move (ai, 7, 0));
30604        assert_true (ai_move (ai, 1, 6));
30605        assert_true (ai_move (ai, 6, 1));
30606        assert_true (ai_move (ai, 6, 6));
30607        assert_true (ai_move (ai, 0, 7));
30608        assert_true (game.pass ());
30609        assert_true (ai_move (ai, 7, 7));
30610        assert_true (game.pass ());
30611        assert_true (ai_move (ai, 0, 1));
30612        assert_true (ai_move (ai, 0, 0));
30613    }
30614
30615    private static inline void test_complete_reversi_game_394 ()
30616    {
30617                                  /* 0 1 2 3 4 5 6 7 */
30618        string [] board = {/* 0 */ " . . . . . . . .",
30619                           /* 1 */ " . . . . . . . .",
30620                           /* 2 */ " . . L . L D . .",
30621                           /* 3 */ " . . . L D . . .",
30622                           /* 4 */ " . . . D L . . .",
30623                           /* 5 */ " . . . D . . . .",
30624                           /* 6 */ " . . . . . . . .",
30625                           /* 7 */ " . . . . . . . ."};
30626
30627        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30628        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30629
30630        assert_true (ai_move (ai, 4, 1));
30631        assert_true (ai_move (ai, 2, 6));
30632        assert_true (ai_move (ai, 2, 3));
30633        assert_true (ai_move (ai, 2, 4));
30634        assert_true (ai_move (ai, 1, 3));
30635        assert_true (ai_move (ai, 1, 2));
30636        assert_true (ai_move (ai, 3, 1));
30637        assert_true (ai_move (ai, 2, 1));
30638        assert_true (ai_move (ai, 1, 5));
30639        assert_true (ai_move (ai, 2, 5));
30640        assert_true (ai_move (ai, 3, 7));
30641        assert_true (ai_move (ai, 2, 7));
30642        assert_true (ai_move (ai, 4, 6));
30643        assert_true (ai_move (ai, 4, 5));
30644        assert_true (ai_move (ai, 3, 6));
30645        assert_true (ai_move (ai, 4, 7));
30646        assert_true (ai_move (ai, 2, 0));
30647        assert_true (ai_move (ai, 0, 2));
30648        assert_true (ai_move (ai, 1, 4));
30649        assert_true (ai_move (ai, 0, 5));
30650        assert_true (ai_move (ai, 5, 7));
30651        assert_true (ai_move (ai, 6, 7));
30652        assert_true (ai_move (ai, 5, 6));
30653        assert_true (ai_move (ai, 5, 5));
30654        assert_true (ai_move (ai, 5, 4));
30655        assert_true (ai_move (ai, 6, 3));
30656        assert_true (ai_move (ai, 6, 5));
30657        assert_true (ai_move (ai, 7, 4));
30658        assert_true (ai_move (ai, 7, 2));
30659        assert_true (ai_move (ai, 0, 3));
30660        assert_true (ai_move (ai, 0, 4));
30661        assert_true (ai_move (ai, 5, 1));
30662        assert_true (ai_move (ai, 5, 3));
30663        assert_true (ai_move (ai, 3, 2));
30664        assert_true (ai_move (ai, 6, 4));
30665        assert_true (ai_move (ai, 5, 0));
30666        assert_true (ai_move (ai, 4, 0));
30667        assert_true (ai_move (ai, 6, 2));
30668        assert_true (ai_move (ai, 7, 5));
30669        assert_true (ai_move (ai, 7, 3));
30670        assert_true (ai_move (ai, 6, 0));
30671        assert_true (ai_move (ai, 3, 0));
30672        assert_true (ai_move (ai, 6, 1));
30673        assert_true (ai_move (ai, 7, 0));
30674        assert_true (ai_move (ai, 7, 1));
30675        assert_true (ai_move (ai, 1, 0));
30676        assert_true (ai_move (ai, 1, 6));
30677        assert_true (ai_move (ai, 0, 7));
30678        assert_true (ai_move (ai, 0, 6));
30679        assert_true (ai_move (ai, 7, 6));
30680        assert_true (ai_move (ai, 7, 7));
30681        assert_true (game.pass ());
30682        assert_true (ai_move (ai, 1, 7));
30683        assert_true (game.pass ());
30684        assert_true (ai_move (ai, 6, 6));
30685        assert_true (game.pass ());
30686        assert_true (ai_move (ai, 1, 1));
30687        assert_true (ai_move (ai, 0, 1));
30688        assert_true (ai_move (ai, 0, 0));
30689    }
30690
30691    private static inline void test_complete_reversi_game_395 ()
30692    {
30693                                  /* 0 1 2 3 4 5 6 7 */
30694        string [] board = {/* 0 */ " . . . . . . . .",
30695                           /* 1 */ " . . . . L D . .",
30696                           /* 2 */ " . . . . L . . .",
30697                           /* 3 */ " . . . D L . . .",
30698                           /* 4 */ " . . . D L . . .",
30699                           /* 5 */ " . . . D . . . .",
30700                           /* 6 */ " . . . . . . . .",
30701                           /* 7 */ " . . . . . . . ."};
30702
30703        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30704        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30705
30706        assert_true (ai_move (ai, 5, 5));
30707        assert_true (ai_move (ai, 2, 4));
30708        assert_true (ai_move (ai, 1, 3));
30709        assert_true (ai_move (ai, 1, 5));
30710        assert_true (ai_move (ai, 1, 4));
30711        assert_true (ai_move (ai, 4, 5));
30712        assert_true (ai_move (ai, 5, 6));
30713        assert_true (ai_move (ai, 4, 6));
30714        assert_true (ai_move (ai, 5, 7));
30715        assert_true (ai_move (ai, 2, 3));
30716        assert_true (ai_move (ai, 1, 2));
30717        assert_true (ai_move (ai, 4, 7));
30718        assert_true (ai_move (ai, 3, 7));
30719        assert_true (ai_move (ai, 6, 5));
30720        assert_true (ai_move (ai, 6, 4));
30721        assert_true (ai_move (ai, 0, 3));
30722        assert_true (ai_move (ai, 7, 5));
30723        assert_true (ai_move (ai, 2, 1));
30724        assert_true (ai_move (ai, 5, 4));
30725        assert_true (ai_move (ai, 6, 3));
30726        assert_true (ai_move (ai, 5, 3));
30727        assert_true (ai_move (ai, 0, 5));
30728        assert_true (ai_move (ai, 3, 6));
30729        assert_true (ai_move (ai, 2, 7));
30730        assert_true (ai_move (ai, 2, 5));
30731        assert_true (ai_move (ai, 6, 7));
30732        assert_true (ai_move (ai, 0, 4));
30733        assert_true (ai_move (ai, 2, 6));
30734        assert_true (ai_move (ai, 7, 3));
30735        assert_true (ai_move (ai, 5, 2));
30736        assert_true (ai_move (ai, 6, 2));
30737        assert_true (ai_move (ai, 5, 0));
30738        assert_true (ai_move (ai, 3, 0));
30739        assert_true (ai_move (ai, 3, 2));
30740        assert_true (ai_move (ai, 3, 1));
30741        assert_true (ai_move (ai, 7, 1));
30742        assert_true (ai_move (ai, 2, 2));
30743        assert_true (ai_move (ai, 0, 2));
30744        assert_true (ai_move (ai, 7, 2));
30745        assert_true (ai_move (ai, 4, 0));
30746        assert_true (ai_move (ai, 7, 0));
30747        assert_true (ai_move (ai, 2, 0));
30748        assert_true (ai_move (ai, 6, 0));
30749        assert_true (ai_move (ai, 6, 6));
30750        assert_true (ai_move (ai, 1, 0));
30751        assert_true (ai_move (ai, 7, 6));
30752        assert_true (ai_move (ai, 7, 7));
30753        assert_true (ai_move (ai, 7, 4));
30754        assert_true (ai_move (ai, 1, 7));
30755        assert_true (ai_move (ai, 6, 1));
30756        assert_true (ai_move (ai, 1, 1));
30757        assert_true (ai_move (ai, 1, 6));
30758        assert_true (ai_move (ai, 0, 7));
30759        assert_true (ai_move (ai, 0, 6));
30760        assert_true (ai_move (ai, 0, 1));
30761        assert_true (ai_move (ai, 0, 0));
30762    }
30763
30764    private static inline void test_complete_reversi_game_396 ()
30765    {
30766                                  /* 0 1 2 3 4 5 6 7 */
30767        string [] board = {/* 0 */ " . . . . . . . .",
30768                           /* 1 */ " . . . . . D . .",
30769                           /* 2 */ " . . . . D . . .",
30770                           /* 3 */ " . . . D L . . .",
30771                           /* 4 */ " . . . D L . . .",
30772                           /* 5 */ " . . . L . . . .",
30773                           /* 6 */ " . . L . . . . .",
30774                           /* 7 */ " . . . . . . . ."};
30775
30776        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30777        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30778
30779        assert_true (ai_move (ai, 3, 6));
30780        assert_true (ai_move (ai, 4, 1));
30781        assert_true (ai_move (ai, 5, 5));
30782        assert_true (ai_move (ai, 2, 4));
30783        assert_true (ai_move (ai, 1, 3));
30784        assert_true (ai_move (ai, 1, 5));
30785        assert_true (ai_move (ai, 1, 4));
30786        assert_true (ai_move (ai, 4, 6));
30787        assert_true (ai_move (ai, 5, 7));
30788        assert_true (ai_move (ai, 5, 6));
30789        assert_true (ai_move (ai, 2, 2));
30790        assert_true (ai_move (ai, 5, 4));
30791        assert_true (ai_move (ai, 6, 4));
30792        assert_true (ai_move (ai, 6, 5));
30793        assert_true (ai_move (ai, 5, 2));
30794        assert_true (ai_move (ai, 6, 2));
30795        assert_true (ai_move (ai, 5, 3));
30796        assert_true (ai_move (ai, 6, 3));
30797        assert_true (ai_move (ai, 7, 2));
30798        assert_true (ai_move (ai, 7, 4));
30799        assert_true (ai_move (ai, 3, 2));
30800        assert_true (ai_move (ai, 4, 7));
30801        assert_true (ai_move (ai, 7, 3));
30802        assert_true (ai_move (ai, 5, 0));
30803        assert_true (ai_move (ai, 7, 5));
30804        assert_true (ai_move (ai, 4, 5));
30805        assert_true (ai_move (ai, 3, 1));
30806        assert_true (ai_move (ai, 6, 7));
30807        assert_true (ai_move (ai, 2, 7));
30808        assert_true (ai_move (ai, 2, 1));
30809        assert_true (ai_move (ai, 2, 5));
30810        assert_true (ai_move (ai, 0, 2));
30811        assert_true (ai_move (ai, 2, 3));
30812        assert_true (ai_move (ai, 1, 2));
30813        assert_true (ai_move (ai, 0, 3));
30814        assert_true (ai_move (ai, 0, 5));
30815        assert_true (ai_move (ai, 0, 4));
30816        assert_true (ai_move (ai, 6, 1));
30817        assert_true (ai_move (ai, 3, 0));
30818        assert_true (ai_move (ai, 2, 0));
30819        assert_true (ai_move (ai, 4, 0));
30820        assert_true (ai_move (ai, 6, 0));
30821        assert_true (ai_move (ai, 7, 6));
30822        assert_true (ai_move (ai, 1, 1));
30823        assert_true (ai_move (ai, 3, 7));
30824        assert_true (ai_move (ai, 1, 7));
30825        assert_true (ai_move (ai, 0, 0));
30826        assert_true (ai_move (ai, 0, 1));
30827        assert_true (ai_move (ai, 1, 0));
30828        assert_true (ai_move (ai, 1, 6));
30829        assert_true (ai_move (ai, 6, 6));
30830        assert_true (ai_move (ai, 0, 6));
30831        assert_true (ai_move (ai, 0, 7));
30832        assert_true (ai_move (ai, 7, 7));
30833        assert_true (ai_move (ai, 7, 0));
30834        assert_true (ai_move (ai, 7, 1));
30835    }
30836
30837    private static inline void test_complete_reversi_game_397 ()
30838    {
30839                                  /* 0 1 2 3 4 5 6 7 */
30840        string [] board = {/* 0 */ " . . . . . . . .",
30841                           /* 1 */ " . . . . . D . .",
30842                           /* 2 */ " . . . . D . . .",
30843                           /* 3 */ " . . . D L . . .",
30844                           /* 4 */ " . . . L L . . .",
30845                           /* 5 */ " . . L D . . . .",
30846                           /* 6 */ " . . . . . . . .",
30847                           /* 7 */ " . . . . . . . ."};
30848
30849        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30850        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30851
30852        assert_true (ai_move (ai, 1, 5));
30853        assert_true (ai_move (ai, 4, 1));
30854        assert_true (ai_move (ai, 5, 5));
30855        assert_true (ai_move (ai, 5, 4));
30856        assert_true (ai_move (ai, 3, 1));
30857        assert_true (ai_move (ai, 5, 6));
30858        assert_true (ai_move (ai, 5, 3));
30859        assert_true (ai_move (ai, 3, 6));
30860        assert_true (ai_move (ai, 4, 5));
30861        assert_true (ai_move (ai, 1, 4));
30862        assert_true (ai_move (ai, 6, 5));
30863        assert_true (ai_move (ai, 0, 5));
30864        assert_true (ai_move (ai, 5, 7));
30865        assert_true (ai_move (ai, 6, 4));
30866        assert_true (ai_move (ai, 6, 3));
30867        assert_true (ai_move (ai, 2, 6));
30868        assert_true (ai_move (ai, 2, 7));
30869        assert_true (ai_move (ai, 4, 7));
30870        assert_true (ai_move (ai, 2, 3));
30871        assert_true (ai_move (ai, 2, 4));
30872        assert_true (ai_move (ai, 3, 7));
30873        assert_true (ai_move (ai, 7, 4));
30874        assert_true (ai_move (ai, 1, 3));
30875        assert_true (ai_move (ai, 4, 6));
30876        assert_true (ai_move (ai, 7, 3));
30877        assert_true (ai_move (ai, 7, 5));
30878        assert_true (ai_move (ai, 1, 7));
30879        assert_true (ai_move (ai, 7, 2));
30880        assert_true (ai_move (ai, 0, 3));
30881        assert_true (ai_move (ai, 0, 4));
30882        assert_true (ai_move (ai, 0, 6));
30883        assert_true (ai_move (ai, 5, 2));
30884        assert_true (ai_move (ai, 6, 2));
30885        assert_true (ai_move (ai, 5, 0));
30886        assert_true (ai_move (ai, 4, 0));
30887        assert_true (ai_move (ai, 3, 0));
30888        assert_true (ai_move (ai, 6, 6));
30889        assert_true (ai_move (ai, 7, 6));
30890        assert_true (ai_move (ai, 6, 1));
30891        assert_true (ai_move (ai, 2, 1));
30892        assert_true (ai_move (ai, 2, 0));
30893        assert_true (ai_move (ai, 1, 0));
30894        assert_true (ai_move (ai, 1, 1));
30895        assert_true (ai_move (ai, 2, 2));
30896        assert_true (game.pass ());
30897        assert_true (ai_move (ai, 3, 2));
30898        assert_true (ai_move (ai, 7, 1));
30899        assert_true (ai_move (ai, 7, 7));
30900        assert_true (ai_move (ai, 1, 2));
30901        assert_true (ai_move (ai, 6, 7));
30902        assert_true (game.pass ());
30903        assert_true (ai_move (ai, 0, 0));
30904        assert_true (ai_move (ai, 0, 1));
30905        assert_true (ai_move (ai, 0, 7));
30906        assert_true (game.pass ());
30907        assert_true (ai_move (ai, 0, 2));
30908        assert_true (game.pass ());
30909        assert_true (ai_move (ai, 1, 6));
30910        assert_true (game.pass ());
30911        assert_true (ai_move (ai, 6, 0));
30912        assert_true (ai_move (ai, 7, 0));
30913    }
30914
30915    private static inline void test_complete_reversi_game_398 ()
30916    {
30917                                  /* 0 1 2 3 4 5 6 7 */
30918        string [] board = {/* 0 */ " . . . . . . . .",
30919                           /* 1 */ " . . . . . D . .",
30920                           /* 2 */ " . . . . D . . .",
30921                           /* 3 */ " . . . D L . . .",
30922                           /* 4 */ " . . L L L . . .",
30923                           /* 5 */ " . . . D . . . .",
30924                           /* 6 */ " . . . . . . . .",
30925                           /* 7 */ " . . . . . . . ."};
30926
30927        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
30928        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
30929
30930        assert_true (ai_move (ai, 1, 5));
30931        assert_true (ai_move (ai, 1, 4));
30932        assert_true (ai_move (ai, 5, 5));
30933        assert_true (ai_move (ai, 4, 1));
30934        assert_true (ai_move (ai, 1, 3));
30935        assert_true (ai_move (ai, 5, 4));
30936        assert_true (ai_move (ai, 3, 1));
30937        assert_true (ai_move (ai, 5, 6));
30938        assert_true (ai_move (ai, 5, 3));
30939        assert_true (ai_move (ai, 3, 6));
30940        assert_true (ai_move (ai, 2, 6));
30941        assert_true (ai_move (ai, 0, 4));
30942        assert_true (ai_move (ai, 6, 4));
30943        assert_true (ai_move (ai, 4, 6));
30944        assert_true (ai_move (ai, 5, 7));
30945        assert_true (ai_move (ai, 3, 7));
30946        assert_true (ai_move (ai, 1, 7));
30947        assert_true (ai_move (ai, 2, 2));
30948        assert_true (ai_move (ai, 0, 2));
30949        assert_true (ai_move (ai, 4, 0));
30950        assert_true (ai_move (ai, 2, 0));
30951        assert_true (ai_move (ai, 6, 2));
30952        assert_true (ai_move (ai, 2, 5));
30953        assert_true (ai_move (ai, 1, 2));
30954        assert_true (ai_move (ai, 3, 2));
30955        assert_true (ai_move (ai, 7, 3));
30956        assert_true (ai_move (ai, 0, 5));
30957        assert_true (ai_move (ai, 5, 2));
30958        assert_true (ai_move (ai, 0, 3));
30959        assert_true (ai_move (ai, 2, 3));
30960        assert_true (ai_move (ai, 6, 3));
30961        assert_true (ai_move (ai, 7, 2));
30962        assert_true (ai_move (ai, 6, 5));
30963        assert_true (ai_move (ai, 7, 5));
30964        assert_true (ai_move (ai, 4, 7));
30965        assert_true (ai_move (ai, 6, 7));
30966        assert_true (ai_move (ai, 5, 0));
30967        assert_true (ai_move (ai, 6, 0));
30968        assert_true (ai_move (ai, 7, 4));
30969        assert_true (ai_move (ai, 4, 5));
30970        assert_true (ai_move (ai, 6, 6));
30971        assert_true (ai_move (ai, 2, 1));
30972        assert_true (ai_move (ai, 1, 0));
30973        assert_true (ai_move (ai, 6, 1));
30974        assert_true (ai_move (ai, 7, 0));
30975        assert_true (ai_move (ai, 7, 1));
30976        assert_true (ai_move (ai, 3, 0));
30977        assert_true (ai_move (ai, 0, 6));
30978        assert_true (ai_move (ai, 0, 7));
30979        assert_true (ai_move (ai, 1, 6));
30980        assert_true (ai_move (ai, 2, 7));
30981        assert_true (ai_move (ai, 7, 7));
30982        assert_true (ai_move (ai, 7, 6));
30983        assert_true (ai_move (ai, 0, 1));
30984        assert_true (ai_move (ai, 1, 1));
30985        assert_true (ai_move (ai, 0, 0));
30986    }
30987
30988    private static inline void test_complete_reversi_game_399 ()
30989    {
30990                                  /* 0 1 2 3 4 5 6 7 */
30991        string [] board = {/* 0 */ " . . . . . . . .",
30992                           /* 1 */ " . . . . . D . .",
30993                           /* 2 */ " . . . . D . . .",
30994                           /* 3 */ " . . L L L . . .",
30995                           /* 4 */ " . . . D L . . .",
30996                           /* 5 */ " . . . D . . . .",
30997                           /* 6 */ " . . . . . . . .",
30998                           /* 7 */ " . . . . . . . ."};
30999
31000        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31001        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31002
31003        assert_true (ai_move (ai, 1, 2));
31004        assert_true (ai_move (ai, 4, 1));
31005        assert_true (ai_move (ai, 5, 4));
31006        assert_true (ai_move (ai, 1, 3));
31007        assert_true (ai_move (ai, 3, 1));
31008        assert_true (ai_move (ai, 2, 0));
31009        assert_true (ai_move (ai, 1, 4));
31010        assert_true (ai_move (ai, 6, 5));
31011        assert_true (ai_move (ai, 6, 4));
31012        assert_true (ai_move (ai, 4, 0));
31013        assert_true (ai_move (ai, 5, 2));
31014        assert_true (ai_move (ai, 6, 2));
31015        assert_true (ai_move (ai, 2, 2));
31016        assert_true (ai_move (ai, 2, 1));
31017        assert_true (ai_move (ai, 3, 2));
31018        assert_true (ai_move (ai, 2, 4));
31019        assert_true (ai_move (ai, 7, 2));
31020        assert_true (ai_move (ai, 4, 6));
31021        assert_true (ai_move (ai, 2, 6));
31022        assert_true (ai_move (ai, 0, 5));
31023        assert_true (ai_move (ai, 5, 0));
31024        assert_true (ai_move (ai, 0, 4));
31025        assert_true (ai_move (ai, 0, 3));
31026        assert_true (ai_move (ai, 5, 3));
31027        assert_true (ai_move (ai, 6, 3));
31028        assert_true (ai_move (ai, 7, 5));
31029        assert_true (ai_move (ai, 0, 6));
31030        assert_true (ai_move (ai, 3, 6));
31031        assert_true (ai_move (ai, 7, 4));
31032        assert_true (ai_move (ai, 5, 5));
31033        assert_true (ai_move (ai, 3, 0));
31034        assert_true (ai_move (ai, 6, 0));
31035        assert_true (ai_move (ai, 1, 5));
31036        assert_true (ai_move (ai, 1, 0));
31037        assert_true (ai_move (ai, 2, 5));
31038        assert_true (ai_move (ai, 2, 7));
31039        assert_true (ai_move (ai, 4, 5));
31040        assert_true (ai_move (ai, 5, 6));
31041        assert_true (ai_move (ai, 6, 7));
31042        assert_true (ai_move (ai, 4, 7));
31043        assert_true (ai_move (ai, 6, 1));
31044        assert_true (ai_move (ai, 7, 3));
31045        assert_true (ai_move (ai, 7, 6));
31046        assert_true (ai_move (ai, 0, 1));
31047        assert_true (ai_move (ai, 7, 1));
31048        assert_true (ai_move (ai, 0, 2));
31049        assert_true (ai_move (ai, 0, 0));
31050        assert_true (ai_move (ai, 7, 0));
31051        assert_true (ai_move (ai, 1, 1));
31052        assert_true (ai_move (ai, 7, 7));
31053        assert_true (ai_move (ai, 6, 6));
31054        assert_true (ai_move (ai, 5, 7));
31055        assert_true (ai_move (ai, 3, 7));
31056        assert_true (ai_move (ai, 1, 6));
31057        assert_true (ai_move (ai, 1, 7));
31058        assert_true (ai_move (ai, 0, 7));
31059    }
31060
31061    private static inline void test_complete_reversi_game_400 ()
31062    {
31063                                  /* 0 1 2 3 4 5 6 7 */
31064        string [] board = {/* 0 */ " . . . . . . . .",
31065                           /* 1 */ " . . . . . D . .",
31066                           /* 2 */ " . . L . D . . .",
31067                           /* 3 */ " . . . L L . . .",
31068                           /* 4 */ " . . . D L . . .",
31069                           /* 5 */ " . . . D . . . .",
31070                           /* 6 */ " . . . . . . . .",
31071                           /* 7 */ " . . . . . . . ."};
31072
31073        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31074        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31075
31076        assert_true (ai_move (ai, 5, 2));
31077        assert_true (ai_move (ai, 2, 6));
31078        assert_true (ai_move (ai, 3, 6));
31079        assert_true (ai_move (ai, 5, 3));
31080        assert_true (ai_move (ai, 6, 4));
31081        assert_true (ai_move (ai, 4, 1));
31082        assert_true (ai_move (ai, 3, 0));
31083        assert_true (ai_move (ai, 6, 3));
31084        assert_true (ai_move (ai, 3, 1));
31085        assert_true (ai_move (ai, 6, 2));
31086        assert_true (ai_move (ai, 7, 3));
31087        assert_true (ai_move (ai, 7, 5));
31088        assert_true (ai_move (ai, 1, 3));
31089        assert_true (ai_move (ai, 5, 0));
31090        assert_true (ai_move (ai, 4, 0));
31091        assert_true (ai_move (ai, 3, 2));
31092        assert_true (ai_move (ai, 6, 0));
31093        assert_true (ai_move (ai, 1, 2));
31094        assert_true (ai_move (ai, 0, 2));
31095        assert_true (ai_move (ai, 2, 3));
31096        assert_true (ai_move (ai, 1, 4));
31097        assert_true (ai_move (ai, 2, 4));
31098        assert_true (ai_move (ai, 1, 5));
31099        assert_true (ai_move (ai, 3, 7));
31100        assert_true (ai_move (ai, 4, 6));
31101        assert_true (ai_move (ai, 5, 5));
31102        assert_true (ai_move (ai, 5, 7));
31103        assert_true (ai_move (ai, 5, 6));
31104        assert_true (ai_move (ai, 7, 4));
31105        assert_true (ai_move (ai, 7, 2));
31106        assert_true (ai_move (ai, 6, 5));
31107        assert_true (ai_move (ai, 5, 4));
31108        assert_true (ai_move (ai, 4, 7));
31109        assert_true (ai_move (ai, 6, 7));
31110        assert_true (ai_move (ai, 2, 5));
31111        assert_true (ai_move (ai, 2, 1));
31112        assert_true (ai_move (ai, 4, 5));
31113        assert_true (ai_move (ai, 7, 6));
31114        assert_true (ai_move (ai, 2, 7));
31115        assert_true (ai_move (ai, 1, 7));
31116        assert_true (ai_move (ai, 1, 6));
31117        assert_true (ai_move (ai, 2, 0));
31118        assert_true (ai_move (ai, 1, 0));
31119        assert_true (ai_move (ai, 0, 3));
31120        assert_true (ai_move (ai, 1, 1));
31121        assert_true (ai_move (ai, 7, 1));
31122        assert_true (ai_move (ai, 0, 4));
31123        assert_true (ai_move (ai, 0, 7));
31124        assert_true (ai_move (ai, 0, 6));
31125        assert_true (ai_move (ai, 0, 5));
31126        assert_true (game.pass ());
31127        assert_true (ai_move (ai, 6, 1));
31128        assert_true (ai_move (ai, 6, 6));
31129        assert_true (ai_move (ai, 7, 0));
31130        assert_true (game.pass ());
31131        assert_true (ai_move (ai, 0, 1));
31132        assert_true (ai_move (ai, 0, 0));
31133    }
31134
31135    private static inline void test_complete_reversi_game_401 ()
31136    {
31137                                  /* 0 1 2 3 4 5 6 7 */
31138        string [] board = {/* 0 */ " . . . . . . . .",
31139                           /* 1 */ " . . . . . . . .",
31140                           /* 2 */ " . . . . . . . .",
31141                           /* 3 */ " . . . D D L . .",
31142                           /* 4 */ " . . . D L . . .",
31143                           /* 5 */ " . . . L . D . .",
31144                           /* 6 */ " . . L . . . . .",
31145                           /* 7 */ " . . . . . . . ."};
31146
31147        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31148        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31149
31150        assert_true (ai_move (ai, 3, 6));
31151        assert_true (ai_move (ai, 4, 6));
31152        assert_true (ai_move (ai, 5, 7));
31153        assert_true (ai_move (ai, 5, 6));
31154        assert_true (ai_move (ai, 6, 3));
31155        assert_true (ai_move (ai, 6, 4));
31156        assert_true (ai_move (ai, 3, 7));
31157        assert_true (ai_move (ai, 2, 2));
31158        assert_true (ai_move (ai, 1, 5));
31159        assert_true (ai_move (ai, 6, 2));
31160        assert_true (ai_move (ai, 3, 2));
31161        assert_true (ai_move (ai, 4, 2));
31162        assert_true (ai_move (ai, 3, 1));
31163        assert_true (ai_move (ai, 2, 1));
31164        assert_true (ai_move (ai, 1, 3));
31165        assert_true (ai_move (ai, 1, 2));
31166        assert_true (ai_move (ai, 5, 1));
31167        assert_true (ai_move (ai, 5, 2));
31168        assert_true (ai_move (ai, 5, 4));
31169        assert_true (ai_move (ai, 6, 5));
31170        assert_true (ai_move (ai, 0, 2));
31171        assert_true (ai_move (ai, 5, 0));
31172        assert_true (ai_move (ai, 7, 2));
31173        assert_true (ai_move (ai, 4, 5));
31174        assert_true (ai_move (ai, 7, 5));
31175        assert_true (ai_move (ai, 2, 7));
31176        assert_true (ai_move (ai, 4, 7));
31177        assert_true (ai_move (ai, 6, 7));
31178        assert_true (ai_move (ai, 7, 4));
31179        assert_true (ai_move (ai, 2, 5));
31180        assert_true (ai_move (ai, 2, 0));
31181        assert_true (ai_move (ai, 4, 1));
31182        assert_true (ai_move (ai, 3, 0));
31183        assert_true (ai_move (ai, 7, 3));
31184        assert_true (ai_move (ai, 6, 6));
31185        assert_true (ai_move (ai, 0, 5));
31186        assert_true (ai_move (ai, 1, 6));
31187        assert_true (ai_move (ai, 1, 4));
31188        assert_true (ai_move (ai, 2, 4));
31189        assert_true (ai_move (ai, 2, 3));
31190        assert_true (ai_move (ai, 4, 0));
31191        assert_true (ai_move (ai, 1, 0));
31192        assert_true (ai_move (ai, 0, 6));
31193        assert_true (ai_move (ai, 0, 7));
31194        assert_true (ai_move (ai, 0, 4));
31195        assert_true (ai_move (ai, 6, 1));
31196        assert_true (ai_move (ai, 1, 1));
31197        assert_true (ai_move (ai, 0, 3));
31198        assert_true (ai_move (ai, 1, 7));
31199        assert_true (ai_move (ai, 7, 1));
31200        assert_true (ai_move (ai, 7, 7));
31201        assert_true (ai_move (ai, 0, 1));
31202        assert_true (ai_move (ai, 7, 0));
31203        assert_true (ai_move (ai, 7, 6));
31204        assert_true (ai_move (ai, 6, 0));
31205        assert_true (game.pass ());
31206        assert_true (ai_move (ai, 0, 0));
31207    }
31208
31209    private static inline void test_complete_reversi_game_402 ()
31210    {
31211                                  /* 0 1 2 3 4 5 6 7 */
31212        string [] board = {/* 0 */ " . . . . . . . .",
31213                           /* 1 */ " . . . . . . . .",
31214                           /* 2 */ " . . . L . . . .",
31215                           /* 3 */ " . . . L D . . .",
31216                           /* 4 */ " . . . L D . . .",
31217                           /* 5 */ " . . . L . D . .",
31218                           /* 6 */ " . . L . . . . .",
31219                           /* 7 */ " . . . . . . . ."};
31220
31221        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31222        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31223
31224        assert_true (ai_move (ai, 2, 1));
31225        assert_true (ai_move (ai, 3, 1));
31226        assert_true (ai_move (ai, 4, 1));
31227        assert_true (ai_move (ai, 3, 0));
31228        assert_true (ai_move (ai, 2, 3));
31229        assert_true (ai_move (ai, 1, 2));
31230        assert_true (ai_move (ai, 1, 4));
31231        assert_true (ai_move (ai, 5, 1));
31232        assert_true (ai_move (ai, 5, 0));
31233        assert_true (ai_move (ai, 5, 3));
31234        assert_true (ai_move (ai, 6, 3));
31235        assert_true (ai_move (ai, 6, 2));
31236        assert_true (ai_move (ai, 5, 2));
31237        assert_true (ai_move (ai, 7, 3));
31238        assert_true (ai_move (ai, 7, 2));
31239        assert_true (ai_move (ai, 4, 2));
31240        assert_true (ai_move (ai, 6, 4));
31241        assert_true (ai_move (ai, 7, 1));
31242        assert_true (ai_move (ai, 5, 4));
31243        assert_true (ai_move (ai, 4, 5));
31244        assert_true (ai_move (ai, 6, 5));
31245        assert_true (ai_move (ai, 7, 4));
31246        assert_true (ai_move (ai, 7, 5));
31247        assert_true (ai_move (ai, 7, 6));
31248        assert_true (ai_move (ai, 2, 0));
31249        assert_true (ai_move (ai, 1, 0));
31250        assert_true (ai_move (ai, 5, 6));
31251        assert_true (ai_move (ai, 4, 6));
31252        assert_true (ai_move (ai, 4, 7));
31253        assert_true (ai_move (ai, 3, 6));
31254        assert_true (ai_move (ai, 2, 4));
31255        assert_true (ai_move (ai, 2, 5));
31256        assert_true (ai_move (ai, 3, 7));
31257        assert_true (ai_move (ai, 2, 2));
31258        assert_true (ai_move (ai, 1, 5));
31259        assert_true (ai_move (ai, 0, 5));
31260        assert_true (ai_move (ai, 1, 3));
31261        assert_true (ai_move (ai, 0, 2));
31262        assert_true (ai_move (ai, 0, 3));
31263        assert_true (ai_move (ai, 0, 4));
31264        assert_true (ai_move (ai, 6, 6));
31265        assert_true (ai_move (ai, 2, 7));
31266        assert_true (ai_move (ai, 1, 7));
31267        assert_true (ai_move (ai, 6, 0));
31268        assert_true (ai_move (ai, 7, 0));
31269        assert_true (ai_move (ai, 7, 7));
31270        assert_true (ai_move (ai, 6, 1));
31271        assert_true (ai_move (ai, 1, 1));
31272        assert_true (ai_move (ai, 0, 6));
31273        assert_true (ai_move (ai, 5, 7));
31274        assert_true (ai_move (ai, 1, 6));
31275        assert_true (ai_move (ai, 0, 7));
31276        assert_true (ai_move (ai, 6, 7));
31277        assert_true (ai_move (ai, 4, 0));
31278        assert_true (ai_move (ai, 0, 0));
31279        assert_true (ai_move (ai, 0, 1));
31280    }
31281
31282    private static inline void test_complete_reversi_game_403 ()
31283    {
31284                                  /* 0 1 2 3 4 5 6 7 */
31285        string [] board = {/* 0 */ " . . . . . . . .",
31286                           /* 1 */ " . . . . . . . .",
31287                           /* 2 */ " . . . . . . . .",
31288                           /* 3 */ " . . . D D L . .",
31289                           /* 4 */ " . . . D L D . .",
31290                           /* 5 */ " . . . L . . . .",
31291                           /* 6 */ " . . L . . . . .",
31292                           /* 7 */ " . . . . . . . ."};
31293
31294        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31295        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31296
31297        assert_true (ai_move (ai, 5, 2));
31298        assert_true (ai_move (ai, 6, 2));
31299        assert_true (ai_move (ai, 6, 3));
31300        assert_true (ai_move (ai, 4, 2));
31301        assert_true (ai_move (ai, 4, 1));
31302        assert_true (ai_move (ai, 6, 5));
31303        assert_true (ai_move (ai, 5, 1));
31304        assert_true (ai_move (ai, 7, 2));
31305        assert_true (ai_move (ai, 5, 5));
31306        assert_true (ai_move (ai, 3, 0));
31307        assert_true (ai_move (ai, 7, 5));
31308        assert_true (ai_move (ai, 5, 0));
31309        assert_true (ai_move (ai, 7, 3));
31310        assert_true (ai_move (ai, 2, 5));
31311        assert_true (ai_move (ai, 3, 2));
31312        assert_true (ai_move (ai, 2, 2));
31313        assert_true (ai_move (ai, 2, 1));
31314        assert_true (ai_move (ai, 2, 3));
31315        assert_true (ai_move (ai, 1, 3));
31316        assert_true (ai_move (ai, 5, 6));
31317        assert_true (ai_move (ai, 3, 1));
31318        assert_true (ai_move (ai, 2, 0));
31319        assert_true (ai_move (ai, 6, 4));
31320        assert_true (ai_move (ai, 1, 4));
31321        assert_true (ai_move (ai, 4, 5));
31322        assert_true (ai_move (ai, 3, 6));
31323        assert_true (ai_move (ai, 4, 6));
31324        assert_true (ai_move (ai, 2, 4));
31325        assert_true (ai_move (ai, 1, 2));
31326        assert_true (ai_move (ai, 5, 7));
31327        assert_true (ai_move (ai, 1, 5));
31328        assert_true (ai_move (ai, 0, 2));
31329        assert_true (ai_move (ai, 0, 3));
31330        assert_true (ai_move (ai, 0, 4));
31331        assert_true (ai_move (ai, 1, 1));
31332        assert_true (ai_move (ai, 7, 4));
31333        assert_true (ai_move (ai, 7, 1));
31334        assert_true (ai_move (ai, 0, 1));
31335        assert_true (ai_move (ai, 7, 6));
31336        assert_true (ai_move (ai, 6, 6));
31337        assert_true (ai_move (ai, 3, 7));
31338        assert_true (ai_move (ai, 4, 7));
31339        assert_true (ai_move (ai, 2, 7));
31340        assert_true (ai_move (ai, 1, 7));
31341        assert_true (ai_move (ai, 4, 0));
31342        assert_true (ai_move (ai, 6, 0));
31343        assert_true (ai_move (ai, 7, 0));
31344        assert_true (ai_move (ai, 6, 1));
31345        assert_true (ai_move (ai, 1, 0));
31346        assert_true (game.pass ());
31347        assert_true (ai_move (ai, 0, 5));
31348        assert_true (ai_move (ai, 0, 6));
31349        assert_true (ai_move (ai, 0, 0));
31350        assert_true (ai_move (ai, 1, 6));
31351        assert_true (ai_move (ai, 0, 7));
31352        assert_true (game.pass ());
31353        assert_true (ai_move (ai, 6, 7));
31354    }
31355
31356    private static inline void test_complete_reversi_game_404 ()
31357    {
31358                                  /* 0 1 2 3 4 5 6 7 */
31359        string [] board = {/* 0 */ " . . . . . . . .",
31360                           /* 1 */ " . . . . . . . .",
31361                           /* 2 */ " . . . L . . . .",
31362                           /* 3 */ " . . . L D . . .",
31363                           /* 4 */ " . . . L D D . .",
31364                           /* 5 */ " . . . L . . . .",
31365                           /* 6 */ " . . L . . . . .",
31366                           /* 7 */ " . . . . . . . ."};
31367
31368        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31369        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31370
31371        assert_true (ai_move (ai, 2, 1));
31372        assert_true (ai_move (ai, 3, 1));
31373        assert_true (ai_move (ai, 4, 1));
31374        assert_true (ai_move (ai, 3, 0));
31375        assert_true (ai_move (ai, 2, 3));
31376        assert_true (ai_move (ai, 1, 2));
31377        assert_true (ai_move (ai, 1, 4));
31378        assert_true (ai_move (ai, 5, 1));
31379        assert_true (ai_move (ai, 5, 0));
31380        assert_true (ai_move (ai, 5, 3));
31381        assert_true (ai_move (ai, 6, 3));
31382        assert_true (ai_move (ai, 6, 2));
31383        assert_true (ai_move (ai, 5, 5));
31384        assert_true (ai_move (ai, 5, 6));
31385        assert_true (ai_move (ai, 6, 4));
31386        assert_true (ai_move (ai, 7, 5));
31387        assert_true (ai_move (ai, 6, 5));
31388        assert_true (ai_move (ai, 5, 2));
31389        assert_true (ai_move (ai, 4, 6));
31390        assert_true (ai_move (ai, 7, 3));
31391        assert_true (ai_move (ai, 7, 2));
31392        assert_true (ai_move (ai, 7, 4));
31393        assert_true (ai_move (ai, 7, 6));
31394        assert_true (ai_move (ai, 4, 5));
31395        assert_true (ai_move (ai, 4, 2));
31396        assert_true (ai_move (ai, 5, 7));
31397        assert_true (ai_move (ai, 2, 4));
31398        assert_true (ai_move (ai, 1, 5));
31399        assert_true (ai_move (ai, 2, 2));
31400        assert_true (ai_move (ai, 0, 5));
31401        assert_true (ai_move (ai, 2, 0));
31402        assert_true (ai_move (ai, 1, 0));
31403        assert_true (ai_move (ai, 1, 3));
31404        assert_true (ai_move (ai, 0, 2));
31405        assert_true (ai_move (ai, 2, 5));
31406        assert_true (ai_move (ai, 3, 6));
31407        assert_true (ai_move (ai, 2, 7));
31408        assert_true (ai_move (ai, 4, 7));
31409        assert_true (ai_move (ai, 1, 6));
31410        assert_true (ai_move (ai, 3, 7));
31411        assert_true (ai_move (ai, 6, 7));
31412        assert_true (ai_move (ai, 1, 1));
31413        assert_true (ai_move (ai, 1, 7));
31414        assert_true (ai_move (ai, 4, 0));
31415        assert_true (ai_move (ai, 0, 0));
31416        assert_true (ai_move (ai, 0, 1));
31417        assert_true (ai_move (ai, 6, 0));
31418        assert_true (ai_move (ai, 6, 1));
31419        assert_true (ai_move (ai, 7, 0));
31420        assert_true (ai_move (ai, 7, 1));
31421        assert_true (ai_move (ai, 0, 3));
31422        assert_true (ai_move (ai, 7, 7));
31423        assert_true (ai_move (ai, 0, 4));
31424        assert_true (ai_move (ai, 0, 7));
31425        assert_true (ai_move (ai, 0, 6));
31426        assert_true (ai_move (ai, 6, 6));
31427    }
31428
31429    private static inline void test_complete_reversi_game_405 ()
31430    {
31431                                  /* 0 1 2 3 4 5 6 7 */
31432        string [] board = {/* 0 */ " . . . . . . . .",
31433                           /* 1 */ " . . . . . . . .",
31434                           /* 2 */ " . . . . . . . .",
31435                           /* 3 */ " . . . D D . . .",
31436                           /* 4 */ " . . . D D . . .",
31437                           /* 5 */ " . . . L L L . .",
31438                           /* 6 */ " . . L . . . . .",
31439                           /* 7 */ " . . . . . . . ."};
31440
31441        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31442        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31443
31444        assert_true (ai_move (ai, 4, 6));
31445        assert_true (ai_move (ai, 3, 7));
31446        assert_true (ai_move (ai, 6, 5));
31447        assert_true (ai_move (ai, 6, 4));
31448        assert_true (ai_move (ai, 2, 5));
31449        assert_true (ai_move (ai, 1, 5));
31450        assert_true (ai_move (ai, 5, 6));
31451        assert_true (ai_move (ai, 5, 7));
31452        assert_true (ai_move (ai, 6, 3));
31453        assert_true (ai_move (ai, 7, 5));
31454        assert_true (ai_move (ai, 4, 7));
31455        assert_true (ai_move (ai, 3, 6));
31456        assert_true (ai_move (ai, 0, 5));
31457        assert_true (ai_move (ai, 2, 4));
31458        assert_true (ai_move (ai, 1, 4));
31459        assert_true (ai_move (ai, 0, 4));
31460        assert_true (ai_move (ai, 0, 3));
31461        assert_true (ai_move (ai, 7, 3));
31462        assert_true (ai_move (ai, 1, 7));
31463        assert_true (ai_move (ai, 1, 3));
31464        assert_true (ai_move (ai, 2, 3));
31465        assert_true (ai_move (ai, 0, 2));
31466        assert_true (ai_move (ai, 0, 1));
31467        assert_true (ai_move (ai, 2, 7));
31468        assert_true (ai_move (ai, 0, 6));
31469        assert_true (ai_move (ai, 5, 4));
31470        assert_true (ai_move (ai, 1, 6));
31471        assert_true (ai_move (ai, 2, 2));
31472        assert_true (ai_move (ai, 1, 2));
31473        assert_true (ai_move (ai, 7, 2));
31474        assert_true (ai_move (ai, 2, 1));
31475        assert_true (ai_move (ai, 2, 0));
31476        assert_true (ai_move (ai, 3, 1));
31477        assert_true (ai_move (ai, 5, 3));
31478        assert_true (ai_move (ai, 6, 2));
31479        assert_true (ai_move (ai, 5, 2));
31480        assert_true (ai_move (ai, 3, 0));
31481        assert_true (ai_move (ai, 4, 0));
31482        assert_true (ai_move (ai, 3, 2));
31483        assert_true (ai_move (ai, 4, 2));
31484        assert_true (ai_move (ai, 5, 1));
31485        assert_true (ai_move (ai, 4, 1));
31486        assert_true (ai_move (ai, 6, 6));
31487        assert_true (ai_move (ai, 5, 0));
31488        assert_true (ai_move (ai, 7, 4));
31489        assert_true (ai_move (ai, 1, 0));
31490        assert_true (ai_move (ai, 6, 1));
31491        assert_true (ai_move (ai, 7, 6));
31492        assert_true (ai_move (ai, 6, 0));
31493        assert_true (ai_move (ai, 7, 0));
31494        assert_true (ai_move (ai, 7, 1));
31495        assert_true (ai_move (ai, 6, 7));
31496        assert_true (ai_move (ai, 7, 7));
31497        assert_true (ai_move (ai, 0, 7));
31498        assert_true (ai_move (ai, 1, 1));
31499        assert_true (ai_move (ai, 0, 0));
31500    }
31501
31502    private static inline void test_complete_reversi_game_406 ()
31503    {
31504                                  /* 0 1 2 3 4 5 6 7 */
31505        string [] board = {/* 0 */ " . . . . . . . .",
31506                           /* 1 */ " . . . . . . . .",
31507                           /* 2 */ " . . . . . . . .",
31508                           /* 3 */ " . . . D D L . .",
31509                           /* 4 */ " . . . D L . . .",
31510                           /* 5 */ " . . . L D . . .",
31511                           /* 6 */ " . . L . . . . .",
31512                           /* 7 */ " . . . . . . . ."};
31513
31514        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31515        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31516
31517        assert_true (ai_move (ai, 3, 6));
31518        assert_true (ai_move (ai, 2, 2));
31519        assert_true (ai_move (ai, 6, 3));
31520        assert_true (ai_move (ai, 6, 2));
31521        assert_true (ai_move (ai, 5, 4));
31522        assert_true (ai_move (ai, 5, 5));
31523        assert_true (ai_move (ai, 6, 5));
31524        assert_true (ai_move (ai, 5, 6));
31525        assert_true (ai_move (ai, 6, 4));
31526        assert_true (ai_move (ai, 2, 5));
31527        assert_true (ai_move (ai, 4, 6));
31528        assert_true (ai_move (ai, 7, 5));
31529        assert_true (ai_move (ai, 2, 4));
31530        assert_true (ai_move (ai, 7, 2));
31531        assert_true (ai_move (ai, 1, 5));
31532        assert_true (ai_move (ai, 0, 5));
31533        assert_true (ai_move (ai, 1, 4));
31534        assert_true (ai_move (ai, 4, 7));
31535        assert_true (ai_move (ai, 5, 7));
31536        assert_true (ai_move (ai, 6, 7));
31537        assert_true (ai_move (ai, 2, 7));
31538        assert_true (ai_move (ai, 3, 2));
31539        assert_true (ai_move (ai, 0, 4));
31540        assert_true (ai_move (ai, 1, 3));
31541        assert_true (ai_move (ai, 2, 3));
31542        assert_true (ai_move (ai, 1, 2));
31543        assert_true (ai_move (ai, 2, 1));
31544        assert_true (ai_move (ai, 3, 1));
31545        assert_true (ai_move (ai, 7, 4));
31546        assert_true (ai_move (ai, 7, 3));
31547        assert_true (ai_move (ai, 0, 2));
31548        assert_true (ai_move (ai, 2, 0));
31549        assert_true (ai_move (ai, 4, 1));
31550        assert_true (ai_move (ai, 4, 2));
31551        assert_true (ai_move (ai, 3, 0));
31552        assert_true (ai_move (ai, 4, 0));
31553        assert_true (ai_move (ai, 5, 0));
31554        assert_true (ai_move (ai, 6, 0));
31555        assert_true (ai_move (ai, 5, 2));
31556        assert_true (ai_move (ai, 5, 1));
31557        assert_true (ai_move (ai, 0, 6));
31558        assert_true (ai_move (ai, 0, 3));
31559        assert_true (ai_move (ai, 1, 6));
31560        assert_true (ai_move (ai, 0, 7));
31561        assert_true (ai_move (ai, 1, 1));
31562        assert_true (ai_move (ai, 1, 7));
31563        assert_true (ai_move (ai, 3, 7));
31564        assert_true (ai_move (ai, 0, 0));
31565        assert_true (ai_move (ai, 7, 7));
31566        assert_true (ai_move (ai, 0, 1));
31567        assert_true (ai_move (ai, 7, 6));
31568        assert_true (ai_move (ai, 6, 6));
31569        assert_true (ai_move (ai, 7, 1));
31570        assert_true (ai_move (ai, 6, 1));
31571        assert_true (ai_move (ai, 7, 0));
31572        assert_true (game.pass ());
31573        assert_true (ai_move (ai, 1, 0));
31574    }
31575
31576    private static inline void test_complete_reversi_game_407 ()
31577    {
31578                                  /* 0 1 2 3 4 5 6 7 */
31579        string [] board = {/* 0 */ " . . . . . . . .",
31580                           /* 1 */ " . . . . . . . .",
31581                           /* 2 */ " . . . L . . . .",
31582                           /* 3 */ " . . . L D . . .",
31583                           /* 4 */ " . . . L D . . .",
31584                           /* 5 */ " . . . L D . . .",
31585                           /* 6 */ " . . L . . . . .",
31586                           /* 7 */ " . . . . . . . ."};
31587
31588        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31589        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31590
31591        assert_true (ai_move (ai, 2, 1));
31592        assert_true (ai_move (ai, 5, 6));
31593        assert_true (ai_move (ai, 4, 6));
31594        assert_true (ai_move (ai, 3, 1));
31595        assert_true (ai_move (ai, 4, 1));
31596        assert_true (ai_move (ai, 3, 0));
31597        assert_true (ai_move (ai, 2, 4));
31598        assert_true (ai_move (ai, 1, 5));
31599        assert_true (ai_move (ai, 1, 3));
31600        assert_true (ai_move (ai, 1, 2));
31601        assert_true (ai_move (ai, 4, 2));
31602        assert_true (ai_move (ai, 5, 2));
31603        assert_true (ai_move (ai, 5, 1));
31604        assert_true (ai_move (ai, 5, 0));
31605        assert_true (ai_move (ai, 4, 0));
31606        assert_true (ai_move (ai, 1, 4));
31607        assert_true (ai_move (ai, 6, 3));
31608        assert_true (ai_move (ai, 6, 2));
31609        assert_true (ai_move (ai, 0, 2));
31610        assert_true (ai_move (ai, 5, 3));
31611        assert_true (ai_move (ai, 3, 6));
31612        assert_true (ai_move (ai, 2, 2));
31613        assert_true (ai_move (ai, 7, 2));
31614        assert_true (ai_move (ai, 0, 4));
31615        assert_true (ai_move (ai, 6, 4));
31616        assert_true (ai_move (ai, 5, 4));
31617        assert_true (ai_move (ai, 2, 3));
31618        assert_true (ai_move (ai, 7, 5));
31619        assert_true (ai_move (ai, 0, 3));
31620        assert_true (ai_move (ai, 2, 5));
31621        assert_true (ai_move (ai, 0, 5));
31622        assert_true (ai_move (ai, 1, 6));
31623        assert_true (ai_move (ai, 6, 5));
31624        assert_true (ai_move (ai, 5, 5));
31625        assert_true (ai_move (ai, 3, 7));
31626        assert_true (ai_move (ai, 5, 7));
31627        assert_true (ai_move (ai, 4, 7));
31628        assert_true (ai_move (ai, 2, 7));
31629        assert_true (ai_move (ai, 0, 7));
31630        assert_true (ai_move (ai, 7, 4));
31631        assert_true (ai_move (ai, 7, 3));
31632        assert_true (ai_move (ai, 7, 1));
31633        assert_true (ai_move (ai, 2, 0));
31634        assert_true (ai_move (ai, 1, 0));
31635        assert_true (ai_move (ai, 1, 7));
31636        assert_true (ai_move (ai, 0, 6));
31637        assert_true (ai_move (ai, 6, 7));
31638        assert_true (ai_move (ai, 1, 1));
31639        assert_true (ai_move (ai, 0, 0));
31640        assert_true (ai_move (ai, 0, 1));
31641        assert_true (ai_move (ai, 6, 0));
31642        assert_true (ai_move (ai, 6, 6));
31643        assert_true (ai_move (ai, 7, 7));
31644        assert_true (ai_move (ai, 6, 1));
31645        assert_true (ai_move (ai, 7, 0));
31646        assert_true (ai_move (ai, 7, 6));
31647    }
31648
31649    private static inline void test_complete_reversi_game_408 ()
31650    {
31651                                  /* 0 1 2 3 4 5 6 7 */
31652        string [] board = {/* 0 */ " . . . . . . . .",
31653                           /* 1 */ " . . . . . . . .",
31654                           /* 2 */ " . . . . . . . .",
31655                           /* 3 */ " . . . D D . . .",
31656                           /* 4 */ " . . . D L . . .",
31657                           /* 5 */ " . . . D . . . .",
31658                           /* 6 */ " . . L L L . . .",
31659                           /* 7 */ " . . . . . . . ."};
31660
31661        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31662        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31663
31664        assert_true (ai_move (ai, 5, 7));
31665        assert_true (ai_move (ai, 5, 6));
31666        assert_true (ai_move (ai, 3, 7));
31667        assert_true (ai_move (ai, 2, 2));
31668        assert_true (ai_move (ai, 1, 5));
31669        assert_true (ai_move (ai, 5, 3));
31670        assert_true (ai_move (ai, 5, 5));
31671        assert_true (ai_move (ai, 2, 4));
31672        assert_true (ai_move (ai, 1, 3));
31673        assert_true (ai_move (ai, 1, 4));
31674        assert_true (ai_move (ai, 3, 1));
31675        assert_true (ai_move (ai, 0, 2));
31676        assert_true (ai_move (ai, 0, 4));
31677        assert_true (ai_move (ai, 1, 2));
31678        assert_true (ai_move (ai, 4, 2));
31679        assert_true (ai_move (ai, 4, 1));
31680        assert_true (ai_move (ai, 6, 4));
31681        assert_true (ai_move (ai, 6, 2));
31682        assert_true (ai_move (ai, 4, 0));
31683        assert_true (ai_move (ai, 2, 3));
31684        assert_true (ai_move (ai, 3, 2));
31685        assert_true (ai_move (ai, 2, 1));
31686        assert_true (ai_move (ai, 2, 0));
31687        assert_true (ai_move (ai, 5, 2));
31688        assert_true (ai_move (ai, 5, 1));
31689        assert_true (ai_move (ai, 7, 5));
31690        assert_true (ai_move (ai, 7, 2));
31691        assert_true (ai_move (ai, 5, 0));
31692        assert_true (ai_move (ai, 0, 5));
31693        assert_true (ai_move (ai, 7, 3));
31694        assert_true (ai_move (ai, 7, 4));
31695        assert_true (ai_move (ai, 7, 1));
31696        assert_true (ai_move (ai, 0, 3));
31697        assert_true (ai_move (ai, 0, 6));
31698        assert_true (ai_move (ai, 2, 5));
31699        assert_true (ai_move (ai, 4, 5));
31700        assert_true (ai_move (ai, 5, 4));
31701        assert_true (ai_move (ai, 6, 5));
31702        assert_true (ai_move (ai, 6, 3));
31703        assert_true (ai_move (ai, 3, 0));
31704        assert_true (ai_move (ai, 6, 0));
31705        assert_true (ai_move (ai, 1, 1));
31706        assert_true (ai_move (ai, 1, 6));
31707        assert_true (ai_move (ai, 0, 7));
31708        assert_true (ai_move (ai, 1, 7));
31709        assert_true (ai_move (ai, 2, 7));
31710        assert_true (ai_move (ai, 4, 7));
31711        assert_true (ai_move (ai, 6, 7));
31712        assert_true (ai_move (ai, 1, 0));
31713        assert_true (ai_move (ai, 0, 1));
31714        assert_true (ai_move (ai, 6, 1));
31715        assert_true (ai_move (ai, 7, 0));
31716        assert_true (ai_move (ai, 7, 6));
31717        assert_true (ai_move (ai, 0, 0));
31718        assert_true (ai_move (ai, 6, 6));
31719        assert_true (ai_move (ai, 7, 7));
31720    }
31721
31722    private static inline void test_complete_reversi_game_409 ()
31723    {
31724                                  /* 0 1 2 3 4 5 6 7 */
31725        string [] board = {/* 0 */ " . . . . . . . .",
31726                           /* 1 */ " . . . . . . . .",
31727                           /* 2 */ " . . . . L . . .",
31728                           /* 3 */ " . . . D L . . .",
31729                           /* 4 */ " . . . D L . . .",
31730                           /* 5 */ " . . . D . . . .",
31731                           /* 6 */ " . . L D . . . .",
31732                           /* 7 */ " . . . . . . . ."};
31733
31734        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31735        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31736
31737        assert_true (ai_move (ai, 5, 1));
31738        assert_true (ai_move (ai, 4, 1));
31739        assert_true (ai_move (ai, 5, 5));
31740        assert_true (ai_move (ai, 2, 4));
31741        assert_true (ai_move (ai, 1, 3));
31742        assert_true (ai_move (ai, 1, 5));
31743        assert_true (ai_move (ai, 1, 4));
31744        assert_true (ai_move (ai, 4, 6));
31745        assert_true (ai_move (ai, 5, 7));
31746        assert_true (ai_move (ai, 5, 6));
31747        assert_true (ai_move (ai, 2, 2));
31748        assert_true (ai_move (ai, 5, 4));
31749        assert_true (ai_move (ai, 6, 4));
31750        assert_true (ai_move (ai, 6, 5));
31751        assert_true (ai_move (ai, 5, 2));
31752        assert_true (ai_move (ai, 6, 2));
31753        assert_true (ai_move (ai, 5, 3));
31754        assert_true (ai_move (ai, 6, 3));
31755        assert_true (ai_move (ai, 7, 2));
31756        assert_true (ai_move (ai, 7, 4));
31757        assert_true (ai_move (ai, 3, 2));
31758        assert_true (ai_move (ai, 4, 7));
31759        assert_true (ai_move (ai, 7, 3));
31760        assert_true (ai_move (ai, 5, 0));
31761        assert_true (ai_move (ai, 7, 5));
31762        assert_true (ai_move (ai, 4, 5));
31763        assert_true (ai_move (ai, 3, 1));
31764        assert_true (ai_move (ai, 6, 7));
31765        assert_true (ai_move (ai, 2, 7));
31766        assert_true (ai_move (ai, 2, 1));
31767        assert_true (ai_move (ai, 2, 5));
31768        assert_true (ai_move (ai, 0, 2));
31769        assert_true (ai_move (ai, 2, 3));
31770        assert_true (ai_move (ai, 1, 2));
31771        assert_true (ai_move (ai, 0, 3));
31772        assert_true (ai_move (ai, 0, 5));
31773        assert_true (ai_move (ai, 0, 4));
31774        assert_true (ai_move (ai, 6, 1));
31775        assert_true (ai_move (ai, 3, 0));
31776        assert_true (ai_move (ai, 2, 0));
31777        assert_true (ai_move (ai, 4, 0));
31778        assert_true (ai_move (ai, 6, 0));
31779        assert_true (ai_move (ai, 7, 6));
31780        assert_true (ai_move (ai, 1, 1));
31781        assert_true (ai_move (ai, 3, 7));
31782        assert_true (ai_move (ai, 1, 7));
31783        assert_true (ai_move (ai, 0, 0));
31784        assert_true (ai_move (ai, 0, 1));
31785        assert_true (ai_move (ai, 1, 0));
31786        assert_true (ai_move (ai, 1, 6));
31787        assert_true (ai_move (ai, 6, 6));
31788        assert_true (ai_move (ai, 0, 6));
31789        assert_true (ai_move (ai, 0, 7));
31790        assert_true (ai_move (ai, 7, 7));
31791        assert_true (ai_move (ai, 7, 0));
31792        assert_true (ai_move (ai, 7, 1));
31793    }
31794
31795    private static inline void test_complete_reversi_game_410 ()
31796    {
31797                                  /* 0 1 2 3 4 5 6 7 */
31798        string [] board = {/* 0 */ " . . . . . . . .",
31799                           /* 1 */ " . . . . . . . .",
31800                           /* 2 */ " . . . . . . . .",
31801                           /* 3 */ " . . . D D . . .",
31802                           /* 4 */ " . . L L L . . .",
31803                           /* 5 */ " . . . D . . . .",
31804                           /* 6 */ " . . L D . . . .",
31805                           /* 7 */ " . . . . . . . ."};
31806
31807        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31808        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31809
31810        assert_true (ai_move (ai, 1, 3));
31811        assert_true (ai_move (ai, 1, 4));
31812        assert_true (ai_move (ai, 5, 5));
31813        assert_true (ai_move (ai, 5, 2));
31814        assert_true (ai_move (ai, 1, 5));
31815        assert_true (ai_move (ai, 4, 6));
31816        assert_true (ai_move (ai, 5, 7));
31817        assert_true (ai_move (ai, 5, 3));
31818        assert_true (ai_move (ai, 6, 3));
31819        assert_true (ai_move (ai, 6, 2));
31820        assert_true (ai_move (ai, 4, 1));
31821        assert_true (ai_move (ai, 5, 1));
31822        assert_true (ai_move (ai, 4, 5));
31823        assert_true (ai_move (ai, 6, 5));
31824        assert_true (ai_move (ai, 6, 4));
31825        assert_true (ai_move (ai, 7, 5));
31826        assert_true (ai_move (ai, 7, 3));
31827        assert_true (ai_move (ai, 7, 4));
31828        assert_true (ai_move (ai, 7, 6));
31829        assert_true (ai_move (ai, 5, 4));
31830        assert_true (ai_move (ai, 5, 0));
31831        assert_true (ai_move (ai, 5, 6));
31832        assert_true (ai_move (ai, 7, 2));
31833        assert_true (ai_move (ai, 4, 2));
31834        assert_true (ai_move (ai, 3, 1));
31835        assert_true (ai_move (ai, 4, 0));
31836        assert_true (ai_move (ai, 3, 0));
31837        assert_true (ai_move (ai, 3, 2));
31838        assert_true (ai_move (ai, 2, 7));
31839        assert_true (ai_move (ai, 0, 2));
31840        assert_true (ai_move (ai, 2, 2));
31841        assert_true (ai_move (ai, 2, 3));
31842        assert_true (ai_move (ai, 0, 4));
31843        assert_true (ai_move (ai, 2, 1));
31844        assert_true (ai_move (ai, 4, 7));
31845        assert_true (ai_move (ai, 3, 7));
31846        assert_true (ai_move (ai, 1, 2));
31847        assert_true (ai_move (ai, 2, 5));
31848        assert_true (ai_move (ai, 1, 7));
31849        assert_true (ai_move (ai, 6, 1));
31850        assert_true (ai_move (ai, 7, 1));
31851        assert_true (ai_move (ai, 7, 0));
31852        assert_true (ai_move (ai, 6, 0));
31853        assert_true (ai_move (ai, 7, 7));
31854        assert_true (ai_move (ai, 1, 6));
31855        assert_true (ai_move (ai, 2, 0));
31856        assert_true (ai_move (ai, 1, 0));
31857        assert_true (ai_move (ai, 6, 7));
31858        assert_true (ai_move (ai, 1, 1));
31859        assert_true (ai_move (ai, 6, 6));
31860        assert_true (game.pass ());
31861        assert_true (ai_move (ai, 0, 0));
31862        assert_true (ai_move (ai, 0, 1));
31863        assert_true (ai_move (ai, 0, 3));
31864        assert_true (ai_move (ai, 0, 5));
31865        assert_true (ai_move (ai, 0, 7));
31866        assert_true (ai_move (ai, 0, 6));
31867    }
31868
31869    private static inline void test_complete_reversi_game_411 ()
31870    {
31871                                  /* 0 1 2 3 4 5 6 7 */
31872        string [] board = {/* 0 */ " . . . . . . . .",
31873                           /* 1 */ " . . . . . . . .",
31874                           /* 2 */ " . . L . . . . .",
31875                           /* 3 */ " . . . L D . . .",
31876                           /* 4 */ " . . . D L . . .",
31877                           /* 5 */ " . . . D . . . .",
31878                           /* 6 */ " . . L D . . . .",
31879                           /* 7 */ " . . . . . . . ."};
31880
31881        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31882        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31883
31884        assert_true (ai_move (ai, 2, 3));
31885        assert_true (ai_move (ai, 4, 6));
31886        assert_true (ai_move (ai, 2, 1));
31887        assert_true (ai_move (ai, 4, 2));
31888        assert_true (ai_move (ai, 5, 1));
31889        assert_true (ai_move (ai, 4, 1));
31890        assert_true (ai_move (ai, 3, 7));
31891        assert_true (ai_move (ai, 2, 5));
31892        assert_true (ai_move (ai, 1, 4));
31893        assert_true (ai_move (ai, 1, 2));
31894        assert_true (ai_move (ai, 3, 2));
31895        assert_true (ai_move (ai, 3, 0));
31896        assert_true (ai_move (ai, 2, 7));
31897        assert_true (ai_move (ai, 3, 1));
31898        assert_true (ai_move (ai, 5, 0));
31899        assert_true (ai_move (ai, 2, 4));
31900        assert_true (ai_move (ai, 0, 2));
31901        assert_true (ai_move (ai, 1, 5));
31902        assert_true (ai_move (ai, 5, 2));
31903        assert_true (ai_move (ai, 5, 3));
31904        assert_true (ai_move (ai, 4, 0));
31905        assert_true (ai_move (ai, 6, 2));
31906        assert_true (ai_move (ai, 2, 0));
31907        assert_true (ai_move (ai, 1, 3));
31908        assert_true (ai_move (ai, 7, 2));
31909        assert_true (ai_move (ai, 4, 7));
31910        assert_true (ai_move (ai, 0, 5));
31911        assert_true (ai_move (ai, 6, 1));
31912        assert_true (ai_move (ai, 6, 3));
31913        assert_true (ai_move (ai, 6, 0));
31914        assert_true (ai_move (ai, 7, 0));
31915        assert_true (ai_move (ai, 5, 4));
31916        assert_true (ai_move (ai, 0, 3));
31917        assert_true (ai_move (ai, 1, 7));
31918        assert_true (ai_move (ai, 5, 5));
31919        assert_true (ai_move (ai, 0, 4));
31920        assert_true (ai_move (ai, 4, 5));
31921        assert_true (ai_move (ai, 6, 4));
31922        assert_true (ai_move (ai, 5, 6));
31923        assert_true (ai_move (ai, 6, 5));
31924        assert_true (ai_move (ai, 7, 4));
31925        assert_true (ai_move (ai, 7, 3));
31926        assert_true (ai_move (ai, 7, 5));
31927        assert_true (ai_move (ai, 7, 1));
31928        assert_true (ai_move (ai, 5, 7));
31929        assert_true (ai_move (ai, 6, 7));
31930        assert_true (ai_move (ai, 6, 6));
31931        assert_true (ai_move (ai, 7, 7));
31932        assert_true (ai_move (ai, 7, 6));
31933        assert_true (ai_move (ai, 1, 6));
31934        assert_true (ai_move (ai, 0, 7));
31935        assert_true (ai_move (ai, 0, 6));
31936        assert_true (game.pass ());
31937        assert_true (ai_move (ai, 1, 1));
31938        assert_true (ai_move (ai, 0, 0));
31939        assert_true (ai_move (ai, 0, 1));
31940        assert_true (ai_move (ai, 1, 0));
31941    }
31942
31943    private static inline void test_complete_reversi_game_412 ()
31944    {
31945                                  /* 0 1 2 3 4 5 6 7 */
31946        string [] board = {/* 0 */ " . . . . . . . .",
31947                           /* 1 */ " . . . . . . . .",
31948                           /* 2 */ " . . . . . . . .",
31949                           /* 3 */ " . . . D D . . .",
31950                           /* 4 */ " . . L L L L . .",
31951                           /* 5 */ " . . . D . D . .",
31952                           /* 6 */ " . . . . . . . .",
31953                           /* 7 */ " . . . . . . . ."};
31954
31955        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
31956        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
31957
31958        assert_true (ai_move (ai, 6, 5));
31959        assert_true (ai_move (ai, 2, 6));
31960        assert_true (ai_move (ai, 1, 5));
31961        assert_true (ai_move (ai, 1, 3));
31962        assert_true (ai_move (ai, 3, 7));
31963        assert_true (ai_move (ai, 6, 4));
31964        assert_true (ai_move (ai, 7, 3));
31965        assert_true (ai_move (ai, 5, 2));
31966        assert_true (ai_move (ai, 3, 2));
31967        assert_true (ai_move (ai, 2, 2));
31968        assert_true (ai_move (ai, 1, 2));
31969        assert_true (ai_move (ai, 3, 1));
31970        assert_true (ai_move (ai, 2, 1));
31971        assert_true (ai_move (ai, 2, 0));
31972        assert_true (ai_move (ai, 2, 5));
31973        assert_true (ai_move (ai, 2, 7));
31974        assert_true (ai_move (ai, 3, 6));
31975        assert_true (ai_move (ai, 0, 5));
31976        assert_true (ai_move (ai, 0, 4));
31977        assert_true (ai_move (ai, 0, 3));
31978        assert_true (ai_move (ai, 3, 0));
31979        assert_true (ai_move (ai, 4, 7));
31980        assert_true (ai_move (ai, 4, 6));
31981        assert_true (ai_move (ai, 4, 0));
31982        assert_true (ai_move (ai, 2, 3));
31983        assert_true (ai_move (ai, 4, 2));
31984        assert_true (ai_move (ai, 4, 1));
31985        assert_true (ai_move (ai, 5, 1));
31986        assert_true (ai_move (ai, 6, 2));
31987        assert_true (ai_move (ai, 5, 3));
31988        assert_true (ai_move (ai, 6, 3));
31989        assert_true (ai_move (ai, 5, 6));
31990        assert_true (ai_move (ai, 4, 5));
31991        assert_true (ai_move (ai, 1, 4));
31992        assert_true (ai_move (ai, 0, 2));
31993        assert_true (ai_move (ai, 0, 1));
31994        assert_true (ai_move (ai, 5, 7));
31995        assert_true (ai_move (ai, 7, 2));
31996        assert_true (ai_move (ai, 1, 7));
31997        assert_true (ai_move (ai, 7, 4));
31998        assert_true (ai_move (ai, 5, 0));
31999        assert_true (ai_move (ai, 7, 5));
32000        assert_true (ai_move (ai, 1, 0));
32001        assert_true (ai_move (ai, 0, 6));
32002        assert_true (ai_move (ai, 1, 6));
32003        assert_true (ai_move (ai, 6, 1));
32004        assert_true (ai_move (ai, 7, 0));
32005        assert_true (ai_move (ai, 6, 0));
32006        assert_true (ai_move (ai, 7, 1));
32007        assert_true (ai_move (ai, 0, 0));
32008        assert_true (ai_move (ai, 7, 6));
32009        assert_true (ai_move (ai, 6, 7));
32010        assert_true (ai_move (ai, 7, 7));
32011        assert_true (ai_move (ai, 6, 6));
32012        assert_true (ai_move (ai, 1, 1));
32013    }
32014
32015    private static inline void test_complete_reversi_game_413 ()
32016    {
32017                                  /* 0 1 2 3 4 5 6 7 */
32018        string [] board = {/* 0 */ " . . . . . . . .",
32019                           /* 1 */ " . . . . . . . .",
32020                           /* 2 */ " . . . . . L . .",
32021                           /* 3 */ " . . . D L . . .",
32022                           /* 4 */ " . . L L D . . .",
32023                           /* 5 */ " . . . D . D . .",
32024                           /* 6 */ " . . . . . . . .",
32025                           /* 7 */ " . . . . . . . ."};
32026
32027        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32028        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32029
32030        assert_true (ai_move (ai, 1, 5));
32031        assert_true (ai_move (ai, 5, 4));
32032        assert_true (ai_move (ai, 5, 3));
32033        assert_true (ai_move (ai, 1, 4));
32034        assert_true (ai_move (ai, 5, 1));
32035        assert_true (ai_move (ai, 4, 6));
32036        assert_true (ai_move (ai, 2, 6));
32037        assert_true (ai_move (ai, 3, 6));
32038        assert_true (ai_move (ai, 1, 3));
32039        assert_true (ai_move (ai, 0, 4));
32040        assert_true (ai_move (ai, 5, 7));
32041        assert_true (ai_move (ai, 2, 2));
32042        assert_true (ai_move (ai, 3, 7));
32043        assert_true (ai_move (ai, 3, 2));
32044        assert_true (ai_move (ai, 0, 2));
32045        assert_true (ai_move (ai, 1, 2));
32046        assert_true (ai_move (ai, 4, 2));
32047        assert_true (ai_move (ai, 6, 4));
32048        assert_true (ai_move (ai, 6, 5));
32049        assert_true (ai_move (ai, 6, 2));
32050        assert_true (ai_move (ai, 6, 3));
32051        assert_true (ai_move (ai, 4, 1));
32052        assert_true (ai_move (ai, 7, 2));
32053        assert_true (ai_move (ai, 2, 1));
32054        assert_true (ai_move (ai, 2, 0));
32055        assert_true (ai_move (ai, 7, 5));
32056        assert_true (ai_move (ai, 7, 3));
32057        assert_true (ai_move (ai, 4, 5));
32058        assert_true (ai_move (ai, 5, 6));
32059        assert_true (ai_move (ai, 7, 4));
32060        assert_true (ai_move (ai, 7, 6));
32061        assert_true (ai_move (ai, 3, 1));
32062        assert_true (ai_move (ai, 4, 0));
32063        assert_true (ai_move (ai, 3, 0));
32064        assert_true (ai_move (ai, 2, 5));
32065        assert_true (ai_move (ai, 0, 5));
32066        assert_true (ai_move (ai, 2, 3));
32067        assert_true (ai_move (ai, 5, 0));
32068        assert_true (ai_move (ai, 6, 0));
32069        assert_true (ai_move (ai, 2, 7));
32070        assert_true (ai_move (ai, 6, 1));
32071        assert_true (ai_move (ai, 4, 7));
32072        assert_true (ai_move (ai, 1, 7));
32073        assert_true (ai_move (ai, 7, 0));
32074        assert_true (ai_move (ai, 0, 3));
32075        assert_true (ai_move (ai, 1, 0));
32076        assert_true (ai_move (ai, 0, 6));
32077        assert_true (ai_move (ai, 1, 6));
32078        assert_true (ai_move (ai, 1, 1));
32079        assert_true (ai_move (ai, 7, 1));
32080        assert_true (game.pass ());
32081        assert_true (ai_move (ai, 7, 7));
32082        assert_true (game.pass ());
32083        assert_true (ai_move (ai, 6, 7));
32084        assert_true (ai_move (ai, 6, 6));
32085        assert_true (ai_move (ai, 0, 7));
32086        assert_true (game.pass ());
32087        assert_true (ai_move (ai, 0, 1));
32088        assert_true (ai_move (ai, 0, 0));
32089    }
32090
32091    private static inline void test_complete_reversi_game_414 ()
32092    {
32093                                  /* 0 1 2 3 4 5 6 7 */
32094        string [] board = {/* 0 */ " . . . . . . . .",
32095                           /* 1 */ " . . . . . . . .",
32096                           /* 2 */ " . . . . . . . .",
32097                           /* 3 */ " . . . D D . . .",
32098                           /* 4 */ " . . L L D . . .",
32099                           /* 5 */ " . . . L . D . .",
32100                           /* 6 */ " . . . . L . . .",
32101                           /* 7 */ " . . . . . . . ."};
32102
32103        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32104        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32105
32106        assert_true (ai_move (ai, 2, 6));
32107        assert_true (ai_move (ai, 6, 4));
32108        assert_true (ai_move (ai, 1, 5));
32109        assert_true (ai_move (ai, 3, 6));
32110        assert_true (ai_move (ai, 5, 7));
32111        assert_true (ai_move (ai, 1, 4));
32112        assert_true (ai_move (ai, 3, 7));
32113        assert_true (ai_move (ai, 5, 2));
32114        assert_true (ai_move (ai, 7, 3));
32115        assert_true (ai_move (ai, 5, 4));
32116        assert_true (ai_move (ai, 1, 3));
32117        assert_true (ai_move (ai, 5, 6));
32118        assert_true (ai_move (ai, 5, 3));
32119        assert_true (ai_move (ai, 0, 4));
32120        assert_true (ai_move (ai, 5, 1));
32121        assert_true (ai_move (ai, 2, 2));
32122        assert_true (ai_move (ai, 0, 2));
32123        assert_true (ai_move (ai, 1, 2));
32124        assert_true (ai_move (ai, 3, 2));
32125        assert_true (ai_move (ai, 3, 1));
32126        assert_true (ai_move (ai, 4, 2));
32127        assert_true (ai_move (ai, 7, 5));
32128        assert_true (ai_move (ai, 4, 1));
32129        assert_true (ai_move (ai, 5, 0));
32130        assert_true (ai_move (ai, 6, 2));
32131        assert_true (ai_move (ai, 2, 3));
32132        assert_true (ai_move (ai, 0, 3));
32133        assert_true (ai_move (ai, 7, 2));
32134        assert_true (ai_move (ai, 2, 1));
32135        assert_true (ai_move (ai, 7, 4));
32136        assert_true (ai_move (ai, 0, 5));
32137        assert_true (ai_move (ai, 4, 5));
32138        assert_true (ai_move (ai, 4, 0));
32139        assert_true (ai_move (ai, 2, 0));
32140        assert_true (ai_move (ai, 3, 0));
32141        assert_true (ai_move (ai, 2, 5));
32142        assert_true (ai_move (ai, 6, 3));
32143        assert_true (ai_move (ai, 6, 5));
32144        assert_true (ai_move (ai, 1, 1));
32145        assert_true (ai_move (ai, 0, 0));
32146        assert_true (ai_move (ai, 1, 0));
32147        assert_true (ai_move (ai, 6, 1));
32148        assert_true (ai_move (ai, 7, 6));
32149        assert_true (ai_move (ai, 7, 7));
32150        assert_true (ai_move (ai, 6, 6));
32151        assert_true (ai_move (ai, 6, 7));
32152        assert_true (ai_move (ai, 7, 0));
32153        assert_true (ai_move (ai, 6, 0));
32154        assert_true (ai_move (ai, 7, 1));
32155        assert_true (ai_move (ai, 0, 1));
32156        assert_true (ai_move (ai, 1, 6));
32157        assert_true (ai_move (ai, 4, 7));
32158        assert_true (game.pass ());
32159        assert_true (ai_move (ai, 2, 7));
32160        assert_true (ai_move (ai, 1, 7));
32161        assert_true (ai_move (ai, 0, 6));
32162        assert_true (ai_move (ai, 0, 7));
32163    }
32164
32165    private static inline void test_complete_reversi_game_415 ()
32166    {
32167                                  /* 0 1 2 3 4 5 6 7 */
32168        string [] board = {/* 0 */ " . . . . . . . .",
32169                           /* 1 */ " . . . . . . . .",
32170                           /* 2 */ " . . . . L . . .",
32171                           /* 3 */ " . . . L D . . .",
32172                           /* 4 */ " . . L L D . . .",
32173                           /* 5 */ " . . . D . D . .",
32174                           /* 6 */ " . . . . . . . .",
32175                           /* 7 */ " . . . . . . . ."};
32176
32177        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32178        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32179
32180        assert_true (ai_move (ai, 1, 3));
32181        assert_true (ai_move (ai, 1, 5));
32182        assert_true (ai_move (ai, 4, 1));
32183        assert_true (ai_move (ai, 5, 1));
32184        assert_true (ai_move (ai, 2, 2));
32185        assert_true (ai_move (ai, 4, 6));
32186        assert_true (ai_move (ai, 2, 6));
32187        assert_true (ai_move (ai, 6, 4));
32188        assert_true (ai_move (ai, 0, 4));
32189        assert_true (ai_move (ai, 3, 6));
32190        assert_true (ai_move (ai, 1, 4));
32191        assert_true (ai_move (ai, 0, 2));
32192        assert_true (ai_move (ai, 1, 2));
32193        assert_true (ai_move (ai, 4, 0));
32194        assert_true (ai_move (ai, 3, 7));
32195        assert_true (ai_move (ai, 3, 2));
32196        assert_true (ai_move (ai, 5, 7));
32197        assert_true (ai_move (ai, 0, 6));
32198        assert_true (ai_move (ai, 7, 3));
32199        assert_true (ai_move (ai, 4, 5));
32200        assert_true (ai_move (ai, 3, 1));
32201        assert_true (ai_move (ai, 6, 5));
32202        assert_true (ai_move (ai, 5, 6));
32203        assert_true (ai_move (ai, 2, 0));
32204        assert_true (ai_move (ai, 7, 5));
32205        assert_true (ai_move (ai, 4, 7));
32206        assert_true (ai_move (ai, 3, 0));
32207        assert_true (ai_move (ai, 7, 4));
32208        assert_true (ai_move (ai, 5, 0));
32209        assert_true (ai_move (ai, 6, 0));
32210        assert_true (ai_move (ai, 5, 2));
32211        assert_true (ai_move (ai, 2, 1));
32212        assert_true (ai_move (ai, 5, 3));
32213        assert_true (ai_move (ai, 6, 2));
32214        assert_true (ai_move (ai, 5, 4));
32215        assert_true (ai_move (ai, 7, 2));
32216        assert_true (ai_move (ai, 7, 1));
32217        assert_true (ai_move (ai, 2, 3));
32218        assert_true (ai_move (ai, 2, 5));
32219        assert_true (ai_move (ai, 6, 6));
32220        assert_true (ai_move (ai, 6, 1));
32221        assert_true (ai_move (ai, 2, 7));
32222        assert_true (ai_move (ai, 1, 7));
32223        assert_true (ai_move (ai, 7, 0));
32224        assert_true (ai_move (ai, 0, 5));
32225        assert_true (ai_move (ai, 0, 3));
32226        assert_true (ai_move (ai, 6, 7));
32227        assert_true (ai_move (ai, 6, 3));
32228        assert_true (ai_move (ai, 1, 1));
32229        assert_true (ai_move (ai, 1, 0));
32230        assert_true (ai_move (ai, 1, 6));
32231        assert_true (ai_move (ai, 0, 7));
32232        assert_true (game.pass ());
32233        assert_true (ai_move (ai, 7, 7));
32234        assert_true (game.pass ());
32235        assert_true (ai_move (ai, 7, 6));
32236        assert_true (game.pass ());
32237        assert_true (ai_move (ai, 0, 0));
32238        assert_true (ai_move (ai, 0, 1));
32239    }
32240
32241    private static inline void test_complete_reversi_game_416 ()
32242    {
32243                                  /* 0 1 2 3 4 5 6 7 */
32244        string [] board = {/* 0 */ " . . . . . . . .",
32245                           /* 1 */ " . . . . . . . .",
32246                           /* 2 */ " . . . . . . . .",
32247                           /* 3 */ " . . . D D . . .",
32248                           /* 4 */ " . . L L D . . .",
32249                           /* 5 */ " . . . L . D . .",
32250                           /* 6 */ " . . . L . . . .",
32251                           /* 7 */ " . . . . . . . ."};
32252
32253        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32254        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32255
32256        assert_true (ai_move (ai, 1, 5));
32257        assert_true (ai_move (ai, 1, 3));
32258        assert_true (ai_move (ai, 2, 6));
32259        assert_true (ai_move (ai, 4, 6));
32260        assert_true (ai_move (ai, 1, 4));
32261        assert_true (ai_move (ai, 6, 4));
32262        assert_true (ai_move (ai, 3, 7));
32263        assert_true (ai_move (ai, 2, 2));
32264        assert_true (ai_move (ai, 4, 2));
32265        assert_true (ai_move (ai, 1, 7));
32266        assert_true (ai_move (ai, 0, 2));
32267        assert_true (ai_move (ai, 4, 1));
32268        assert_true (ai_move (ai, 3, 1));
32269        assert_true (ai_move (ai, 2, 0));
32270        assert_true (ai_move (ai, 5, 7));
32271        assert_true (ai_move (ai, 5, 6));
32272        assert_true (ai_move (ai, 4, 0));
32273        assert_true (ai_move (ai, 2, 1));
32274        assert_true (ai_move (ai, 5, 1));
32275        assert_true (ai_move (ai, 5, 3));
32276        assert_true (ai_move (ai, 6, 2));
32277        assert_true (ai_move (ai, 6, 3));
32278        assert_true (ai_move (ai, 5, 4));
32279        assert_true (ai_move (ai, 6, 5));
32280        assert_true (ai_move (ai, 7, 5));
32281        assert_true (ai_move (ai, 4, 5));
32282        assert_true (ai_move (ai, 7, 4));
32283        assert_true (ai_move (ai, 7, 3));
32284        assert_true (ai_move (ai, 4, 7));
32285        assert_true (ai_move (ai, 7, 6));
32286        assert_true (ai_move (ai, 2, 5));
32287        assert_true (ai_move (ai, 0, 5));
32288        assert_true (ai_move (ai, 0, 4));
32289        assert_true (ai_move (ai, 0, 3));
32290        assert_true (ai_move (ai, 0, 6));
32291        assert_true (ai_move (ai, 1, 2));
32292        assert_true (ai_move (ai, 2, 3));
32293        assert_true (ai_move (ai, 6, 0));
32294        assert_true (ai_move (ai, 0, 1));
32295        assert_true (ai_move (ai, 6, 7));
32296        assert_true (ai_move (ai, 7, 7));
32297        assert_true (ai_move (ai, 3, 2));
32298        assert_true (ai_move (ai, 7, 2));
32299        assert_true (ai_move (ai, 2, 7));
32300        assert_true (ai_move (ai, 6, 6));
32301        assert_true (ai_move (ai, 7, 1));
32302        assert_true (ai_move (ai, 0, 7));
32303        assert_true (ai_move (ai, 1, 1));
32304        assert_true (ai_move (ai, 5, 2));
32305        assert_true (ai_move (ai, 1, 6));
32306        assert_true (ai_move (ai, 7, 0));
32307        assert_true (ai_move (ai, 6, 1));
32308        assert_true (ai_move (ai, 5, 0));
32309        assert_true (game.pass ());
32310        assert_true (ai_move (ai, 3, 0));
32311        assert_true (ai_move (ai, 1, 0));
32312        assert_true (ai_move (ai, 0, 0));
32313    }
32314
32315    private static inline void test_complete_reversi_game_417 ()
32316    {
32317                                  /* 0 1 2 3 4 5 6 7 */
32318        string [] board = {/* 0 */ " . . . . . . . .",
32319                           /* 1 */ " . . . . . . . .",
32320                           /* 2 */ " . . . L . . . .",
32321                           /* 3 */ " . . . L D . . .",
32322                           /* 4 */ " . . L L D . . .",
32323                           /* 5 */ " . . . D . D . .",
32324                           /* 6 */ " . . . . . . . .",
32325                           /* 7 */ " . . . . . . . ."};
32326
32327        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32328        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32329
32330        assert_true (ai_move (ai, 2, 1));
32331        assert_true (ai_move (ai, 3, 1));
32332        assert_true (ai_move (ai, 1, 3));
32333        assert_true (ai_move (ai, 1, 5));
32334        assert_true (ai_move (ai, 1, 4));
32335        assert_true (ai_move (ai, 5, 3));
32336        assert_true (ai_move (ai, 6, 2));
32337        assert_true (ai_move (ai, 6, 3));
32338        assert_true (ai_move (ai, 6, 4));
32339        assert_true (ai_move (ai, 7, 3));
32340        assert_true (ai_move (ai, 4, 1));
32341        assert_true (ai_move (ai, 5, 0));
32342        assert_true (ai_move (ai, 2, 2));
32343        assert_true (ai_move (ai, 5, 1));
32344        assert_true (ai_move (ai, 4, 2));
32345        assert_true (ai_move (ai, 6, 5));
32346        assert_true (ai_move (ai, 7, 5));
32347        assert_true (ai_move (ai, 4, 6));
32348        assert_true (ai_move (ai, 4, 5));
32349        assert_true (ai_move (ai, 1, 2));
32350        assert_true (ai_move (ai, 0, 2));
32351        assert_true (ai_move (ai, 2, 0));
32352        assert_true (ai_move (ai, 5, 2));
32353        assert_true (ai_move (ai, 2, 6));
32354        assert_true (ai_move (ai, 0, 4));
32355        assert_true (ai_move (ai, 6, 6));
32356        assert_true (ai_move (ai, 2, 5));
32357        assert_true (ai_move (ai, 2, 3));
32358        assert_true (ai_move (ai, 5, 4));
32359        assert_true (ai_move (ai, 3, 6));
32360        assert_true (ai_move (ai, 0, 5));
32361        assert_true (ai_move (ai, 5, 6));
32362        assert_true (ai_move (ai, 7, 4));
32363        assert_true (ai_move (ai, 7, 6));
32364        assert_true (ai_move (ai, 2, 7));
32365        assert_true (ai_move (ai, 3, 7));
32366        assert_true (ai_move (ai, 4, 7));
32367        assert_true (ai_move (ai, 5, 7));
32368        assert_true (ai_move (ai, 4, 0));
32369        assert_true (ai_move (ai, 1, 7));
32370        assert_true (ai_move (ai, 3, 0));
32371        assert_true (ai_move (ai, 7, 2));
32372        assert_true (ai_move (ai, 7, 7));
32373        assert_true (ai_move (ai, 6, 1));
32374        assert_true (ai_move (ai, 6, 7));
32375        assert_true (ai_move (ai, 1, 6));
32376        assert_true (ai_move (ai, 0, 7));
32377        assert_true (ai_move (ai, 0, 3));
32378        assert_true (ai_move (ai, 0, 6));
32379        assert_true (ai_move (ai, 1, 0));
32380        assert_true (ai_move (ai, 7, 0));
32381        assert_true (ai_move (ai, 7, 1));
32382        assert_true (ai_move (ai, 6, 0));
32383        assert_true (ai_move (ai, 1, 1));
32384        assert_true (ai_move (ai, 0, 0));
32385        assert_true (ai_move (ai, 0, 1));
32386    }
32387
32388    private static inline void test_complete_reversi_game_418 ()
32389    {
32390                                  /* 0 1 2 3 4 5 6 7 */
32391        string [] board = {/* 0 */ " . . . . . . . .",
32392                           /* 1 */ " . . . . . . . .",
32393                           /* 2 */ " . . . . . . . .",
32394                           /* 3 */ " . . . D D D . .",
32395                           /* 4 */ " . . L L L L . .",
32396                           /* 5 */ " . . . D . . . .",
32397                           /* 6 */ " . . . . . . . .",
32398                           /* 7 */ " . . . . . . . ."};
32399
32400        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32401        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32402
32403        assert_true (ai_move (ai, 6, 5));
32404        assert_true (ai_move (ai, 2, 6));
32405        assert_true (ai_move (ai, 1, 5));
32406        assert_true (ai_move (ai, 1, 3));
32407        assert_true (ai_move (ai, 3, 7));
32408        assert_true (ai_move (ai, 6, 4));
32409        assert_true (ai_move (ai, 7, 5));
32410        assert_true (ai_move (ai, 6, 2));
32411        assert_true (ai_move (ai, 4, 2));
32412        assert_true (ai_move (ai, 5, 2));
32413        assert_true (ai_move (ai, 7, 2));
32414        assert_true (ai_move (ai, 3, 1));
32415        assert_true (ai_move (ai, 5, 1));
32416        assert_true (ai_move (ai, 4, 1));
32417        assert_true (ai_move (ai, 3, 0));
32418        assert_true (ai_move (ai, 5, 0));
32419        assert_true (ai_move (ai, 6, 3));
32420        assert_true (ai_move (ai, 4, 0));
32421        assert_true (ai_move (ai, 6, 0));
32422        assert_true (ai_move (ai, 2, 2));
32423        assert_true (ai_move (ai, 2, 0));
32424        assert_true (ai_move (ai, 3, 2));
32425        assert_true (ai_move (ai, 5, 5));
32426        assert_true (ai_move (ai, 2, 1));
32427        assert_true (ai_move (ai, 4, 5));
32428        assert_true (ai_move (ai, 5, 6));
32429        assert_true (ai_move (ai, 4, 6));
32430        assert_true (ai_move (ai, 5, 7));
32431        assert_true (ai_move (ai, 2, 3));
32432        assert_true (ai_move (ai, 1, 2));
32433        assert_true (ai_move (ai, 0, 2));
32434        assert_true (ai_move (ai, 1, 7));
32435        assert_true (ai_move (ai, 0, 4));
32436        assert_true (ai_move (ai, 0, 3));
32437        assert_true (ai_move (ai, 2, 5));
32438        assert_true (ai_move (ai, 0, 5));
32439        assert_true (ai_move (ai, 0, 6));
32440        assert_true (ai_move (ai, 3, 6));
32441        assert_true (ai_move (ai, 1, 4));
32442        assert_true (ai_move (ai, 7, 3));
32443        assert_true (ai_move (ai, 7, 4));
32444        assert_true (ai_move (ai, 1, 6));
32445        assert_true (ai_move (ai, 0, 7));
32446        assert_true (ai_move (ai, 0, 1));
32447        assert_true (ai_move (ai, 2, 7));
32448        assert_true (ai_move (ai, 1, 1));
32449        assert_true (ai_move (ai, 4, 7));
32450        assert_true (ai_move (ai, 6, 1));
32451        assert_true (ai_move (ai, 6, 7));
32452        assert_true (ai_move (ai, 7, 1));
32453        assert_true (ai_move (ai, 7, 0));
32454        assert_true (ai_move (ai, 6, 6));
32455        assert_true (ai_move (ai, 7, 7));
32456        assert_true (game.pass ());
32457        assert_true (ai_move (ai, 7, 6));
32458        assert_true (game.pass ());
32459        assert_true (ai_move (ai, 0, 0));
32460        assert_true (ai_move (ai, 1, 0));
32461    }
32462
32463    private static inline void test_complete_reversi_game_419 ()
32464    {
32465                                  /* 0 1 2 3 4 5 6 7 */
32466        string [] board = {/* 0 */ " . . . . . . . .",
32467                           /* 1 */ " . . . . . . . .",
32468                           /* 2 */ " . . . . . L . .",
32469                           /* 3 */ " . . . D L D . .",
32470                           /* 4 */ " . . L L D . . .",
32471                           /* 5 */ " . . . D . . . .",
32472                           /* 6 */ " . . . . . . . .",
32473                           /* 7 */ " . . . . . . . ."};
32474
32475        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32476        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32477
32478        assert_true (ai_move (ai, 5, 1));
32479        assert_true (ai_move (ai, 4, 6));
32480        assert_true (ai_move (ai, 1, 5));
32481        assert_true (ai_move (ai, 1, 3));
32482        assert_true (ai_move (ai, 2, 6));
32483        assert_true (ai_move (ai, 3, 6));
32484        assert_true (ai_move (ai, 4, 2));
32485        assert_true (ai_move (ai, 5, 4));
32486        assert_true (ai_move (ai, 5, 5));
32487        assert_true (ai_move (ai, 3, 2));
32488        assert_true (ai_move (ai, 2, 1));
32489        assert_true (ai_move (ai, 3, 1));
32490        assert_true (ai_move (ai, 2, 2));
32491        assert_true (ai_move (ai, 6, 2));
32492        assert_true (ai_move (ai, 6, 4));
32493        assert_true (ai_move (ai, 4, 0));
32494        assert_true (ai_move (ai, 7, 2));
32495        assert_true (ai_move (ai, 5, 6));
32496        assert_true (ai_move (ai, 6, 3));
32497        assert_true (ai_move (ai, 7, 5));
32498        assert_true (ai_move (ai, 4, 1));
32499        assert_true (ai_move (ai, 2, 0));
32500        assert_true (ai_move (ai, 5, 7));
32501        assert_true (ai_move (ai, 1, 2));
32502        assert_true (ai_move (ai, 2, 3));
32503        assert_true (ai_move (ai, 3, 0));
32504        assert_true (ai_move (ai, 7, 3));
32505        assert_true (ai_move (ai, 6, 5));
32506        assert_true (ai_move (ai, 7, 4));
32507        assert_true (ai_move (ai, 7, 1));
32508        assert_true (ai_move (ai, 4, 5));
32509        assert_true (ai_move (ai, 5, 0));
32510        assert_true (ai_move (ai, 2, 5));
32511        assert_true (ai_move (ai, 0, 5));
32512        assert_true (ai_move (ai, 4, 7));
32513        assert_true (ai_move (ai, 1, 4));
32514        assert_true (ai_move (ai, 3, 7));
32515        assert_true (ai_move (ai, 2, 7));
32516        assert_true (ai_move (ai, 1, 7));
32517        assert_true (ai_move (ai, 6, 1));
32518        assert_true (ai_move (ai, 0, 1));
32519        assert_true (ai_move (ai, 0, 2));
32520        assert_true (ai_move (ai, 0, 3));
32521        assert_true (ai_move (ai, 1, 6));
32522        assert_true (ai_move (ai, 1, 1));
32523        assert_true (ai_move (ai, 0, 4));
32524        assert_true (ai_move (ai, 0, 6));
32525        assert_true (ai_move (ai, 0, 7));
32526        assert_true (ai_move (ai, 6, 6));
32527        assert_true (ai_move (ai, 0, 0));
32528        assert_true (ai_move (ai, 1, 0));
32529        assert_true (ai_move (ai, 7, 7));
32530        assert_true (ai_move (ai, 6, 7));
32531        assert_true (ai_move (ai, 7, 6));
32532        assert_true (ai_move (ai, 7, 0));
32533        assert_true (ai_move (ai, 6, 0));
32534    }
32535
32536    private static inline void test_complete_reversi_game_420 ()
32537    {
32538                                  /* 0 1 2 3 4 5 6 7 */
32539        string [] board = {/* 0 */ " . . . . . . . .",
32540                           /* 1 */ " . . . . . . . .",
32541                           /* 2 */ " . . . . . . . .",
32542                           /* 3 */ " . . . D D D . .",
32543                           /* 4 */ " . . L L D . . .",
32544                           /* 5 */ " . . . L . . . .",
32545                           /* 6 */ " . . . . L . . .",
32546                           /* 7 */ " . . . . . . . ."};
32547
32548        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32549        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32550
32551        assert_true (ai_move (ai, 1, 5));
32552        assert_true (ai_move (ai, 1, 3));
32553        assert_true (ai_move (ai, 1, 4));
32554        assert_true (ai_move (ai, 6, 2));
32555        assert_true (ai_move (ai, 3, 6));
32556        assert_true (ai_move (ai, 2, 2));
32557        assert_true (ai_move (ai, 6, 3));
32558        assert_true (ai_move (ai, 6, 4));
32559        assert_true (ai_move (ai, 0, 2));
32560        assert_true (ai_move (ai, 2, 6));
32561        assert_true (ai_move (ai, 3, 1));
32562        assert_true (ai_move (ai, 4, 2));
32563        assert_true (ai_move (ai, 5, 7));
32564        assert_true (ai_move (ai, 2, 0));
32565        assert_true (ai_move (ai, 4, 0));
32566        assert_true (ai_move (ai, 5, 6));
32567        assert_true (ai_move (ai, 3, 7));
32568        assert_true (ai_move (ai, 2, 5));
32569        assert_true (ai_move (ai, 5, 1));
32570        assert_true (ai_move (ai, 4, 5));
32571        assert_true (ai_move (ai, 5, 5));
32572        assert_true (ai_move (ai, 4, 1));
32573        assert_true (ai_move (ai, 2, 3));
32574        assert_true (ai_move (ai, 2, 1));
32575        assert_true (ai_move (ai, 5, 2));
32576        assert_true (ai_move (ai, 5, 0));
32577        assert_true (ai_move (ai, 6, 1));
32578        assert_true (ai_move (ai, 2, 7));
32579        assert_true (ai_move (ai, 5, 4));
32580        assert_true (ai_move (ai, 3, 0));
32581        assert_true (ai_move (ai, 1, 2));
32582        assert_true (ai_move (ai, 6, 5));
32583        assert_true (ai_move (ai, 7, 5));
32584        assert_true (ai_move (ai, 7, 4));
32585        assert_true (ai_move (ai, 3, 2));
32586        assert_true (ai_move (ai, 0, 5));
32587        assert_true (ai_move (ai, 0, 3));
32588        assert_true (ai_move (ai, 7, 6));
32589        assert_true (ai_move (ai, 7, 2));
32590        assert_true (ai_move (ai, 4, 7));
32591        assert_true (ai_move (ai, 1, 7));
32592        assert_true (ai_move (ai, 7, 0));
32593        assert_true (ai_move (ai, 6, 7));
32594        assert_true (ai_move (ai, 7, 1));
32595        assert_true (ai_move (ai, 7, 3));
32596        assert_true (ai_move (ai, 1, 6));
32597        assert_true (ai_move (ai, 7, 7));
32598        assert_true (ai_move (ai, 6, 6));
32599        assert_true (ai_move (ai, 6, 0));
32600        assert_true (ai_move (ai, 0, 4));
32601        assert_true (ai_move (ai, 0, 7));
32602        assert_true (ai_move (ai, 0, 1));
32603        assert_true (ai_move (ai, 0, 6));
32604        assert_true (game.pass ());
32605        assert_true (ai_move (ai, 0, 0));
32606        assert_true (game.pass ());
32607        assert_true (ai_move (ai, 1, 1));
32608        assert_true (ai_move (ai, 1, 0));
32609    }
32610
32611    private static inline void test_complete_reversi_game_421 ()
32612    {
32613                                  /* 0 1 2 3 4 5 6 7 */
32614        string [] board = {/* 0 */ " . . . . . . . .",
32615                           /* 1 */ " . . . . . . . .",
32616                           /* 2 */ " . . . . L . . .",
32617                           /* 3 */ " . . . L D D . .",
32618                           /* 4 */ " . . L L D . . .",
32619                           /* 5 */ " . . . D . . . .",
32620                           /* 6 */ " . . . . . . . .",
32621                           /* 7 */ " . . . . . . . ."};
32622
32623        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32624        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32625
32626        assert_true (ai_move (ai, 3, 1));
32627        assert_true (ai_move (ai, 5, 1));
32628        assert_true (ai_move (ai, 4, 1));
32629        assert_true (ai_move (ai, 4, 6));
32630        assert_true (ai_move (ai, 2, 6));
32631        assert_true (ai_move (ai, 3, 6));
32632        assert_true (ai_move (ai, 2, 2));
32633        assert_true (ai_move (ai, 5, 4));
32634        assert_true (ai_move (ai, 1, 5));
32635        assert_true (ai_move (ai, 6, 2));
32636        assert_true (ai_move (ai, 6, 3));
32637        assert_true (ai_move (ai, 1, 3));
32638        assert_true (ai_move (ai, 6, 5));
32639        assert_true (ai_move (ai, 6, 4));
32640        assert_true (ai_move (ai, 7, 5));
32641        assert_true (ai_move (ai, 7, 4));
32642        assert_true (ai_move (ai, 7, 3));
32643        assert_true (ai_move (ai, 2, 0));
32644        assert_true (ai_move (ai, 2, 1));
32645        assert_true (ai_move (ai, 5, 2));
32646        assert_true (ai_move (ai, 0, 4));
32647        assert_true (ai_move (ai, 7, 2));
32648        assert_true (ai_move (ai, 7, 1));
32649        assert_true (ai_move (ai, 3, 2));
32650        assert_true (ai_move (ai, 5, 0));
32651        assert_true (ai_move (ai, 1, 2));
32652        assert_true (ai_move (ai, 0, 2));
32653        assert_true (ai_move (ai, 5, 5));
32654        assert_true (ai_move (ai, 2, 3));
32655        assert_true (ai_move (ai, 1, 1));
32656        assert_true (ai_move (ai, 4, 5));
32657        assert_true (ai_move (ai, 3, 0));
32658        assert_true (ai_move (ai, 4, 0));
32659        assert_true (ai_move (ai, 6, 0));
32660        assert_true (ai_move (ai, 2, 5));
32661        assert_true (ai_move (ai, 5, 6));
32662        assert_true (ai_move (ai, 6, 1));
32663        assert_true (ai_move (ai, 0, 5));
32664        assert_true (ai_move (ai, 1, 6));
32665        assert_true (ai_move (ai, 1, 4));
32666        assert_true (ai_move (ai, 5, 7));
32667        assert_true (ai_move (ai, 1, 0));
32668        assert_true (ai_move (ai, 2, 7));
32669        assert_true (ai_move (ai, 3, 7));
32670        assert_true (ai_move (ai, 4, 7));
32671        assert_true (ai_move (ai, 0, 3));
32672        assert_true (ai_move (ai, 0, 6));
32673        assert_true (ai_move (ai, 7, 0));
32674        assert_true (ai_move (ai, 1, 7));
32675        assert_true (ai_move (ai, 7, 6));
32676        assert_true (ai_move (ai, 0, 0));
32677        assert_true (ai_move (ai, 0, 1));
32678        assert_true (ai_move (ai, 6, 6));
32679        assert_true (ai_move (ai, 0, 7));
32680        assert_true (game.pass ());
32681        assert_true (ai_move (ai, 6, 7));
32682        assert_true (ai_move (ai, 7, 7));
32683    }
32684
32685    private static inline void test_complete_reversi_game_422 ()
32686    {
32687                                  /* 0 1 2 3 4 5 6 7 */
32688        string [] board = {/* 0 */ " . . . . . . . .",
32689                           /* 1 */ " . . . . . . . .",
32690                           /* 2 */ " . . . . . . . .",
32691                           /* 3 */ " . . . D D D . .",
32692                           /* 4 */ " . . L L D . . .",
32693                           /* 5 */ " . . . L . . . .",
32694                           /* 6 */ " . . . L . . . .",
32695                           /* 7 */ " . . . . . . . ."};
32696
32697        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32698        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32699
32700        assert_true (ai_move (ai, 1, 5));
32701        assert_true (ai_move (ai, 1, 3));
32702        assert_true (ai_move (ai, 1, 4));
32703        assert_true (ai_move (ai, 6, 2));
32704        assert_true (ai_move (ai, 5, 5));
32705        assert_true (ai_move (ai, 3, 2));
32706        assert_true (ai_move (ai, 2, 6));
32707        assert_true (ai_move (ai, 4, 6));
32708        assert_true (ai_move (ai, 6, 3));
32709        assert_true (ai_move (ai, 0, 4));
32710        assert_true (ai_move (ai, 2, 1));
32711        assert_true (ai_move (ai, 3, 1));
32712        assert_true (ai_move (ai, 3, 7));
32713        assert_true (ai_move (ai, 5, 7));
32714        assert_true (ai_move (ai, 4, 2));
32715        assert_true (ai_move (ai, 5, 2));
32716        assert_true (ai_move (ai, 5, 1));
32717        assert_true (ai_move (ai, 2, 3));
32718        assert_true (ai_move (ai, 7, 2));
32719        assert_true (ai_move (ai, 6, 4));
32720        assert_true (ai_move (ai, 2, 2));
32721        assert_true (ai_move (ai, 1, 2));
32722        assert_true (ai_move (ai, 0, 5));
32723        assert_true (ai_move (ai, 4, 1));
32724        assert_true (ai_move (ai, 5, 0));
32725        assert_true (ai_move (ai, 5, 4));
32726        assert_true (ai_move (ai, 4, 0));
32727        assert_true (ai_move (ai, 7, 3));
32728        assert_true (ai_move (ai, 7, 5));
32729        assert_true (ai_move (ai, 7, 4));
32730        assert_true (ai_move (ai, 6, 5));
32731        assert_true (ai_move (ai, 5, 6));
32732        assert_true (ai_move (ai, 0, 3));
32733        assert_true (ai_move (ai, 1, 1));
32734        assert_true (ai_move (ai, 4, 5));
32735        assert_true (ai_move (ai, 6, 6));
32736        assert_true (ai_move (ai, 2, 5));
32737        assert_true (ai_move (ai, 2, 7));
32738        assert_true (ai_move (ai, 4, 7));
32739        assert_true (ai_move (ai, 0, 2));
32740        assert_true (ai_move (ai, 1, 6));
32741        assert_true (ai_move (ai, 2, 0));
32742        assert_true (ai_move (ai, 3, 0));
32743        assert_true (ai_move (ai, 6, 0));
32744        assert_true (ai_move (ai, 0, 1));
32745        assert_true (ai_move (ai, 0, 0));
32746        assert_true (ai_move (ai, 1, 0));
32747        assert_true (ai_move (ai, 6, 7));
32748        assert_true (ai_move (ai, 7, 0));
32749        assert_true (ai_move (ai, 7, 1));
32750        assert_true (ai_move (ai, 7, 7));
32751        assert_true (ai_move (ai, 6, 1));
32752        assert_true (ai_move (ai, 1, 7));
32753        assert_true (ai_move (ai, 7, 6));
32754        assert_true (game.pass ());
32755        assert_true (ai_move (ai, 0, 6));
32756        assert_true (ai_move (ai, 0, 7));
32757    }
32758
32759    private static inline void test_complete_reversi_game_423 ()
32760    {
32761                                  /* 0 1 2 3 4 5 6 7 */
32762        string [] board = {/* 0 */ " . . . . . . . .",
32763                           /* 1 */ " . . . . . . . .",
32764                           /* 2 */ " . . . L . . . .",
32765                           /* 3 */ " . . . L D D . .",
32766                           /* 4 */ " . . L L D . . .",
32767                           /* 5 */ " . . . D . . . .",
32768                           /* 6 */ " . . . . . . . .",
32769                           /* 7 */ " . . . . . . . ."};
32770
32771        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32772        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32773
32774        assert_true (ai_move (ai, 2, 1));
32775        assert_true (ai_move (ai, 3, 1));
32776        assert_true (ai_move (ai, 1, 3));
32777        assert_true (ai_move (ai, 1, 5));
32778        assert_true (ai_move (ai, 4, 1));
32779        assert_true (ai_move (ai, 4, 6));
32780        assert_true (ai_move (ai, 2, 6));
32781        assert_true (ai_move (ai, 3, 6));
32782        assert_true (ai_move (ai, 0, 4));
32783        assert_true (ai_move (ai, 0, 2));
32784        assert_true (ai_move (ai, 4, 2));
32785        assert_true (ai_move (ai, 1, 4));
32786        assert_true (ai_move (ai, 2, 2));
32787        assert_true (ai_move (ai, 5, 4));
32788        assert_true (ai_move (ai, 6, 5));
32789        assert_true (ai_move (ai, 6, 4));
32790        assert_true (ai_move (ai, 7, 5));
32791        assert_true (ai_move (ai, 6, 2));
32792        assert_true (ai_move (ai, 6, 3));
32793        assert_true (ai_move (ai, 7, 2));
32794        assert_true (ai_move (ai, 7, 3));
32795        assert_true (ai_move (ai, 5, 2));
32796        assert_true (ai_move (ai, 5, 1));
32797        assert_true (ai_move (ai, 2, 0));
32798        assert_true (ai_move (ai, 5, 5));
32799        assert_true (ai_move (ai, 4, 0));
32800        assert_true (ai_move (ai, 5, 0));
32801        assert_true (ai_move (ai, 1, 2));
32802        assert_true (ai_move (ai, 2, 3));
32803        assert_true (ai_move (ai, 3, 0));
32804        assert_true (ai_move (ai, 1, 0));
32805        assert_true (ai_move (ai, 0, 6));
32806        assert_true (ai_move (ai, 2, 5));
32807        assert_true (ai_move (ai, 3, 7));
32808        assert_true (ai_move (ai, 2, 7));
32809        assert_true (ai_move (ai, 4, 5));
32810        assert_true (ai_move (ai, 7, 4));
32811        assert_true (ai_move (ai, 7, 6));
32812        assert_true (ai_move (ai, 5, 7));
32813        assert_true (ai_move (ai, 4, 7));
32814        assert_true (ai_move (ai, 5, 6));
32815        assert_true (ai_move (ai, 7, 1));
32816        assert_true (ai_move (ai, 0, 3));
32817        assert_true (ai_move (ai, 0, 5));
32818        assert_true (ai_move (ai, 6, 6));
32819        assert_true (ai_move (ai, 0, 1));
32820        assert_true (ai_move (ai, 1, 1));
32821        assert_true (ai_move (ai, 0, 0));
32822        assert_true (ai_move (ai, 1, 6));
32823        assert_true (ai_move (ai, 6, 0));
32824        assert_true (ai_move (ai, 6, 1));
32825        assert_true (ai_move (ai, 7, 0));
32826        assert_true (game.pass ());
32827        assert_true (ai_move (ai, 7, 7));
32828        assert_true (ai_move (ai, 6, 7));
32829        assert_true (ai_move (ai, 1, 7));
32830        assert_true (ai_move (ai, 0, 7));
32831    }
32832
32833    private static inline void test_complete_reversi_game_424 ()
32834    {
32835                                  /* 0 1 2 3 4 5 6 7 */
32836        string [] board = {/* 0 */ " . . . . . . . .",
32837                           /* 1 */ " . . . . . . . .",
32838                           /* 2 */ " . . . . . . . .",
32839                           /* 3 */ " . . . D D . . .",
32840                           /* 4 */ " . . L L D . . .",
32841                           /* 5 */ " . . . D L . . .",
32842                           /* 6 */ " . . . . . L . .",
32843                           /* 7 */ " . . . . . . . ."};
32844
32845        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32846        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32847
32848        assert_true (ai_move (ai, 5, 5));
32849        assert_true (ai_move (ai, 3, 6));
32850        assert_true (ai_move (ai, 2, 6));
32851        assert_true (ai_move (ai, 4, 6));
32852        assert_true (ai_move (ai, 1, 5));
32853        assert_true (ai_move (ai, 6, 5));
32854        assert_true (ai_move (ai, 4, 7));
32855        assert_true (ai_move (ai, 5, 4));
32856        assert_true (ai_move (ai, 7, 4));
32857        assert_true (ai_move (ai, 7, 5));
32858        assert_true (ai_move (ai, 2, 3));
32859        assert_true (ai_move (ai, 7, 3));
32860        assert_true (ai_move (ai, 2, 7));
32861        assert_true (ai_move (ai, 1, 3));
32862        assert_true (ai_move (ai, 1, 4));
32863        assert_true (ai_move (ai, 0, 4));
32864        assert_true (ai_move (ai, 6, 4));
32865        assert_true (ai_move (ai, 1, 2));
32866        assert_true (ai_move (ai, 6, 3));
32867        assert_true (ai_move (ai, 2, 2));
32868        assert_true (ai_move (ai, 0, 3));
32869        assert_true (ai_move (ai, 0, 2));
32870        assert_true (ai_move (ai, 2, 1));
32871        assert_true (ai_move (ai, 3, 1));
32872        assert_true (ai_move (ai, 4, 1));
32873        assert_true (ai_move (ai, 2, 0));
32874        assert_true (ai_move (ai, 0, 5));
32875        assert_true (ai_move (ai, 2, 5));
32876        assert_true (ai_move (ai, 0, 1));
32877        assert_true (ai_move (ai, 4, 0));
32878        assert_true (ai_move (ai, 3, 2));
32879        assert_true (ai_move (ai, 5, 0));
32880        assert_true (ai_move (ai, 4, 2));
32881        assert_true (ai_move (ai, 5, 1));
32882        assert_true (ai_move (ai, 5, 2));
32883        assert_true (ai_move (ai, 5, 7));
32884        assert_true (ai_move (ai, 5, 3));
32885        assert_true (ai_move (ai, 3, 7));
32886        assert_true (ai_move (ai, 6, 7));
32887        assert_true (ai_move (ai, 7, 2));
32888        assert_true (ai_move (ai, 1, 6));
32889        assert_true (ai_move (ai, 6, 2));
32890        assert_true (ai_move (ai, 6, 1));
32891        assert_true (ai_move (ai, 6, 6));
32892        assert_true (ai_move (ai, 7, 7));
32893        assert_true (ai_move (ai, 7, 1));
32894        assert_true (ai_move (ai, 7, 0));
32895        assert_true (ai_move (ai, 7, 6));
32896        assert_true (ai_move (ai, 6, 0));
32897        assert_true (ai_move (ai, 1, 1));
32898        assert_true (ai_move (ai, 0, 0));
32899        assert_true (ai_move (ai, 1, 0));
32900        assert_true (ai_move (ai, 3, 0));
32901        assert_true (ai_move (ai, 1, 7));
32902        assert_true (ai_move (ai, 0, 7));
32903        assert_true (ai_move (ai, 0, 6));
32904    }
32905
32906    private static inline void test_complete_reversi_game_425 ()
32907    {
32908                                  /* 0 1 2 3 4 5 6 7 */
32909        string [] board = {/* 0 */ " . . . . . . . .",
32910                           /* 1 */ " . . . . . . . .",
32911                           /* 2 */ " . . . . . . . .",
32912                           /* 3 */ " . . . D D . . .",
32913                           /* 4 */ " . . L L L L . .",
32914                           /* 5 */ " . . . D D . . .",
32915                           /* 6 */ " . . . . . . . .",
32916                           /* 7 */ " . . . . . . . ."};
32917
32918        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32919        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32920
32921        assert_true (ai_move (ai, 6, 5));
32922        assert_true (ai_move (ai, 2, 6));
32923        assert_true (ai_move (ai, 5, 5));
32924        assert_true (ai_move (ai, 5, 6));
32925        assert_true (ai_move (ai, 4, 6));
32926        assert_true (ai_move (ai, 5, 7));
32927        assert_true (ai_move (ai, 1, 5));
32928        assert_true (ai_move (ai, 1, 3));
32929        assert_true (ai_move (ai, 2, 5));
32930        assert_true (ai_move (ai, 0, 4));
32931        assert_true (ai_move (ai, 2, 3));
32932        assert_true (ai_move (ai, 6, 4));
32933        assert_true (ai_move (ai, 0, 5));
32934        assert_true (ai_move (ai, 7, 5));
32935        assert_true (ai_move (ai, 3, 7));
32936        assert_true (ai_move (ai, 0, 6));
32937        assert_true (ai_move (ai, 7, 3));
32938        assert_true (ai_move (ai, 3, 2));
32939        assert_true (ai_move (ai, 6, 3));
32940        assert_true (ai_move (ai, 1, 4));
32941        assert_true (ai_move (ai, 2, 2));
32942        assert_true (ai_move (ai, 3, 1));
32943        assert_true (ai_move (ai, 4, 1));
32944        assert_true (ai_move (ai, 2, 7));
32945        assert_true (ai_move (ai, 0, 2));
32946        assert_true (ai_move (ai, 2, 1));
32947        assert_true (ai_move (ai, 1, 2));
32948        assert_true (ai_move (ai, 4, 2));
32949        assert_true (ai_move (ai, 5, 2));
32950        assert_true (ai_move (ai, 5, 0));
32951        assert_true (ai_move (ai, 1, 6));
32952        assert_true (ai_move (ai, 3, 6));
32953        assert_true (ai_move (ai, 3, 0));
32954        assert_true (ai_move (ai, 4, 7));
32955        assert_true (ai_move (ai, 6, 6));
32956        assert_true (ai_move (ai, 6, 7));
32957        assert_true (ai_move (ai, 1, 7));
32958        assert_true (ai_move (ai, 0, 7));
32959        assert_true (game.pass ());
32960        assert_true (ai_move (ai, 5, 3));
32961        assert_true (ai_move (ai, 7, 4));
32962        assert_true (ai_move (ai, 7, 2));
32963        assert_true (ai_move (ai, 6, 2));
32964        assert_true (ai_move (ai, 7, 1));
32965        assert_true (ai_move (ai, 6, 1));
32966        assert_true (ai_move (ai, 7, 0));
32967        assert_true (ai_move (ai, 6, 0));
32968        assert_true (ai_move (ai, 0, 3));
32969        assert_true (ai_move (ai, 4, 0));
32970        assert_true (ai_move (ai, 0, 1));
32971        assert_true (ai_move (ai, 1, 1));
32972        assert_true (ai_move (ai, 0, 0));
32973        assert_true (ai_move (ai, 1, 0));
32974        assert_true (ai_move (ai, 2, 0));
32975        assert_true (ai_move (ai, 5, 1));
32976        assert_true (ai_move (ai, 7, 7));
32977        assert_true (ai_move (ai, 7, 6));
32978    }
32979
32980    private static inline void test_complete_reversi_game_426 ()
32981    {
32982                                  /* 0 1 2 3 4 5 6 7 */
32983        string [] board = {/* 0 */ " . . . . . . . .",
32984                           /* 1 */ " . . . . . . . .",
32985                           /* 2 */ " . . . . . L . .",
32986                           /* 3 */ " . . . D L . . .",
32987                           /* 4 */ " . . L L D . . .",
32988                           /* 5 */ " . . . D D . . .",
32989                           /* 6 */ " . . . . . . . .",
32990                           /* 7 */ " . . . . . . . ."};
32991
32992        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
32993        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
32994
32995        assert_true (ai_move (ai, 1, 5));
32996        assert_true (ai_move (ai, 1, 4));
32997        assert_true (ai_move (ai, 5, 3));
32998        assert_true (ai_move (ai, 4, 6));
32999        assert_true (ai_move (ai, 2, 6));
33000        assert_true (ai_move (ai, 3, 6));
33001        assert_true (ai_move (ai, 5, 1));
33002        assert_true (ai_move (ai, 5, 5));
33003        assert_true (ai_move (ai, 4, 7));
33004        assert_true (ai_move (ai, 5, 6));
33005        assert_true (ai_move (ai, 6, 5));
33006        assert_true (ai_move (ai, 5, 7));
33007        assert_true (ai_move (ai, 6, 7));
33008        assert_true (ai_move (ai, 5, 4));
33009        assert_true (ai_move (ai, 2, 3));
33010        assert_true (ai_move (ai, 6, 2));
33011        assert_true (ai_move (ai, 7, 2));
33012        assert_true (ai_move (ai, 5, 0));
33013        assert_true (ai_move (ai, 4, 2));
33014        assert_true (ai_move (ai, 3, 1));
33015        assert_true (ai_move (ai, 3, 2));
33016        assert_true (ai_move (ai, 7, 3));
33017        assert_true (ai_move (ai, 7, 4));
33018        assert_true (ai_move (ai, 7, 5));
33019        assert_true (ai_move (ai, 6, 3));
33020        assert_true (ai_move (ai, 7, 1));
33021        assert_true (ai_move (ai, 6, 6));
33022        assert_true (ai_move (ai, 6, 4));
33023        assert_true (ai_move (ai, 4, 1));
33024        assert_true (ai_move (ai, 4, 0));
33025        assert_true (ai_move (ai, 0, 5));
33026        assert_true (ai_move (ai, 1, 2));
33027        assert_true (ai_move (ai, 7, 6));
33028        assert_true (ai_move (ai, 7, 7));
33029        assert_true (ai_move (ai, 2, 5));
33030        assert_true (ai_move (ai, 2, 7));
33031        assert_true (ai_move (ai, 3, 7));
33032        assert_true (ai_move (ai, 2, 2));
33033        assert_true (ai_move (ai, 1, 6));
33034        assert_true (ai_move (ai, 0, 4));
33035        assert_true (ai_move (ai, 6, 1));
33036        assert_true (ai_move (ai, 6, 0));
33037        assert_true (ai_move (ai, 7, 0));
33038        assert_true (ai_move (ai, 1, 7));
33039        assert_true (ai_move (ai, 1, 3));
33040        assert_true (ai_move (ai, 0, 6));
33041        assert_true (ai_move (ai, 3, 0));
33042        assert_true (ai_move (ai, 0, 3));
33043        assert_true (ai_move (ai, 2, 1));
33044        assert_true (ai_move (ai, 2, 0));
33045        assert_true (ai_move (ai, 1, 0));
33046        assert_true (ai_move (ai, 1, 1));
33047        assert_true (ai_move (ai, 0, 7));
33048        assert_true (game.pass ());
33049        assert_true (ai_move (ai, 0, 2));
33050        assert_true (ai_move (ai, 0, 1));
33051        assert_true (ai_move (ai, 0, 0));
33052    }
33053
33054    private static inline void test_complete_reversi_game_427 ()
33055    {
33056                                  /* 0 1 2 3 4 5 6 7 */
33057        string [] board = {/* 0 */ " . . . . . . . .",
33058                           /* 1 */ " . . . . . . . .",
33059                           /* 2 */ " . . . . . . . .",
33060                           /* 3 */ " . . . D D . . .",
33061                           /* 4 */ " . . L L D . . .",
33062                           /* 5 */ " . . . L D . . .",
33063                           /* 6 */ " . . . . L . . .",
33064                           /* 7 */ " . . . . . . . ."};
33065
33066        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33067        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33068
33069        assert_true (ai_move (ai, 2, 6));
33070        assert_true (ai_move (ai, 3, 6));
33071        assert_true (ai_move (ai, 3, 7));
33072        assert_true (ai_move (ai, 5, 4));
33073        assert_true (ai_move (ai, 2, 5));
33074        assert_true (ai_move (ai, 2, 2));
33075        assert_true (ai_move (ai, 1, 3));
33076        assert_true (ai_move (ai, 1, 5));
33077        assert_true (ai_move (ai, 0, 4));
33078        assert_true (ai_move (ai, 0, 2));
33079        assert_true (ai_move (ai, 1, 4));
33080        assert_true (ai_move (ai, 2, 7));
33081        assert_true (ai_move (ai, 5, 5));
33082        assert_true (ai_move (ai, 4, 7));
33083        assert_true (ai_move (ai, 5, 6));
33084        assert_true (ai_move (ai, 2, 3));
33085        assert_true (ai_move (ai, 6, 5));
33086        assert_true (ai_move (ai, 5, 7));
33087        assert_true (ai_move (ai, 4, 2));
33088        assert_true (ai_move (ai, 0, 3));
33089        assert_true (ai_move (ai, 2, 1));
33090        assert_true (ai_move (ai, 0, 5));
33091        assert_true (ai_move (ai, 1, 6));
33092        assert_true (ai_move (ai, 2, 0));
33093        assert_true (ai_move (ai, 0, 6));
33094        assert_true (ai_move (ai, 0, 7));
33095        assert_true (ai_move (ai, 1, 2));
33096        assert_true (ai_move (ai, 3, 2));
33097        assert_true (ai_move (ai, 3, 0));
33098        assert_true (ai_move (ai, 6, 7));
33099        assert_true (ai_move (ai, 3, 1));
33100        assert_true (ai_move (ai, 6, 4));
33101        assert_true (ai_move (ai, 6, 3));
33102        assert_true (ai_move (ai, 7, 2));
33103        assert_true (ai_move (ai, 5, 3));
33104        assert_true (ai_move (ai, 6, 2));
33105        assert_true (ai_move (ai, 7, 3));
33106        assert_true (ai_move (ai, 0, 1));
33107        assert_true (ai_move (ai, 1, 0));
33108        assert_true (ai_move (ai, 7, 5));
33109        assert_true (ai_move (ai, 5, 1));
33110        assert_true (ai_move (ai, 7, 4));
33111        assert_true (ai_move (ai, 1, 7));
33112        assert_true (ai_move (ai, 1, 1));
33113        assert_true (ai_move (ai, 7, 7));
33114        assert_true (ai_move (ai, 6, 1));
33115        assert_true (ai_move (ai, 7, 6));
33116        assert_true (ai_move (ai, 5, 2));
33117        assert_true (ai_move (ai, 4, 1));
33118        assert_true (ai_move (ai, 6, 6));
33119        assert_true (ai_move (ai, 0, 0));
33120        assert_true (ai_move (ai, 5, 0));
33121        assert_true (ai_move (ai, 4, 0));
33122        assert_true (game.pass ());
33123        assert_true (ai_move (ai, 7, 0));
33124        assert_true (ai_move (ai, 7, 1));
33125        assert_true (ai_move (ai, 6, 0));
33126    }
33127
33128    private static inline void test_complete_reversi_game_428 ()
33129    {
33130                                  /* 0 1 2 3 4 5 6 7 */
33131        string [] board = {/* 0 */ " . . . . . . . .",
33132                           /* 1 */ " . . . . . . . .",
33133                           /* 2 */ " . . . . L . . .",
33134                           /* 3 */ " . . . L D . . .",
33135                           /* 4 */ " . . L L D . . .",
33136                           /* 5 */ " . . . D D . . .",
33137                           /* 6 */ " . . . . . . . .",
33138                           /* 7 */ " . . . . . . . ."};
33139
33140        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33141        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33142
33143        assert_true (ai_move (ai, 1, 3));
33144        assert_true (ai_move (ai, 1, 5));
33145        assert_true (ai_move (ai, 4, 1));
33146        assert_true (ai_move (ai, 5, 1));
33147        assert_true (ai_move (ai, 2, 2));
33148        assert_true (ai_move (ai, 3, 6));
33149        assert_true (ai_move (ai, 4, 6));
33150        assert_true (ai_move (ai, 1, 4));
33151        assert_true (ai_move (ai, 3, 7));
33152        assert_true (ai_move (ai, 0, 2));
33153        assert_true (ai_move (ai, 2, 3));
33154        assert_true (ai_move (ai, 2, 1));
33155        assert_true (ai_move (ai, 1, 2));
33156        assert_true (ai_move (ai, 3, 2));
33157        assert_true (ai_move (ai, 5, 2));
33158        assert_true (ai_move (ai, 6, 2));
33159        assert_true (ai_move (ai, 6, 3));
33160        assert_true (ai_move (ai, 3, 1));
33161        assert_true (ai_move (ai, 7, 2));
33162        assert_true (ai_move (ai, 5, 3));
33163        assert_true (ai_move (ai, 0, 4));
33164        assert_true (ai_move (ai, 2, 5));
33165        assert_true (ai_move (ai, 0, 5));
33166        assert_true (ai_move (ai, 2, 6));
33167        assert_true (ai_move (ai, 5, 0));
33168        assert_true (ai_move (ai, 0, 3));
33169        assert_true (ai_move (ai, 0, 1));
33170        assert_true (ai_move (ai, 1, 6));
33171        assert_true (ai_move (ai, 2, 0));
33172        assert_true (ai_move (ai, 5, 7));
33173        assert_true (ai_move (ai, 5, 6));
33174        assert_true (ai_move (ai, 7, 4));
33175        assert_true (ai_move (ai, 7, 3));
33176        assert_true (ai_move (ai, 5, 4));
33177        assert_true (ai_move (ai, 6, 5));
33178        assert_true (ai_move (ai, 5, 5));
33179        assert_true (ai_move (ai, 6, 4));
33180        assert_true (ai_move (ai, 7, 5));
33181        assert_true (ai_move (ai, 7, 6));
33182        assert_true (ai_move (ai, 2, 7));
33183        assert_true (ai_move (ai, 4, 7));
33184        assert_true (ai_move (ai, 4, 0));
33185        assert_true (ai_move (ai, 3, 0));
33186        assert_true (ai_move (ai, 6, 1));
33187        assert_true (ai_move (ai, 7, 0));
33188        assert_true (ai_move (ai, 7, 1));
33189        assert_true (ai_move (ai, 6, 6));
33190        assert_true (ai_move (ai, 7, 7));
33191        assert_true (ai_move (ai, 6, 7));
33192        assert_true (ai_move (ai, 1, 0));
33193        assert_true (ai_move (ai, 6, 0));
33194        assert_true (ai_move (ai, 1, 1));
33195        assert_true (ai_move (ai, 0, 7));
33196        assert_true (ai_move (ai, 1, 7));
33197        assert_true (ai_move (ai, 0, 6));
33198        assert_true (game.pass ());
33199        assert_true (ai_move (ai, 0, 0));
33200    }
33201
33202    private static inline void test_complete_reversi_game_429 ()
33203    {
33204                                  /* 0 1 2 3 4 5 6 7 */
33205        string [] board = {/* 0 */ " . . . . . . . .",
33206                           /* 1 */ " . . . . . . . .",
33207                           /* 2 */ " . . . . . . . .",
33208                           /* 3 */ " . . . D D . . .",
33209                           /* 4 */ " . . L L D . . .",
33210                           /* 5 */ " . . . L D . . .",
33211                           /* 6 */ " . . . L . . . .",
33212                           /* 7 */ " . . . . . . . ."};
33213
33214        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33215        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33216
33217        assert_true (ai_move (ai, 2, 6));
33218        assert_true (ai_move (ai, 4, 6));
33219        assert_true (ai_move (ai, 3, 7));
33220        assert_true (ai_move (ai, 5, 4));
33221        assert_true (ai_move (ai, 2, 5));
33222        assert_true (ai_move (ai, 2, 2));
33223        assert_true (ai_move (ai, 1, 3));
33224        assert_true (ai_move (ai, 1, 5));
33225        assert_true (ai_move (ai, 0, 4));
33226        assert_true (ai_move (ai, 0, 2));
33227        assert_true (ai_move (ai, 1, 4));
33228        assert_true (ai_move (ai, 2, 7));
33229        assert_true (ai_move (ai, 5, 5));
33230        assert_true (ai_move (ai, 4, 7));
33231        assert_true (ai_move (ai, 5, 6));
33232        assert_true (ai_move (ai, 2, 3));
33233        assert_true (ai_move (ai, 6, 5));
33234        assert_true (ai_move (ai, 5, 7));
33235        assert_true (ai_move (ai, 4, 2));
33236        assert_true (ai_move (ai, 0, 3));
33237        assert_true (ai_move (ai, 2, 1));
33238        assert_true (ai_move (ai, 0, 5));
33239        assert_true (ai_move (ai, 1, 6));
33240        assert_true (ai_move (ai, 2, 0));
33241        assert_true (ai_move (ai, 0, 6));
33242        assert_true (ai_move (ai, 0, 7));
33243        assert_true (ai_move (ai, 1, 2));
33244        assert_true (ai_move (ai, 3, 2));
33245        assert_true (ai_move (ai, 3, 0));
33246        assert_true (ai_move (ai, 6, 7));
33247        assert_true (ai_move (ai, 3, 1));
33248        assert_true (ai_move (ai, 6, 4));
33249        assert_true (ai_move (ai, 6, 3));
33250        assert_true (ai_move (ai, 7, 2));
33251        assert_true (ai_move (ai, 5, 3));
33252        assert_true (ai_move (ai, 6, 2));
33253        assert_true (ai_move (ai, 7, 3));
33254        assert_true (ai_move (ai, 0, 1));
33255        assert_true (ai_move (ai, 1, 0));
33256        assert_true (ai_move (ai, 7, 5));
33257        assert_true (ai_move (ai, 5, 1));
33258        assert_true (ai_move (ai, 7, 4));
33259        assert_true (ai_move (ai, 1, 7));
33260        assert_true (ai_move (ai, 1, 1));
33261        assert_true (ai_move (ai, 7, 7));
33262        assert_true (ai_move (ai, 6, 1));
33263        assert_true (ai_move (ai, 7, 6));
33264        assert_true (ai_move (ai, 5, 2));
33265        assert_true (ai_move (ai, 4, 1));
33266        assert_true (ai_move (ai, 6, 6));
33267        assert_true (ai_move (ai, 0, 0));
33268        assert_true (ai_move (ai, 5, 0));
33269        assert_true (ai_move (ai, 4, 0));
33270        assert_true (game.pass ());
33271        assert_true (ai_move (ai, 7, 0));
33272        assert_true (ai_move (ai, 7, 1));
33273        assert_true (ai_move (ai, 6, 0));
33274    }
33275
33276    private static inline void test_complete_reversi_game_430 ()
33277    {
33278                                  /* 0 1 2 3 4 5 6 7 */
33279        string [] board = {/* 0 */ " . . . . . . . .",
33280                           /* 1 */ " . . . . . . . .",
33281                           /* 2 */ " . . . L . . . .",
33282                           /* 3 */ " . . . L D . . .",
33283                           /* 4 */ " . . L L D . . .",
33284                           /* 5 */ " . . . D D . . .",
33285                           /* 6 */ " . . . . . . . .",
33286                           /* 7 */ " . . . . . . . ."};
33287
33288        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33289        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33290
33291        assert_true (ai_move (ai, 2, 1));
33292        assert_true (ai_move (ai, 3, 1));
33293        assert_true (ai_move (ai, 1, 3));
33294        assert_true (ai_move (ai, 1, 5));
33295        assert_true (ai_move (ai, 1, 4));
33296        assert_true (ai_move (ai, 5, 3));
33297        assert_true (ai_move (ai, 6, 2));
33298        assert_true (ai_move (ai, 6, 3));
33299        assert_true (ai_move (ai, 4, 1));
33300        assert_true (ai_move (ai, 5, 0));
33301        assert_true (ai_move (ai, 2, 2));
33302        assert_true (ai_move (ai, 3, 0));
33303        assert_true (ai_move (ai, 4, 0));
33304        assert_true (ai_move (ai, 2, 5));
33305        assert_true (ai_move (ai, 2, 6));
33306        assert_true (ai_move (ai, 5, 5));
33307        assert_true (ai_move (ai, 2, 0));
33308        assert_true (ai_move (ai, 1, 0));
33309        assert_true (ai_move (ai, 3, 6));
33310        assert_true (ai_move (ai, 2, 7));
33311        assert_true (ai_move (ai, 4, 7));
33312        assert_true (ai_move (ai, 0, 4));
33313        assert_true (ai_move (ai, 5, 4));
33314        assert_true (ai_move (ai, 6, 5));
33315        assert_true (ai_move (ai, 0, 5));
33316        assert_true (ai_move (ai, 0, 6));
33317        assert_true (ai_move (ai, 0, 2));
33318        assert_true (ai_move (ai, 4, 6));
33319        assert_true (ai_move (ai, 5, 7));
33320        assert_true (ai_move (ai, 1, 6));
33321        assert_true (ai_move (ai, 6, 4));
33322        assert_true (ai_move (ai, 7, 2));
33323        assert_true (ai_move (ai, 5, 6));
33324        assert_true (ai_move (ai, 5, 2));
33325        assert_true (ai_move (ai, 5, 1));
33326        assert_true (ai_move (ai, 4, 2));
33327        assert_true (ai_move (ai, 2, 3));
33328        assert_true (ai_move (ai, 1, 7));
33329        assert_true (ai_move (ai, 7, 4));
33330        assert_true (ai_move (ai, 7, 5));
33331        assert_true (ai_move (ai, 7, 3));
33332        assert_true (ai_move (ai, 3, 7));
33333        assert_true (ai_move (ai, 1, 2));
33334        assert_true (ai_move (ai, 6, 7));
33335        assert_true (ai_move (ai, 0, 7));
33336        assert_true (ai_move (ai, 6, 6));
33337        assert_true (ai_move (ai, 7, 7));
33338        assert_true (ai_move (ai, 0, 3));
33339        assert_true (ai_move (ai, 7, 6));
33340        assert_true (ai_move (ai, 6, 0));
33341        assert_true (ai_move (ai, 7, 1));
33342        assert_true (ai_move (ai, 1, 1));
33343        assert_true (ai_move (ai, 0, 0));
33344        assert_true (ai_move (ai, 0, 1));
33345        assert_true (ai_move (ai, 7, 0));
33346        assert_true (ai_move (ai, 6, 1));
33347    }
33348
33349    private static inline void test_complete_reversi_game_431 ()
33350    {
33351                                  /* 0 1 2 3 4 5 6 7 */
33352        string [] board = {/* 0 */ " . . . . . . . .",
33353                           /* 1 */ " . . . . . . . .",
33354                           /* 2 */ " . . . . . . . .",
33355                           /* 3 */ " . . . D D . . .",
33356                           /* 4 */ " . . L D L . . .",
33357                           /* 5 */ " . . D L . . . .",
33358                           /* 6 */ " . . . . L . . .",
33359                           /* 7 */ " . . . . . . . ."};
33360
33361        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33362        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33363
33364        assert_true (ai_move (ai, 3, 6));
33365        assert_true (ai_move (ai, 2, 2));
33366        assert_true (ai_move (ai, 1, 4));
33367        assert_true (ai_move (ai, 1, 3));
33368        assert_true (ai_move (ai, 3, 2));
33369        assert_true (ai_move (ai, 1, 5));
33370        assert_true (ai_move (ai, 1, 2));
33371        assert_true (ai_move (ai, 3, 7));
33372        assert_true (ai_move (ai, 5, 4));
33373        assert_true (ai_move (ai, 4, 2));
33374        assert_true (ai_move (ai, 5, 2));
33375        assert_true (ai_move (ai, 3, 1));
33376        assert_true (ai_move (ai, 2, 1));
33377        assert_true (ai_move (ai, 2, 0));
33378        assert_true (ai_move (ai, 2, 6));
33379        assert_true (ai_move (ai, 2, 7));
33380        assert_true (ai_move (ai, 0, 5));
33381        assert_true (ai_move (ai, 5, 1));
33382        assert_true (ai_move (ai, 4, 1));
33383        assert_true (ai_move (ai, 6, 2));
33384        assert_true (ai_move (ai, 6, 3));
33385        assert_true (ai_move (ai, 0, 2));
33386        assert_true (ai_move (ai, 5, 0));
33387        assert_true (ai_move (ai, 0, 4));
33388        assert_true (ai_move (ai, 5, 7));
33389        assert_true (ai_move (ai, 5, 6));
33390        assert_true (ai_move (ai, 5, 5));
33391        assert_true (ai_move (ai, 4, 0));
33392        assert_true (ai_move (ai, 7, 2));
33393        assert_true (ai_move (ai, 7, 4));
33394        assert_true (ai_move (ai, 5, 3));
33395        assert_true (ai_move (ai, 7, 3));
33396        assert_true (ai_move (ai, 7, 5));
33397        assert_true (ai_move (ai, 4, 5));
33398        assert_true (ai_move (ai, 6, 4));
33399        assert_true (ai_move (ai, 2, 3));
33400        assert_true (ai_move (ai, 7, 1));
33401        assert_true (ai_move (ai, 6, 5));
33402        assert_true (ai_move (ai, 4, 7));
33403        assert_true (ai_move (ai, 6, 7));
33404        assert_true (ai_move (ai, 1, 6));
33405        assert_true (ai_move (ai, 6, 0));
33406        assert_true (ai_move (ai, 7, 6));
33407        assert_true (ai_move (ai, 6, 1));
33408        assert_true (ai_move (ai, 7, 0));
33409        assert_true (ai_move (ai, 1, 7));
33410        assert_true (ai_move (ai, 3, 0));
33411        assert_true (ai_move (ai, 0, 6));
33412        assert_true (ai_move (ai, 1, 0));
33413        assert_true (ai_move (ai, 1, 1));
33414        assert_true (ai_move (ai, 0, 3));
33415        assert_true (ai_move (ai, 6, 6));
33416        assert_true (ai_move (ai, 7, 7));
33417        assert_true (ai_move (ai, 0, 1));
33418        assert_true (ai_move (ai, 0, 7));
33419        assert_true (game.pass ());
33420        assert_true (ai_move (ai, 0, 0));
33421    }
33422
33423    private static inline void test_complete_reversi_game_432 ()
33424    {
33425                                  /* 0 1 2 3 4 5 6 7 */
33426        string [] board = {/* 0 */ " . . . . . . . .",
33427                           /* 1 */ " . . . . . . . .",
33428                           /* 2 */ " . . . . L . . .",
33429                           /* 3 */ " . . . L L . . .",
33430                           /* 4 */ " . . L D L . . .",
33431                           /* 5 */ " . . D D . . . .",
33432                           /* 6 */ " . . . . . . . .",
33433                           /* 7 */ " . . . . . . . ."};
33434
33435        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33436        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33437
33438        assert_true (ai_move (ai, 2, 3));
33439        assert_true (ai_move (ai, 1, 5));
33440        assert_true (ai_move (ai, 1, 3));
33441        assert_true (ai_move (ai, 4, 5));
33442        assert_true (ai_move (ai, 2, 6));
33443        assert_true (ai_move (ai, 3, 7));
33444        assert_true (ai_move (ai, 2, 7));
33445        assert_true (ai_move (ai, 1, 4));
33446        assert_true (ai_move (ai, 4, 6));
33447        assert_true (ai_move (ai, 3, 6));
33448        assert_true (ai_move (ai, 4, 7));
33449        assert_true (ai_move (ai, 2, 2));
33450        assert_true (ai_move (ai, 2, 1));
33451        assert_true (ai_move (ai, 3, 2));
33452        assert_true (ai_move (ai, 3, 1));
33453        assert_true (ai_move (ai, 1, 2));
33454        assert_true (ai_move (ai, 0, 2));
33455        assert_true (ai_move (ai, 0, 3));
33456        assert_true (ai_move (ai, 5, 1));
33457        assert_true (ai_move (ai, 5, 2));
33458        assert_true (ai_move (ai, 6, 2));
33459        assert_true (ai_move (ai, 4, 1));
33460        assert_true (ai_move (ai, 0, 5));
33461        assert_true (ai_move (ai, 6, 3));
33462        assert_true (ai_move (ai, 0, 4));
33463        assert_true (ai_move (ai, 5, 0));
33464        assert_true (ai_move (ai, 5, 6));
33465        assert_true (ai_move (ai, 7, 2));
33466        assert_true (ai_move (ai, 5, 5));
33467        assert_true (ai_move (ai, 3, 0));
33468        assert_true (ai_move (ai, 5, 4));
33469        assert_true (ai_move (ai, 2, 0));
33470        assert_true (ai_move (ai, 4, 0));
33471        assert_true (ai_move (ai, 6, 5));
33472        assert_true (ai_move (ai, 5, 3));
33473        assert_true (ai_move (ai, 6, 4));
33474        assert_true (ai_move (ai, 7, 5));
33475        assert_true (ai_move (ai, 5, 7));
33476        assert_true (ai_move (ai, 6, 7));
33477        assert_true (ai_move (ai, 1, 1));
33478        assert_true (ai_move (ai, 7, 4));
33479        assert_true (ai_move (ai, 1, 7));
33480        assert_true (ai_move (ai, 0, 7));
33481        assert_true (ai_move (ai, 0, 6));
33482        assert_true (ai_move (ai, 7, 1));
33483        assert_true (ai_move (ai, 0, 1));
33484        assert_true (ai_move (ai, 7, 3));
33485        assert_true (ai_move (ai, 7, 6));
33486        assert_true (ai_move (ai, 7, 7));
33487        assert_true (ai_move (ai, 6, 1));
33488        assert_true (ai_move (ai, 1, 6));
33489        assert_true (ai_move (ai, 6, 6));
33490        assert_true (ai_move (ai, 0, 0));
33491        assert_true (ai_move (ai, 1, 0));
33492        assert_true (ai_move (ai, 6, 0));
33493        assert_true (ai_move (ai, 7, 0));
33494    }
33495
33496    private static inline void test_complete_reversi_game_433 ()
33497    {
33498                                  /* 0 1 2 3 4 5 6 7 */
33499        string [] board = {/* 0 */ " . . . . . . . .",
33500                           /* 1 */ " . . . . . . . .",
33501                           /* 2 */ " . . . . . . . .",
33502                           /* 3 */ " . . . D D . . .",
33503                           /* 4 */ " . . L D L . . .",
33504                           /* 5 */ " . . L L . . . .",
33505                           /* 6 */ " . . L . . . . .",
33506                           /* 7 */ " . . . . . . . ."};
33507
33508        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33509        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33510
33511        assert_true (ai_move (ai, 5, 5));
33512        assert_true (ai_move (ai, 4, 2));
33513        assert_true (ai_move (ai, 3, 6));
33514        assert_true (ai_move (ai, 4, 6));
33515        assert_true (ai_move (ai, 4, 1));
33516        assert_true (ai_move (ai, 6, 4));
33517        assert_true (ai_move (ai, 3, 2));
33518        assert_true (ai_move (ai, 5, 3));
33519        assert_true (ai_move (ai, 6, 3));
33520        assert_true (ai_move (ai, 2, 2));
33521        assert_true (ai_move (ai, 1, 2));
33522        assert_true (ai_move (ai, 5, 1));
33523        assert_true (ai_move (ai, 3, 1));
33524        assert_true (ai_move (ai, 3, 0));
33525        assert_true (ai_move (ai, 2, 0));
33526        assert_true (ai_move (ai, 5, 0));
33527        assert_true (ai_move (ai, 2, 3));
33528        assert_true (ai_move (ai, 2, 1));
33529        assert_true (ai_move (ai, 1, 3));
33530        assert_true (ai_move (ai, 1, 4));
33531        assert_true (ai_move (ai, 5, 4));
33532        assert_true (ai_move (ai, 0, 4));
33533        assert_true (ai_move (ai, 5, 6));
33534        assert_true (ai_move (ai, 0, 3));
33535        assert_true (ai_move (ai, 0, 2));
33536        assert_true (ai_move (ai, 0, 1));
33537        assert_true (ai_move (ai, 6, 5));
33538        assert_true (ai_move (ai, 5, 2));
33539        assert_true (ai_move (ai, 2, 7));
33540        assert_true (ai_move (ai, 1, 5));
33541        assert_true (ai_move (ai, 6, 2));
33542        assert_true (ai_move (ai, 7, 2));
33543        assert_true (ai_move (ai, 3, 7));
33544        assert_true (ai_move (ai, 7, 3));
33545        assert_true (ai_move (ai, 4, 5));
33546        assert_true (ai_move (ai, 7, 4));
33547        assert_true (ai_move (ai, 0, 5));
33548        assert_true (ai_move (ai, 0, 6));
33549        assert_true (ai_move (ai, 7, 5));
33550        assert_true (ai_move (ai, 1, 6));
33551        assert_true (ai_move (ai, 7, 1));
33552        assert_true (ai_move (ai, 5, 7));
33553        assert_true (ai_move (ai, 4, 0));
33554        assert_true (ai_move (ai, 1, 0));
33555        assert_true (ai_move (ai, 4, 7));
33556        assert_true (ai_move (ai, 1, 7));
33557        assert_true (ai_move (ai, 1, 1));
33558        assert_true (ai_move (ai, 6, 1));
33559        assert_true (ai_move (ai, 6, 0));
33560        assert_true (ai_move (ai, 7, 0));
33561        assert_true (game.pass ());
33562        assert_true (ai_move (ai, 7, 6));
33563        assert_true (ai_move (ai, 6, 6));
33564        assert_true (ai_move (ai, 6, 7));
33565    }
33566
33567    private static inline void test_complete_reversi_game_434 ()
33568    {
33569                                  /* 0 1 2 3 4 5 6 7 */
33570        string [] board = {/* 0 */ " . . . . . . . .",
33571                           /* 1 */ " . . . . . . . .",
33572                           /* 2 */ " . . L . . . . .",
33573                           /* 3 */ " . . . L D . . .",
33574                           /* 4 */ " . . L D L . . .",
33575                           /* 5 */ " . . D D . . . .",
33576                           /* 6 */ " . . . . . . . .",
33577                           /* 7 */ " . . . . . . . ."};
33578
33579        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33580        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33581
33582        assert_true (ai_move (ai, 1, 4));
33583        assert_true (ai_move (ai, 2, 6));
33584        assert_true (ai_move (ai, 4, 6));
33585        assert_true (ai_move (ai, 1, 5));
33586        assert_true (ai_move (ai, 0, 5));
33587        assert_true (ai_move (ai, 5, 7));
33588        assert_true (ai_move (ai, 3, 6));
33589        assert_true (ai_move (ai, 0, 4));
33590        assert_true (ai_move (ai, 4, 5));
33591        assert_true (ai_move (ai, 5, 5));
33592        assert_true (ai_move (ai, 6, 5));
33593        assert_true (ai_move (ai, 6, 4));
33594        assert_true (ai_move (ai, 4, 7));
33595        assert_true (ai_move (ai, 7, 5));
33596        assert_true (ai_move (ai, 0, 3));
33597        assert_true (ai_move (ai, 3, 7));
33598        assert_true (ai_move (ai, 2, 7));
33599        assert_true (ai_move (ai, 1, 7));
33600        assert_true (ai_move (ai, 5, 6));
33601        assert_true (ai_move (ai, 5, 4));
33602        assert_true (ai_move (ai, 5, 3));
33603        assert_true (ai_move (ai, 6, 7));
33604        assert_true (ai_move (ai, 1, 3));
33605        assert_true (ai_move (ai, 2, 3));
33606        assert_true (ai_move (ai, 3, 1));
33607        assert_true (ai_move (ai, 2, 1));
33608        assert_true (ai_move (ai, 4, 2));
33609        assert_true (ai_move (ai, 0, 2));
33610        assert_true (ai_move (ai, 0, 1));
33611        assert_true (ai_move (ai, 6, 2));
33612        assert_true (ai_move (ai, 5, 2));
33613        assert_true (ai_move (ai, 5, 1));
33614        assert_true (ai_move (ai, 6, 3));
33615        assert_true (ai_move (ai, 3, 2));
33616        assert_true (ai_move (ai, 4, 1));
33617        assert_true (ai_move (ai, 1, 2));
33618        assert_true (ai_move (ai, 5, 0));
33619        assert_true (ai_move (ai, 7, 3));
33620        assert_true (ai_move (ai, 7, 2));
33621        assert_true (ai_move (ai, 3, 0));
33622        assert_true (ai_move (ai, 4, 0));
33623        assert_true (ai_move (ai, 2, 0));
33624        assert_true (ai_move (ai, 1, 0));
33625        assert_true (ai_move (ai, 1, 1));
33626        assert_true (ai_move (ai, 7, 4));
33627        assert_true (ai_move (ai, 7, 1));
33628        assert_true (ai_move (ai, 0, 0));
33629        assert_true (ai_move (ai, 6, 1));
33630        assert_true (ai_move (ai, 7, 0));
33631        assert_true (ai_move (ai, 6, 0));
33632        assert_true (ai_move (ai, 7, 6));
33633        assert_true (ai_move (ai, 1, 6));
33634        assert_true (ai_move (ai, 0, 6));
33635        assert_true (ai_move (ai, 6, 6));
33636        assert_true (ai_move (ai, 7, 7));
33637        assert_true (game.pass ());
33638        assert_true (ai_move (ai, 0, 7));
33639    }
33640
33641    private static inline void test_complete_reversi_game_435 ()
33642    {
33643                                  /* 0 1 2 3 4 5 6 7 */
33644        string [] board = {/* 0 */ " . . . . . . . .",
33645                           /* 1 */ " . . . . . . . .",
33646                           /* 2 */ " . . . . . L . .",
33647                           /* 3 */ " . . . D L . . .",
33648                           /* 4 */ " . . D L L . . .",
33649                           /* 5 */ " . D . D . . . .",
33650                           /* 6 */ " . . . . . . . .",
33651                           /* 7 */ " . . . . . . . ."};
33652
33653        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33654        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33655
33656        assert_true (ai_move (ai, 5, 5));
33657        assert_true (ai_move (ai, 5, 4));
33658        assert_true (ai_move (ai, 5, 3));
33659        assert_true (ai_move (ai, 1, 4));
33660        assert_true (ai_move (ai, 5, 1));
33661        assert_true (ai_move (ai, 4, 6));
33662        assert_true (ai_move (ai, 2, 6));
33663        assert_true (ai_move (ai, 3, 6));
33664        assert_true (ai_move (ai, 1, 3));
33665        assert_true (ai_move (ai, 0, 4));
33666        assert_true (ai_move (ai, 5, 7));
33667        assert_true (ai_move (ai, 2, 2));
33668        assert_true (ai_move (ai, 3, 7));
33669        assert_true (ai_move (ai, 3, 2));
33670        assert_true (ai_move (ai, 0, 2));
33671        assert_true (ai_move (ai, 1, 2));
33672        assert_true (ai_move (ai, 4, 2));
33673        assert_true (ai_move (ai, 6, 4));
33674        assert_true (ai_move (ai, 6, 5));
33675        assert_true (ai_move (ai, 6, 2));
33676        assert_true (ai_move (ai, 6, 3));
33677        assert_true (ai_move (ai, 4, 1));
33678        assert_true (ai_move (ai, 7, 2));
33679        assert_true (ai_move (ai, 2, 1));
33680        assert_true (ai_move (ai, 2, 0));
33681        assert_true (ai_move (ai, 7, 5));
33682        assert_true (ai_move (ai, 7, 3));
33683        assert_true (ai_move (ai, 4, 5));
33684        assert_true (ai_move (ai, 5, 6));
33685        assert_true (ai_move (ai, 7, 4));
33686        assert_true (ai_move (ai, 7, 6));
33687        assert_true (ai_move (ai, 3, 1));
33688        assert_true (ai_move (ai, 4, 0));
33689        assert_true (ai_move (ai, 3, 0));
33690        assert_true (ai_move (ai, 2, 5));
33691        assert_true (ai_move (ai, 0, 5));
33692        assert_true (ai_move (ai, 2, 3));
33693        assert_true (ai_move (ai, 5, 0));
33694        assert_true (ai_move (ai, 6, 0));
33695        assert_true (ai_move (ai, 2, 7));
33696        assert_true (ai_move (ai, 6, 1));
33697        assert_true (ai_move (ai, 4, 7));
33698        assert_true (ai_move (ai, 1, 7));
33699        assert_true (ai_move (ai, 7, 0));
33700        assert_true (ai_move (ai, 0, 3));
33701        assert_true (ai_move (ai, 1, 0));
33702        assert_true (ai_move (ai, 0, 6));
33703        assert_true (ai_move (ai, 1, 6));
33704        assert_true (ai_move (ai, 1, 1));
33705        assert_true (ai_move (ai, 7, 1));
33706        assert_true (game.pass ());
33707        assert_true (ai_move (ai, 7, 7));
33708        assert_true (game.pass ());
33709        assert_true (ai_move (ai, 6, 7));
33710        assert_true (ai_move (ai, 6, 6));
33711        assert_true (ai_move (ai, 0, 7));
33712        assert_true (game.pass ());
33713        assert_true (ai_move (ai, 0, 1));
33714        assert_true (ai_move (ai, 0, 0));
33715    }
33716
33717    private static inline void test_complete_reversi_game_436 ()
33718    {
33719                                  /* 0 1 2 3 4 5 6 7 */
33720        string [] board = {/* 0 */ " . . . . . . . .",
33721                           /* 1 */ " . . . . . . . .",
33722                           /* 2 */ " . . . . L . . .",
33723                           /* 3 */ " . . . D L . . .",
33724                           /* 4 */ " . . D L L . . .",
33725                           /* 5 */ " . D . D . . . .",
33726                           /* 6 */ " . . . . . . . .",
33727                           /* 7 */ " . . . . . . . ."};
33728
33729        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33730        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33731
33732        assert_true (ai_move (ai, 5, 1));
33733        assert_true (ai_move (ai, 1, 4));
33734        assert_true (ai_move (ai, 5, 5));
33735        assert_true (ai_move (ai, 4, 1));
33736        assert_true (ai_move (ai, 1, 3));
33737        assert_true (ai_move (ai, 5, 4));
33738        assert_true (ai_move (ai, 3, 1));
33739        assert_true (ai_move (ai, 5, 6));
33740        assert_true (ai_move (ai, 5, 3));
33741        assert_true (ai_move (ai, 3, 6));
33742        assert_true (ai_move (ai, 2, 6));
33743        assert_true (ai_move (ai, 0, 4));
33744        assert_true (ai_move (ai, 6, 4));
33745        assert_true (ai_move (ai, 4, 6));
33746        assert_true (ai_move (ai, 5, 7));
33747        assert_true (ai_move (ai, 3, 7));
33748        assert_true (ai_move (ai, 1, 7));
33749        assert_true (ai_move (ai, 2, 2));
33750        assert_true (ai_move (ai, 0, 2));
33751        assert_true (ai_move (ai, 4, 0));
33752        assert_true (ai_move (ai, 2, 0));
33753        assert_true (ai_move (ai, 6, 2));
33754        assert_true (ai_move (ai, 2, 5));
33755        assert_true (ai_move (ai, 1, 2));
33756        assert_true (ai_move (ai, 3, 2));
33757        assert_true (ai_move (ai, 7, 3));
33758        assert_true (ai_move (ai, 0, 5));
33759        assert_true (ai_move (ai, 5, 2));
33760        assert_true (ai_move (ai, 0, 3));
33761        assert_true (ai_move (ai, 2, 3));
33762        assert_true (ai_move (ai, 6, 3));
33763        assert_true (ai_move (ai, 7, 2));
33764        assert_true (ai_move (ai, 6, 5));
33765        assert_true (ai_move (ai, 7, 5));
33766        assert_true (ai_move (ai, 4, 7));
33767        assert_true (ai_move (ai, 6, 7));
33768        assert_true (ai_move (ai, 5, 0));
33769        assert_true (ai_move (ai, 6, 0));
33770        assert_true (ai_move (ai, 7, 4));
33771        assert_true (ai_move (ai, 4, 5));
33772        assert_true (ai_move (ai, 6, 6));
33773        assert_true (ai_move (ai, 2, 1));
33774        assert_true (ai_move (ai, 1, 0));
33775        assert_true (ai_move (ai, 6, 1));
33776        assert_true (ai_move (ai, 7, 0));
33777        assert_true (ai_move (ai, 7, 1));
33778        assert_true (ai_move (ai, 3, 0));
33779        assert_true (ai_move (ai, 0, 6));
33780        assert_true (ai_move (ai, 0, 7));
33781        assert_true (ai_move (ai, 1, 6));
33782        assert_true (ai_move (ai, 2, 7));
33783        assert_true (ai_move (ai, 7, 7));
33784        assert_true (ai_move (ai, 7, 6));
33785        assert_true (ai_move (ai, 0, 1));
33786        assert_true (ai_move (ai, 1, 1));
33787        assert_true (ai_move (ai, 0, 0));
33788    }
33789
33790    private static inline void test_complete_reversi_game_437 ()
33791    {
33792                                  /* 0 1 2 3 4 5 6 7 */
33793        string [] board = {/* 0 */ " . . . . . . . .",
33794                           /* 1 */ " . . . . . . . .",
33795                           /* 2 */ " . . . . . . . .",
33796                           /* 3 */ " . . . D D . . .",
33797                           /* 4 */ " . . D L L . . .",
33798                           /* 5 */ " . D . L . . . .",
33799                           /* 6 */ " . . . L . . . .",
33800                           /* 7 */ " . . . . . . . ."};
33801
33802        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33803        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33804
33805        assert_true (ai_move (ai, 4, 6));
33806        assert_true (ai_move (ai, 2, 6));
33807        assert_true (ai_move (ai, 5, 5));
33808        assert_true (ai_move (ai, 1, 3));
33809        assert_true (ai_move (ai, 0, 2));
33810        assert_true (ai_move (ai, 1, 4));
33811        assert_true (ai_move (ai, 3, 7));
33812        assert_true (ai_move (ai, 5, 2));
33813        assert_true (ai_move (ai, 5, 3));
33814        assert_true (ai_move (ai, 5, 7));
33815        assert_true (ai_move (ai, 5, 1));
33816        assert_true (ai_move (ai, 6, 4));
33817        assert_true (ai_move (ai, 5, 6));
33818        assert_true (ai_move (ai, 5, 4));
33819        assert_true (ai_move (ai, 6, 5));
33820        assert_true (ai_move (ai, 7, 5));
33821        assert_true (ai_move (ai, 4, 5));
33822        assert_true (ai_move (ai, 4, 7));
33823        assert_true (ai_move (ai, 6, 7));
33824        assert_true (ai_move (ai, 6, 2));
33825        assert_true (ai_move (ai, 6, 6));
33826        assert_true (ai_move (ai, 5, 0));
33827        assert_true (ai_move (ai, 0, 4));
33828        assert_true (ai_move (ai, 2, 5));
33829        assert_true (ai_move (ai, 3, 2));
33830        assert_true (ai_move (ai, 0, 5));
33831        assert_true (ai_move (ai, 2, 3));
33832        assert_true (ai_move (ai, 2, 1));
33833        assert_true (ai_move (ai, 3, 1));
33834        assert_true (ai_move (ai, 4, 2));
33835        assert_true (ai_move (ai, 2, 2));
33836        assert_true (ai_move (ai, 3, 0));
33837        assert_true (ai_move (ai, 4, 1));
33838        assert_true (ai_move (ai, 1, 2));
33839        assert_true (ai_move (ai, 0, 3));
33840        assert_true (ai_move (ai, 0, 1));
33841        assert_true (ai_move (ai, 4, 0));
33842        assert_true (ai_move (ai, 2, 0));
33843        assert_true (ai_move (ai, 7, 2));
33844        assert_true (ai_move (ai, 6, 3));
33845        assert_true (ai_move (ai, 1, 1));
33846        assert_true (ai_move (ai, 7, 3));
33847        assert_true (ai_move (ai, 7, 4));
33848        assert_true (ai_move (ai, 7, 1));
33849        assert_true (ai_move (ai, 1, 6));
33850        assert_true (ai_move (ai, 0, 6));
33851        assert_true (ai_move (ai, 6, 0));
33852        assert_true (ai_move (ai, 7, 0));
33853        assert_true (ai_move (ai, 6, 1));
33854        assert_true (ai_move (ai, 0, 7));
33855        assert_true (ai_move (ai, 1, 7));
33856        assert_true (ai_move (ai, 2, 7));
33857        assert_true (ai_move (ai, 1, 0));
33858        assert_true (ai_move (ai, 7, 7));
33859        assert_true (game.pass ());
33860        assert_true (ai_move (ai, 0, 0));
33861        assert_true (ai_move (ai, 7, 6));
33862    }
33863
33864    private static inline void test_complete_reversi_game_438 ()
33865    {
33866                                  /* 0 1 2 3 4 5 6 7 */
33867        string [] board = {/* 0 */ " . . . . . . . .",
33868                           /* 1 */ " . . . . . . . .",
33869                           /* 2 */ " . . . L . . . .",
33870                           /* 3 */ " . . . L D . . .",
33871                           /* 4 */ " . . D L L . . .",
33872                           /* 5 */ " . D . D . . . .",
33873                           /* 6 */ " . . . . . . . .",
33874                           /* 7 */ " . . . . . . . ."};
33875
33876        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33877        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33878
33879        assert_true (ai_move (ai, 2, 1));
33880        assert_true (ai_move (ai, 1, 4));
33881        assert_true (ai_move (ai, 5, 3));
33882        assert_true (ai_move (ai, 3, 1));
33883        assert_true (ai_move (ai, 4, 2));
33884        assert_true (ai_move (ai, 6, 4));
33885        assert_true (ai_move (ai, 2, 5));
33886        assert_true (ai_move (ai, 2, 6));
33887        assert_true (ai_move (ai, 3, 6));
33888        assert_true (ai_move (ai, 0, 4));
33889        assert_true (ai_move (ai, 0, 5));
33890        assert_true (ai_move (ai, 2, 2));
33891        assert_true (ai_move (ai, 2, 7));
33892        assert_true (ai_move (ai, 2, 0));
33893        assert_true (ai_move (ai, 0, 3));
33894        assert_true (ai_move (ai, 5, 4));
33895        assert_true (ai_move (ai, 5, 2));
33896        assert_true (ai_move (ai, 6, 2));
33897        assert_true (ai_move (ai, 2, 3));
33898        assert_true (ai_move (ai, 1, 3));
33899        assert_true (ai_move (ai, 1, 2));
33900        assert_true (ai_move (ai, 0, 2));
33901        assert_true (ai_move (ai, 0, 1));
33902        assert_true (ai_move (ai, 3, 7));
33903        assert_true (ai_move (ai, 4, 1));
33904        assert_true (ai_move (ai, 4, 0));
33905        assert_true (ai_move (ai, 5, 1));
33906        assert_true (ai_move (ai, 5, 0));
33907        assert_true (ai_move (ai, 6, 3));
33908        assert_true (ai_move (ai, 7, 2));
33909        assert_true (ai_move (ai, 4, 7));
33910        assert_true (ai_move (ai, 1, 6));
33911        assert_true (ai_move (ai, 4, 6));
33912        assert_true (ai_move (ai, 4, 5));
33913        assert_true (ai_move (ai, 5, 5));
33914        assert_true (ai_move (ai, 1, 7));
33915        assert_true (ai_move (ai, 7, 5));
33916        assert_true (ai_move (ai, 5, 7));
33917        assert_true (ai_move (ai, 5, 6));
33918        assert_true (ai_move (ai, 6, 7));
33919        assert_true (ai_move (ai, 7, 3));
33920        assert_true (ai_move (ai, 0, 6));
33921        assert_true (ai_move (ai, 0, 7));
33922        assert_true (ai_move (ai, 6, 6));
33923        assert_true (ai_move (ai, 7, 7));
33924        assert_true (ai_move (ai, 7, 4));
33925        assert_true (ai_move (ai, 7, 1));
33926        assert_true (ai_move (ai, 1, 1));
33927        assert_true (ai_move (ai, 6, 5));
33928        assert_true (ai_move (ai, 7, 6));
33929        assert_true (ai_move (ai, 6, 0));
33930        assert_true (ai_move (ai, 7, 0));
33931        assert_true (ai_move (ai, 6, 1));
33932        assert_true (game.pass ());
33933        assert_true (ai_move (ai, 3, 0));
33934        assert_true (ai_move (ai, 1, 0));
33935        assert_true (ai_move (ai, 0, 0));
33936    }
33937
33938    private static inline void test_complete_reversi_game_439 ()
33939    {
33940                                  /* 0 1 2 3 4 5 6 7 */
33941        string [] board = {/* 0 */ " . . . . . . . .",
33942                           /* 1 */ " . . . . . . . .",
33943                           /* 2 */ " . . . . . . . .",
33944                           /* 3 */ " . . . D D . . .",
33945                           /* 4 */ " . . D L L . . .",
33946                           /* 5 */ " . D . L . . . .",
33947                           /* 6 */ " . . L . . . . .",
33948                           /* 7 */ " . . . . . . . ."};
33949
33950        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
33951        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
33952
33953        assert_true (ai_move (ai, 4, 6));
33954        assert_true (ai_move (ai, 3, 6));
33955        assert_true (ai_move (ai, 5, 5));
33956        assert_true (ai_move (ai, 1, 3));
33957        assert_true (ai_move (ai, 0, 2));
33958        assert_true (ai_move (ai, 1, 4));
33959        assert_true (ai_move (ai, 3, 7));
33960        assert_true (ai_move (ai, 5, 2));
33961        assert_true (ai_move (ai, 5, 3));
33962        assert_true (ai_move (ai, 5, 7));
33963        assert_true (ai_move (ai, 5, 1));
33964        assert_true (ai_move (ai, 6, 4));
33965        assert_true (ai_move (ai, 5, 6));
33966        assert_true (ai_move (ai, 5, 4));
33967        assert_true (ai_move (ai, 6, 5));
33968        assert_true (ai_move (ai, 7, 5));
33969        assert_true (ai_move (ai, 4, 5));
33970        assert_true (ai_move (ai, 4, 7));
33971        assert_true (ai_move (ai, 6, 7));
33972        assert_true (ai_move (ai, 6, 2));
33973        assert_true (ai_move (ai, 6, 6));
33974        assert_true (ai_move (ai, 5, 0));
33975        assert_true (ai_move (ai, 0, 4));
33976        assert_true (ai_move (ai, 2, 5));
33977        assert_true (ai_move (ai, 3, 2));
33978        assert_true (ai_move (ai, 0, 5));
33979        assert_true (ai_move (ai, 2, 3));
33980        assert_true (ai_move (ai, 2, 1));
33981        assert_true (ai_move (ai, 3, 1));
33982        assert_true (ai_move (ai, 4, 2));
33983        assert_true (ai_move (ai, 2, 2));
33984        assert_true (ai_move (ai, 3, 0));
33985        assert_true (ai_move (ai, 4, 1));
33986        assert_true (ai_move (ai, 1, 2));
33987        assert_true (ai_move (ai, 0, 3));
33988        assert_true (ai_move (ai, 0, 1));
33989        assert_true (ai_move (ai, 4, 0));
33990        assert_true (ai_move (ai, 2, 0));
33991        assert_true (ai_move (ai, 7, 2));
33992        assert_true (ai_move (ai, 6, 3));
33993        assert_true (ai_move (ai, 1, 1));
33994        assert_true (ai_move (ai, 7, 3));
33995        assert_true (ai_move (ai, 7, 4));
33996        assert_true (ai_move (ai, 7, 1));
33997        assert_true (ai_move (ai, 1, 6));
33998        assert_true (ai_move (ai, 0, 6));
33999        assert_true (ai_move (ai, 6, 0));
34000        assert_true (ai_move (ai, 7, 0));
34001        assert_true (ai_move (ai, 6, 1));
34002        assert_true (ai_move (ai, 0, 7));
34003        assert_true (ai_move (ai, 1, 7));
34004        assert_true (ai_move (ai, 2, 7));
34005        assert_true (ai_move (ai, 1, 0));
34006        assert_true (ai_move (ai, 7, 7));
34007        assert_true (game.pass ());
34008        assert_true (ai_move (ai, 0, 0));
34009        assert_true (ai_move (ai, 7, 6));
34010    }
34011
34012    private static inline void test_complete_reversi_game_440 ()
34013    {
34014                                  /* 0 1 2 3 4 5 6 7 */
34015        string [] board = {/* 0 */ " . . . . . . . .",
34016                           /* 1 */ " . . . . . . . .",
34017                           /* 2 */ " . . L . . . . .",
34018                           /* 3 */ " . . . L D . . .",
34019                           /* 4 */ " . . D L L . . .",
34020                           /* 5 */ " . D . D . . . .",
34021                           /* 6 */ " . . . . . . . .",
34022                           /* 7 */ " . . . . . . . ."};
34023
34024        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34025        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34026
34027        assert_true (ai_move (ai, 2, 5));
34028        assert_true (ai_move (ai, 2, 6));
34029        assert_true (ai_move (ai, 2, 7));
34030        assert_true (ai_move (ai, 1, 3));
34031        assert_true (ai_move (ai, 3, 6));
34032        assert_true (ai_move (ai, 4, 6));
34033        assert_true (ai_move (ai, 4, 5));
34034        assert_true (ai_move (ai, 3, 7));
34035        assert_true (ai_move (ai, 4, 7));
34036        assert_true (ai_move (ai, 0, 5));
34037        assert_true (ai_move (ai, 1, 4));
34038        assert_true (ai_move (ai, 2, 3));
34039        assert_true (ai_move (ai, 2, 1));
34040        assert_true (ai_move (ai, 3, 1));
34041        assert_true (ai_move (ai, 4, 2));
34042        assert_true (ai_move (ai, 2, 0));
34043        assert_true (ai_move (ai, 0, 2));
34044        assert_true (ai_move (ai, 0, 4));
34045        assert_true (ai_move (ai, 1, 1));
34046        assert_true (ai_move (ai, 3, 2));
34047        assert_true (ai_move (ai, 3, 0));
34048        assert_true (ai_move (ai, 5, 1));
34049        assert_true (ai_move (ai, 4, 1));
34050        assert_true (ai_move (ai, 5, 7));
34051        assert_true (ai_move (ai, 6, 7));
34052        assert_true (ai_move (ai, 5, 0));
34053        assert_true (ai_move (ai, 1, 0));
34054        assert_true (ai_move (ai, 5, 6));
34055        assert_true (ai_move (ai, 5, 4));
34056        assert_true (ai_move (ai, 5, 2));
34057        assert_true (ai_move (ai, 6, 2));
34058        assert_true (ai_move (ai, 6, 3));
34059        assert_true (ai_move (ai, 1, 2));
34060        assert_true (ai_move (ai, 6, 5));
34061        assert_true (ai_move (ai, 5, 5));
34062        assert_true (ai_move (ai, 4, 0));
34063        assert_true (ai_move (ai, 6, 0));
34064        assert_true (ai_move (ai, 7, 2));
34065        assert_true (ai_move (ai, 6, 4));
34066        assert_true (ai_move (ai, 5, 3));
34067        assert_true (ai_move (ai, 7, 5));
34068        assert_true (ai_move (ai, 7, 4));
34069        assert_true (ai_move (ai, 0, 3));
34070        assert_true (ai_move (ai, 1, 6));
34071        assert_true (ai_move (ai, 7, 3));
34072        assert_true (ai_move (ai, 7, 6));
34073        assert_true (ai_move (ai, 0, 7));
34074        assert_true (ai_move (ai, 7, 1));
34075        assert_true (ai_move (ai, 0, 6));
34076        assert_true (ai_move (ai, 1, 7));
34077        assert_true (ai_move (ai, 6, 1));
34078        assert_true (ai_move (ai, 7, 7));
34079        assert_true (ai_move (ai, 6, 6));
34080        assert_true (ai_move (ai, 0, 0));
34081        assert_true (ai_move (ai, 0, 1));
34082        assert_true (ai_move (ai, 7, 0));
34083    }
34084
34085    private static inline void test_complete_reversi_game_441 ()
34086    {
34087                                  /* 0 1 2 3 4 5 6 7 */
34088        string [] board = {/* 0 */ " . . . . . . . .",
34089                           /* 1 */ " . . . . . . . .",
34090                           /* 2 */ " . . . . . . . .",
34091                           /* 3 */ " . . . D D . . .",
34092                           /* 4 */ " . L L L L . . .",
34093                           /* 5 */ " . D . D . . . .",
34094                           /* 6 */ " . . . . . . . .",
34095                           /* 7 */ " . . . . . . . ."};
34096
34097        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34098        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34099
34100        assert_true (ai_move (ai, 5, 5));
34101        assert_true (ai_move (ai, 5, 2));
34102        assert_true (ai_move (ai, 5, 3));
34103        assert_true (ai_move (ai, 3, 6));
34104        assert_true (ai_move (ai, 5, 1));
34105        assert_true (ai_move (ai, 5, 4));
34106        assert_true (ai_move (ai, 6, 5));
34107        assert_true (ai_move (ai, 6, 4));
34108        assert_true (ai_move (ai, 7, 5));
34109        assert_true (ai_move (ai, 5, 6));
34110        assert_true (ai_move (ai, 4, 6));
34111        assert_true (ai_move (ai, 6, 2));
34112        assert_true (ai_move (ai, 4, 2));
34113        assert_true (ai_move (ai, 5, 0));
34114        assert_true (ai_move (ai, 6, 3));
34115        assert_true (ai_move (ai, 7, 2));
34116        assert_true (ai_move (ai, 5, 7));
34117        assert_true (ai_move (ai, 4, 1));
34118        assert_true (ai_move (ai, 3, 1));
34119        assert_true (ai_move (ai, 3, 2));
34120        assert_true (ai_move (ai, 7, 3));
34121        assert_true (ai_move (ai, 7, 4));
34122        assert_true (ai_move (ai, 7, 1));
34123        assert_true (ai_move (ai, 3, 7));
34124        assert_true (ai_move (ai, 4, 5));
34125        assert_true (ai_move (ai, 3, 0));
34126        assert_true (ai_move (ai, 2, 0));
34127        assert_true (ai_move (ai, 2, 1));
34128        assert_true (ai_move (ai, 4, 7));
34129        assert_true (ai_move (ai, 6, 7));
34130        assert_true (ai_move (ai, 2, 5));
34131        assert_true (ai_move (ai, 2, 6));
34132        assert_true (ai_move (ai, 1, 3));
34133        assert_true (ai_move (ai, 2, 3));
34134        assert_true (ai_move (ai, 4, 0));
34135        assert_true (ai_move (ai, 1, 0));
34136        assert_true (ai_move (ai, 2, 7));
34137        assert_true (ai_move (ai, 1, 7));
34138        assert_true (ai_move (ai, 1, 2));
34139        assert_true (ai_move (ai, 2, 2));
34140        assert_true (ai_move (ai, 6, 1));
34141        assert_true (ai_move (ai, 6, 6));
34142        assert_true (ai_move (ai, 1, 6));
34143        assert_true (ai_move (ai, 0, 3));
34144        assert_true (ai_move (ai, 0, 4));
34145        assert_true (ai_move (ai, 7, 0));
34146        assert_true (ai_move (ai, 0, 2));
34147        assert_true (ai_move (ai, 7, 6));
34148        assert_true (ai_move (ai, 7, 7));
34149        assert_true (ai_move (ai, 0, 7));
34150        assert_true (ai_move (ai, 1, 1));
34151        assert_true (ai_move (ai, 0, 5));
34152        assert_true (ai_move (ai, 6, 0));
34153        assert_true (ai_move (ai, 0, 1));
34154        assert_true (ai_move (ai, 0, 0));
34155        assert_true (game.pass ());
34156        assert_true (ai_move (ai, 0, 6));
34157    }
34158
34159    private static inline void test_complete_reversi_game_442 ()
34160    {
34161                                  /* 0 1 2 3 4 5 6 7 */
34162        string [] board = {/* 0 */ " . . . . . . . .",
34163                           /* 1 */ " . . . . . . . .",
34164                           /* 2 */ " . . . . . L . .",
34165                           /* 3 */ " . D . D L . . .",
34166                           /* 4 */ " . . D L L . . .",
34167                           /* 5 */ " . . . D . . . .",
34168                           /* 6 */ " . . . . . . . .",
34169                           /* 7 */ " . . . . . . . ."};
34170
34171        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34172        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34173
34174        assert_true (ai_move (ai, 5, 5));
34175        assert_true (ai_move (ai, 5, 4));
34176        assert_true (ai_move (ai, 5, 3));
34177        assert_true (ai_move (ai, 1, 4));
34178        assert_true (ai_move (ai, 5, 1));
34179        assert_true (ai_move (ai, 4, 6));
34180        assert_true (ai_move (ai, 2, 6));
34181        assert_true (ai_move (ai, 3, 6));
34182        assert_true (ai_move (ai, 5, 7));
34183        assert_true (ai_move (ai, 5, 6));
34184        assert_true (ai_move (ai, 0, 4));
34185        assert_true (ai_move (ai, 5, 0));
34186        assert_true (ai_move (ai, 3, 7));
34187        assert_true (ai_move (ai, 0, 2));
34188        assert_true (ai_move (ai, 1, 5));
34189        assert_true (ai_move (ai, 1, 7));
34190        assert_true (ai_move (ai, 2, 2));
34191        assert_true (ai_move (ai, 3, 2));
34192        assert_true (ai_move (ai, 6, 2));
34193        assert_true (ai_move (ai, 1, 2));
34194        assert_true (ai_move (ai, 4, 0));
34195        assert_true (ai_move (ai, 3, 0));
34196        assert_true (ai_move (ai, 6, 4));
34197        assert_true (ai_move (ai, 6, 3));
34198        assert_true (ai_move (ai, 7, 2));
34199        assert_true (ai_move (ai, 7, 5));
34200        assert_true (ai_move (ai, 4, 1));
34201        assert_true (ai_move (ai, 4, 2));
34202        assert_true (ai_move (ai, 6, 5));
34203        assert_true (ai_move (ai, 4, 5));
34204        assert_true (ai_move (ai, 2, 1));
34205        assert_true (ai_move (ai, 3, 1));
34206        assert_true (ai_move (ai, 2, 0));
34207        assert_true (ai_move (ai, 1, 0));
34208        assert_true (ai_move (ai, 1, 6));
34209        assert_true (ai_move (ai, 7, 4));
34210        assert_true (ai_move (ai, 7, 3));
34211        assert_true (ai_move (ai, 7, 1));
34212        assert_true (ai_move (ai, 6, 1));
34213        assert_true (ai_move (ai, 6, 6));
34214        assert_true (ai_move (ai, 2, 3));
34215        assert_true (ai_move (ai, 2, 5));
34216        assert_true (ai_move (ai, 7, 7));
34217        assert_true (ai_move (ai, 7, 0));
34218        assert_true (ai_move (ai, 6, 0));
34219        assert_true (ai_move (ai, 0, 7));
34220        assert_true (ai_move (ai, 0, 0));
34221        assert_true (ai_move (ai, 7, 6));
34222        assert_true (ai_move (ai, 1, 1));
34223        assert_true (ai_move (ai, 0, 6));
34224        assert_true (ai_move (ai, 0, 5));
34225        assert_true (ai_move (ai, 0, 3));
34226        assert_true (ai_move (ai, 6, 7));
34227        assert_true (ai_move (ai, 0, 1));
34228        assert_true (game.pass ());
34229        assert_true (ai_move (ai, 4, 7));
34230        assert_true (ai_move (ai, 2, 7));
34231    }
34232
34233    private static inline void test_complete_reversi_game_443 ()
34234    {
34235                                  /* 0 1 2 3 4 5 6 7 */
34236        string [] board = {/* 0 */ " . . . . . . . .",
34237                           /* 1 */ " . . . . . . . .",
34238                           /* 2 */ " . . . . L . . .",
34239                           /* 3 */ " . D . D L . . .",
34240                           /* 4 */ " . . D L L . . .",
34241                           /* 5 */ " . . . D . . . .",
34242                           /* 6 */ " . . . . . . . .",
34243                           /* 7 */ " . . . . . . . ."};
34244
34245        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34246        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34247
34248        assert_true (ai_move (ai, 5, 1));
34249        assert_true (ai_move (ai, 1, 4));
34250        assert_true (ai_move (ai, 5, 5));
34251        assert_true (ai_move (ai, 4, 1));
34252        assert_true (ai_move (ai, 1, 5));
34253        assert_true (ai_move (ai, 5, 4));
34254        assert_true (ai_move (ai, 3, 1));
34255        assert_true (ai_move (ai, 5, 6));
34256        assert_true (ai_move (ai, 5, 3));
34257        assert_true (ai_move (ai, 3, 6));
34258        assert_true (ai_move (ai, 2, 6));
34259        assert_true (ai_move (ai, 0, 4));
34260        assert_true (ai_move (ai, 6, 4));
34261        assert_true (ai_move (ai, 4, 6));
34262        assert_true (ai_move (ai, 5, 7));
34263        assert_true (ai_move (ai, 3, 7));
34264        assert_true (ai_move (ai, 1, 7));
34265        assert_true (ai_move (ai, 2, 2));
34266        assert_true (ai_move (ai, 0, 2));
34267        assert_true (ai_move (ai, 4, 0));
34268        assert_true (ai_move (ai, 2, 0));
34269        assert_true (ai_move (ai, 6, 2));
34270        assert_true (ai_move (ai, 2, 5));
34271        assert_true (ai_move (ai, 1, 2));
34272        assert_true (ai_move (ai, 3, 2));
34273        assert_true (ai_move (ai, 7, 3));
34274        assert_true (ai_move (ai, 0, 5));
34275        assert_true (ai_move (ai, 5, 2));
34276        assert_true (ai_move (ai, 0, 3));
34277        assert_true (ai_move (ai, 2, 3));
34278        assert_true (ai_move (ai, 6, 3));
34279        assert_true (ai_move (ai, 7, 2));
34280        assert_true (ai_move (ai, 6, 5));
34281        assert_true (ai_move (ai, 7, 5));
34282        assert_true (ai_move (ai, 4, 7));
34283        assert_true (ai_move (ai, 6, 7));
34284        assert_true (ai_move (ai, 5, 0));
34285        assert_true (ai_move (ai, 6, 0));
34286        assert_true (ai_move (ai, 7, 4));
34287        assert_true (ai_move (ai, 4, 5));
34288        assert_true (ai_move (ai, 6, 6));
34289        assert_true (ai_move (ai, 2, 1));
34290        assert_true (ai_move (ai, 1, 0));
34291        assert_true (ai_move (ai, 6, 1));
34292        assert_true (ai_move (ai, 7, 0));
34293        assert_true (ai_move (ai, 7, 1));
34294        assert_true (ai_move (ai, 3, 0));
34295        assert_true (ai_move (ai, 0, 6));
34296        assert_true (ai_move (ai, 0, 7));
34297        assert_true (ai_move (ai, 1, 6));
34298        assert_true (ai_move (ai, 2, 7));
34299        assert_true (ai_move (ai, 7, 7));
34300        assert_true (ai_move (ai, 7, 6));
34301        assert_true (ai_move (ai, 0, 1));
34302        assert_true (ai_move (ai, 1, 1));
34303        assert_true (ai_move (ai, 0, 0));
34304    }
34305
34306    private static inline void test_complete_reversi_game_444 ()
34307    {
34308                                  /* 0 1 2 3 4 5 6 7 */
34309        string [] board = {/* 0 */ " . . . . . . . .",
34310                           /* 1 */ " . . . . . . . .",
34311                           /* 2 */ " . . . . . . . .",
34312                           /* 3 */ " . D . D D . . .",
34313                           /* 4 */ " . . D L L . . .",
34314                           /* 5 */ " . . . L . . . .",
34315                           /* 6 */ " . . . L . . . .",
34316                           /* 7 */ " . . . . . . . ."};
34317
34318        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34319        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34320
34321        assert_true (ai_move (ai, 4, 6));
34322        assert_true (ai_move (ai, 2, 6));
34323        assert_true (ai_move (ai, 5, 5));
34324        assert_true (ai_move (ai, 1, 4));
34325        assert_true (ai_move (ai, 1, 5));
34326        assert_true (ai_move (ai, 5, 2));
34327        assert_true (ai_move (ai, 5, 3));
34328        assert_true (ai_move (ai, 5, 7));
34329        assert_true (ai_move (ai, 5, 1));
34330        assert_true (ai_move (ai, 6, 4));
34331        assert_true (ai_move (ai, 7, 5));
34332        assert_true (ai_move (ai, 7, 3));
34333        assert_true (ai_move (ai, 6, 6));
34334        assert_true (ai_move (ai, 4, 2));
34335        assert_true (ai_move (ai, 3, 2));
34336        assert_true (ai_move (ai, 5, 0));
34337        assert_true (ai_move (ai, 6, 2));
34338        assert_true (ai_move (ai, 5, 4));
34339        assert_true (ai_move (ai, 6, 3));
34340        assert_true (ai_move (ai, 4, 1));
34341        assert_true (ai_move (ai, 3, 1));
34342        assert_true (ai_move (ai, 2, 0));
34343        assert_true (ai_move (ai, 4, 5));
34344        assert_true (ai_move (ai, 6, 5));
34345        assert_true (ai_move (ai, 2, 5));
34346        assert_true (ai_move (ai, 5, 6));
34347        assert_true (ai_move (ai, 2, 7));
34348        assert_true (ai_move (ai, 0, 5));
34349        assert_true (ai_move (ai, 7, 4));
34350        assert_true (ai_move (ai, 7, 2));
34351        assert_true (ai_move (ai, 7, 1));
34352        assert_true (ai_move (ai, 3, 7));
34353        assert_true (ai_move (ai, 4, 7));
34354        assert_true (ai_move (ai, 1, 7));
34355        assert_true (ai_move (ai, 2, 3));
34356        assert_true (ai_move (ai, 1, 6));
34357        assert_true (ai_move (ai, 4, 0));
34358        assert_true (ai_move (ai, 2, 1));
34359        assert_true (ai_move (ai, 3, 0));
34360        assert_true (ai_move (ai, 0, 2));
34361        assert_true (ai_move (ai, 0, 3));
34362        assert_true (ai_move (ai, 0, 4));
34363        assert_true (ai_move (ai, 1, 2));
34364        assert_true (ai_move (ai, 6, 1));
34365        assert_true (ai_move (ai, 0, 6));
34366        assert_true (ai_move (ai, 0, 7));
34367        assert_true (ai_move (ai, 1, 0));
34368        assert_true (ai_move (ai, 0, 0));
34369        assert_true (ai_move (ai, 6, 0));
34370        assert_true (ai_move (ai, 1, 1));
34371        assert_true (ai_move (ai, 0, 1));
34372        assert_true (ai_move (ai, 6, 7));
34373        assert_true (game.pass ());
34374        assert_true (ai_move (ai, 2, 2));
34375        assert_true (game.pass ());
34376        assert_true (ai_move (ai, 7, 7));
34377        assert_true (ai_move (ai, 7, 6));
34378        assert_true (ai_move (ai, 7, 0));
34379    }
34380
34381    private static inline void test_complete_reversi_game_445 ()
34382    {
34383                                  /* 0 1 2 3 4 5 6 7 */
34384        string [] board = {/* 0 */ " . . . . . . . .",
34385                           /* 1 */ " . . . . . . . .",
34386                           /* 2 */ " . . . L . . . .",
34387                           /* 3 */ " . D . L D . . .",
34388                           /* 4 */ " . . D L L . . .",
34389                           /* 5 */ " . . . D . . . .",
34390                           /* 6 */ " . . . . . . . .",
34391                           /* 7 */ " . . . . . . . ."};
34392
34393        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34394        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34395
34396        assert_true (ai_move (ai, 2, 1));
34397        assert_true (ai_move (ai, 1, 5));
34398        assert_true (ai_move (ai, 5, 3));
34399        assert_true (ai_move (ai, 3, 1));
34400        assert_true (ai_move (ai, 4, 1));
34401        assert_true (ai_move (ai, 4, 6));
34402        assert_true (ai_move (ai, 2, 6));
34403        assert_true (ai_move (ai, 3, 6));
34404        assert_true (ai_move (ai, 0, 4));
34405        assert_true (ai_move (ai, 0, 2));
34406        assert_true (ai_move (ai, 4, 2));
34407        assert_true (ai_move (ai, 1, 4));
34408        assert_true (ai_move (ai, 2, 2));
34409        assert_true (ai_move (ai, 5, 4));
34410        assert_true (ai_move (ai, 6, 5));
34411        assert_true (ai_move (ai, 6, 4));
34412        assert_true (ai_move (ai, 7, 5));
34413        assert_true (ai_move (ai, 6, 2));
34414        assert_true (ai_move (ai, 6, 3));
34415        assert_true (ai_move (ai, 7, 2));
34416        assert_true (ai_move (ai, 7, 3));
34417        assert_true (ai_move (ai, 5, 2));
34418        assert_true (ai_move (ai, 5, 1));
34419        assert_true (ai_move (ai, 2, 0));
34420        assert_true (ai_move (ai, 5, 5));
34421        assert_true (ai_move (ai, 4, 0));
34422        assert_true (ai_move (ai, 5, 0));
34423        assert_true (ai_move (ai, 1, 2));
34424        assert_true (ai_move (ai, 2, 3));
34425        assert_true (ai_move (ai, 3, 0));
34426        assert_true (ai_move (ai, 1, 0));
34427        assert_true (ai_move (ai, 0, 6));
34428        assert_true (ai_move (ai, 2, 5));
34429        assert_true (ai_move (ai, 3, 7));
34430        assert_true (ai_move (ai, 2, 7));
34431        assert_true (ai_move (ai, 4, 5));
34432        assert_true (ai_move (ai, 7, 4));
34433        assert_true (ai_move (ai, 7, 6));
34434        assert_true (ai_move (ai, 5, 7));
34435        assert_true (ai_move (ai, 4, 7));
34436        assert_true (ai_move (ai, 5, 6));
34437        assert_true (ai_move (ai, 7, 1));
34438        assert_true (ai_move (ai, 0, 3));
34439        assert_true (ai_move (ai, 0, 5));
34440        assert_true (ai_move (ai, 6, 6));
34441        assert_true (ai_move (ai, 0, 1));
34442        assert_true (ai_move (ai, 1, 1));
34443        assert_true (ai_move (ai, 0, 0));
34444        assert_true (ai_move (ai, 1, 6));
34445        assert_true (ai_move (ai, 6, 0));
34446        assert_true (ai_move (ai, 6, 1));
34447        assert_true (ai_move (ai, 7, 0));
34448        assert_true (game.pass ());
34449        assert_true (ai_move (ai, 7, 7));
34450        assert_true (ai_move (ai, 6, 7));
34451        assert_true (ai_move (ai, 1, 7));
34452        assert_true (ai_move (ai, 0, 7));
34453    }
34454
34455    private static inline void test_complete_reversi_game_446 ()
34456    {
34457                                  /* 0 1 2 3 4 5 6 7 */
34458        string [] board = {/* 0 */ " . . . . . . . .",
34459                           /* 1 */ " . . . . . . . .",
34460                           /* 2 */ " . . . . . . . .",
34461                           /* 3 */ " . D . D D . . .",
34462                           /* 4 */ " . . D L L . . .",
34463                           /* 5 */ " . . . L . . . .",
34464                           /* 6 */ " . . L . . . . .",
34465                           /* 7 */ " . . . . . . . ."};
34466
34467        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34468        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34469
34470        assert_true (ai_move (ai, 4, 6));
34471        assert_true (ai_move (ai, 3, 6));
34472        assert_true (ai_move (ai, 5, 5));
34473        assert_true (ai_move (ai, 1, 4));
34474        assert_true (ai_move (ai, 1, 5));
34475        assert_true (ai_move (ai, 5, 2));
34476        assert_true (ai_move (ai, 5, 3));
34477        assert_true (ai_move (ai, 5, 7));
34478        assert_true (ai_move (ai, 5, 1));
34479        assert_true (ai_move (ai, 6, 4));
34480        assert_true (ai_move (ai, 7, 5));
34481        assert_true (ai_move (ai, 7, 3));
34482        assert_true (ai_move (ai, 6, 6));
34483        assert_true (ai_move (ai, 4, 2));
34484        assert_true (ai_move (ai, 3, 2));
34485        assert_true (ai_move (ai, 5, 0));
34486        assert_true (ai_move (ai, 6, 2));
34487        assert_true (ai_move (ai, 5, 4));
34488        assert_true (ai_move (ai, 6, 3));
34489        assert_true (ai_move (ai, 4, 1));
34490        assert_true (ai_move (ai, 3, 1));
34491        assert_true (ai_move (ai, 2, 0));
34492        assert_true (ai_move (ai, 4, 5));
34493        assert_true (ai_move (ai, 6, 5));
34494        assert_true (ai_move (ai, 2, 5));
34495        assert_true (ai_move (ai, 5, 6));
34496        assert_true (ai_move (ai, 2, 7));
34497        assert_true (ai_move (ai, 0, 5));
34498        assert_true (ai_move (ai, 7, 4));
34499        assert_true (ai_move (ai, 7, 2));
34500        assert_true (ai_move (ai, 7, 1));
34501        assert_true (ai_move (ai, 3, 7));
34502        assert_true (ai_move (ai, 4, 7));
34503        assert_true (ai_move (ai, 1, 7));
34504        assert_true (ai_move (ai, 2, 3));
34505        assert_true (ai_move (ai, 1, 6));
34506        assert_true (ai_move (ai, 4, 0));
34507        assert_true (ai_move (ai, 2, 1));
34508        assert_true (ai_move (ai, 3, 0));
34509        assert_true (ai_move (ai, 0, 2));
34510        assert_true (ai_move (ai, 0, 3));
34511        assert_true (ai_move (ai, 0, 4));
34512        assert_true (ai_move (ai, 1, 2));
34513        assert_true (ai_move (ai, 6, 1));
34514        assert_true (ai_move (ai, 0, 6));
34515        assert_true (ai_move (ai, 0, 7));
34516        assert_true (ai_move (ai, 1, 0));
34517        assert_true (ai_move (ai, 0, 0));
34518        assert_true (ai_move (ai, 6, 0));
34519        assert_true (ai_move (ai, 1, 1));
34520        assert_true (ai_move (ai, 0, 1));
34521        assert_true (ai_move (ai, 6, 7));
34522        assert_true (game.pass ());
34523        assert_true (ai_move (ai, 2, 2));
34524        assert_true (game.pass ());
34525        assert_true (ai_move (ai, 7, 7));
34526        assert_true (ai_move (ai, 7, 6));
34527        assert_true (ai_move (ai, 7, 0));
34528    }
34529
34530    private static inline void test_complete_reversi_game_447 ()
34531    {
34532                                  /* 0 1 2 3 4 5 6 7 */
34533        string [] board = {/* 0 */ " . . . . . . . .",
34534                           /* 1 */ " . . . . . . . .",
34535                           /* 2 */ " . . L . . . . .",
34536                           /* 3 */ " . D . L D . . .",
34537                           /* 4 */ " . . D L L . . .",
34538                           /* 5 */ " . . . D . . . .",
34539                           /* 6 */ " . . . . . . . .",
34540                           /* 7 */ " . . . . . . . ."};
34541
34542        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34543        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34544
34545        assert_true (ai_move (ai, 3, 1));
34546        assert_true (ai_move (ai, 1, 5));
34547        assert_true (ai_move (ai, 5, 3));
34548        assert_true (ai_move (ai, 4, 6));
34549        assert_true (ai_move (ai, 2, 6));
34550        assert_true (ai_move (ai, 3, 6));
34551        assert_true (ai_move (ai, 0, 4));
34552        assert_true (ai_move (ai, 0, 2));
34553        assert_true (ai_move (ai, 1, 4));
34554        assert_true (ai_move (ai, 5, 5));
34555        assert_true (ai_move (ai, 2, 3));
34556        assert_true (ai_move (ai, 6, 2));
34557        assert_true (ai_move (ai, 1, 2));
34558        assert_true (ai_move (ai, 4, 2));
34559        assert_true (ai_move (ai, 5, 1));
34560        assert_true (ai_move (ai, 4, 1));
34561        assert_true (ai_move (ai, 7, 3));
34562        assert_true (ai_move (ai, 2, 0));
34563        assert_true (ai_move (ai, 4, 0));
34564        assert_true (ai_move (ai, 2, 1));
34565        assert_true (ai_move (ai, 5, 7));
34566        assert_true (ai_move (ai, 3, 7));
34567        assert_true (ai_move (ai, 5, 4));
34568        assert_true (ai_move (ai, 6, 5));
34569        assert_true (ai_move (ai, 6, 4));
34570        assert_true (ai_move (ai, 7, 5));
34571        assert_true (ai_move (ai, 7, 4));
34572        assert_true (ai_move (ai, 7, 2));
34573        assert_true (ai_move (ai, 5, 6));
34574        assert_true (ai_move (ai, 6, 3));
34575        assert_true (ai_move (ai, 3, 0));
34576        assert_true (ai_move (ai, 5, 0));
34577        assert_true (ai_move (ai, 5, 2));
34578        assert_true (ai_move (ai, 6, 0));
34579        assert_true (ai_move (ai, 3, 2));
34580        assert_true (ai_move (ai, 0, 5));
34581        assert_true (ai_move (ai, 6, 6));
34582        assert_true (ai_move (ai, 1, 0));
34583        assert_true (ai_move (ai, 0, 6));
34584        assert_true (ai_move (ai, 0, 1));
34585        assert_true (ai_move (ai, 1, 1));
34586        assert_true (ai_move (ai, 4, 5));
34587        assert_true (ai_move (ai, 2, 5));
34588        assert_true (ai_move (ai, 0, 0));
34589        assert_true (ai_move (ai, 7, 6));
34590        assert_true (ai_move (ai, 7, 7));
34591        assert_true (ai_move (ai, 6, 7));
34592        assert_true (ai_move (ai, 4, 7));
34593        assert_true (ai_move (ai, 2, 7));
34594        assert_true (ai_move (ai, 0, 3));
34595        assert_true (ai_move (ai, 1, 6));
34596        assert_true (ai_move (ai, 7, 1));
34597        assert_true (ai_move (ai, 6, 1));
34598        assert_true (ai_move (ai, 1, 7));
34599        assert_true (ai_move (ai, 0, 7));
34600    }
34601
34602    private static inline void test_complete_reversi_game_448 ()
34603    {
34604                                  /* 0 1 2 3 4 5 6 7 */
34605        string [] board = {/* 0 */ " . . . . . . . .",
34606                           /* 1 */ " . . . . . . . .",
34607                           /* 2 */ " . . . . . . . .",
34608                           /* 3 */ " . D . D D . . .",
34609                           /* 4 */ " . L L L L . . .",
34610                           /* 5 */ " . . . D . . . .",
34611                           /* 6 */ " . . . . . . . .",
34612                           /* 7 */ " . . . . . . . ."};
34613
34614        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34615        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34616
34617        assert_true (ai_move (ai, 5, 5));
34618        assert_true (ai_move (ai, 4, 6));
34619        assert_true (ai_move (ai, 2, 6));
34620        assert_true (ai_move (ai, 6, 4));
34621        assert_true (ai_move (ai, 5, 7));
34622        assert_true (ai_move (ai, 3, 6));
34623        assert_true (ai_move (ai, 7, 3));
34624        assert_true (ai_move (ai, 5, 2));
34625        assert_true (ai_move (ai, 5, 3));
34626        assert_true (ai_move (ai, 5, 6));
34627        assert_true (ai_move (ai, 5, 1));
34628        assert_true (ai_move (ai, 0, 2));
34629        assert_true (ai_move (ai, 1, 5));
34630        assert_true (ai_move (ai, 5, 4));
34631        assert_true (ai_move (ai, 6, 5));
34632        assert_true (ai_move (ai, 7, 5));
34633        assert_true (ai_move (ai, 4, 5));
34634        assert_true (ai_move (ai, 6, 3));
34635        assert_true (ai_move (ai, 4, 7));
34636        assert_true (ai_move (ai, 4, 1));
34637        assert_true (ai_move (ai, 7, 2));
34638        assert_true (ai_move (ai, 5, 0));
34639        assert_true (ai_move (ai, 3, 0));
34640        assert_true (ai_move (ai, 3, 1));
34641        assert_true (ai_move (ai, 2, 7));
34642        assert_true (ai_move (ai, 4, 2));
34643        assert_true (ai_move (ai, 6, 2));
34644        assert_true (ai_move (ai, 7, 4));
34645        assert_true (ai_move (ai, 7, 6));
34646        assert_true (ai_move (ai, 2, 2));
34647        assert_true (ai_move (ai, 0, 4));
34648        assert_true (ai_move (ai, 6, 6));
34649        assert_true (ai_move (ai, 2, 3));
34650        assert_true (ai_move (ai, 3, 2));
34651        assert_true (ai_move (ai, 1, 2));
34652        assert_true (ai_move (ai, 0, 3));
34653        assert_true (ai_move (ai, 7, 7));
34654        assert_true (ai_move (ai, 6, 7));
34655        assert_true (ai_move (ai, 0, 1));
34656        assert_true (ai_move (ai, 2, 5));
34657        assert_true (ai_move (ai, 2, 0));
34658        assert_true (ai_move (ai, 3, 7));
34659        assert_true (ai_move (ai, 4, 0));
34660        assert_true (ai_move (ai, 1, 0));
34661        assert_true (ai_move (ai, 1, 6));
34662        assert_true (ai_move (ai, 2, 1));
34663        assert_true (ai_move (ai, 1, 1));
34664        assert_true (ai_move (ai, 6, 0));
34665        assert_true (ai_move (ai, 6, 1));
34666        assert_true (ai_move (ai, 0, 0));
34667        assert_true (game.pass ());
34668        assert_true (ai_move (ai, 0, 5));
34669        assert_true (ai_move (ai, 0, 6));
34670        assert_true (ai_move (ai, 7, 0));
34671        assert_true (ai_move (ai, 7, 1));
34672        assert_true (ai_move (ai, 0, 7));
34673        assert_true (ai_move (ai, 1, 7));
34674    }
34675
34676    private static inline void test_complete_reversi_game_449 ()
34677    {
34678                                  /* 0 1 2 3 4 5 6 7 */
34679        string [] board = {/* 0 */ " . . . . . . . .",
34680                           /* 1 */ " . . . . . . . .",
34681                           /* 2 */ " . . L . . . . .",
34682                           /* 3 */ " . . . L D . . .",
34683                           /* 4 */ " . . . D L D . .",
34684                           /* 5 */ " . . . D . L . .",
34685                           /* 6 */ " . . . . . . . .",
34686                           /* 7 */ " . . . . . . . ."};
34687
34688        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34689        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34690
34691        assert_true (ai_move (ai, 5, 6));
34692        assert_true (ai_move (ai, 2, 6));
34693        assert_true (ai_move (ai, 3, 6));
34694        assert_true (ai_move (ai, 5, 3));
34695        assert_true (ai_move (ai, 5, 2));
34696        assert_true (ai_move (ai, 6, 2));
34697        assert_true (ai_move (ai, 6, 3));
34698        assert_true (ai_move (ai, 4, 2));
34699        assert_true (ai_move (ai, 5, 1));
34700        assert_true (ai_move (ai, 7, 3));
34701        assert_true (ai_move (ai, 7, 4));
34702        assert_true (ai_move (ai, 7, 5));
34703        assert_true (ai_move (ai, 7, 2));
34704        assert_true (ai_move (ai, 7, 1));
34705        assert_true (ai_move (ai, 2, 4));
34706        assert_true (ai_move (ai, 6, 4));
34707        assert_true (ai_move (ai, 4, 5));
34708        assert_true (ai_move (ai, 4, 1));
34709        assert_true (ai_move (ai, 4, 0));
34710        assert_true (ai_move (ai, 3, 1));
34711        assert_true (ai_move (ai, 6, 5));
34712        assert_true (ai_move (ai, 5, 7));
34713        assert_true (ai_move (ai, 4, 7));
34714        assert_true (ai_move (ai, 3, 7));
34715        assert_true (ai_move (ai, 2, 1));
34716        assert_true (ai_move (ai, 2, 0));
34717        assert_true (ai_move (ai, 1, 3));
34718        assert_true (ai_move (ai, 7, 6));
34719        assert_true (ai_move (ai, 6, 6));
34720        assert_true (ai_move (ai, 1, 4));
34721        assert_true (ai_move (ai, 2, 3));
34722        assert_true (ai_move (ai, 5, 0));
34723        assert_true (ai_move (ai, 2, 5));
34724        assert_true (ai_move (ai, 3, 0));
34725        assert_true (ai_move (ai, 2, 7));
34726        assert_true (ai_move (ai, 1, 7));
34727        assert_true (ai_move (ai, 4, 6));
34728        assert_true (ai_move (ai, 1, 5));
34729        assert_true (ai_move (ai, 0, 4));
34730        assert_true (ai_move (ai, 3, 2));
34731        assert_true (ai_move (ai, 6, 1));
34732        assert_true (ai_move (ai, 0, 5));
34733        assert_true (ai_move (ai, 0, 3));
34734        assert_true (ai_move (ai, 0, 2));
34735        assert_true (ai_move (ai, 1, 6));
34736        assert_true (ai_move (ai, 1, 2));
34737        assert_true (ai_move (ai, 1, 1));
34738        assert_true (ai_move (ai, 6, 7));
34739        assert_true (game.pass ());
34740        assert_true (ai_move (ai, 0, 6));
34741        assert_true (ai_move (ai, 0, 7));
34742        assert_true (ai_move (ai, 6, 0));
34743        assert_true (ai_move (ai, 7, 7));
34744        assert_true (ai_move (ai, 1, 0));
34745        assert_true (ai_move (ai, 7, 0));
34746        assert_true (game.pass ());
34747        assert_true (ai_move (ai, 0, 0));
34748        assert_true (ai_move (ai, 0, 1));
34749    }
34750
34751    private static inline void test_complete_reversi_game_450 ()
34752    {
34753                                  /* 0 1 2 3 4 5 6 7 */
34754        string [] board = {/* 0 */ " . . . . . . . .",
34755                           /* 1 */ " . . . . . . . .",
34756                           /* 2 */ " . . L . . . . .",
34757                           /* 3 */ " . . . L L L . .",
34758                           /* 4 */ " . . . D D D . .",
34759                           /* 5 */ " . . . D . . . .",
34760                           /* 6 */ " . . . . . . . .",
34761                           /* 7 */ " . . . . . . . ."};
34762
34763        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34764        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34765
34766        assert_true (ai_move (ai, 6, 2));
34767        assert_true (ai_move (ai, 6, 3));
34768        assert_true (ai_move (ai, 7, 2));
34769        assert_true (ai_move (ai, 6, 5));
34770        assert_true (ai_move (ai, 4, 5));
34771        assert_true (ai_move (ai, 5, 5));
34772        assert_true (ai_move (ai, 6, 4));
34773        assert_true (ai_move (ai, 7, 5));
34774        assert_true (ai_move (ai, 5, 6));
34775        assert_true (ai_move (ai, 5, 7));
34776        assert_true (ai_move (ai, 7, 4));
34777        assert_true (ai_move (ai, 4, 6));
34778        assert_true (ai_move (ai, 3, 6));
34779        assert_true (ai_move (ai, 2, 3));
34780        assert_true (ai_move (ai, 5, 2));
34781        assert_true (ai_move (ai, 4, 2));
34782        assert_true (ai_move (ai, 4, 7));
34783        assert_true (ai_move (ai, 2, 4));
34784        assert_true (ai_move (ai, 2, 6));
34785        assert_true (ai_move (ai, 5, 1));
34786        assert_true (ai_move (ai, 5, 0));
34787        assert_true (ai_move (ai, 2, 5));
34788        assert_true (ai_move (ai, 7, 3));
34789        assert_true (ai_move (ai, 7, 1));
34790        assert_true (ai_move (ai, 3, 7));
34791        assert_true (ai_move (ai, 7, 6));
34792        assert_true (ai_move (ai, 3, 1));
34793        assert_true (ai_move (ai, 3, 2));
34794        assert_true (ai_move (ai, 1, 5));
34795        assert_true (ai_move (ai, 0, 5));
34796        assert_true (ai_move (ai, 4, 1));
34797        assert_true (ai_move (ai, 2, 7));
34798        assert_true (ai_move (ai, 1, 2));
34799        assert_true (ai_move (ai, 2, 0));
34800        assert_true (ai_move (ai, 4, 0));
34801        assert_true (ai_move (ai, 0, 2));
34802        assert_true (ai_move (ai, 2, 1));
34803        assert_true (ai_move (ai, 6, 7));
34804        assert_true (ai_move (ai, 1, 4));
34805        assert_true (ai_move (ai, 6, 1));
34806        assert_true (ai_move (ai, 0, 3));
34807        assert_true (ai_move (ai, 1, 3));
34808        assert_true (ai_move (ai, 0, 4));
34809        assert_true (ai_move (ai, 3, 0));
34810        assert_true (ai_move (ai, 1, 0));
34811        assert_true (ai_move (ai, 1, 1));
34812        assert_true (ai_move (ai, 0, 6));
34813        assert_true (ai_move (ai, 0, 7));
34814        assert_true (ai_move (ai, 0, 0));
34815        assert_true (ai_move (ai, 1, 6));
34816        assert_true (ai_move (ai, 1, 7));
34817        assert_true (ai_move (ai, 6, 0));
34818        assert_true (ai_move (ai, 7, 7));
34819        assert_true (ai_move (ai, 0, 1));
34820        assert_true (ai_move (ai, 7, 0));
34821        assert_true (game.pass ());
34822        assert_true (ai_move (ai, 6, 6));
34823    }
34824
34825    private static inline void test_complete_reversi_game_451 ()
34826    {
34827                                  /* 0 1 2 3 4 5 6 7 */
34828        string [] board = {/* 0 */ " . . . . . . . .",
34829                           /* 1 */ " . . . . . . . .",
34830                           /* 2 */ " . . L . . . . .",
34831                           /* 3 */ " . . . L D . . .",
34832                           /* 4 */ " . . . L D D . .",
34833                           /* 5 */ " . . . L . . . .",
34834                           /* 6 */ " . . . L . . . .",
34835                           /* 7 */ " . . . . . . . ."};
34836
34837        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34838        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34839
34840        assert_true (ai_move (ai, 2, 6));
34841        assert_true (ai_move (ai, 5, 2));
34842        assert_true (ai_move (ai, 3, 7));
34843        assert_true (ai_move (ai, 6, 5));
34844        assert_true (ai_move (ai, 6, 4));
34845        assert_true (ai_move (ai, 6, 3));
34846        assert_true (ai_move (ai, 7, 4));
34847        assert_true (ai_move (ai, 5, 5));
34848        assert_true (ai_move (ai, 4, 6));
34849        assert_true (ai_move (ai, 4, 5));
34850        assert_true (ai_move (ai, 7, 5));
34851        assert_true (ai_move (ai, 5, 6));
34852        assert_true (ai_move (ai, 4, 7));
34853        assert_true (ai_move (ai, 2, 5));
34854        assert_true (ai_move (ai, 1, 5));
34855        assert_true (ai_move (ai, 2, 7));
34856        assert_true (ai_move (ai, 1, 7));
34857        assert_true (ai_move (ai, 1, 4));
34858        assert_true (ai_move (ai, 7, 2));
34859        assert_true (ai_move (ai, 0, 5));
34860        assert_true (ai_move (ai, 4, 1));
34861        assert_true (ai_move (ai, 6, 1));
34862        assert_true (ai_move (ai, 0, 3));
34863        assert_true (ai_move (ai, 2, 3));
34864        assert_true (ai_move (ai, 0, 4));
34865        assert_true (ai_move (ai, 0, 2));
34866        assert_true (ai_move (ai, 5, 3));
34867        assert_true (ai_move (ai, 5, 7));
34868        assert_true (ai_move (ai, 6, 7));
34869        assert_true (ai_move (ai, 3, 0));
34870        assert_true (ai_move (ai, 5, 1));
34871        assert_true (ai_move (ai, 7, 3));
34872        assert_true (ai_move (ai, 6, 2));
34873        assert_true (ai_move (ai, 4, 0));
34874        assert_true (ai_move (ai, 4, 2));
34875        assert_true (ai_move (ai, 3, 2));
34876        assert_true (ai_move (ai, 2, 1));
34877        assert_true (ai_move (ai, 3, 1));
34878        assert_true (ai_move (ai, 2, 0));
34879        assert_true (ai_move (ai, 1, 2));
34880        assert_true (ai_move (ai, 7, 0));
34881        assert_true (ai_move (ai, 7, 1));
34882        assert_true (ai_move (ai, 5, 0));
34883        assert_true (ai_move (ai, 6, 0));
34884        assert_true (ai_move (ai, 2, 4));
34885        assert_true (ai_move (ai, 1, 3));
34886        assert_true (ai_move (ai, 0, 1));
34887        assert_true (ai_move (ai, 0, 0));
34888        assert_true (game.pass ());
34889        assert_true (ai_move (ai, 1, 0));
34890        assert_true (ai_move (ai, 1, 1));
34891        assert_true (ai_move (ai, 0, 6));
34892        assert_true (ai_move (ai, 1, 6));
34893        assert_true (ai_move (ai, 0, 7));
34894        assert_true (game.pass ());
34895        assert_true (ai_move (ai, 7, 7));
34896        assert_true (game.pass ());
34897        assert_true (ai_move (ai, 6, 6));
34898        assert_true (ai_move (ai, 7, 6));
34899    }
34900
34901    private static inline void test_complete_reversi_game_452 ()
34902    {
34903                                  /* 0 1 2 3 4 5 6 7 */
34904        string [] board = {/* 0 */ " . . . . . . . .",
34905                           /* 1 */ " . . . . . . . .",
34906                           /* 2 */ " . . L . . . . .",
34907                           /* 3 */ " . . . L L L L .",
34908                           /* 4 */ " . . . D D . . .",
34909                           /* 5 */ " . . . D . . . .",
34910                           /* 6 */ " . . . . . . . .",
34911                           /* 7 */ " . . . . . . . ."};
34912
34913        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34914        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34915
34916        assert_true (ai_move (ai, 6, 2));
34917        assert_true (ai_move (ai, 5, 5));
34918        assert_true (ai_move (ai, 7, 3));
34919        assert_true (ai_move (ai, 2, 6));
34920        assert_true (ai_move (ai, 3, 6));
34921        assert_true (ai_move (ai, 3, 7));
34922        assert_true (ai_move (ai, 1, 7));
34923        assert_true (ai_move (ai, 1, 5));
34924        assert_true (ai_move (ai, 4, 2));
34925        assert_true (ai_move (ai, 5, 1));
34926        assert_true (ai_move (ai, 3, 1));
34927        assert_true (ai_move (ai, 4, 0));
34928        assert_true (ai_move (ai, 2, 0));
34929        assert_true (ai_move (ai, 5, 4));
34930        assert_true (ai_move (ai, 1, 3));
34931        assert_true (ai_move (ai, 7, 2));
34932        assert_true (ai_move (ai, 7, 1));
34933        assert_true (ai_move (ai, 5, 2));
34934        assert_true (ai_move (ai, 2, 4));
34935        assert_true (ai_move (ai, 1, 4));
34936        assert_true (ai_move (ai, 6, 4));
34937        assert_true (ai_move (ai, 4, 6));
34938        assert_true (ai_move (ai, 4, 1));
34939        assert_true (ai_move (ai, 0, 2));
34940        assert_true (ai_move (ai, 5, 0));
34941        assert_true (ai_move (ai, 2, 3));
34942        assert_true (ai_move (ai, 3, 0));
34943        assert_true (ai_move (ai, 2, 1));
34944        assert_true (ai_move (ai, 5, 6));
34945        assert_true (ai_move (ai, 6, 5));
34946        assert_true (ai_move (ai, 7, 4));
34947        assert_true (ai_move (ai, 5, 7));
34948        assert_true (ai_move (ai, 3, 2));
34949        assert_true (ai_move (ai, 7, 6));
34950        assert_true (ai_move (ai, 1, 2));
34951        assert_true (ai_move (ai, 0, 1));
34952        assert_true (ai_move (ai, 4, 5));
34953        assert_true (ai_move (ai, 1, 0));
34954        assert_true (ai_move (ai, 0, 0));
34955        assert_true (ai_move (ai, 1, 1));
34956        assert_true (ai_move (ai, 2, 5));
34957        assert_true (ai_move (ai, 6, 0));
34958        assert_true (ai_move (ai, 7, 0));
34959        assert_true (ai_move (ai, 7, 5));
34960        assert_true (ai_move (ai, 6, 1));
34961        assert_true (game.pass ());
34962        assert_true (ai_move (ai, 7, 7));
34963        assert_true (game.pass ());
34964        assert_true (ai_move (ai, 6, 6));
34965        assert_true (game.pass ());
34966        assert_true (ai_move (ai, 6, 7));
34967        assert_true (game.pass ());
34968        assert_true (ai_move (ai, 0, 3));
34969        assert_true (ai_move (ai, 0, 5));
34970        assert_true (ai_move (ai, 0, 4));
34971        assert_true (game.pass ());
34972        assert_true (ai_move (ai, 0, 6));
34973        assert_true (ai_move (ai, 1, 6));
34974        assert_true (ai_move (ai, 0, 7));
34975        assert_true (game.pass ());
34976        assert_true (ai_move (ai, 4, 7));
34977        assert_true (ai_move (ai, 2, 7));
34978    }
34979
34980    private static inline void test_complete_reversi_game_453 ()
34981    {
34982                                  /* 0 1 2 3 4 5 6 7 */
34983        string [] board = {/* 0 */ " . . . . . . . .",
34984                           /* 1 */ " . . . . . . . .",
34985                           /* 2 */ " . . L . . . . .",
34986                           /* 3 */ " . . . L D D . .",
34987                           /* 4 */ " . . . D L . . .",
34988                           /* 5 */ " . . . D . L . .",
34989                           /* 6 */ " . . . . . . . .",
34990                           /* 7 */ " . . . . . . . ."};
34991
34992        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
34993        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
34994
34995        assert_true (ai_move (ai, 3, 2));
34996        assert_true (ai_move (ai, 6, 2));
34997        assert_true (ai_move (ai, 1, 2));
34998        assert_true (ai_move (ai, 2, 6));
34999        assert_true (ai_move (ai, 4, 5));
35000        assert_true (ai_move (ai, 2, 3));
35001        assert_true (ai_move (ai, 6, 5));
35002        assert_true (ai_move (ai, 2, 1));
35003        assert_true (ai_move (ai, 3, 6));
35004        assert_true (ai_move (ai, 0, 2));
35005        assert_true (ai_move (ai, 1, 1));
35006        assert_true (ai_move (ai, 2, 5));
35007        assert_true (ai_move (ai, 1, 5));
35008        assert_true (ai_move (ai, 5, 4));
35009        assert_true (ai_move (ai, 2, 4));
35010        assert_true (ai_move (ai, 1, 4));
35011        assert_true (ai_move (ai, 2, 7));
35012        assert_true (ai_move (ai, 4, 6));
35013        assert_true (ai_move (ai, 0, 3));
35014        assert_true (ai_move (ai, 5, 6));
35015        assert_true (ai_move (ai, 0, 1));
35016        assert_true (ai_move (ai, 4, 2));
35017        assert_true (ai_move (ai, 6, 3));
35018        assert_true (ai_move (ai, 3, 7));
35019        assert_true (ai_move (ai, 5, 7));
35020        assert_true (ai_move (ai, 7, 5));
35021        assert_true (ai_move (ai, 4, 7));
35022        assert_true (ai_move (ai, 0, 5));
35023        assert_true (ai_move (ai, 6, 4));
35024        assert_true (ai_move (ai, 7, 4));
35025        assert_true (ai_move (ai, 1, 3));
35026        assert_true (ai_move (ai, 7, 2));
35027        assert_true (ai_move (ai, 5, 2));
35028        assert_true (ai_move (ai, 4, 1));
35029        assert_true (ai_move (ai, 2, 0));
35030        assert_true (ai_move (ai, 1, 7));
35031        assert_true (ai_move (ai, 0, 7));
35032        assert_true (ai_move (ai, 0, 0));
35033        assert_true (ai_move (ai, 0, 4));
35034        assert_true (ai_move (ai, 0, 6));
35035        assert_true (ai_move (ai, 1, 6));
35036        assert_true (ai_move (ai, 1, 0));
35037        assert_true (ai_move (ai, 3, 0));
35038        assert_true (ai_move (ai, 4, 0));
35039        assert_true (ai_move (ai, 3, 1));
35040        assert_true (ai_move (ai, 5, 1));
35041        assert_true (ai_move (ai, 7, 3));
35042        assert_true (ai_move (ai, 6, 6));
35043        assert_true (ai_move (ai, 5, 0));
35044        assert_true (ai_move (ai, 6, 0));
35045        assert_true (ai_move (ai, 7, 7));
35046        assert_true (ai_move (ai, 7, 6));
35047        assert_true (ai_move (ai, 6, 7));
35048        assert_true (ai_move (ai, 6, 1));
35049        assert_true (ai_move (ai, 7, 0));
35050        assert_true (ai_move (ai, 7, 1));
35051    }
35052
35053    private static inline void test_complete_reversi_game_454 ()
35054    {
35055                                  /* 0 1 2 3 4 5 6 7 */
35056        string [] board = {/* 0 */ " . . . . . . . .",
35057                           /* 1 */ " . . . . . . . .",
35058                           /* 2 */ " . . L . . . . .",
35059                           /* 3 */ " . . . L D D . .",
35060                           /* 4 */ " . . . L D . . .",
35061                           /* 5 */ " . . . L . . . .",
35062                           /* 6 */ " . . . L . . . .",
35063                           /* 7 */ " . . . . . . . ."};
35064
35065        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35066        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35067
35068        assert_true (ai_move (ai, 2, 6));
35069        assert_true (ai_move (ai, 5, 5));
35070        assert_true (ai_move (ai, 3, 7));
35071        assert_true (ai_move (ai, 6, 2));
35072        assert_true (ai_move (ai, 6, 3));
35073        assert_true (ai_move (ai, 7, 3));
35074        assert_true (ai_move (ai, 7, 1));
35075        assert_true (ai_move (ai, 5, 1));
35076        assert_true (ai_move (ai, 2, 4));
35077        assert_true (ai_move (ai, 1, 5));
35078        assert_true (ai_move (ai, 1, 3));
35079        assert_true (ai_move (ai, 0, 4));
35080        assert_true (ai_move (ai, 0, 2));
35081        assert_true (ai_move (ai, 4, 5));
35082        assert_true (ai_move (ai, 3, 1));
35083        assert_true (ai_move (ai, 2, 7));
35084        assert_true (ai_move (ai, 1, 7));
35085        assert_true (ai_move (ai, 2, 5));
35086        assert_true (ai_move (ai, 4, 2));
35087        assert_true (ai_move (ai, 4, 1));
35088        assert_true (ai_move (ai, 4, 6));
35089        assert_true (ai_move (ai, 6, 4));
35090        assert_true (ai_move (ai, 1, 4));
35091        assert_true (ai_move (ai, 2, 0));
35092        assert_true (ai_move (ai, 0, 5));
35093        assert_true (ai_move (ai, 3, 2));
35094        assert_true (ai_move (ai, 0, 3));
35095        assert_true (ai_move (ai, 1, 2));
35096        assert_true (ai_move (ai, 6, 5));
35097        assert_true (ai_move (ai, 5, 6));
35098        assert_true (ai_move (ai, 4, 7));
35099        assert_true (ai_move (ai, 7, 5));
35100        assert_true (ai_move (ai, 2, 3));
35101        assert_true (ai_move (ai, 6, 7));
35102        assert_true (ai_move (ai, 2, 1));
35103        assert_true (ai_move (ai, 1, 0));
35104        assert_true (ai_move (ai, 5, 4));
35105        assert_true (ai_move (ai, 0, 1));
35106        assert_true (ai_move (ai, 0, 0));
35107        assert_true (ai_move (ai, 1, 1));
35108        assert_true (ai_move (ai, 5, 2));
35109        assert_true (ai_move (ai, 0, 6));
35110        assert_true (ai_move (ai, 0, 7));
35111        assert_true (ai_move (ai, 5, 7));
35112        assert_true (ai_move (ai, 1, 6));
35113        assert_true (game.pass ());
35114        assert_true (ai_move (ai, 7, 7));
35115        assert_true (game.pass ());
35116        assert_true (ai_move (ai, 6, 6));
35117        assert_true (game.pass ());
35118        assert_true (ai_move (ai, 7, 6));
35119        assert_true (game.pass ());
35120        assert_true (ai_move (ai, 3, 0));
35121        assert_true (ai_move (ai, 5, 0));
35122        assert_true (ai_move (ai, 4, 0));
35123        assert_true (game.pass ());
35124        assert_true (ai_move (ai, 6, 0));
35125        assert_true (ai_move (ai, 6, 1));
35126        assert_true (ai_move (ai, 7, 0));
35127        assert_true (game.pass ());
35128        assert_true (ai_move (ai, 7, 4));
35129        assert_true (ai_move (ai, 7, 2));
35130    }
35131
35132    private static inline void test_complete_reversi_game_455 ()
35133    {
35134                                  /* 0 1 2 3 4 5 6 7 */
35135        string [] board = {/* 0 */ " . . . . . . . .",
35136                           /* 1 */ " . . . . . . . .",
35137                           /* 2 */ " . . L . . . . .",
35138                           /* 3 */ " . . . L D . . .",
35139                           /* 4 */ " . . . D L . . .",
35140                           /* 5 */ " . . . D D L . .",
35141                           /* 6 */ " . . . . . . . .",
35142                           /* 7 */ " . . . . . . . ."};
35143
35144        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35145        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35146
35147        assert_true (ai_move (ai, 6, 5));
35148        assert_true (ai_move (ai, 4, 6));
35149        assert_true (ai_move (ai, 5, 6));
35150        assert_true (ai_move (ai, 6, 4));
35151        assert_true (ai_move (ai, 5, 4));
35152        assert_true (ai_move (ai, 5, 3));
35153        assert_true (ai_move (ai, 5, 2));
35154        assert_true (ai_move (ai, 4, 2));
35155        assert_true (ai_move (ai, 3, 6));
35156        assert_true (ai_move (ai, 5, 1));
35157        assert_true (ai_move (ai, 6, 2));
35158        assert_true (ai_move (ai, 5, 7));
35159        assert_true (ai_move (ai, 4, 7));
35160        assert_true (ai_move (ai, 7, 5));
35161        assert_true (ai_move (ai, 6, 3));
35162        assert_true (ai_move (ai, 7, 2));
35163        assert_true (ai_move (ai, 5, 0));
35164        assert_true (ai_move (ai, 7, 3));
35165        assert_true (ai_move (ai, 6, 7));
35166        assert_true (ai_move (ai, 4, 1));
35167        assert_true (ai_move (ai, 3, 1));
35168        assert_true (ai_move (ai, 2, 7));
35169        assert_true (ai_move (ai, 2, 6));
35170        assert_true (ai_move (ai, 3, 0));
35171        assert_true (ai_move (ai, 1, 3));
35172        assert_true (ai_move (ai, 3, 2));
35173        assert_true (ai_move (ai, 2, 3));
35174        assert_true (ai_move (ai, 2, 1));
35175        assert_true (ai_move (ai, 4, 0));
35176        assert_true (ai_move (ai, 1, 4));
35177        assert_true (ai_move (ai, 2, 0));
35178        assert_true (ai_move (ai, 0, 3));
35179        assert_true (ai_move (ai, 2, 4));
35180        assert_true (ai_move (ai, 1, 2));
35181        assert_true (ai_move (ai, 0, 5));
35182        assert_true (ai_move (ai, 2, 5));
35183        assert_true (ai_move (ai, 1, 5));
35184        assert_true (ai_move (ai, 0, 4));
35185        assert_true (ai_move (ai, 0, 2));
35186        assert_true (ai_move (ai, 1, 1));
35187        assert_true (ai_move (ai, 7, 4));
35188        assert_true (ai_move (ai, 1, 0));
35189        assert_true (ai_move (ai, 0, 0));
35190        assert_true (ai_move (ai, 0, 1));
35191        assert_true (ai_move (ai, 6, 6));
35192        assert_true (ai_move (ai, 3, 7));
35193        assert_true (ai_move (ai, 1, 7));
35194        assert_true (ai_move (ai, 7, 7));
35195        assert_true (ai_move (ai, 1, 6));
35196        assert_true (ai_move (ai, 7, 6));
35197        assert_true (ai_move (ai, 7, 1));
35198        assert_true (ai_move (ai, 0, 7));
35199        assert_true (ai_move (ai, 0, 6));
35200        assert_true (ai_move (ai, 7, 0));
35201        assert_true (game.pass ());
35202        assert_true (ai_move (ai, 6, 1));
35203        assert_true (ai_move (ai, 6, 0));
35204    }
35205
35206    private static inline void test_complete_reversi_game_456 ()
35207    {
35208                                  /* 0 1 2 3 4 5 6 7 */
35209        string [] board = {/* 0 */ " . . . . . . . .",
35210                           /* 1 */ " . . . . . . . .",
35211                           /* 2 */ " . . L . . . . .",
35212                           /* 3 */ " . . . L L L . .",
35213                           /* 4 */ " . . . D D . . .",
35214                           /* 5 */ " . . . D D . . .",
35215                           /* 6 */ " . . . . . . . .",
35216                           /* 7 */ " . . . . . . . ."};
35217
35218        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35219        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35220
35221        assert_true (ai_move (ai, 6, 2));
35222        assert_true (ai_move (ai, 6, 3));
35223        assert_true (ai_move (ai, 6, 4));
35224        assert_true (ai_move (ai, 7, 3));
35225        assert_true (ai_move (ai, 4, 2));
35226        assert_true (ai_move (ai, 5, 1));
35227        assert_true (ai_move (ai, 4, 1));
35228        assert_true (ai_move (ai, 6, 5));
35229        assert_true (ai_move (ai, 7, 5));
35230        assert_true (ai_move (ai, 3, 1));
35231        assert_true (ai_move (ai, 5, 5));
35232        assert_true (ai_move (ai, 3, 6));
35233        assert_true (ai_move (ai, 2, 6));
35234        assert_true (ai_move (ai, 5, 6));
35235        assert_true (ai_move (ai, 5, 7));
35236        assert_true (ai_move (ai, 2, 5));
35237        assert_true (ai_move (ai, 1, 5));
35238        assert_true (ai_move (ai, 1, 4));
35239        assert_true (ai_move (ai, 4, 6));
35240        assert_true (ai_move (ai, 0, 5));
35241        assert_true (ai_move (ai, 1, 6));
35242        assert_true (ai_move (ai, 3, 7));
35243        assert_true (ai_move (ai, 5, 4));
35244        assert_true (ai_move (ai, 2, 4));
35245        assert_true (ai_move (ai, 1, 7));
35246        assert_true (ai_move (ai, 5, 2));
35247        assert_true (ai_move (ai, 7, 4));
35248        assert_true (ai_move (ai, 3, 2));
35249        assert_true (ai_move (ai, 7, 2));
35250        assert_true (ai_move (ai, 6, 6));
35251        assert_true (ai_move (ai, 1, 2));
35252        assert_true (ai_move (ai, 2, 3));
35253        assert_true (ai_move (ai, 7, 7));
35254        assert_true (ai_move (ai, 2, 1));
35255        assert_true (ai_move (ai, 7, 6));
35256        assert_true (ai_move (ai, 6, 7));
35257        assert_true (ai_move (ai, 4, 7));
35258        assert_true (ai_move (ai, 0, 3));
35259        assert_true (ai_move (ai, 0, 2));
35260        assert_true (ai_move (ai, 1, 3));
35261        assert_true (ai_move (ai, 2, 0));
35262        assert_true (ai_move (ai, 0, 7));
35263        assert_true (ai_move (ai, 2, 7));
35264        assert_true (ai_move (ai, 4, 0));
35265        assert_true (ai_move (ai, 0, 6));
35266        assert_true (ai_move (ai, 3, 0));
35267        assert_true (ai_move (ai, 5, 0));
35268        assert_true (ai_move (ai, 0, 1));
35269        assert_true (ai_move (ai, 1, 0));
35270        assert_true (ai_move (ai, 1, 1));
35271        assert_true (ai_move (ai, 0, 4));
35272        assert_true (ai_move (ai, 6, 1));
35273        assert_true (ai_move (ai, 7, 0));
35274        assert_true (ai_move (ai, 7, 1));
35275        assert_true (ai_move (ai, 0, 0));
35276        assert_true (game.pass ());
35277        assert_true (ai_move (ai, 6, 0));
35278    }
35279
35280    private static inline void test_complete_reversi_game_457 ()
35281    {
35282                                  /* 0 1 2 3 4 5 6 7 */
35283        string [] board = {/* 0 */ " . . . . . . . .",
35284                           /* 1 */ " . . . . . . . .",
35285                           /* 2 */ " . . L . . . . .",
35286                           /* 3 */ " . . . L D . . .",
35287                           /* 4 */ " . . . L D . . .",
35288                           /* 5 */ " . . . L D . . .",
35289                           /* 6 */ " . . . L . . . .",
35290                           /* 7 */ " . . . . . . . ."};
35291
35292        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35293        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35294
35295        assert_true (ai_move (ai, 2, 6));
35296        assert_true (ai_move (ai, 5, 6));
35297        assert_true (ai_move (ai, 5, 5));
35298        assert_true (ai_move (ai, 5, 2));
35299        assert_true (ai_move (ai, 5, 7));
35300        assert_true (ai_move (ai, 4, 6));
35301        assert_true (ai_move (ai, 5, 3));
35302        assert_true (ai_move (ai, 2, 5));
35303        assert_true (ai_move (ai, 5, 1));
35304        assert_true (ai_move (ai, 2, 7));
35305        assert_true (ai_move (ai, 4, 7));
35306        assert_true (ai_move (ai, 6, 5));
35307        assert_true (ai_move (ai, 5, 4));
35308        assert_true (ai_move (ai, 6, 3));
35309        assert_true (ai_move (ai, 6, 4));
35310        assert_true (ai_move (ai, 4, 1));
35311        assert_true (ai_move (ai, 1, 5));
35312        assert_true (ai_move (ai, 0, 5));
35313        assert_true (ai_move (ai, 7, 4));
35314        assert_true (ai_move (ai, 5, 0));
35315        assert_true (ai_move (ai, 2, 3));
35316        assert_true (ai_move (ai, 3, 7));
35317        assert_true (ai_move (ai, 1, 7));
35318        assert_true (ai_move (ai, 2, 4));
35319        assert_true (ai_move (ai, 1, 3));
35320        assert_true (ai_move (ai, 7, 3));
35321        assert_true (ai_move (ai, 1, 4));
35322        assert_true (ai_move (ai, 7, 5));
35323        assert_true (ai_move (ai, 0, 4));
35324        assert_true (ai_move (ai, 0, 3));
35325        assert_true (ai_move (ai, 2, 1));
35326        assert_true (ai_move (ai, 3, 1));
35327        assert_true (ai_move (ai, 7, 2));
35328        assert_true (ai_move (ai, 7, 1));
35329        assert_true (ai_move (ai, 3, 0));
35330        assert_true (ai_move (ai, 6, 2));
35331        assert_true (ai_move (ai, 0, 2));
35332        assert_true (ai_move (ai, 0, 1));
35333        assert_true (ai_move (ai, 4, 0));
35334        assert_true (ai_move (ai, 2, 0));
35335        assert_true (ai_move (ai, 3, 2));
35336        assert_true (ai_move (ai, 1, 2));
35337        assert_true (ai_move (ai, 6, 6));
35338        assert_true (ai_move (ai, 4, 2));
35339        assert_true (ai_move (ai, 7, 6));
35340        assert_true (ai_move (ai, 7, 7));
35341        assert_true (ai_move (ai, 1, 0));
35342        assert_true (ai_move (ai, 0, 0));
35343        assert_true (ai_move (ai, 6, 0));
35344        assert_true (ai_move (ai, 6, 7));
35345        assert_true (ai_move (ai, 1, 1));
35346        assert_true (ai_move (ai, 0, 7));
35347        assert_true (ai_move (ai, 6, 1));
35348        assert_true (ai_move (ai, 1, 6));
35349        assert_true (ai_move (ai, 0, 6));
35350        assert_true (ai_move (ai, 7, 0));
35351    }
35352
35353    private static inline void test_complete_reversi_game_458 ()
35354    {
35355                                  /* 0 1 2 3 4 5 6 7 */
35356        string [] board = {/* 0 */ " . . . . . . . .",
35357                           /* 1 */ " . . . . . . . .",
35358                           /* 2 */ " . . L L L . . .",
35359                           /* 3 */ " . . . D L . . .",
35360                           /* 4 */ " . . . D L . . .",
35361                           /* 5 */ " . . . D . . . .",
35362                           /* 6 */ " . . . . . . . .",
35363                           /* 7 */ " . . . . . . . ."};
35364
35365        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35366        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35367
35368        assert_true (ai_move (ai, 3, 1));
35369        assert_true (ai_move (ai, 2, 1));
35370        assert_true (ai_move (ai, 1, 3));
35371        assert_true (ai_move (ai, 1, 2));
35372        assert_true (ai_move (ai, 5, 1));
35373        assert_true (ai_move (ai, 5, 2));
35374        assert_true (ai_move (ai, 5, 5));
35375        assert_true (ai_move (ai, 5, 0));
35376        assert_true (ai_move (ai, 5, 3));
35377        assert_true (ai_move (ai, 4, 0));
35378        assert_true (ai_move (ai, 6, 2));
35379        assert_true (ai_move (ai, 7, 2));
35380        assert_true (ai_move (ai, 2, 0));
35381        assert_true (ai_move (ai, 4, 1));
35382        assert_true (ai_move (ai, 0, 2));
35383        assert_true (ai_move (ai, 6, 4));
35384        assert_true (ai_move (ai, 1, 0));
35385        assert_true (ai_move (ai, 4, 6));
35386        assert_true (ai_move (ai, 5, 7));
35387        assert_true (ai_move (ai, 3, 7));
35388        assert_true (ai_move (ai, 6, 3));
35389        assert_true (ai_move (ai, 7, 4));
35390        assert_true (ai_move (ai, 6, 6));
35391        assert_true (ai_move (ai, 5, 4));
35392        assert_true (ai_move (ai, 6, 5));
35393        assert_true (ai_move (ai, 5, 6));
35394        assert_true (ai_move (ai, 7, 3));
35395        assert_true (ai_move (ai, 2, 3));
35396        assert_true (ai_move (ai, 2, 4));
35397        assert_true (ai_move (ai, 1, 5));
35398        assert_true (ai_move (ai, 4, 5));
35399        assert_true (ai_move (ai, 3, 6));
35400        assert_true (ai_move (ai, 4, 7));
35401        assert_true (ai_move (ai, 1, 4));
35402        assert_true (ai_move (ai, 7, 5));
35403        assert_true (ai_move (ai, 0, 3));
35404        assert_true (ai_move (ai, 7, 1));
35405        assert_true (ai_move (ai, 0, 1));
35406        assert_true (ai_move (ai, 6, 7));
35407        assert_true (ai_move (ai, 7, 7));
35408        assert_true (ai_move (ai, 2, 5));
35409        assert_true (ai_move (ai, 7, 6));
35410        assert_true (ai_move (ai, 3, 0));
35411        assert_true (ai_move (ai, 0, 0));
35412        assert_true (ai_move (ai, 6, 0));
35413        assert_true (ai_move (ai, 7, 0));
35414        assert_true (ai_move (ai, 2, 6));
35415        assert_true (ai_move (ai, 1, 1));
35416        assert_true (ai_move (ai, 0, 5));
35417        assert_true (ai_move (ai, 6, 1));
35418        assert_true (game.pass ());
35419        assert_true (ai_move (ai, 2, 7));
35420        assert_true (ai_move (ai, 1, 6));
35421        assert_true (ai_move (ai, 0, 7));
35422        assert_true (ai_move (ai, 1, 7));
35423        assert_true (ai_move (ai, 0, 4));
35424        assert_true (ai_move (ai, 0, 6));
35425    }
35426
35427    private static inline void test_complete_reversi_game_459 ()
35428    {
35429                                  /* 0 1 2 3 4 5 6 7 */
35430        string [] board = {/* 0 */ " . . . . . . . .",
35431                           /* 1 */ " . . . . . . . .",
35432                           /* 2 */ " . . L D . . . .",
35433                           /* 3 */ " . . . D D . . .",
35434                           /* 4 */ " . . . D L . . .",
35435                           /* 5 */ " . . . L . . . .",
35436                           /* 6 */ " . . L . . . . .",
35437                           /* 7 */ " . . . . . . . ."};
35438
35439        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35440        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35441
35442        assert_true (ai_move (ai, 1, 2));
35443        assert_true (ai_move (ai, 2, 4));
35444        assert_true (ai_move (ai, 1, 5));
35445        assert_true (ai_move (ai, 1, 4));
35446        assert_true (ai_move (ai, 3, 7));
35447        assert_true (ai_move (ai, 5, 2));
35448        assert_true (ai_move (ai, 5, 4));
35449        assert_true (ai_move (ai, 6, 4));
35450        assert_true (ai_move (ai, 6, 5));
35451        assert_true (ai_move (ai, 1, 7));
35452        assert_true (ai_move (ai, 1, 3));
35453        assert_true (ai_move (ai, 0, 2));
35454        assert_true (ai_move (ai, 0, 4));
35455        assert_true (ai_move (ai, 0, 6));
35456        assert_true (ai_move (ai, 2, 5));
35457        assert_true (ai_move (ai, 3, 1));
35458        assert_true (ai_move (ai, 2, 1));
35459        assert_true (ai_move (ai, 1, 6));
35460        assert_true (ai_move (ai, 4, 5));
35461        assert_true (ai_move (ai, 5, 6));
35462        assert_true (ai_move (ai, 4, 7));
35463        assert_true (ai_move (ai, 6, 3));
35464        assert_true (ai_move (ai, 3, 0));
35465        assert_true (ai_move (ai, 0, 3));
35466        assert_true (ai_move (ai, 0, 1));
35467        assert_true (ai_move (ai, 7, 6));
35468        assert_true (ai_move (ai, 4, 6));
35469        assert_true (ai_move (ai, 3, 6));
35470        assert_true (ai_move (ai, 2, 7));
35471        assert_true (ai_move (ai, 5, 7));
35472        assert_true (ai_move (ai, 5, 5));
35473        assert_true (ai_move (ai, 2, 3));
35474        assert_true (ai_move (ai, 5, 3));
35475        assert_true (ai_move (ai, 6, 7));
35476        assert_true (ai_move (ai, 5, 1));
35477        assert_true (ai_move (ai, 4, 1));
35478        assert_true (ai_move (ai, 4, 2));
35479        assert_true (ai_move (ai, 6, 6));
35480        assert_true (ai_move (ai, 7, 5));
35481        assert_true (ai_move (ai, 7, 3));
35482        assert_true (ai_move (ai, 7, 2));
35483        assert_true (ai_move (ai, 2, 0));
35484        assert_true (ai_move (ai, 4, 0));
35485        assert_true (ai_move (ai, 5, 0));
35486        assert_true (ai_move (ai, 6, 2));
35487        assert_true (ai_move (ai, 7, 4));
35488        assert_true (ai_move (ai, 7, 7));
35489        assert_true (ai_move (ai, 7, 1));
35490        assert_true (ai_move (ai, 0, 7));
35491        assert_true (ai_move (ai, 1, 1));
35492        assert_true (ai_move (ai, 0, 5));
35493        assert_true (game.pass ());
35494        assert_true (ai_move (ai, 7, 0));
35495        assert_true (game.pass ());
35496        assert_true (ai_move (ai, 6, 0));
35497        assert_true (ai_move (ai, 6, 1));
35498        assert_true (ai_move (ai, 1, 0));
35499        assert_true (ai_move (ai, 0, 0));
35500    }
35501
35502    private static inline void test_complete_reversi_game_460 ()
35503    {
35504                                  /* 0 1 2 3 4 5 6 7 */
35505        string [] board = {/* 0 */ " . . . . . . . .",
35506                           /* 1 */ " . . . . . . . .",
35507                           /* 2 */ " . . L D . . . .",
35508                           /* 3 */ " . . . D D . . .",
35509                           /* 4 */ " . . L L L . . .",
35510                           /* 5 */ " . . . D . . . .",
35511                           /* 6 */ " . . . . . . . .",
35512                           /* 7 */ " . . . . . . . ."};
35513
35514        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35515        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35516
35517        assert_true (ai_move (ai, 1, 2));
35518        assert_true (ai_move (ai, 2, 6));
35519        assert_true (ai_move (ai, 1, 5));
35520        assert_true (ai_move (ai, 1, 4));
35521        assert_true (ai_move (ai, 3, 7));
35522        assert_true (ai_move (ai, 5, 2));
35523        assert_true (ai_move (ai, 5, 4));
35524        assert_true (ai_move (ai, 6, 4));
35525        assert_true (ai_move (ai, 6, 5));
35526        assert_true (ai_move (ai, 1, 7));
35527        assert_true (ai_move (ai, 1, 3));
35528        assert_true (ai_move (ai, 0, 2));
35529        assert_true (ai_move (ai, 0, 4));
35530        assert_true (ai_move (ai, 0, 6));
35531        assert_true (ai_move (ai, 2, 5));
35532        assert_true (ai_move (ai, 3, 1));
35533        assert_true (ai_move (ai, 2, 1));
35534        assert_true (ai_move (ai, 1, 6));
35535        assert_true (ai_move (ai, 4, 5));
35536        assert_true (ai_move (ai, 5, 6));
35537        assert_true (ai_move (ai, 4, 7));
35538        assert_true (ai_move (ai, 6, 3));
35539        assert_true (ai_move (ai, 3, 0));
35540        assert_true (ai_move (ai, 0, 3));
35541        assert_true (ai_move (ai, 0, 1));
35542        assert_true (ai_move (ai, 7, 6));
35543        assert_true (ai_move (ai, 4, 6));
35544        assert_true (ai_move (ai, 3, 6));
35545        assert_true (ai_move (ai, 2, 7));
35546        assert_true (ai_move (ai, 5, 7));
35547        assert_true (ai_move (ai, 5, 5));
35548        assert_true (ai_move (ai, 2, 3));
35549        assert_true (ai_move (ai, 5, 3));
35550        assert_true (ai_move (ai, 6, 7));
35551        assert_true (ai_move (ai, 5, 1));
35552        assert_true (ai_move (ai, 4, 1));
35553        assert_true (ai_move (ai, 4, 2));
35554        assert_true (ai_move (ai, 6, 6));
35555        assert_true (ai_move (ai, 7, 5));
35556        assert_true (ai_move (ai, 7, 3));
35557        assert_true (ai_move (ai, 7, 2));
35558        assert_true (ai_move (ai, 2, 0));
35559        assert_true (ai_move (ai, 4, 0));
35560        assert_true (ai_move (ai, 5, 0));
35561        assert_true (ai_move (ai, 6, 2));
35562        assert_true (ai_move (ai, 7, 4));
35563        assert_true (ai_move (ai, 7, 7));
35564        assert_true (ai_move (ai, 7, 1));
35565        assert_true (ai_move (ai, 0, 7));
35566        assert_true (ai_move (ai, 1, 1));
35567        assert_true (ai_move (ai, 0, 5));
35568        assert_true (game.pass ());
35569        assert_true (ai_move (ai, 7, 0));
35570        assert_true (game.pass ());
35571        assert_true (ai_move (ai, 6, 0));
35572        assert_true (ai_move (ai, 6, 1));
35573        assert_true (ai_move (ai, 1, 0));
35574        assert_true (ai_move (ai, 0, 0));
35575    }
35576
35577    private static inline void test_complete_reversi_game_461 ()
35578    {
35579                                  /* 0 1 2 3 4 5 6 7 */
35580        string [] board = {/* 0 */ " . . . . . . . .",
35581                           /* 1 */ " . . . . . . . .",
35582                           /* 2 */ " . . L . L . . .",
35583                           /* 3 */ " . . D D L . . .",
35584                           /* 4 */ " . . . D L . . .",
35585                           /* 5 */ " . . . D . . . .",
35586                           /* 6 */ " . . . . . . . .",
35587                           /* 7 */ " . . . . . . . ."};
35588
35589        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35590        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35591
35592        assert_true (ai_move (ai, 2, 1));
35593        assert_true (ai_move (ai, 2, 6));
35594        assert_true (ai_move (ai, 3, 6));
35595        assert_true (ai_move (ai, 4, 6));
35596        assert_true (ai_move (ai, 5, 1));
35597        assert_true (ai_move (ai, 4, 1));
35598        assert_true (ai_move (ai, 3, 7));
35599        assert_true (ai_move (ai, 2, 5));
35600        assert_true (ai_move (ai, 1, 4));
35601        assert_true (ai_move (ai, 1, 2));
35602        assert_true (ai_move (ai, 3, 2));
35603        assert_true (ai_move (ai, 3, 0));
35604        assert_true (ai_move (ai, 2, 7));
35605        assert_true (ai_move (ai, 3, 1));
35606        assert_true (ai_move (ai, 5, 0));
35607        assert_true (ai_move (ai, 2, 4));
35608        assert_true (ai_move (ai, 0, 2));
35609        assert_true (ai_move (ai, 1, 5));
35610        assert_true (ai_move (ai, 5, 2));
35611        assert_true (ai_move (ai, 5, 3));
35612        assert_true (ai_move (ai, 4, 0));
35613        assert_true (ai_move (ai, 6, 2));
35614        assert_true (ai_move (ai, 2, 0));
35615        assert_true (ai_move (ai, 1, 3));
35616        assert_true (ai_move (ai, 7, 2));
35617        assert_true (ai_move (ai, 4, 7));
35618        assert_true (ai_move (ai, 0, 5));
35619        assert_true (ai_move (ai, 6, 1));
35620        assert_true (ai_move (ai, 6, 3));
35621        assert_true (ai_move (ai, 6, 0));
35622        assert_true (ai_move (ai, 7, 0));
35623        assert_true (ai_move (ai, 5, 4));
35624        assert_true (ai_move (ai, 0, 3));
35625        assert_true (ai_move (ai, 1, 7));
35626        assert_true (ai_move (ai, 5, 5));
35627        assert_true (ai_move (ai, 0, 4));
35628        assert_true (ai_move (ai, 4, 5));
35629        assert_true (ai_move (ai, 6, 4));
35630        assert_true (ai_move (ai, 5, 6));
35631        assert_true (ai_move (ai, 6, 5));
35632        assert_true (ai_move (ai, 7, 4));
35633        assert_true (ai_move (ai, 7, 3));
35634        assert_true (ai_move (ai, 7, 5));
35635        assert_true (ai_move (ai, 7, 1));
35636        assert_true (ai_move (ai, 5, 7));
35637        assert_true (ai_move (ai, 6, 7));
35638        assert_true (ai_move (ai, 6, 6));
35639        assert_true (ai_move (ai, 7, 7));
35640        assert_true (ai_move (ai, 7, 6));
35641        assert_true (ai_move (ai, 1, 6));
35642        assert_true (ai_move (ai, 0, 7));
35643        assert_true (ai_move (ai, 0, 6));
35644        assert_true (game.pass ());
35645        assert_true (ai_move (ai, 1, 1));
35646        assert_true (ai_move (ai, 0, 0));
35647        assert_true (ai_move (ai, 0, 1));
35648        assert_true (ai_move (ai, 1, 0));
35649    }
35650
35651    private static inline void test_complete_reversi_game_462 ()
35652    {
35653                                  /* 0 1 2 3 4 5 6 7 */
35654        string [] board = {/* 0 */ " . . . . . . . .",
35655                           /* 1 */ " . . . . . . . .",
35656                           /* 2 */ " . . L . . . . .",
35657                           /* 3 */ " . . D D D . . .",
35658                           /* 4 */ " . . . D L . . .",
35659                           /* 5 */ " . . . L . . . .",
35660                           /* 6 */ " . . L . . . . .",
35661                           /* 7 */ " . . . . . . . ."};
35662
35663        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35664        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35665
35666        assert_true (ai_move (ai, 2, 1));
35667        assert_true (ai_move (ai, 4, 2));
35668        assert_true (ai_move (ai, 3, 6));
35669        assert_true (ai_move (ai, 4, 6));
35670        assert_true (ai_move (ai, 5, 1));
35671        assert_true (ai_move (ai, 4, 1));
35672        assert_true (ai_move (ai, 3, 7));
35673        assert_true (ai_move (ai, 2, 5));
35674        assert_true (ai_move (ai, 1, 4));
35675        assert_true (ai_move (ai, 1, 2));
35676        assert_true (ai_move (ai, 3, 2));
35677        assert_true (ai_move (ai, 3, 0));
35678        assert_true (ai_move (ai, 2, 7));
35679        assert_true (ai_move (ai, 3, 1));
35680        assert_true (ai_move (ai, 5, 0));
35681        assert_true (ai_move (ai, 2, 4));
35682        assert_true (ai_move (ai, 0, 2));
35683        assert_true (ai_move (ai, 1, 5));
35684        assert_true (ai_move (ai, 5, 2));
35685        assert_true (ai_move (ai, 5, 3));
35686        assert_true (ai_move (ai, 4, 0));
35687        assert_true (ai_move (ai, 6, 2));
35688        assert_true (ai_move (ai, 2, 0));
35689        assert_true (ai_move (ai, 1, 3));
35690        assert_true (ai_move (ai, 7, 2));
35691        assert_true (ai_move (ai, 4, 7));
35692        assert_true (ai_move (ai, 0, 5));
35693        assert_true (ai_move (ai, 6, 1));
35694        assert_true (ai_move (ai, 6, 3));
35695        assert_true (ai_move (ai, 6, 0));
35696        assert_true (ai_move (ai, 7, 0));
35697        assert_true (ai_move (ai, 5, 4));
35698        assert_true (ai_move (ai, 0, 3));
35699        assert_true (ai_move (ai, 1, 7));
35700        assert_true (ai_move (ai, 5, 5));
35701        assert_true (ai_move (ai, 0, 4));
35702        assert_true (ai_move (ai, 4, 5));
35703        assert_true (ai_move (ai, 6, 4));
35704        assert_true (ai_move (ai, 5, 6));
35705        assert_true (ai_move (ai, 6, 5));
35706        assert_true (ai_move (ai, 7, 4));
35707        assert_true (ai_move (ai, 7, 3));
35708        assert_true (ai_move (ai, 7, 5));
35709        assert_true (ai_move (ai, 7, 1));
35710        assert_true (ai_move (ai, 5, 7));
35711        assert_true (ai_move (ai, 6, 7));
35712        assert_true (ai_move (ai, 6, 6));
35713        assert_true (ai_move (ai, 7, 7));
35714        assert_true (ai_move (ai, 7, 6));
35715        assert_true (ai_move (ai, 1, 6));
35716        assert_true (ai_move (ai, 0, 7));
35717        assert_true (ai_move (ai, 0, 6));
35718        assert_true (game.pass ());
35719        assert_true (ai_move (ai, 1, 1));
35720        assert_true (ai_move (ai, 0, 0));
35721        assert_true (ai_move (ai, 0, 1));
35722        assert_true (ai_move (ai, 1, 0));
35723    }
35724
35725    private static inline void test_complete_reversi_game_463 ()
35726    {
35727                                  /* 0 1 2 3 4 5 6 7 */
35728        string [] board = {/* 0 */ " . . . . . . . .",
35729                           /* 1 */ " . . . . . . . .",
35730                           /* 2 */ " . . L . . . . .",
35731                           /* 3 */ " . . L D D . . .",
35732                           /* 4 */ " . . L L L . . .",
35733                           /* 5 */ " . . . D . . . .",
35734                           /* 6 */ " . . . . . . . .",
35735                           /* 7 */ " . . . . . . . ."};
35736
35737        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35738        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35739
35740        assert_true (ai_move (ai, 5, 5));
35741        assert_true (ai_move (ai, 4, 6));
35742        assert_true (ai_move (ai, 2, 6));
35743        assert_true (ai_move (ai, 6, 4));
35744        assert_true (ai_move (ai, 5, 7));
35745        assert_true (ai_move (ai, 3, 6));
35746        assert_true (ai_move (ai, 7, 3));
35747        assert_true (ai_move (ai, 3, 2));
35748        assert_true (ai_move (ai, 2, 1));
35749        assert_true (ai_move (ai, 4, 2));
35750        assert_true (ai_move (ai, 4, 1));
35751        assert_true (ai_move (ai, 5, 1));
35752        assert_true (ai_move (ai, 2, 5));
35753        assert_true (ai_move (ai, 1, 5));
35754        assert_true (ai_move (ai, 5, 2));
35755        assert_true (ai_move (ai, 2, 7));
35756        assert_true (ai_move (ai, 1, 4));
35757        assert_true (ai_move (ai, 0, 3));
35758        assert_true (ai_move (ai, 0, 5));
35759        assert_true (ai_move (ai, 1, 3));
35760        assert_true (ai_move (ai, 0, 2));
35761        assert_true (ai_move (ai, 1, 2));
35762        assert_true (ai_move (ai, 0, 4));
35763        assert_true (ai_move (ai, 6, 2));
35764        assert_true (ai_move (ai, 0, 1));
35765        assert_true (ai_move (ai, 2, 0));
35766        assert_true (ai_move (ai, 6, 3));
35767        assert_true (ai_move (ai, 5, 0));
35768        assert_true (ai_move (ai, 4, 7));
35769        assert_true (ai_move (ai, 7, 4));
35770        assert_true (ai_move (ai, 7, 5));
35771        assert_true (ai_move (ai, 5, 4));
35772        assert_true (ai_move (ai, 7, 2));
35773        assert_true (ai_move (ai, 3, 1));
35774        assert_true (ai_move (ai, 5, 3));
35775        assert_true (ai_move (ai, 5, 6));
35776        assert_true (ai_move (ai, 0, 6));
35777        assert_true (ai_move (ai, 4, 5));
35778        assert_true (ai_move (ai, 6, 5));
35779        assert_true (ai_move (ai, 1, 6));
35780        assert_true (ai_move (ai, 4, 0));
35781        assert_true (ai_move (ai, 3, 0));
35782        assert_true (ai_move (ai, 1, 1));
35783        assert_true (ai_move (ai, 6, 7));
35784        assert_true (ai_move (ai, 7, 7));
35785        assert_true (ai_move (ai, 7, 6));
35786        assert_true (ai_move (ai, 3, 7));
35787        assert_true (ai_move (ai, 1, 7));
35788        assert_true (ai_move (ai, 6, 6));
35789        assert_true (ai_move (ai, 0, 0));
35790        assert_true (ai_move (ai, 0, 7));
35791        assert_true (ai_move (ai, 1, 0));
35792        assert_true (ai_move (ai, 6, 1));
35793        assert_true (ai_move (ai, 6, 0));
35794        assert_true (game.pass ());
35795        assert_true (ai_move (ai, 7, 1));
35796        assert_true (ai_move (ai, 7, 0));
35797    }
35798
35799    private static inline void test_complete_reversi_game_464 ()
35800    {
35801                                  /* 0 1 2 3 4 5 6 7 */
35802        string [] board = {/* 0 */ " . . . . . . . .",
35803                           /* 1 */ " . . . . . . . .",
35804                           /* 2 */ " . . . . L . . .",
35805                           /* 3 */ " . . . D L . . .",
35806                           /* 4 */ " . . . D L . . .",
35807                           /* 5 */ " . . D . L D . .",
35808                           /* 6 */ " . . . . . . . .",
35809                           /* 7 */ " . . . . . . . ."};
35810
35811        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35812        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35813
35814        assert_true (ai_move (ai, 5, 6));
35815        assert_true (ai_move (ai, 2, 2));
35816        assert_true (ai_move (ai, 5, 4));
35817        assert_true (ai_move (ai, 6, 5));
35818        assert_true (ai_move (ai, 5, 3));
35819        assert_true (ai_move (ai, 6, 3));
35820        assert_true (ai_move (ai, 6, 2));
35821        assert_true (ai_move (ai, 6, 4));
35822        assert_true (ai_move (ai, 5, 2));
35823        assert_true (ai_move (ai, 4, 1));
35824        assert_true (ai_move (ai, 5, 1));
35825        assert_true (ai_move (ai, 3, 2));
35826        assert_true (ai_move (ai, 7, 2));
35827        assert_true (ai_move (ai, 7, 3));
35828        assert_true (ai_move (ai, 1, 2));
35829        assert_true (ai_move (ai, 3, 1));
35830        assert_true (ai_move (ai, 7, 5));
35831        assert_true (ai_move (ai, 1, 3));
35832        assert_true (ai_move (ai, 2, 0));
35833        assert_true (ai_move (ai, 3, 6));
35834        assert_true (ai_move (ai, 2, 1));
35835        assert_true (ai_move (ai, 1, 4));
35836        assert_true (ai_move (ai, 7, 4));
35837        assert_true (ai_move (ai, 2, 3));
35838        assert_true (ai_move (ai, 4, 6));
35839        assert_true (ai_move (ai, 0, 2));
35840        assert_true (ai_move (ai, 3, 0));
35841        assert_true (ai_move (ai, 6, 7));
35842        assert_true (ai_move (ai, 4, 7));
35843        assert_true (ai_move (ai, 6, 1));
35844        assert_true (ai_move (ai, 3, 5));
35845        assert_true (ai_move (ai, 5, 7));
35846        assert_true (ai_move (ai, 2, 4));
35847        assert_true (ai_move (ai, 3, 7));
35848        assert_true (ai_move (ai, 1, 5));
35849        assert_true (ai_move (ai, 0, 5));
35850        assert_true (ai_move (ai, 2, 7));
35851        assert_true (ai_move (ai, 1, 7));
35852        assert_true (ai_move (ai, 6, 6));
35853        assert_true (ai_move (ai, 6, 0));
35854        assert_true (ai_move (ai, 4, 0));
35855        assert_true (ai_move (ai, 5, 0));
35856        assert_true (ai_move (ai, 2, 6));
35857        assert_true (ai_move (ai, 1, 0));
35858        assert_true (ai_move (ai, 7, 0));
35859        assert_true (ai_move (ai, 7, 6));
35860        assert_true (ai_move (ai, 7, 7));
35861        assert_true (ai_move (ai, 1, 1));
35862        assert_true (ai_move (ai, 0, 7));
35863        assert_true (ai_move (ai, 1, 6));
35864        assert_true (ai_move (ai, 0, 0));
35865        assert_true (ai_move (ai, 0, 1));
35866        assert_true (ai_move (ai, 0, 3));
35867        assert_true (ai_move (ai, 0, 4));
35868        assert_true (ai_move (ai, 0, 6));
35869        assert_true (ai_move (ai, 7, 1));
35870    }
35871
35872    private static inline void test_complete_reversi_game_465 ()
35873    {
35874                                  /* 0 1 2 3 4 5 6 7 */
35875        string [] board = {/* 0 */ " . . . . . . . .",
35876                           /* 1 */ " . . . . . . . .",
35877                           /* 2 */ " . . . . L . . .",
35878                           /* 3 */ " . . . L L . . .",
35879                           /* 4 */ " . . L D D . . .",
35880                           /* 5 */ " . . D . . D . .",
35881                           /* 6 */ " . . . . . . . .",
35882                           /* 7 */ " . . . . . . . ."};
35883
35884        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35885        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35886
35887        assert_true (ai_move (ai, 2, 3));
35888        assert_true (ai_move (ai, 1, 5));
35889        assert_true (ai_move (ai, 1, 4));
35890        assert_true (ai_move (ai, 3, 5));
35891        assert_true (ai_move (ai, 3, 6));
35892        assert_true (ai_move (ai, 1, 2));
35893        assert_true (ai_move (ai, 2, 6));
35894        assert_true (ai_move (ai, 0, 5));
35895        assert_true (ai_move (ai, 2, 2));
35896        assert_true (ai_move (ai, 4, 7));
35897        assert_true (ai_move (ai, 5, 1));
35898        assert_true (ai_move (ai, 2, 1));
35899        assert_true (ai_move (ai, 1, 3));
35900        assert_true (ai_move (ai, 4, 1));
35901        assert_true (ai_move (ai, 4, 5));
35902        assert_true (ai_move (ai, 6, 5));
35903        assert_true (ai_move (ai, 5, 6));
35904        assert_true (ai_move (ai, 5, 7));
35905        assert_true (ai_move (ai, 2, 0));
35906        assert_true (ai_move (ai, 0, 2));
35907        assert_true (ai_move (ai, 7, 5));
35908        assert_true (ai_move (ai, 3, 1));
35909        assert_true (ai_move (ai, 2, 7));
35910        assert_true (ai_move (ai, 3, 0));
35911        assert_true (ai_move (ai, 5, 2));
35912        assert_true (ai_move (ai, 6, 2));
35913        assert_true (ai_move (ai, 5, 3));
35914        assert_true (ai_move (ai, 7, 4));
35915        assert_true (ai_move (ai, 4, 0));
35916        assert_true (ai_move (ai, 3, 2));
35917        assert_true (ai_move (ai, 6, 3));
35918        assert_true (ai_move (ai, 3, 7));
35919        assert_true (ai_move (ai, 6, 7));
35920        assert_true (ai_move (ai, 5, 0));
35921        assert_true (ai_move (ai, 6, 0));
35922        assert_true (ai_move (ai, 7, 6));
35923        assert_true (ai_move (ai, 1, 0));
35924        assert_true (ai_move (ai, 5, 4));
35925        assert_true (ai_move (ai, 4, 6));
35926        assert_true (ai_move (ai, 6, 4));
35927        assert_true (ai_move (ai, 1, 1));
35928        assert_true (ai_move (ai, 6, 1));
35929        assert_true (ai_move (ai, 1, 7));
35930        assert_true (ai_move (ai, 6, 6));
35931        assert_true (ai_move (ai, 7, 7));
35932        assert_true (ai_move (ai, 1, 6));
35933        assert_true (ai_move (ai, 0, 3));
35934        assert_true (ai_move (ai, 0, 4));
35935        assert_true (ai_move (ai, 7, 3));
35936        assert_true (ai_move (ai, 7, 1));
35937        assert_true (ai_move (ai, 7, 0));
35938        assert_true (ai_move (ai, 7, 2));
35939        assert_true (ai_move (ai, 0, 7));
35940        assert_true (ai_move (ai, 0, 0));
35941        assert_true (ai_move (ai, 0, 6));
35942        assert_true (ai_move (ai, 0, 1));
35943    }
35944
35945    private static inline void test_complete_reversi_game_466 ()
35946    {
35947                                  /* 0 1 2 3 4 5 6 7 */
35948        string [] board = {/* 0 */ " . . . . . . . .",
35949                           /* 1 */ " . . . . . . . .",
35950                           /* 2 */ " . . . . L . . .",
35951                           /* 3 */ " . . L L L . . .",
35952                           /* 4 */ " . . . D D . . .",
35953                           /* 5 */ " . . D . . D . .",
35954                           /* 6 */ " . . . . . . . .",
35955                           /* 7 */ " . . . . . . . ."};
35956
35957        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
35958        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
35959
35960        assert_true (ai_move (ai, 1, 2));
35961        assert_true (ai_move (ai, 1, 3));
35962        assert_true (ai_move (ai, 1, 4));
35963        assert_true (ai_move (ai, 0, 3));
35964        assert_true (ai_move (ai, 2, 2));
35965        assert_true (ai_move (ai, 3, 1));
35966        assert_true (ai_move (ai, 3, 2));
35967        assert_true (ai_move (ai, 0, 2));
35968        assert_true (ai_move (ai, 2, 1));
35969        assert_true (ai_move (ai, 3, 0));
35970        assert_true (ai_move (ai, 2, 0));
35971        assert_true (ai_move (ai, 1, 5));
35972        assert_true (ai_move (ai, 4, 0));
35973        assert_true (ai_move (ai, 3, 6));
35974        assert_true (ai_move (ai, 0, 5));
35975        assert_true (ai_move (ai, 2, 4));
35976        assert_true (ai_move (ai, 2, 6));
35977        assert_true (ai_move (ai, 3, 5));
35978        assert_true (ai_move (ai, 0, 4));
35979        assert_true (ai_move (ai, 0, 6));
35980        assert_true (ai_move (ai, 5, 2));
35981        assert_true (ai_move (ai, 6, 2));
35982        assert_true (ai_move (ai, 4, 6));
35983        assert_true (ai_move (ai, 5, 7));
35984        assert_true (ai_move (ai, 3, 7));
35985        assert_true (ai_move (ai, 2, 7));
35986        assert_true (ai_move (ai, 4, 5));
35987        assert_true (ai_move (ai, 6, 5));
35988        assert_true (ai_move (ai, 5, 6));
35989        assert_true (ai_move (ai, 5, 3));
35990        assert_true (ai_move (ai, 1, 7));
35991        assert_true (ai_move (ai, 6, 7));
35992        assert_true (ai_move (ai, 5, 4));
35993        assert_true (ai_move (ai, 6, 4));
35994        assert_true (ai_move (ai, 4, 1));
35995        assert_true (ai_move (ai, 5, 1));
35996        assert_true (ai_move (ai, 6, 3));
35997        assert_true (ai_move (ai, 5, 0));
35998        assert_true (ai_move (ai, 6, 0));
35999        assert_true (ai_move (ai, 7, 4));
36000        assert_true (ai_move (ai, 7, 2));
36001        assert_true (ai_move (ai, 1, 1));
36002        assert_true (ai_move (ai, 1, 0));
36003        assert_true (ai_move (ai, 7, 3));
36004        assert_true (ai_move (ai, 7, 5));
36005        assert_true (ai_move (ai, 6, 6));
36006        assert_true (ai_move (ai, 7, 1));
36007        assert_true (ai_move (ai, 6, 1));
36008        assert_true (ai_move (ai, 0, 1));
36009        assert_true (ai_move (ai, 0, 0));
36010        assert_true (ai_move (ai, 7, 0));
36011        assert_true (ai_move (ai, 4, 7));
36012        assert_true (ai_move (ai, 7, 7));
36013        assert_true (game.pass ());
36014        assert_true (ai_move (ai, 7, 6));
36015        assert_true (game.pass ());
36016        assert_true (ai_move (ai, 1, 6));
36017    }
36018
36019    private static inline void test_complete_reversi_game_467 ()
36020    {
36021                                  /* 0 1 2 3 4 5 6 7 */
36022        string [] board = {/* 0 */ " . . . . . . . .",
36023                           /* 1 */ " . . . . . . . .",
36024                           /* 2 */ " . . . . L . . .",
36025                           /* 3 */ " . . . D L . . .",
36026                           /* 4 */ " . . . L D . . .",
36027                           /* 5 */ " . . L . . D . .",
36028                           /* 6 */ " . L . . . . . .",
36029                           /* 7 */ " . . . . . . . ."};
36030
36031        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36032        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36033
36034        assert_true (ai_move (ai, 2, 4));
36035        assert_true (ai_move (ai, 4, 5));
36036        assert_true (ai_move (ai, 5, 6));
36037        assert_true (ai_move (ai, 4, 6));
36038        assert_true (ai_move (ai, 3, 5));
36039        assert_true (ai_move (ai, 6, 4));
36040        assert_true (ai_move (ai, 6, 5));
36041        assert_true (ai_move (ai, 2, 6));
36042        assert_true (ai_move (ai, 5, 1));
36043        assert_true (ai_move (ai, 1, 3));
36044        assert_true (ai_move (ai, 1, 4));
36045        assert_true (ai_move (ai, 7, 5));
36046        assert_true (ai_move (ai, 5, 7));
36047        assert_true (ai_move (ai, 4, 1));
36048        assert_true (ai_move (ai, 7, 3));
36049        assert_true (ai_move (ai, 5, 3));
36050        assert_true (ai_move (ai, 3, 6));
36051        assert_true (ai_move (ai, 3, 7));
36052        assert_true (ai_move (ai, 7, 4));
36053        assert_true (ai_move (ai, 7, 2));
36054        assert_true (ai_move (ai, 5, 4));
36055        assert_true (ai_move (ai, 7, 6));
36056        assert_true (ai_move (ai, 2, 7));
36057        assert_true (ai_move (ai, 4, 7));
36058        assert_true (ai_move (ai, 0, 2));
36059        assert_true (ai_move (ai, 1, 5));
36060        assert_true (ai_move (ai, 2, 3));
36061        assert_true (ai_move (ai, 0, 4));
36062        assert_true (ai_move (ai, 0, 3));
36063        assert_true (ai_move (ai, 2, 2));
36064        assert_true (ai_move (ai, 2, 1));
36065        assert_true (ai_move (ai, 3, 1));
36066        assert_true (ai_move (ai, 1, 2));
36067        assert_true (ai_move (ai, 2, 0));
36068        assert_true (ai_move (ai, 4, 0));
36069        assert_true (ai_move (ai, 0, 1));
36070        assert_true (ai_move (ai, 6, 2));
36071        assert_true (ai_move (ai, 0, 5));
36072        assert_true (ai_move (ai, 6, 3));
36073        assert_true (ai_move (ai, 3, 2));
36074        assert_true (ai_move (ai, 5, 2));
36075        assert_true (ai_move (ai, 5, 0));
36076        assert_true (ai_move (ai, 3, 0));
36077        assert_true (ai_move (ai, 6, 1));
36078        assert_true (ai_move (ai, 1, 1));
36079        assert_true (ai_move (ai, 0, 0));
36080        assert_true (ai_move (ai, 1, 0));
36081        assert_true (ai_move (ai, 1, 7));
36082        assert_true (ai_move (ai, 0, 7));
36083        assert_true (game.pass ());
36084        assert_true (ai_move (ai, 7, 0));
36085        assert_true (ai_move (ai, 0, 6));
36086        assert_true (ai_move (ai, 7, 1));
36087        assert_true (ai_move (ai, 6, 0));
36088        assert_true (ai_move (ai, 7, 7));
36089        assert_true (game.pass ());
36090        assert_true (ai_move (ai, 6, 7));
36091        assert_true (ai_move (ai, 6, 6));
36092    }
36093
36094    private static inline void test_complete_reversi_game_468 ()
36095    {
36096                                  /* 0 1 2 3 4 5 6 7 */
36097        string [] board = {/* 0 */ " . . . . . . . .",
36098                           /* 1 */ " . . . . . . . .",
36099                           /* 2 */ " . . . . L . . .",
36100                           /* 3 */ " . . . D L . . .",
36101                           /* 4 */ " . . . D D L . .",
36102                           /* 5 */ " . . D . . . L .",
36103                           /* 6 */ " . . . . . . . .",
36104                           /* 7 */ " . . . . . . . ."};
36105
36106        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36107        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36108
36109        assert_true (ai_move (ai, 6, 4));
36110        assert_true (ai_move (ai, 2, 3));
36111        assert_true (ai_move (ai, 1, 2));
36112        assert_true (ai_move (ai, 1, 3));
36113        assert_true (ai_move (ai, 1, 4));
36114        assert_true (ai_move (ai, 0, 3));
36115        assert_true (ai_move (ai, 5, 2));
36116        assert_true (ai_move (ai, 6, 2));
36117        assert_true (ai_move (ai, 4, 1));
36118        assert_true (ai_move (ai, 5, 1));
36119        assert_true (ai_move (ai, 6, 3));
36120        assert_true (ai_move (ai, 2, 1));
36121        assert_true (ai_move (ai, 5, 0));
36122        assert_true (ai_move (ai, 0, 5));
36123        assert_true (ai_move (ai, 7, 2));
36124        assert_true (ai_move (ai, 3, 6));
36125        assert_true (ai_move (ai, 3, 2));
36126        assert_true (ai_move (ai, 4, 5));
36127        assert_true (ai_move (ai, 4, 6));
36128        assert_true (ai_move (ai, 5, 6));
36129        assert_true (ai_move (ai, 4, 7));
36130        assert_true (ai_move (ai, 3, 1));
36131        assert_true (ai_move (ai, 2, 2));
36132        assert_true (ai_move (ai, 5, 3));
36133        assert_true (ai_move (ai, 0, 2));
36134        assert_true (ai_move (ai, 7, 5));
36135        assert_true (ai_move (ai, 2, 0));
36136        assert_true (ai_move (ai, 7, 3));
36137        assert_true (ai_move (ai, 3, 0));
36138        assert_true (ai_move (ai, 3, 5));
36139        assert_true (ai_move (ai, 2, 6));
36140        assert_true (ai_move (ai, 5, 5));
36141        assert_true (ai_move (ai, 5, 7));
36142        assert_true (ai_move (ai, 2, 7));
36143        assert_true (ai_move (ai, 0, 4));
36144        assert_true (ai_move (ai, 0, 1));
36145        assert_true (ai_move (ai, 1, 5));
36146        assert_true (ai_move (ai, 2, 4));
36147        assert_true (ai_move (ai, 3, 7));
36148        assert_true (ai_move (ai, 6, 7));
36149        assert_true (ai_move (ai, 7, 4));
36150        assert_true (ai_move (ai, 7, 1));
36151        assert_true (ai_move (ai, 1, 6));
36152        assert_true (ai_move (ai, 4, 0));
36153        assert_true (ai_move (ai, 6, 0));
36154        assert_true (ai_move (ai, 7, 0));
36155        assert_true (ai_move (ai, 7, 6));
36156        assert_true (ai_move (ai, 6, 1));
36157        assert_true (ai_move (ai, 1, 1));
36158        assert_true (ai_move (ai, 1, 0));
36159        assert_true (ai_move (ai, 6, 6));
36160        assert_true (ai_move (ai, 0, 7));
36161        assert_true (ai_move (ai, 1, 7));
36162        assert_true (ai_move (ai, 7, 7));
36163        assert_true (game.pass ());
36164        assert_true (ai_move (ai, 0, 6));
36165        assert_true (game.pass ());
36166        assert_true (ai_move (ai, 0, 0));
36167    }
36168
36169    private static inline void test_complete_reversi_game_469 ()
36170    {
36171                                  /* 0 1 2 3 4 5 6 7 */
36172        string [] board = {/* 0 */ " . . . . . . . .",
36173                           /* 1 */ " . . . . . . . .",
36174                           /* 2 */ " . . . . L . . .",
36175                           /* 3 */ " . . . D L . . .",
36176                           /* 4 */ " . . . D L D . .",
36177                           /* 5 */ " . . D . L . . .",
36178                           /* 6 */ " . . . . . . . .",
36179                           /* 7 */ " . . . . . . . ."};
36180
36181        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36182        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36183
36184        assert_true (ai_move (ai, 3, 6));
36185        assert_true (ai_move (ai, 6, 5));
36186        assert_true (ai_move (ai, 5, 1));
36187        assert_true (ai_move (ai, 4, 6));
36188        assert_true (ai_move (ai, 6, 3));
36189        assert_true (ai_move (ai, 6, 4));
36190        assert_true (ai_move (ai, 4, 7));
36191        assert_true (ai_move (ai, 4, 1));
36192        assert_true (ai_move (ai, 3, 1));
36193        assert_true (ai_move (ai, 7, 2));
36194        assert_true (ai_move (ai, 5, 2));
36195        assert_true (ai_move (ai, 6, 2));
36196        assert_true (ai_move (ai, 5, 3));
36197        assert_true (ai_move (ai, 5, 0));
36198        assert_true (ai_move (ai, 7, 5));
36199        assert_true (ai_move (ai, 3, 0));
36200        assert_true (ai_move (ai, 4, 0));
36201        assert_true (ai_move (ai, 7, 4));
36202        assert_true (ai_move (ai, 2, 0));
36203        assert_true (ai_move (ai, 1, 0));
36204        assert_true (ai_move (ai, 3, 5));
36205        assert_true (ai_move (ai, 2, 2));
36206        assert_true (ai_move (ai, 5, 5));
36207        assert_true (ai_move (ai, 2, 7));
36208        assert_true (ai_move (ai, 5, 6));
36209        assert_true (ai_move (ai, 1, 4));
36210        assert_true (ai_move (ai, 1, 5));
36211        assert_true (ai_move (ai, 3, 7));
36212        assert_true (ai_move (ai, 5, 7));
36213        assert_true (ai_move (ai, 6, 7));
36214        assert_true (ai_move (ai, 2, 6));
36215        assert_true (ai_move (ai, 0, 5));
36216        assert_true (ai_move (ai, 2, 4));
36217        assert_true (ai_move (ai, 1, 3));
36218        assert_true (ai_move (ai, 2, 3));
36219        assert_true (ai_move (ai, 1, 7));
36220        assert_true (ai_move (ai, 2, 1));
36221        assert_true (ai_move (ai, 1, 2));
36222        assert_true (ai_move (ai, 6, 6));
36223        assert_true (ai_move (ai, 3, 2));
36224        assert_true (ai_move (ai, 1, 1));
36225        assert_true (ai_move (ai, 1, 6));
36226        assert_true (ai_move (ai, 0, 1));
36227        assert_true (ai_move (ai, 0, 3));
36228        assert_true (ai_move (ai, 7, 3));
36229        assert_true (ai_move (ai, 7, 6));
36230        assert_true (ai_move (ai, 7, 7));
36231        assert_true (ai_move (ai, 0, 2));
36232        assert_true (ai_move (ai, 0, 0));
36233        assert_true (game.pass ());
36234        assert_true (ai_move (ai, 6, 0));
36235        assert_true (ai_move (ai, 6, 1));
36236        assert_true (ai_move (ai, 0, 7));
36237        assert_true (ai_move (ai, 0, 6));
36238        assert_true (ai_move (ai, 0, 4));
36239        assert_true (game.pass ());
36240        assert_true (ai_move (ai, 7, 1));
36241        assert_true (ai_move (ai, 7, 0));
36242    }
36243
36244    private static inline void test_complete_reversi_game_470 ()
36245    {
36246                                  /* 0 1 2 3 4 5 6 7 */
36247        string [] board = {/* 0 */ " . . . . . . . .",
36248                           /* 1 */ " . . . . . . . .",
36249                           /* 2 */ " . . . . L . . .",
36250                           /* 3 */ " . . . L L . . .",
36251                           /* 4 */ " . . L D D D . .",
36252                           /* 5 */ " . . D . . . . .",
36253                           /* 6 */ " . . . . . . . .",
36254                           /* 7 */ " . . . . . . . ."};
36255
36256        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36257        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36258
36259        assert_true (ai_move (ai, 2, 3));
36260        assert_true (ai_move (ai, 6, 5));
36261        assert_true (ai_move (ai, 2, 2));
36262        assert_true (ai_move (ai, 4, 5));
36263        assert_true (ai_move (ai, 5, 1));
36264        assert_true (ai_move (ai, 4, 1));
36265        assert_true (ai_move (ai, 5, 6));
36266        assert_true (ai_move (ai, 4, 6));
36267        assert_true (ai_move (ai, 7, 4));
36268        assert_true (ai_move (ai, 1, 5));
36269        assert_true (ai_move (ai, 1, 4));
36270        assert_true (ai_move (ai, 3, 5));
36271        assert_true (ai_move (ai, 2, 6));
36272        assert_true (ai_move (ai, 1, 2));
36273        assert_true (ai_move (ai, 0, 2));
36274        assert_true (ai_move (ai, 2, 7));
36275        assert_true (ai_move (ai, 3, 1));
36276        assert_true (ai_move (ai, 2, 1));
36277        assert_true (ai_move (ai, 1, 3));
36278        assert_true (ai_move (ai, 0, 4));
36279        assert_true (ai_move (ai, 5, 7));
36280        assert_true (ai_move (ai, 3, 6));
36281        assert_true (ai_move (ai, 3, 0));
36282        assert_true (ai_move (ai, 7, 6));
36283        assert_true (ai_move (ai, 0, 6));
36284        assert_true (ai_move (ai, 1, 6));
36285        assert_true (ai_move (ai, 6, 4));
36286        assert_true (ai_move (ai, 0, 3));
36287        assert_true (ai_move (ai, 0, 5));
36288        assert_true (ai_move (ai, 5, 3));
36289        assert_true (ai_move (ai, 5, 5));
36290        assert_true (ai_move (ai, 6, 3));
36291        assert_true (ai_move (ai, 3, 2));
36292        assert_true (ai_move (ai, 2, 0));
36293        assert_true (ai_move (ai, 4, 0));
36294        assert_true (ai_move (ai, 5, 0));
36295        assert_true (ai_move (ai, 1, 1));
36296        assert_true (ai_move (ai, 3, 7));
36297        assert_true (ai_move (ai, 6, 6));
36298        assert_true (ai_move (ai, 4, 7));
36299        assert_true (ai_move (ai, 0, 7));
36300        assert_true (ai_move (ai, 6, 7));
36301        assert_true (ai_move (ai, 7, 7));
36302        assert_true (ai_move (ai, 5, 2));
36303        assert_true (ai_move (ai, 1, 7));
36304        assert_true (ai_move (ai, 1, 0));
36305        assert_true (ai_move (ai, 7, 2));
36306        assert_true (ai_move (ai, 6, 2));
36307        assert_true (ai_move (ai, 7, 3));
36308        assert_true (ai_move (ai, 7, 5));
36309        assert_true (ai_move (ai, 6, 1));
36310        assert_true (ai_move (ai, 6, 0));
36311        assert_true (ai_move (ai, 7, 0));
36312        assert_true (ai_move (ai, 7, 1));
36313        assert_true (ai_move (ai, 0, 0));
36314        assert_true (ai_move (ai, 0, 1));
36315    }
36316
36317    private static inline void test_complete_reversi_game_471 ()
36318    {
36319                                  /* 0 1 2 3 4 5 6 7 */
36320        string [] board = {/* 0 */ " . . . . . . . .",
36321                           /* 1 */ " . . . . . . . .",
36322                           /* 2 */ " . . . . L . . .",
36323                           /* 3 */ " . . L L L . . .",
36324                           /* 4 */ " . . . D D D . .",
36325                           /* 5 */ " . . D . . . . .",
36326                           /* 6 */ " . . . . . . . .",
36327                           /* 7 */ " . . . . . . . ."};
36328
36329        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36330        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36331
36332        assert_true (ai_move (ai, 1, 2));
36333        assert_true (ai_move (ai, 1, 3));
36334        assert_true (ai_move (ai, 1, 4));
36335        assert_true (ai_move (ai, 6, 5));
36336        assert_true (ai_move (ai, 6, 4));
36337        assert_true (ai_move (ai, 0, 3));
36338        assert_true (ai_move (ai, 5, 2));
36339        assert_true (ai_move (ai, 6, 2));
36340        assert_true (ai_move (ai, 4, 1));
36341        assert_true (ai_move (ai, 5, 1));
36342        assert_true (ai_move (ai, 6, 3));
36343        assert_true (ai_move (ai, 2, 1));
36344        assert_true (ai_move (ai, 5, 0));
36345        assert_true (ai_move (ai, 0, 5));
36346        assert_true (ai_move (ai, 7, 2));
36347        assert_true (ai_move (ai, 3, 6));
36348        assert_true (ai_move (ai, 3, 2));
36349        assert_true (ai_move (ai, 4, 5));
36350        assert_true (ai_move (ai, 4, 6));
36351        assert_true (ai_move (ai, 5, 6));
36352        assert_true (ai_move (ai, 4, 7));
36353        assert_true (ai_move (ai, 3, 1));
36354        assert_true (ai_move (ai, 2, 2));
36355        assert_true (ai_move (ai, 5, 3));
36356        assert_true (ai_move (ai, 0, 2));
36357        assert_true (ai_move (ai, 7, 5));
36358        assert_true (ai_move (ai, 2, 0));
36359        assert_true (ai_move (ai, 7, 3));
36360        assert_true (ai_move (ai, 3, 0));
36361        assert_true (ai_move (ai, 3, 5));
36362        assert_true (ai_move (ai, 2, 6));
36363        assert_true (ai_move (ai, 5, 5));
36364        assert_true (ai_move (ai, 5, 7));
36365        assert_true (ai_move (ai, 2, 7));
36366        assert_true (ai_move (ai, 0, 4));
36367        assert_true (ai_move (ai, 0, 1));
36368        assert_true (ai_move (ai, 1, 5));
36369        assert_true (ai_move (ai, 2, 4));
36370        assert_true (ai_move (ai, 3, 7));
36371        assert_true (ai_move (ai, 6, 7));
36372        assert_true (ai_move (ai, 7, 4));
36373        assert_true (ai_move (ai, 7, 1));
36374        assert_true (ai_move (ai, 1, 6));
36375        assert_true (ai_move (ai, 4, 0));
36376        assert_true (ai_move (ai, 6, 0));
36377        assert_true (ai_move (ai, 7, 0));
36378        assert_true (ai_move (ai, 7, 6));
36379        assert_true (ai_move (ai, 6, 1));
36380        assert_true (ai_move (ai, 1, 1));
36381        assert_true (ai_move (ai, 1, 0));
36382        assert_true (ai_move (ai, 6, 6));
36383        assert_true (ai_move (ai, 0, 7));
36384        assert_true (ai_move (ai, 1, 7));
36385        assert_true (ai_move (ai, 7, 7));
36386        assert_true (game.pass ());
36387        assert_true (ai_move (ai, 0, 6));
36388        assert_true (game.pass ());
36389        assert_true (ai_move (ai, 0, 0));
36390    }
36391
36392    private static inline void test_complete_reversi_game_472 ()
36393    {
36394                                  /* 0 1 2 3 4 5 6 7 */
36395        string [] board = {/* 0 */ " . . . . . . . .",
36396                           /* 1 */ " . . . . . . . .",
36397                           /* 2 */ " . . . . L . . .",
36398                           /* 3 */ " . . . D L . . .",
36399                           /* 4 */ " . . . L D D . .",
36400                           /* 5 */ " . . L . . . . .",
36401                           /* 6 */ " . L . . . . . .",
36402                           /* 7 */ " . . . . . . . ."};
36403
36404        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36405        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36406
36407        assert_true (ai_move (ai, 3, 5));
36408        assert_true (ai_move (ai, 6, 5));
36409        assert_true (ai_move (ai, 6, 4));
36410        assert_true (ai_move (ai, 6, 3));
36411        assert_true (ai_move (ai, 5, 1));
36412        assert_true (ai_move (ai, 4, 1));
36413        assert_true (ai_move (ai, 7, 2));
36414        assert_true (ai_move (ai, 6, 2));
36415        assert_true (ai_move (ai, 7, 3));
36416        assert_true (ai_move (ai, 2, 3));
36417        assert_true (ai_move (ai, 1, 2));
36418        assert_true (ai_move (ai, 1, 3));
36419        assert_true (ai_move (ai, 7, 4));
36420        assert_true (ai_move (ai, 3, 6));
36421        assert_true (ai_move (ai, 4, 5));
36422        assert_true (ai_move (ai, 5, 3));
36423        assert_true (ai_move (ai, 2, 6));
36424        assert_true (ai_move (ai, 2, 7));
36425        assert_true (ai_move (ai, 5, 6));
36426        assert_true (ai_move (ai, 5, 5));
36427        assert_true (ai_move (ai, 1, 5));
36428        assert_true (ai_move (ai, 2, 4));
36429        assert_true (ai_move (ai, 5, 2));
36430        assert_true (ai_move (ai, 4, 6));
36431        assert_true (ai_move (ai, 0, 3));
36432        assert_true (ai_move (ai, 2, 2));
36433        assert_true (ai_move (ai, 1, 4));
36434        assert_true (ai_move (ai, 7, 5));
36435        assert_true (ai_move (ai, 7, 6));
36436        assert_true (ai_move (ai, 5, 0));
36437        assert_true (ai_move (ai, 4, 7));
36438        assert_true (ai_move (ai, 0, 6));
36439        assert_true (ai_move (ai, 2, 1));
36440        assert_true (ai_move (ai, 0, 2));
36441        assert_true (ai_move (ai, 3, 0));
36442        assert_true (ai_move (ai, 3, 1));
36443        assert_true (ai_move (ai, 2, 0));
36444        assert_true (ai_move (ai, 4, 0));
36445        assert_true (ai_move (ai, 6, 0));
36446        assert_true (ai_move (ai, 3, 7));
36447        assert_true (ai_move (ai, 0, 1));
36448        assert_true (ai_move (ai, 5, 7));
36449        assert_true (ai_move (ai, 0, 4));
36450        assert_true (ai_move (ai, 6, 1));
36451        assert_true (ai_move (ai, 3, 2));
36452        assert_true (ai_move (ai, 7, 1));
36453        assert_true (ai_move (ai, 7, 0));
36454        assert_true (ai_move (ai, 1, 1));
36455        assert_true (ai_move (ai, 1, 0));
36456        assert_true (ai_move (ai, 6, 6));
36457        assert_true (ai_move (ai, 0, 7));
36458        assert_true (ai_move (ai, 0, 5));
36459        assert_true (ai_move (ai, 1, 7));
36460        assert_true (ai_move (ai, 0, 0));
36461        assert_true (ai_move (ai, 6, 7));
36462        assert_true (ai_move (ai, 7, 7));
36463    }
36464
36465    private static inline void test_complete_reversi_game_473 ()
36466    {
36467                                  /* 0 1 2 3 4 5 6 7 */
36468        string [] board = {/* 0 */ " . . . . . . . .",
36469                           /* 1 */ " . . . . . . . .",
36470                           /* 2 */ " . . . . L . . .",
36471                           /* 3 */ " . . . D D L . .",
36472                           /* 4 */ " . . . D L . L .",
36473                           /* 5 */ " . . D . . . . .",
36474                           /* 6 */ " . . . . . . . .",
36475                           /* 7 */ " . . . . . . . ."};
36476
36477        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36478        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36479
36480        assert_true (ai_move (ai, 6, 3));
36481        assert_true (ai_move (ai, 2, 2));
36482        assert_true (ai_move (ai, 2, 3));
36483        assert_true (ai_move (ai, 6, 2));
36484        assert_true (ai_move (ai, 2, 1));
36485        assert_true (ai_move (ai, 2, 4));
36486        assert_true (ai_move (ai, 4, 1));
36487        assert_true (ai_move (ai, 2, 6));
36488        assert_true (ai_move (ai, 2, 7));
36489        assert_true (ai_move (ai, 5, 1));
36490        assert_true (ai_move (ai, 7, 3));
36491        assert_true (ai_move (ai, 1, 5));
36492        assert_true (ai_move (ai, 0, 5));
36493        assert_true (ai_move (ai, 1, 3));
36494        assert_true (ai_move (ai, 3, 1));
36495        assert_true (ai_move (ai, 2, 0));
36496        assert_true (ai_move (ai, 5, 5));
36497        assert_true (ai_move (ai, 4, 0));
36498        assert_true (ai_move (ai, 4, 5));
36499        assert_true (ai_move (ai, 7, 5));
36500        assert_true (ai_move (ai, 1, 4));
36501        assert_true (ai_move (ai, 5, 6));
36502        assert_true (ai_move (ai, 4, 6));
36503        assert_true (ai_move (ai, 0, 4));
36504        assert_true (ai_move (ai, 5, 7));
36505        assert_true (ai_move (ai, 0, 6));
36506        assert_true (ai_move (ai, 6, 5));
36507        assert_true (ai_move (ai, 3, 6));
36508        assert_true (ai_move (ai, 1, 6));
36509        assert_true (ai_move (ai, 3, 7));
36510        assert_true (ai_move (ai, 4, 7));
36511        assert_true (ai_move (ai, 5, 4));
36512        assert_true (ai_move (ai, 5, 2));
36513        assert_true (ai_move (ai, 3, 5));
36514        assert_true (ai_move (ai, 0, 2));
36515        assert_true (ai_move (ai, 3, 2));
36516        assert_true (ai_move (ai, 1, 2));
36517        assert_true (ai_move (ai, 1, 1));
36518        assert_true (ai_move (ai, 7, 4));
36519        assert_true (ai_move (ai, 7, 2));
36520        assert_true (ai_move (ai, 1, 7));
36521        assert_true (ai_move (ai, 7, 6));
36522        assert_true (ai_move (ai, 0, 3));
36523        assert_true (ai_move (ai, 0, 1));
36524        assert_true (ai_move (ai, 3, 0));
36525        assert_true (ai_move (ai, 5, 0));
36526        assert_true (ai_move (ai, 6, 6));
36527        assert_true (ai_move (ai, 7, 7));
36528        assert_true (ai_move (ai, 1, 0));
36529        assert_true (ai_move (ai, 6, 7));
36530        assert_true (ai_move (ai, 6, 0));
36531        assert_true (ai_move (ai, 0, 7));
36532        assert_true (ai_move (ai, 6, 1));
36533        assert_true (ai_move (ai, 7, 0));
36534        assert_true (ai_move (ai, 7, 1));
36535        assert_true (ai_move (ai, 0, 0));
36536    }
36537
36538    private static inline void test_complete_reversi_game_474 ()
36539    {
36540                                  /* 0 1 2 3 4 5 6 7 */
36541        string [] board = {/* 0 */ " . . . . . . . .",
36542                           /* 1 */ " . . . . . . . .",
36543                           /* 2 */ " . . . . L . L .",
36544                           /* 3 */ " . . . D D L . .",
36545                           /* 4 */ " . . . D L . . .",
36546                           /* 5 */ " . . D . . . . .",
36547                           /* 6 */ " . . . . . . . .",
36548                           /* 7 */ " . . . . . . . ."};
36549
36550        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36551        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36552
36553        assert_true (ai_move (ai, 6, 3));
36554        assert_true (ai_move (ai, 2, 2));
36555        assert_true (ai_move (ai, 2, 3));
36556        assert_true (ai_move (ai, 6, 4));
36557        assert_true (ai_move (ai, 2, 1));
36558        assert_true (ai_move (ai, 2, 4));
36559        assert_true (ai_move (ai, 4, 1));
36560        assert_true (ai_move (ai, 2, 6));
36561        assert_true (ai_move (ai, 2, 7));
36562        assert_true (ai_move (ai, 5, 1));
36563        assert_true (ai_move (ai, 7, 3));
36564        assert_true (ai_move (ai, 1, 5));
36565        assert_true (ai_move (ai, 0, 5));
36566        assert_true (ai_move (ai, 1, 3));
36567        assert_true (ai_move (ai, 3, 1));
36568        assert_true (ai_move (ai, 2, 0));
36569        assert_true (ai_move (ai, 5, 5));
36570        assert_true (ai_move (ai, 4, 0));
36571        assert_true (ai_move (ai, 4, 5));
36572        assert_true (ai_move (ai, 7, 5));
36573        assert_true (ai_move (ai, 1, 4));
36574        assert_true (ai_move (ai, 5, 6));
36575        assert_true (ai_move (ai, 4, 6));
36576        assert_true (ai_move (ai, 0, 4));
36577        assert_true (ai_move (ai, 5, 7));
36578        assert_true (ai_move (ai, 0, 6));
36579        assert_true (ai_move (ai, 6, 5));
36580        assert_true (ai_move (ai, 3, 6));
36581        assert_true (ai_move (ai, 1, 6));
36582        assert_true (ai_move (ai, 3, 7));
36583        assert_true (ai_move (ai, 4, 7));
36584        assert_true (ai_move (ai, 5, 4));
36585        assert_true (ai_move (ai, 5, 2));
36586        assert_true (ai_move (ai, 3, 5));
36587        assert_true (ai_move (ai, 0, 2));
36588        assert_true (ai_move (ai, 3, 2));
36589        assert_true (ai_move (ai, 1, 2));
36590        assert_true (ai_move (ai, 1, 1));
36591        assert_true (ai_move (ai, 7, 4));
36592        assert_true (ai_move (ai, 7, 2));
36593        assert_true (ai_move (ai, 1, 7));
36594        assert_true (ai_move (ai, 7, 6));
36595        assert_true (ai_move (ai, 0, 3));
36596        assert_true (ai_move (ai, 0, 1));
36597        assert_true (ai_move (ai, 3, 0));
36598        assert_true (ai_move (ai, 5, 0));
36599        assert_true (ai_move (ai, 6, 6));
36600        assert_true (ai_move (ai, 7, 7));
36601        assert_true (ai_move (ai, 1, 0));
36602        assert_true (ai_move (ai, 6, 7));
36603        assert_true (ai_move (ai, 6, 0));
36604        assert_true (ai_move (ai, 0, 7));
36605        assert_true (ai_move (ai, 6, 1));
36606        assert_true (ai_move (ai, 7, 0));
36607        assert_true (ai_move (ai, 7, 1));
36608        assert_true (ai_move (ai, 0, 0));
36609    }
36610
36611    private static inline void test_complete_reversi_game_475 ()
36612    {
36613                                  /* 0 1 2 3 4 5 6 7 */
36614        string [] board = {/* 0 */ " . . . . . . . .",
36615                           /* 1 */ " . . . . . . . .",
36616                           /* 2 */ " . . . . L . . .",
36617                           /* 3 */ " . . . L D D . .",
36618                           /* 4 */ " . . L L L . . .",
36619                           /* 5 */ " . . D . . . . .",
36620                           /* 6 */ " . . . . . . . .",
36621                           /* 7 */ " . . . . . . . ."};
36622
36623        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36624        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36625
36626        assert_true (ai_move (ai, 4, 1));
36627        assert_true (ai_move (ai, 2, 6));
36628        assert_true (ai_move (ai, 2, 3));
36629        assert_true (ai_move (ai, 6, 2));
36630        assert_true (ai_move (ai, 6, 4));
36631        assert_true (ai_move (ai, 1, 2));
36632        assert_true (ai_move (ai, 1, 3));
36633        assert_true (ai_move (ai, 0, 2));
36634        assert_true (ai_move (ai, 1, 5));
36635        assert_true (ai_move (ai, 3, 5));
36636        assert_true (ai_move (ai, 3, 7));
36637        assert_true (ai_move (ai, 2, 7));
36638        assert_true (ai_move (ai, 0, 3));
36639        assert_true (ai_move (ai, 4, 7));
36640        assert_true (ai_move (ai, 2, 1));
36641        assert_true (ai_move (ai, 0, 5));
36642        assert_true (ai_move (ai, 0, 1));
36643        assert_true (ai_move (ai, 5, 1));
36644        assert_true (ai_move (ai, 3, 1));
36645        assert_true (ai_move (ai, 6, 3));
36646        assert_true (ai_move (ai, 4, 6));
36647        assert_true (ai_move (ai, 3, 6));
36648        assert_true (ai_move (ai, 6, 0));
36649        assert_true (ai_move (ai, 1, 4));
36650        assert_true (ai_move (ai, 6, 1));
36651        assert_true (ai_move (ai, 5, 7));
36652        assert_true (ai_move (ai, 1, 6));
36653        assert_true (ai_move (ai, 0, 7));
36654        assert_true (ai_move (ai, 5, 4));
36655        assert_true (ai_move (ai, 0, 6));
36656        assert_true (ai_move (ai, 5, 2));
36657        assert_true (ai_move (ai, 0, 4));
36658        assert_true (ai_move (ai, 3, 2));
36659        assert_true (ai_move (ai, 0, 0));
36660        assert_true (ai_move (ai, 1, 7));
36661        assert_true (ai_move (ai, 2, 2));
36662        assert_true (ai_move (ai, 1, 1));
36663        assert_true (ai_move (ai, 7, 2));
36664        assert_true (ai_move (ai, 7, 3));
36665        assert_true (ai_move (ai, 7, 5));
36666        assert_true (ai_move (ai, 7, 4));
36667        assert_true (ai_move (ai, 5, 5));
36668        assert_true (ai_move (ai, 5, 6));
36669        assert_true (ai_move (ai, 4, 0));
36670        assert_true (ai_move (ai, 5, 0));
36671        assert_true (ai_move (ai, 1, 0));
36672        assert_true (ai_move (ai, 4, 5));
36673        assert_true (ai_move (ai, 2, 0));
36674        assert_true (ai_move (ai, 3, 0));
36675        assert_true (ai_move (ai, 6, 5));
36676        assert_true (ai_move (ai, 6, 6));
36677        assert_true (ai_move (ai, 7, 7));
36678        assert_true (ai_move (ai, 6, 7));
36679        assert_true (ai_move (ai, 7, 6));
36680        assert_true (ai_move (ai, 7, 1));
36681        assert_true (ai_move (ai, 7, 0));
36682    }
36683
36684    private static inline void test_complete_reversi_game_476 ()
36685    {
36686                                  /* 0 1 2 3 4 5 6 7 */
36687        string [] board = {/* 0 */ " . . . . . . . .",
36688                           /* 1 */ " . . . . . . . .",
36689                           /* 2 */ " . . L . L . . .",
36690                           /* 3 */ " . . . L D D . .",
36691                           /* 4 */ " . . . D L . . .",
36692                           /* 5 */ " . . D . . . . .",
36693                           /* 6 */ " . . . . . . . .",
36694                           /* 7 */ " . . . . . . . ."};
36695
36696        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36697        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36698
36699        assert_true (ai_move (ai, 4, 1));
36700        assert_true (ai_move (ai, 6, 2));
36701        assert_true (ai_move (ai, 6, 4));
36702        assert_true (ai_move (ai, 5, 1));
36703        assert_true (ai_move (ai, 3, 1));
36704        assert_true (ai_move (ai, 3, 5));
36705        assert_true (ai_move (ai, 1, 3));
36706        assert_true (ai_move (ai, 1, 5));
36707        assert_true (ai_move (ai, 2, 3));
36708        assert_true (ai_move (ai, 2, 4));
36709        assert_true (ai_move (ai, 4, 6));
36710        assert_true (ai_move (ai, 3, 6));
36711        assert_true (ai_move (ai, 5, 4));
36712        assert_true (ai_move (ai, 2, 0));
36713        assert_true (ai_move (ai, 2, 1));
36714        assert_true (ai_move (ai, 4, 0));
36715        assert_true (ai_move (ai, 2, 6));
36716        assert_true (ai_move (ai, 6, 3));
36717        assert_true (ai_move (ai, 0, 4));
36718        assert_true (ai_move (ai, 7, 5));
36719        assert_true (ai_move (ai, 7, 2));
36720        assert_true (ai_move (ai, 7, 3));
36721        assert_true (ai_move (ai, 5, 2));
36722        assert_true (ai_move (ai, 5, 5));
36723        assert_true (ai_move (ai, 3, 2));
36724        assert_true (ai_move (ai, 1, 4));
36725        assert_true (ai_move (ai, 5, 6));
36726        assert_true (ai_move (ai, 4, 5));
36727        assert_true (ai_move (ai, 1, 2));
36728        assert_true (ai_move (ai, 3, 0));
36729        assert_true (ai_move (ai, 0, 5));
36730        assert_true (ai_move (ai, 4, 7));
36731        assert_true (ai_move (ai, 5, 0));
36732        assert_true (ai_move (ai, 6, 0));
36733        assert_true (ai_move (ai, 5, 7));
36734        assert_true (ai_move (ai, 6, 5));
36735        assert_true (ai_move (ai, 3, 7));
36736        assert_true (ai_move (ai, 1, 0));
36737        assert_true (ai_move (ai, 6, 7));
36738        assert_true (ai_move (ai, 2, 7));
36739        assert_true (ai_move (ai, 1, 7));
36740        assert_true (ai_move (ai, 1, 1));
36741        assert_true (ai_move (ai, 7, 4));
36742        assert_true (ai_move (ai, 7, 1));
36743        assert_true (ai_move (ai, 1, 6));
36744        assert_true (ai_move (ai, 7, 6));
36745        assert_true (ai_move (ai, 0, 0));
36746        assert_true (ai_move (ai, 6, 6));
36747        assert_true (ai_move (ai, 7, 0));
36748        assert_true (ai_move (ai, 0, 2));
36749        assert_true (ai_move (ai, 7, 7));
36750        assert_true (ai_move (ai, 0, 3));
36751        assert_true (ai_move (ai, 0, 1));
36752        assert_true (ai_move (ai, 6, 1));
36753        assert_true (game.pass ());
36754        assert_true (ai_move (ai, 0, 7));
36755        assert_true (ai_move (ai, 0, 6));
36756    }
36757
36758    private static inline void test_complete_reversi_game_477 ()
36759    {
36760                                  /* 0 1 2 3 4 5 6 7 */
36761        string [] board = {/* 0 */ " . . . . . . . .",
36762                           /* 1 */ " . . . . . . . .",
36763                           /* 2 */ " . . . . L L L .",
36764                           /* 3 */ " . . . D D . . .",
36765                           /* 4 */ " . . . D L . . .",
36766                           /* 5 */ " . . D . . . . .",
36767                           /* 6 */ " . . . . . . . .",
36768                           /* 7 */ " . . . . . . . ."};
36769
36770        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36771        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36772
36773        assert_true (ai_move (ai, 6, 1));
36774        assert_true (ai_move (ai, 2, 4));
36775        assert_true (ai_move (ai, 7, 2));
36776        assert_true (ai_move (ai, 2, 6));
36777        assert_true (ai_move (ai, 3, 2));
36778        assert_true (ai_move (ai, 5, 1));
36779        assert_true (ai_move (ai, 4, 0));
36780        assert_true (ai_move (ai, 2, 2));
36781        assert_true (ai_move (ai, 4, 1));
36782        assert_true (ai_move (ai, 5, 4));
36783        assert_true (ai_move (ai, 1, 2));
36784        assert_true (ai_move (ai, 2, 1));
36785        assert_true (ai_move (ai, 2, 3));
36786        assert_true (ai_move (ai, 3, 1));
36787        assert_true (ai_move (ai, 3, 0));
36788        assert_true (ai_move (ai, 5, 3));
36789        assert_true (ai_move (ai, 6, 5));
36790        assert_true (ai_move (ai, 0, 2));
36791        assert_true (ai_move (ai, 1, 5));
36792        assert_true (ai_move (ai, 2, 0));
36793        assert_true (ai_move (ai, 6, 4));
36794        assert_true (ai_move (ai, 5, 0));
36795        assert_true (ai_move (ai, 2, 7));
36796        assert_true (ai_move (ai, 6, 3));
36797        assert_true (ai_move (ai, 7, 3));
36798        assert_true (ai_move (ai, 1, 4));
36799        assert_true (ai_move (ai, 5, 5));
36800        assert_true (ai_move (ai, 6, 0));
36801        assert_true (ai_move (ai, 0, 3));
36802        assert_true (ai_move (ai, 5, 6));
36803        assert_true (ai_move (ai, 4, 5));
36804        assert_true (ai_move (ai, 3, 5));
36805        assert_true (ai_move (ai, 5, 7));
36806        assert_true (ai_move (ai, 4, 6));
36807        assert_true (ai_move (ai, 3, 7));
36808        assert_true (ai_move (ai, 0, 4));
36809        assert_true (ai_move (ai, 3, 6));
36810        assert_true (ai_move (ai, 4, 7));
36811        assert_true (ai_move (ai, 1, 3));
36812        assert_true (ai_move (ai, 0, 5));
36813        assert_true (ai_move (ai, 1, 6));
36814        assert_true (ai_move (ai, 7, 5));
36815        assert_true (ai_move (ai, 7, 4));
36816        assert_true (ai_move (ai, 7, 0));
36817        assert_true (ai_move (ai, 7, 6));
36818        assert_true (ai_move (ai, 7, 1));
36819        assert_true (ai_move (ai, 6, 6));
36820        assert_true (ai_move (ai, 7, 7));
36821        assert_true (ai_move (ai, 6, 7));
36822        assert_true (ai_move (ai, 0, 7));
36823        assert_true (ai_move (ai, 1, 7));
36824        assert_true (ai_move (ai, 0, 6));
36825        assert_true (ai_move (ai, 1, 1));
36826        assert_true (ai_move (ai, 0, 0));
36827        assert_true (ai_move (ai, 1, 0));
36828        assert_true (ai_move (ai, 0, 1));
36829    }
36830
36831    private static inline void test_complete_reversi_game_478 ()
36832    {
36833                                  /* 0 1 2 3 4 5 6 7 */
36834        string [] board = {/* 0 */ " . . . . . . . .",
36835                           /* 1 */ " . . . . . . . .",
36836                           /* 2 */ " . . . . L D . .",
36837                           /* 3 */ " . . . L D . . .",
36838                           /* 4 */ " . . L L L . . .",
36839                           /* 5 */ " . . D . . . . .",
36840                           /* 6 */ " . . . . . . . .",
36841                           /* 7 */ " . . . . . . . ."};
36842
36843        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36844        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36845
36846        assert_true (ai_move (ai, 3, 2));
36847        assert_true (ai_move (ai, 2, 6));
36848        assert_true (ai_move (ai, 2, 3));
36849        assert_true (ai_move (ai, 1, 2));
36850        assert_true (ai_move (ai, 1, 4));
36851        assert_true (ai_move (ai, 2, 2));
36852        assert_true (ai_move (ai, 3, 6));
36853        assert_true (ai_move (ai, 3, 1));
36854        assert_true (ai_move (ai, 1, 5));
36855        assert_true (ai_move (ai, 6, 2));
36856        assert_true (ai_move (ai, 1, 3));
36857        assert_true (ai_move (ai, 0, 5));
36858        assert_true (ai_move (ai, 5, 1));
36859        assert_true (ai_move (ai, 3, 5));
36860        assert_true (ai_move (ai, 5, 3));
36861        assert_true (ai_move (ai, 0, 2));
36862        assert_true (ai_move (ai, 7, 2));
36863        assert_true (ai_move (ai, 5, 4));
36864        assert_true (ai_move (ai, 2, 0));
36865        assert_true (ai_move (ai, 4, 1));
36866        assert_true (ai_move (ai, 3, 0));
36867        assert_true (ai_move (ai, 6, 4));
36868        assert_true (ai_move (ai, 6, 3));
36869        assert_true (ai_move (ai, 5, 0));
36870        assert_true (ai_move (ai, 7, 5));
36871        assert_true (ai_move (ai, 4, 0));
36872        assert_true (ai_move (ai, 6, 0));
36873        assert_true (ai_move (ai, 3, 7));
36874        assert_true (ai_move (ai, 2, 1));
36875        assert_true (ai_move (ai, 7, 3));
36876        assert_true (ai_move (ai, 2, 7));
36877        assert_true (ai_move (ai, 7, 4));
36878        assert_true (ai_move (ai, 4, 7));
36879        assert_true (ai_move (ai, 1, 6));
36880        assert_true (ai_move (ai, 6, 5));
36881        assert_true (ai_move (ai, 5, 5));
36882        assert_true (ai_move (ai, 5, 6));
36883        assert_true (ai_move (ai, 1, 7));
36884        assert_true (ai_move (ai, 0, 3));
36885        assert_true (ai_move (ai, 5, 7));
36886        assert_true (ai_move (ai, 0, 1));
36887        assert_true (ai_move (ai, 4, 6));
36888        assert_true (ai_move (ai, 6, 6));
36889        assert_true (ai_move (ai, 0, 4));
36890        assert_true (ai_move (ai, 4, 5));
36891        assert_true (ai_move (ai, 6, 1));
36892        assert_true (ai_move (ai, 0, 6));
36893        assert_true (ai_move (ai, 0, 7));
36894        assert_true (ai_move (ai, 7, 1));
36895        assert_true (ai_move (ai, 0, 0));
36896        assert_true (game.pass ());
36897        assert_true (ai_move (ai, 1, 0));
36898        assert_true (ai_move (ai, 1, 1));
36899        assert_true (ai_move (ai, 7, 0));
36900        assert_true (game.pass ());
36901        assert_true (ai_move (ai, 7, 7));
36902        assert_true (ai_move (ai, 7, 6));
36903        assert_true (ai_move (ai, 6, 7));
36904    }
36905
36906    private static inline void test_complete_reversi_game_479 ()
36907    {
36908                                  /* 0 1 2 3 4 5 6 7 */
36909        string [] board = {/* 0 */ " . . . . . . . .",
36910                           /* 1 */ " . . . . . . . .",
36911                           /* 2 */ " . . L . L D . .",
36912                           /* 3 */ " . . . L D . . .",
36913                           /* 4 */ " . . . D L . . .",
36914                           /* 5 */ " . . D . . . . .",
36915                           /* 6 */ " . . . . . . . .",
36916                           /* 7 */ " . . . . . . . ."};
36917
36918        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36919        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36920
36921        assert_true (ai_move (ai, 4, 1));
36922        assert_true (ai_move (ai, 2, 4));
36923        assert_true (ai_move (ai, 1, 5));
36924        assert_true (ai_move (ai, 1, 4));
36925        assert_true (ai_move (ai, 2, 3));
36926        assert_true (ai_move (ai, 2, 6));
36927        assert_true (ai_move (ai, 3, 7));
36928        assert_true (ai_move (ai, 2, 7));
36929        assert_true (ai_move (ai, 1, 7));
36930        assert_true (ai_move (ai, 0, 5));
36931        assert_true (ai_move (ai, 1, 3));
36932        assert_true (ai_move (ai, 1, 2));
36933        assert_true (ai_move (ai, 5, 5));
36934        assert_true (ai_move (ai, 3, 2));
36935        assert_true (ai_move (ai, 2, 1));
36936        assert_true (ai_move (ai, 3, 6));
36937        assert_true (ai_move (ai, 4, 6));
36938        assert_true (ai_move (ai, 3, 1));
36939        assert_true (ai_move (ai, 4, 5));
36940        assert_true (ai_move (ai, 6, 2));
36941        assert_true (ai_move (ai, 6, 3));
36942        assert_true (ai_move (ai, 2, 0));
36943        assert_true (ai_move (ai, 5, 1));
36944        assert_true (ai_move (ai, 5, 0));
36945        assert_true (ai_move (ai, 7, 2));
36946        assert_true (ai_move (ai, 5, 6));
36947        assert_true (ai_move (ai, 0, 2));
36948        assert_true (ai_move (ai, 6, 5));
36949        assert_true (ai_move (ai, 6, 4));
36950        assert_true (ai_move (ai, 0, 4));
36951        assert_true (ai_move (ai, 0, 3));
36952        assert_true (ai_move (ai, 0, 1));
36953        assert_true (ai_move (ai, 3, 5));
36954        assert_true (ai_move (ai, 5, 7));
36955        assert_true (ai_move (ai, 7, 5));
36956        assert_true (ai_move (ai, 4, 7));
36957        assert_true (ai_move (ai, 6, 7));
36958        assert_true (ai_move (ai, 7, 4));
36959        assert_true (ai_move (ai, 7, 3));
36960        assert_true (ai_move (ai, 6, 0));
36961        assert_true (ai_move (ai, 5, 4));
36962        assert_true (ai_move (ai, 5, 3));
36963        assert_true (ai_move (ai, 1, 1));
36964        assert_true (ai_move (ai, 7, 1));
36965        assert_true (ai_move (ai, 7, 0));
36966        assert_true (ai_move (ai, 7, 6));
36967        assert_true (ai_move (ai, 6, 6));
36968        assert_true (ai_move (ai, 1, 6));
36969        assert_true (ai_move (ai, 7, 7));
36970        assert_true (ai_move (ai, 1, 0));
36971        assert_true (ai_move (ai, 4, 0));
36972        assert_true (ai_move (ai, 3, 0));
36973        assert_true (ai_move (ai, 6, 1));
36974        assert_true (game.pass ());
36975        assert_true (ai_move (ai, 0, 7));
36976        assert_true (ai_move (ai, 0, 6));
36977        assert_true (ai_move (ai, 0, 0));
36978    }
36979
36980    private static inline void test_complete_reversi_game_480 ()
36981    {
36982                                  /* 0 1 2 3 4 5 6 7 */
36983        string [] board = {/* 0 */ " . . . . . . . .",
36984                           /* 1 */ " . . . . L D . .",
36985                           /* 2 */ " . . . . L . . .",
36986                           /* 3 */ " . . . D L . . .",
36987                           /* 4 */ " . . . D L . . .",
36988                           /* 5 */ " . . D . . . . .",
36989                           /* 6 */ " . . . . . . . .",
36990                           /* 7 */ " . . . . . . . ."};
36991
36992        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
36993        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
36994
36995        assert_true (ai_move (ai, 5, 5));
36996        assert_true (ai_move (ai, 2, 3));
36997        assert_true (ai_move (ai, 1, 2));
36998        assert_true (ai_move (ai, 1, 3));
36999        assert_true (ai_move (ai, 1, 4));
37000        assert_true (ai_move (ai, 0, 3));
37001        assert_true (ai_move (ai, 3, 1));
37002        assert_true (ai_move (ai, 2, 0));
37003        assert_true (ai_move (ai, 2, 2));
37004        assert_true (ai_move (ai, 2, 1));
37005        assert_true (ai_move (ai, 3, 2));
37006        assert_true (ai_move (ai, 2, 4));
37007        assert_true (ai_move (ai, 0, 2));
37008        assert_true (ai_move (ai, 0, 5));
37009        assert_true (ai_move (ai, 5, 4));
37010        assert_true (ai_move (ai, 2, 6));
37011        assert_true (ai_move (ai, 5, 2));
37012        assert_true (ai_move (ai, 5, 0));
37013        assert_true (ai_move (ai, 2, 7));
37014        assert_true (ai_move (ai, 3, 6));
37015        assert_true (ai_move (ai, 4, 5));
37016        assert_true (ai_move (ai, 1, 5));
37017        assert_true (ai_move (ai, 3, 5));
37018        assert_true (ai_move (ai, 0, 4));
37019        assert_true (ai_move (ai, 0, 6));
37020        assert_true (ai_move (ai, 6, 2));
37021        assert_true (ai_move (ai, 7, 2));
37022        assert_true (ai_move (ai, 6, 5));
37023        assert_true (ai_move (ai, 5, 6));
37024        assert_true (ai_move (ai, 6, 3));
37025        assert_true (ai_move (ai, 4, 6));
37026        assert_true (ai_move (ai, 5, 3));
37027        assert_true (ai_move (ai, 7, 5));
37028        assert_true (ai_move (ai, 5, 7));
37029        assert_true (ai_move (ai, 6, 4));
37030        assert_true (ai_move (ai, 3, 7));
37031        assert_true (ai_move (ai, 4, 7));
37032        assert_true (ai_move (ai, 1, 7));
37033        assert_true (ai_move (ai, 6, 1));
37034        assert_true (ai_move (ai, 7, 4));
37035        assert_true (ai_move (ai, 7, 3));
37036        assert_true (ai_move (ai, 6, 6));
37037        assert_true (ai_move (ai, 3, 0));
37038        assert_true (ai_move (ai, 1, 1));
37039        assert_true (ai_move (ai, 0, 1));
37040        assert_true (ai_move (ai, 0, 0));
37041        assert_true (ai_move (ai, 1, 0));
37042        assert_true (ai_move (ai, 0, 7));
37043        assert_true (ai_move (ai, 7, 7));
37044        assert_true (ai_move (ai, 4, 0));
37045        assert_true (ai_move (ai, 7, 6));
37046        assert_true (ai_move (ai, 1, 6));
37047        assert_true (ai_move (ai, 6, 7));
37048        assert_true (ai_move (ai, 7, 0));
37049        assert_true (ai_move (ai, 7, 1));
37050        assert_true (ai_move (ai, 6, 0));
37051    }
37052
37053    private static inline void test_complete_reversi_game_481 ()
37054    {
37055                                  /* 0 1 2 3 4 5 6 7 */
37056        string [] board = {/* 0 */ " . . . . . . . .",
37057                           /* 1 */ " . . . . . D . .",
37058                           /* 2 */ " . . . . D . . .",
37059                           /* 3 */ " . . . D L . . .",
37060                           /* 4 */ " . . L L L . . .",
37061                           /* 5 */ " . . D . . . . .",
37062                           /* 6 */ " . . . . . . . .",
37063                           /* 7 */ " . . . . . . . ."};
37064
37065        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37066        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37067
37068        assert_true (ai_move (ai, 1, 5));
37069        assert_true (ai_move (ai, 2, 2));
37070        assert_true (ai_move (ai, 5, 2));
37071        assert_true (ai_move (ai, 5, 3));
37072        assert_true (ai_move (ai, 6, 4));
37073        assert_true (ai_move (ai, 4, 1));
37074        assert_true (ai_move (ai, 3, 0));
37075        assert_true (ai_move (ai, 6, 3));
37076        assert_true (ai_move (ai, 3, 1));
37077        assert_true (ai_move (ai, 6, 2));
37078        assert_true (ai_move (ai, 7, 3));
37079        assert_true (ai_move (ai, 7, 5));
37080        assert_true (ai_move (ai, 1, 3));
37081        assert_true (ai_move (ai, 5, 0));
37082        assert_true (ai_move (ai, 4, 0));
37083        assert_true (ai_move (ai, 3, 2));
37084        assert_true (ai_move (ai, 6, 0));
37085        assert_true (ai_move (ai, 1, 2));
37086        assert_true (ai_move (ai, 0, 2));
37087        assert_true (ai_move (ai, 2, 3));
37088        assert_true (ai_move (ai, 1, 4));
37089        assert_true (ai_move (ai, 0, 3));
37090        assert_true (ai_move (ai, 0, 4));
37091        assert_true (ai_move (ai, 2, 6));
37092        assert_true (ai_move (ai, 2, 7));
37093        assert_true (ai_move (ai, 3, 5));
37094        assert_true (ai_move (ai, 4, 6));
37095        assert_true (ai_move (ai, 3, 6));
37096        assert_true (ai_move (ai, 4, 7));
37097        assert_true (ai_move (ai, 3, 7));
37098        assert_true (ai_move (ai, 7, 4));
37099        assert_true (ai_move (ai, 7, 2));
37100        assert_true (ai_move (ai, 6, 5));
37101        assert_true (ai_move (ai, 7, 1));
37102        assert_true (ai_move (ai, 5, 5));
37103        assert_true (ai_move (ai, 4, 5));
37104        assert_true (ai_move (ai, 5, 4));
37105        assert_true (ai_move (ai, 2, 0));
37106        assert_true (ai_move (ai, 1, 0));
37107        assert_true (ai_move (ai, 0, 5));
37108        assert_true (ai_move (ai, 2, 1));
37109        assert_true (ai_move (ai, 0, 1));
37110        assert_true (ai_move (ai, 5, 6));
37111        assert_true (ai_move (ai, 6, 1));
37112        assert_true (ai_move (ai, 6, 6));
37113        assert_true (ai_move (ai, 7, 6));
37114        assert_true (ai_move (ai, 1, 6));
37115        assert_true (ai_move (ai, 0, 7));
37116        assert_true (ai_move (ai, 1, 7));
37117        assert_true (ai_move (ai, 0, 6));
37118        assert_true (ai_move (ai, 5, 7));
37119        assert_true (ai_move (ai, 6, 7));
37120        assert_true (ai_move (ai, 7, 7));
37121        assert_true (ai_move (ai, 1, 1));
37122        assert_true (ai_move (ai, 7, 0));
37123        assert_true (game.pass ());
37124        assert_true (ai_move (ai, 0, 0));
37125    }
37126
37127    private static inline void test_complete_reversi_game_482 ()
37128    {
37129                                  /* 0 1 2 3 4 5 6 7 */
37130        string [] board = {/* 0 */ " . . . . . . . .",
37131                           /* 1 */ " . . . . . D . .",
37132                           /* 2 */ " . . . . D . . .",
37133                           /* 3 */ " . . L L L . . .",
37134                           /* 4 */ " . . . D L . . .",
37135                           /* 5 */ " . . D . . . . .",
37136                           /* 6 */ " . . . . . . . .",
37137                           /* 7 */ " . . . . . . . ."};
37138
37139        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37140        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37141
37142        assert_true (ai_move (ai, 1, 2));
37143        assert_true (ai_move (ai, 2, 4));
37144        assert_true (ai_move (ai, 1, 5));
37145        assert_true (ai_move (ai, 4, 1));
37146        assert_true (ai_move (ai, 4, 5));
37147        assert_true (ai_move (ai, 4, 6));
37148        assert_true (ai_move (ai, 5, 6));
37149        assert_true (ai_move (ai, 2, 2));
37150        assert_true (ai_move (ai, 2, 1));
37151        assert_true (ai_move (ai, 1, 3));
37152        assert_true (ai_move (ai, 0, 2));
37153        assert_true (ai_move (ai, 3, 5));
37154        assert_true (ai_move (ai, 5, 7));
37155        assert_true (ai_move (ai, 1, 4));
37156        assert_true (ai_move (ai, 0, 3));
37157        assert_true (ai_move (ai, 0, 5));
37158        assert_true (ai_move (ai, 3, 1));
37159        assert_true (ai_move (ai, 3, 6));
37160        assert_true (ai_move (ai, 2, 7));
37161        assert_true (ai_move (ai, 3, 7));
37162        assert_true (ai_move (ai, 4, 7));
37163        assert_true (ai_move (ai, 5, 5));
37164        assert_true (ai_move (ai, 6, 5));
37165        assert_true (ai_move (ai, 2, 6));
37166        assert_true (ai_move (ai, 3, 2));
37167        assert_true (ai_move (ai, 7, 5));
37168        assert_true (ai_move (ai, 6, 4));
37169        assert_true (ai_move (ai, 2, 0));
37170        assert_true (ai_move (ai, 4, 0));
37171        assert_true (ai_move (ai, 5, 0));
37172        assert_true (ai_move (ai, 3, 0));
37173        assert_true (ai_move (ai, 5, 2));
37174        assert_true (ai_move (ai, 6, 2));
37175        assert_true (ai_move (ai, 5, 3));
37176        assert_true (ai_move (ai, 7, 4));
37177        assert_true (ai_move (ai, 7, 2));
37178        assert_true (ai_move (ai, 7, 6));
37179        assert_true (ai_move (ai, 0, 4));
37180        assert_true (ai_move (ai, 0, 6));
37181        assert_true (ai_move (ai, 1, 0));
37182        assert_true (ai_move (ai, 0, 0));
37183        assert_true (ai_move (ai, 0, 1));
37184        assert_true (ai_move (ai, 1, 6));
37185        assert_true (ai_move (ai, 0, 7));
37186        assert_true (ai_move (ai, 1, 1));
37187        assert_true (ai_move (ai, 1, 7));
37188        assert_true (ai_move (ai, 6, 0));
37189        assert_true (ai_move (ai, 6, 7));
37190        assert_true (ai_move (ai, 6, 3));
37191        assert_true (ai_move (ai, 5, 4));
37192        assert_true (ai_move (ai, 6, 6));
37193        assert_true (ai_move (ai, 7, 3));
37194        assert_true (ai_move (ai, 7, 1));
37195        assert_true (ai_move (ai, 6, 1));
37196        assert_true (game.pass ());
37197        assert_true (ai_move (ai, 7, 7));
37198        assert_true (game.pass ());
37199        assert_true (ai_move (ai, 7, 0));
37200    }
37201
37202    private static inline void test_complete_reversi_game_483 ()
37203    {
37204                                  /* 0 1 2 3 4 5 6 7 */
37205        string [] board = {/* 0 */ " . . . . . . . .",
37206                           /* 1 */ " . . . . . D . .",
37207                           /* 2 */ " . . L . D . . .",
37208                           /* 3 */ " . . . L L . . .",
37209                           /* 4 */ " . . . D L . . .",
37210                           /* 5 */ " . . D . . . . .",
37211                           /* 6 */ " . . . . . . . .",
37212                           /* 7 */ " . . . . . . . ."};
37213
37214        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37215        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37216
37217        assert_true (ai_move (ai, 5, 2));
37218        assert_true (ai_move (ai, 2, 4));
37219        assert_true (ai_move (ai, 1, 5));
37220        assert_true (ai_move (ai, 1, 4));
37221        assert_true (ai_move (ai, 2, 3));
37222        assert_true (ai_move (ai, 2, 6));
37223        assert_true (ai_move (ai, 3, 7));
37224        assert_true (ai_move (ai, 2, 7));
37225        assert_true (ai_move (ai, 1, 7));
37226        assert_true (ai_move (ai, 0, 5));
37227        assert_true (ai_move (ai, 1, 3));
37228        assert_true (ai_move (ai, 1, 2));
37229        assert_true (ai_move (ai, 5, 5));
37230        assert_true (ai_move (ai, 3, 2));
37231        assert_true (ai_move (ai, 2, 1));
37232        assert_true (ai_move (ai, 3, 6));
37233        assert_true (ai_move (ai, 4, 6));
37234        assert_true (ai_move (ai, 4, 1));
37235        assert_true (ai_move (ai, 0, 2));
37236        assert_true (ai_move (ai, 2, 0));
37237        assert_true (ai_move (ai, 4, 5));
37238        assert_true (ai_move (ai, 6, 3));
37239        assert_true (ai_move (ai, 6, 2));
37240        assert_true (ai_move (ai, 0, 4));
37241        assert_true (ai_move (ai, 0, 3));
37242        assert_true (ai_move (ai, 0, 1));
37243        assert_true (ai_move (ai, 4, 0));
37244        assert_true (ai_move (ai, 3, 5));
37245        assert_true (ai_move (ai, 3, 0));
37246        assert_true (ai_move (ai, 5, 0));
37247        assert_true (ai_move (ai, 7, 4));
37248        assert_true (ai_move (ai, 6, 5));
37249        assert_true (ai_move (ai, 6, 4));
37250        assert_true (ai_move (ai, 1, 0));
37251        assert_true (ai_move (ai, 5, 4));
37252        assert_true (ai_move (ai, 5, 6));
37253        assert_true (ai_move (ai, 7, 5));
37254        assert_true (ai_move (ai, 6, 0));
37255        assert_true (ai_move (ai, 4, 7));
37256        assert_true (ai_move (ai, 7, 3));
37257        assert_true (ai_move (ai, 7, 2));
37258        assert_true (ai_move (ai, 5, 3));
37259        assert_true (ai_move (ai, 3, 1));
37260        assert_true (ai_move (ai, 5, 7));
37261        assert_true (ai_move (ai, 6, 7));
37262        assert_true (ai_move (ai, 1, 1));
37263        assert_true (ai_move (ai, 0, 0));
37264        assert_true (ai_move (ai, 7, 1));
37265        assert_true (ai_move (ai, 7, 0));
37266        assert_true (ai_move (ai, 1, 6));
37267        assert_true (ai_move (ai, 6, 6));
37268        assert_true (ai_move (ai, 7, 6));
37269        assert_true (ai_move (ai, 0, 6));
37270        assert_true (game.pass ());
37271        assert_true (ai_move (ai, 6, 1));
37272        assert_true (game.pass ());
37273        assert_true (ai_move (ai, 0, 7));
37274        assert_true (game.pass ());
37275        assert_true (ai_move (ai, 7, 7));
37276    }
37277
37278    private static inline void test_complete_reversi_game_484 ()
37279    {
37280                                  /* 0 1 2 3 4 5 6 7 */
37281        string [] board = {/* 0 */ " . . . . . . . .",
37282                           /* 1 */ " . . . . . D . .",
37283                           /* 2 */ " . . . . D . . .",
37284                           /* 3 */ " . . . D L . . .",
37285                           /* 4 */ " . . . L L . . .",
37286                           /* 5 */ " . . L . . . . .",
37287                           /* 6 */ " . L . . . . . .",
37288                           /* 7 */ " . . . . . . . ."};
37289
37290        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37291        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37292
37293        assert_true (ai_move (ai, 3, 5));
37294        assert_true (ai_move (ai, 4, 5));
37295        assert_true (ai_move (ai, 5, 4));
37296        assert_true (ai_move (ai, 6, 5));
37297        assert_true (ai_move (ai, 6, 4));
37298        assert_true (ai_move (ai, 4, 1));
37299        assert_true (ai_move (ai, 2, 6));
37300        assert_true (ai_move (ai, 2, 7));
37301        assert_true (ai_move (ai, 5, 5));
37302        assert_true (ai_move (ai, 5, 3));
37303        assert_true (ai_move (ai, 3, 6));
37304        assert_true (ai_move (ai, 5, 6));
37305        assert_true (ai_move (ai, 4, 6));
37306        assert_true (ai_move (ai, 6, 3));
37307        assert_true (ai_move (ai, 7, 4));
37308        assert_true (ai_move (ai, 7, 5));
37309        assert_true (ai_move (ai, 7, 2));
37310        assert_true (ai_move (ai, 3, 7));
37311        assert_true (ai_move (ai, 5, 7));
37312        assert_true (ai_move (ai, 7, 3));
37313        assert_true (ai_move (ai, 7, 6));
37314        assert_true (ai_move (ai, 2, 4));
37315        assert_true (ai_move (ai, 5, 2));
37316        assert_true (ai_move (ai, 6, 2));
37317        assert_true (ai_move (ai, 3, 0));
37318        assert_true (ai_move (ai, 4, 7));
37319        assert_true (ai_move (ai, 1, 7));
37320        assert_true (ai_move (ai, 6, 1));
37321        assert_true (ai_move (ai, 1, 4));
37322        assert_true (ai_move (ai, 1, 3));
37323        assert_true (ai_move (ai, 3, 1));
37324        assert_true (ai_move (ai, 3, 2));
37325        assert_true (ai_move (ai, 2, 2));
37326        assert_true (ai_move (ai, 4, 0));
37327        assert_true (ai_move (ai, 2, 0));
37328        assert_true (ai_move (ai, 2, 1));
37329        assert_true (ai_move (ai, 2, 3));
37330        assert_true (ai_move (ai, 1, 2));
37331        assert_true (ai_move (ai, 0, 2));
37332        assert_true (ai_move (ai, 1, 5));
37333        assert_true (ai_move (ai, 0, 4));
37334        assert_true (ai_move (ai, 1, 0));
37335        assert_true (ai_move (ai, 1, 1));
37336        assert_true (ai_move (ai, 5, 0));
37337        assert_true (ai_move (ai, 7, 0));
37338        assert_true (ai_move (ai, 7, 1));
37339        assert_true (ai_move (ai, 6, 0));
37340        assert_true (ai_move (ai, 0, 0));
37341        assert_true (ai_move (ai, 0, 7));
37342        assert_true (ai_move (ai, 7, 7));
37343        assert_true (ai_move (ai, 0, 1));
37344        assert_true (ai_move (ai, 0, 3));
37345        assert_true (game.pass ());
37346        assert_true (ai_move (ai, 6, 7));
37347        assert_true (ai_move (ai, 6, 6));
37348        assert_true (ai_move (ai, 0, 6));
37349        assert_true (ai_move (ai, 0, 5));
37350    }
37351
37352    private static inline void test_complete_reversi_game_485 ()
37353    {
37354                                  /* 0 1 2 3 4 5 6 7 */
37355        string [] board = {/* 0 */ " . . . . . . . .",
37356                           /* 1 */ " . . . . . . . .",
37357                           /* 2 */ " . . . . . . . .",
37358                           /* 3 */ " . . . D D . . .",
37359                           /* 4 */ " . . L L L L . .",
37360                           /* 5 */ " . . D . . D . .",
37361                           /* 6 */ " . . . . . . . .",
37362                           /* 7 */ " . . . . . . . ."};
37363
37364        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37365        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37366
37367        assert_true (ai_move (ai, 5, 3));
37368        assert_true (ai_move (ai, 2, 6));
37369        assert_true (ai_move (ai, 1, 5));
37370        assert_true (ai_move (ai, 2, 3));
37371        assert_true (ai_move (ai, 1, 3));
37372        assert_true (ai_move (ai, 1, 2));
37373        assert_true (ai_move (ai, 3, 7));
37374        assert_true (ai_move (ai, 2, 7));
37375        assert_true (ai_move (ai, 1, 7));
37376        assert_true (ai_move (ai, 6, 4));
37377        assert_true (ai_move (ai, 6, 5));
37378        assert_true (ai_move (ai, 4, 6));
37379        assert_true (ai_move (ai, 5, 6));
37380        assert_true (ai_move (ai, 0, 5));
37381        assert_true (ai_move (ai, 7, 3));
37382        assert_true (ai_move (ai, 3, 2));
37383        assert_true (ai_move (ai, 2, 1));
37384        assert_true (ai_move (ai, 3, 0));
37385        assert_true (ai_move (ai, 4, 5));
37386        assert_true (ai_move (ai, 3, 1));
37387        assert_true (ai_move (ai, 4, 7));
37388        assert_true (ai_move (ai, 1, 4));
37389        assert_true (ai_move (ai, 3, 5));
37390        assert_true (ai_move (ai, 3, 6));
37391        assert_true (ai_move (ai, 2, 2));
37392        assert_true (ai_move (ai, 7, 5));
37393        assert_true (ai_move (ai, 4, 2));
37394        assert_true (ai_move (ai, 5, 2));
37395        assert_true (ai_move (ai, 6, 3));
37396        assert_true (ai_move (ai, 7, 4));
37397        assert_true (ai_move (ai, 7, 2));
37398        assert_true (ai_move (ai, 7, 1));
37399        assert_true (ai_move (ai, 5, 1));
37400        assert_true (ai_move (ai, 6, 2));
37401        assert_true (ai_move (ai, 4, 1));
37402        assert_true (ai_move (ai, 5, 0));
37403        assert_true (ai_move (ai, 4, 0));
37404        assert_true (ai_move (ai, 5, 7));
37405        assert_true (ai_move (ai, 6, 7));
37406        assert_true (ai_move (ai, 1, 6));
37407        assert_true (ai_move (ai, 0, 3));
37408        assert_true (ai_move (ai, 0, 2));
37409        assert_true (ai_move (ai, 0, 4));
37410        assert_true (ai_move (ai, 2, 0));
37411        assert_true (ai_move (ai, 6, 6));
37412        assert_true (ai_move (ai, 0, 6));
37413        assert_true (ai_move (ai, 1, 1));
37414        assert_true (ai_move (ai, 7, 6));
37415        assert_true (ai_move (ai, 7, 7));
37416        assert_true (ai_move (ai, 0, 1));
37417        assert_true (ai_move (ai, 7, 0));
37418        assert_true (game.pass ());
37419        assert_true (ai_move (ai, 6, 0));
37420        assert_true (ai_move (ai, 6, 1));
37421        assert_true (ai_move (ai, 1, 0));
37422        assert_true (game.pass ());
37423        assert_true (ai_move (ai, 0, 0));
37424        assert_true (game.pass ());
37425        assert_true (ai_move (ai, 0, 7));
37426    }
37427
37428    private static inline void test_complete_reversi_game_486 ()
37429    {
37430                                  /* 0 1 2 3 4 5 6 7 */
37431        string [] board = {/* 0 */ " . . . . . . . .",
37432                           /* 1 */ " . . . . . . . .",
37433                           /* 2 */ " . . . . . L . .",
37434                           /* 3 */ " . . . D L . . .",
37435                           /* 4 */ " . . L L D . . .",
37436                           /* 5 */ " . . D . . D . .",
37437                           /* 6 */ " . . . . . . . .",
37438                           /* 7 */ " . . . . . . . ."};
37439
37440        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37441        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37442
37443        assert_true (ai_move (ai, 2, 3));
37444        assert_true (ai_move (ai, 1, 4));
37445        assert_true (ai_move (ai, 1, 5));
37446        assert_true (ai_move (ai, 3, 6));
37447        assert_true (ai_move (ai, 2, 6));
37448        assert_true (ai_move (ai, 1, 2));
37449        assert_true (ai_move (ai, 2, 2));
37450        assert_true (ai_move (ai, 4, 5));
37451        assert_true (ai_move (ai, 0, 2));
37452        assert_true (ai_move (ai, 6, 5));
37453        assert_true (ai_move (ai, 0, 3));
37454        assert_true (ai_move (ai, 3, 2));
37455        assert_true (ai_move (ai, 4, 1));
37456        assert_true (ai_move (ai, 3, 1));
37457        assert_true (ai_move (ai, 6, 3));
37458        assert_true (ai_move (ai, 1, 3));
37459        assert_true (ai_move (ai, 2, 1));
37460        assert_true (ai_move (ai, 3, 5));
37461        assert_true (ai_move (ai, 4, 2));
37462        assert_true (ai_move (ai, 0, 4));
37463        assert_true (ai_move (ai, 0, 5));
37464        assert_true (ai_move (ai, 2, 0));
37465        assert_true (ai_move (ai, 5, 6));
37466        assert_true (ai_move (ai, 5, 4));
37467        assert_true (ai_move (ai, 3, 0));
37468        assert_true (ai_move (ai, 2, 7));
37469        assert_true (ai_move (ai, 7, 5));
37470        assert_true (ai_move (ai, 5, 7));
37471        assert_true (ai_move (ai, 6, 4));
37472        assert_true (ai_move (ai, 6, 2));
37473        assert_true (ai_move (ai, 7, 2));
37474        assert_true (ai_move (ai, 4, 6));
37475        assert_true (ai_move (ai, 5, 3));
37476        assert_true (ai_move (ai, 5, 1));
37477        assert_true (ai_move (ai, 4, 0));
37478        assert_true (ai_move (ai, 5, 0));
37479        assert_true (ai_move (ai, 3, 7));
37480        assert_true (ai_move (ai, 4, 7));
37481        assert_true (ai_move (ai, 6, 1));
37482        assert_true (ai_move (ai, 1, 0));
37483        assert_true (ai_move (ai, 6, 7));
37484        assert_true (ai_move (ai, 7, 7));
37485        assert_true (ai_move (ai, 1, 1));
37486        assert_true (ai_move (ai, 1, 7));
37487        assert_true (ai_move (ai, 1, 6));
37488        assert_true (ai_move (ai, 6, 6));
37489        assert_true (ai_move (ai, 7, 6));
37490        assert_true (ai_move (ai, 7, 4));
37491        assert_true (ai_move (ai, 7, 3));
37492        assert_true (ai_move (ai, 0, 0));
37493        assert_true (ai_move (ai, 0, 1));
37494        assert_true (ai_move (ai, 7, 0));
37495        assert_true (ai_move (ai, 7, 1));
37496        assert_true (ai_move (ai, 6, 0));
37497        assert_true (game.pass ());
37498        assert_true (ai_move (ai, 0, 6));
37499        assert_true (ai_move (ai, 0, 7));
37500    }
37501
37502    private static inline void test_complete_reversi_game_487 ()
37503    {
37504                                  /* 0 1 2 3 4 5 6 7 */
37505        string [] board = {/* 0 */ " . . . . . . . .",
37506                           /* 1 */ " . . . . . . . .",
37507                           /* 2 */ " . . . . L . . .",
37508                           /* 3 */ " . . . L D . . .",
37509                           /* 4 */ " . . L L D . . .",
37510                           /* 5 */ " . . D . . D . .",
37511                           /* 6 */ " . . . . . . . .",
37512                           /* 7 */ " . . . . . . . ."};
37513
37514        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37515        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37516
37517        assert_true (ai_move (ai, 4, 1));
37518        assert_true (ai_move (ai, 2, 6));
37519        assert_true (ai_move (ai, 2, 2));
37520        assert_true (ai_move (ai, 5, 1));
37521        assert_true (ai_move (ai, 2, 3));
37522        assert_true (ai_move (ai, 1, 2));
37523        assert_true (ai_move (ai, 1, 3));
37524        assert_true (ai_move (ai, 2, 1));
37525        assert_true (ai_move (ai, 1, 5));
37526        assert_true (ai_move (ai, 0, 5));
37527        assert_true (ai_move (ai, 3, 1));
37528        assert_true (ai_move (ai, 2, 0));
37529        assert_true (ai_move (ai, 0, 2));
37530        assert_true (ai_move (ai, 1, 4));
37531        assert_true (ai_move (ai, 3, 5));
37532        assert_true (ai_move (ai, 4, 0));
37533        assert_true (ai_move (ai, 2, 7));
37534        assert_true (ai_move (ai, 3, 6));
37535        assert_true (ai_move (ai, 4, 5));
37536        assert_true (ai_move (ai, 6, 5));
37537        assert_true (ai_move (ai, 4, 6));
37538        assert_true (ai_move (ai, 5, 6));
37539        assert_true (ai_move (ai, 5, 4));
37540        assert_true (ai_move (ai, 0, 3));
37541        assert_true (ai_move (ai, 5, 7));
37542        assert_true (ai_move (ai, 5, 2));
37543        assert_true (ai_move (ai, 3, 2));
37544        assert_true (ai_move (ai, 5, 3));
37545        assert_true (ai_move (ai, 3, 0));
37546        assert_true (ai_move (ai, 6, 4));
37547        assert_true (ai_move (ai, 7, 3));
37548        assert_true (ai_move (ai, 7, 5));
37549        assert_true (ai_move (ai, 6, 3));
37550        assert_true (ai_move (ai, 5, 0));
37551        assert_true (ai_move (ai, 6, 2));
37552        assert_true (ai_move (ai, 7, 4));
37553        assert_true (ai_move (ai, 7, 6));
37554        assert_true (ai_move (ai, 7, 2));
37555        assert_true (ai_move (ai, 7, 1));
37556        assert_true (ai_move (ai, 3, 7));
37557        assert_true (ai_move (ai, 4, 7));
37558        assert_true (ai_move (ai, 6, 1));
37559        assert_true (ai_move (ai, 1, 7));
37560        assert_true (ai_move (ai, 0, 1));
37561        assert_true (ai_move (ai, 0, 4));
37562        assert_true (ai_move (ai, 1, 1));
37563        assert_true (ai_move (ai, 0, 0));
37564        assert_true (ai_move (ai, 1, 0));
37565        assert_true (ai_move (ai, 0, 6));
37566        assert_true (ai_move (ai, 1, 6));
37567        assert_true (ai_move (ai, 6, 6));
37568        assert_true (ai_move (ai, 7, 7));
37569        assert_true (ai_move (ai, 6, 7));
37570        assert_true (ai_move (ai, 0, 7));
37571        assert_true (ai_move (ai, 6, 0));
37572        assert_true (ai_move (ai, 7, 0));
37573    }
37574
37575    private static inline void test_complete_reversi_game_488 ()
37576    {
37577                                  /* 0 1 2 3 4 5 6 7 */
37578        string [] board = {/* 0 */ " . . . . . . . .",
37579                           /* 1 */ " . . . . . . . .",
37580                           /* 2 */ " . . . L . . . .",
37581                           /* 3 */ " . . . L D . . .",
37582                           /* 4 */ " . . L L D . . .",
37583                           /* 5 */ " . . D . . D . .",
37584                           /* 6 */ " . . . . . . . .",
37585                           /* 7 */ " . . . . . . . ."};
37586
37587        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37588        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37589
37590        assert_true (ai_move (ai, 2, 1));
37591        assert_true (ai_move (ai, 2, 6));
37592        assert_true (ai_move (ai, 2, 2));
37593        assert_true (ai_move (ai, 5, 2));
37594        assert_true (ai_move (ai, 5, 4));
37595        assert_true (ai_move (ai, 4, 2));
37596        assert_true (ai_move (ai, 6, 2));
37597        assert_true (ai_move (ai, 3, 1));
37598        assert_true (ai_move (ai, 2, 0));
37599        assert_true (ai_move (ai, 1, 2));
37600        assert_true (ai_move (ai, 1, 3));
37601        assert_true (ai_move (ai, 0, 2));
37602        assert_true (ai_move (ai, 0, 4));
37603        assert_true (ai_move (ai, 5, 3));
37604        assert_true (ai_move (ai, 6, 4));
37605        assert_true (ai_move (ai, 6, 3));
37606        assert_true (ai_move (ai, 0, 3));
37607        assert_true (ai_move (ai, 0, 5));
37608        assert_true (ai_move (ai, 7, 2));
37609        assert_true (ai_move (ai, 2, 3));
37610        assert_true (ai_move (ai, 3, 5));
37611        assert_true (ai_move (ai, 4, 1));
37612        assert_true (ai_move (ai, 1, 5));
37613        assert_true (ai_move (ai, 0, 1));
37614        assert_true (ai_move (ai, 5, 1));
37615        assert_true (ai_move (ai, 5, 6));
37616        assert_true (ai_move (ai, 4, 5));
37617        assert_true (ai_move (ai, 6, 5));
37618        assert_true (ai_move (ai, 5, 7));
37619        assert_true (ai_move (ai, 5, 0));
37620        assert_true (ai_move (ai, 7, 5));
37621        assert_true (ai_move (ai, 4, 6));
37622        assert_true (ai_move (ai, 4, 0));
37623        assert_true (ai_move (ai, 0, 6));
37624        assert_true (ai_move (ai, 3, 6));
37625        assert_true (ai_move (ai, 4, 7));
37626        assert_true (ai_move (ai, 1, 4));
37627        assert_true (ai_move (ai, 2, 7));
37628        assert_true (ai_move (ai, 3, 7));
37629        assert_true (ai_move (ai, 6, 7));
37630        assert_true (ai_move (ai, 6, 0));
37631        assert_true (ai_move (ai, 3, 0));
37632        assert_true (ai_move (ai, 1, 0));
37633        assert_true (ai_move (ai, 7, 0));
37634        assert_true (ai_move (ai, 6, 6));
37635        assert_true (ai_move (ai, 0, 0));
37636        assert_true (ai_move (ai, 1, 1));
37637        assert_true (ai_move (ai, 7, 7));
37638        assert_true (ai_move (ai, 7, 6));
37639        assert_true (ai_move (ai, 7, 1));
37640        assert_true (ai_move (ai, 6, 1));
37641        assert_true (ai_move (ai, 7, 4));
37642        assert_true (ai_move (ai, 7, 3));
37643        assert_true (ai_move (ai, 1, 6));
37644        assert_true (ai_move (ai, 1, 7));
37645        assert_true (ai_move (ai, 0, 7));
37646    }
37647
37648    private static inline void test_complete_reversi_game_489 ()
37649    {
37650                                  /* 0 1 2 3 4 5 6 7 */
37651        string [] board = {/* 0 */ " . . . . . . . .",
37652                           /* 1 */ " . . . . . . . .",
37653                           /* 2 */ " . . . . . . . .",
37654                           /* 3 */ " . . . D D . . .",
37655                           /* 4 */ " . . L L D . . .",
37656                           /* 5 */ " . . L . . D . .",
37657                           /* 6 */ " . . L . . . . .",
37658                           /* 7 */ " . . . . . . . ."};
37659
37660        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37661        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37662
37663        assert_true (ai_move (ai, 1, 5));
37664        assert_true (ai_move (ai, 2, 3));
37665        assert_true (ai_move (ai, 3, 7));
37666        assert_true (ai_move (ai, 2, 7));
37667        assert_true (ai_move (ai, 1, 3));
37668        assert_true (ai_move (ai, 4, 7));
37669        assert_true (ai_move (ai, 4, 5));
37670        assert_true (ai_move (ai, 2, 2));
37671        assert_true (ai_move (ai, 3, 5));
37672        assert_true (ai_move (ai, 5, 6));
37673        assert_true (ai_move (ai, 3, 1));
37674        assert_true (ai_move (ai, 6, 5));
37675        assert_true (ai_move (ai, 4, 6));
37676        assert_true (ai_move (ai, 2, 1));
37677        assert_true (ai_move (ai, 6, 4));
37678        assert_true (ai_move (ai, 3, 6));
37679        assert_true (ai_move (ai, 7, 5));
37680        assert_true (ai_move (ai, 1, 4));
37681        assert_true (ai_move (ai, 5, 7));
37682        assert_true (ai_move (ai, 6, 7));
37683        assert_true (ai_move (ai, 2, 0));
37684        assert_true (ai_move (ai, 0, 2));
37685        assert_true (ai_move (ai, 0, 5));
37686        assert_true (ai_move (ai, 5, 4));
37687        assert_true (ai_move (ai, 1, 2));
37688        assert_true (ai_move (ai, 7, 3));
37689        assert_true (ai_move (ai, 5, 3));
37690        assert_true (ai_move (ai, 6, 2));
37691        assert_true (ai_move (ai, 4, 2));
37692        assert_true (ai_move (ai, 5, 1));
37693        assert_true (ai_move (ai, 4, 1));
37694        assert_true (ai_move (ai, 3, 2));
37695        assert_true (ai_move (ai, 0, 3));
37696        assert_true (ai_move (ai, 6, 3));
37697        assert_true (ai_move (ai, 6, 0));
37698        assert_true (ai_move (ai, 5, 0));
37699        assert_true (ai_move (ai, 4, 0));
37700        assert_true (ai_move (ai, 3, 0));
37701        assert_true (ai_move (ai, 6, 1));
37702        assert_true (ai_move (ai, 7, 2));
37703        assert_true (ai_move (ai, 0, 1));
37704        assert_true (ai_move (ai, 7, 0));
37705        assert_true (ai_move (ai, 1, 7));
37706        assert_true (ai_move (ai, 0, 7));
37707        assert_true (ai_move (ai, 1, 1));
37708        assert_true (ai_move (ai, 0, 4));
37709        assert_true (ai_move (ai, 0, 6));
37710        assert_true (ai_move (ai, 1, 6));
37711        assert_true (ai_move (ai, 6, 6));
37712        assert_true (ai_move (ai, 5, 2));
37713        assert_true (ai_move (ai, 7, 1));
37714        assert_true (ai_move (ai, 7, 4));
37715        assert_true (ai_move (ai, 7, 6));
37716        assert_true (ai_move (ai, 7, 7));
37717        assert_true (game.pass ());
37718        assert_true (ai_move (ai, 0, 0));
37719        assert_true (ai_move (ai, 1, 0));
37720    }
37721
37722    private static inline void test_complete_reversi_game_490 ()
37723    {
37724                                  /* 0 1 2 3 4 5 6 7 */
37725        string [] board = {/* 0 */ " . . . . . . . .",
37726                           /* 1 */ " . . . . . . . .",
37727                           /* 2 */ " . . . . . . . .",
37728                           /* 3 */ " . . . D D . . .",
37729                           /* 4 */ " . . L L D . . .",
37730                           /* 5 */ " . . L . . D . .",
37731                           /* 6 */ " . L . . . . . .",
37732                           /* 7 */ " . . . . . . . ."};
37733
37734        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37735        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37736
37737        assert_true (ai_move (ai, 1, 5));
37738        assert_true (ai_move (ai, 2, 3));
37739        assert_true (ai_move (ai, 1, 3));
37740        assert_true (ai_move (ai, 2, 2));
37741        assert_true (ai_move (ai, 3, 1));
37742        assert_true (ai_move (ai, 2, 1));
37743        assert_true (ai_move (ai, 1, 4));
37744        assert_true (ai_move (ai, 0, 4));
37745        assert_true (ai_move (ai, 3, 5));
37746        assert_true (ai_move (ai, 4, 6));
37747        assert_true (ai_move (ai, 4, 5));
37748        assert_true (ai_move (ai, 6, 4));
37749        assert_true (ai_move (ai, 6, 5));
37750        assert_true (ai_move (ai, 2, 6));
37751        assert_true (ai_move (ai, 3, 2));
37752        assert_true (ai_move (ai, 0, 3));
37753        assert_true (ai_move (ai, 1, 2));
37754        assert_true (ai_move (ai, 4, 0));
37755        assert_true (ai_move (ai, 0, 2));
37756        assert_true (ai_move (ai, 4, 1));
37757        assert_true (ai_move (ai, 4, 2));
37758        assert_true (ai_move (ai, 5, 1));
37759        assert_true (ai_move (ai, 0, 5));
37760        assert_true (ai_move (ai, 0, 6));
37761        assert_true (ai_move (ai, 0, 7));
37762        assert_true (ai_move (ai, 7, 5));
37763        assert_true (ai_move (ai, 2, 7));
37764        assert_true (ai_move (ai, 5, 4));
37765        assert_true (ai_move (ai, 3, 6));
37766        assert_true (ai_move (ai, 1, 7));
37767        assert_true (ai_move (ai, 5, 0));
37768        assert_true (ai_move (ai, 6, 0));
37769        assert_true (ai_move (ai, 6, 3));
37770        assert_true (ai_move (ai, 6, 2));
37771        assert_true (ai_move (ai, 5, 6));
37772        assert_true (ai_move (ai, 5, 3));
37773        assert_true (ai_move (ai, 3, 7));
37774        assert_true (ai_move (ai, 5, 7));
37775        assert_true (ai_move (ai, 4, 7));
37776        assert_true (ai_move (ai, 1, 1));
37777        assert_true (ai_move (ai, 7, 4));
37778        assert_true (ai_move (ai, 7, 3));
37779        assert_true (ai_move (ai, 5, 2));
37780        assert_true (ai_move (ai, 3, 0));
37781        assert_true (ai_move (ai, 0, 1));
37782        assert_true (ai_move (ai, 7, 6));
37783        assert_true (ai_move (ai, 0, 0));
37784        assert_true (ai_move (ai, 6, 6));
37785        assert_true (ai_move (ai, 7, 2));
37786        assert_true (ai_move (ai, 7, 1));
37787        assert_true (ai_move (ai, 7, 7));
37788        assert_true (ai_move (ai, 6, 1));
37789        assert_true (ai_move (ai, 6, 7));
37790        assert_true (ai_move (ai, 1, 0));
37791        assert_true (ai_move (ai, 7, 0));
37792        assert_true (game.pass ());
37793        assert_true (ai_move (ai, 2, 0));
37794    }
37795
37796    private static inline void test_complete_reversi_game_491 ()
37797    {
37798                                  /* 0 1 2 3 4 5 6 7 */
37799        string [] board = {/* 0 */ " . . . . . . . .",
37800                           /* 1 */ " . . . . . . . .",
37801                           /* 2 */ " . . . . . . . .",
37802                           /* 3 */ " . . . D D . . .",
37803                           /* 4 */ " . . L L D . . .",
37804                           /* 5 */ " . . D . L . . .",
37805                           /* 6 */ " . . . . . L . .",
37806                           /* 7 */ " . . . . . . . ."};
37807
37808        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37809        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37810
37811        assert_true (ai_move (ai, 1, 5));
37812        assert_true (ai_move (ai, 1, 4));
37813        assert_true (ai_move (ai, 2, 3));
37814        assert_true (ai_move (ai, 3, 6));
37815        assert_true (ai_move (ai, 2, 6));
37816        assert_true (ai_move (ai, 1, 2));
37817        assert_true (ai_move (ai, 2, 2));
37818        assert_true (ai_move (ai, 3, 2));
37819        assert_true (ai_move (ai, 4, 7));
37820        assert_true (ai_move (ai, 5, 5));
37821        assert_true (ai_move (ai, 4, 2));
37822        assert_true (ai_move (ai, 5, 4));
37823        assert_true (ai_move (ai, 2, 1));
37824        assert_true (ai_move (ai, 1, 3));
37825        assert_true (ai_move (ai, 0, 2));
37826        assert_true (ai_move (ai, 5, 2));
37827        assert_true (ai_move (ai, 5, 3));
37828        assert_true (ai_move (ai, 6, 2));
37829        assert_true (ai_move (ai, 5, 1));
37830        assert_true (ai_move (ai, 3, 1));
37831        assert_true (ai_move (ai, 0, 5));
37832        assert_true (ai_move (ai, 4, 0));
37833        assert_true (ai_move (ai, 3, 5));
37834        assert_true (ai_move (ai, 2, 7));
37835        assert_true (ai_move (ai, 3, 0));
37836        assert_true (ai_move (ai, 2, 0));
37837        assert_true (ai_move (ai, 7, 2));
37838        assert_true (ai_move (ai, 4, 1));
37839        assert_true (ai_move (ai, 5, 0));
37840        assert_true (ai_move (ai, 6, 0));
37841        assert_true (ai_move (ai, 4, 6));
37842        assert_true (ai_move (ai, 6, 3));
37843        assert_true (ai_move (ai, 7, 3));
37844        assert_true (ai_move (ai, 6, 4));
37845        assert_true (ai_move (ai, 7, 4));
37846        assert_true (ai_move (ai, 3, 7));
37847        assert_true (ai_move (ai, 1, 7));
37848        assert_true (ai_move (ai, 6, 5));
37849        assert_true (ai_move (ai, 5, 7));
37850        assert_true (ai_move (ai, 7, 5));
37851        assert_true (ai_move (ai, 7, 6));
37852        assert_true (ai_move (ai, 0, 4));
37853        assert_true (ai_move (ai, 0, 3));
37854        assert_true (ai_move (ai, 1, 6));
37855        assert_true (ai_move (ai, 6, 7));
37856        assert_true (ai_move (ai, 6, 1));
37857        assert_true (ai_move (ai, 7, 1));
37858        assert_true (ai_move (ai, 1, 1));
37859        assert_true (ai_move (ai, 0, 0));
37860        assert_true (ai_move (ai, 0, 1));
37861        assert_true (ai_move (ai, 1, 0));
37862        assert_true (ai_move (ai, 0, 7));
37863        assert_true (ai_move (ai, 7, 0));
37864        assert_true (ai_move (ai, 7, 7));
37865        assert_true (ai_move (ai, 0, 6));
37866        assert_true (ai_move (ai, 6, 6));
37867    }
37868
37869    private static inline void test_complete_reversi_game_492 ()
37870    {
37871                                  /* 0 1 2 3 4 5 6 7 */
37872        string [] board = {/* 0 */ " . . . . . . . .",
37873                           /* 1 */ " . . . . . . . .",
37874                           /* 2 */ " . . . . . . . .",
37875                           /* 3 */ " . . . D D . . .",
37876                           /* 4 */ " . . L L L L . .",
37877                           /* 5 */ " . . D . D . . .",
37878                           /* 6 */ " . . . . . . . .",
37879                           /* 7 */ " . . . . . . . ."};
37880
37881        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37882        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37883
37884        assert_true (ai_move (ai, 1, 5));
37885        assert_true (ai_move (ai, 5, 6));
37886        assert_true (ai_move (ai, 6, 5));
37887        assert_true (ai_move (ai, 6, 3));
37888        assert_true (ai_move (ai, 4, 7));
37889        assert_true (ai_move (ai, 1, 4));
37890        assert_true (ai_move (ai, 0, 3));
37891        assert_true (ai_move (ai, 2, 2));
37892        assert_true (ai_move (ai, 4, 2));
37893        assert_true (ai_move (ai, 5, 2));
37894        assert_true (ai_move (ai, 6, 2));
37895        assert_true (ai_move (ai, 4, 1));
37896        assert_true (ai_move (ai, 5, 1));
37897        assert_true (ai_move (ai, 5, 0));
37898        assert_true (ai_move (ai, 5, 5));
37899        assert_true (ai_move (ai, 5, 7));
37900        assert_true (ai_move (ai, 4, 6));
37901        assert_true (ai_move (ai, 7, 5));
37902        assert_true (ai_move (ai, 7, 4));
37903        assert_true (ai_move (ai, 7, 3));
37904        assert_true (ai_move (ai, 4, 0));
37905        assert_true (ai_move (ai, 3, 7));
37906        assert_true (ai_move (ai, 3, 6));
37907        assert_true (ai_move (ai, 3, 0));
37908        assert_true (ai_move (ai, 5, 3));
37909        assert_true (ai_move (ai, 3, 2));
37910        assert_true (ai_move (ai, 3, 1));
37911        assert_true (ai_move (ai, 2, 1));
37912        assert_true (ai_move (ai, 1, 2));
37913        assert_true (ai_move (ai, 2, 3));
37914        assert_true (ai_move (ai, 1, 3));
37915        assert_true (ai_move (ai, 2, 6));
37916        assert_true (ai_move (ai, 3, 5));
37917        assert_true (ai_move (ai, 6, 4));
37918        assert_true (ai_move (ai, 7, 2));
37919        assert_true (ai_move (ai, 7, 1));
37920        assert_true (ai_move (ai, 2, 7));
37921        assert_true (ai_move (ai, 0, 2));
37922        assert_true (ai_move (ai, 6, 7));
37923        assert_true (ai_move (ai, 0, 4));
37924        assert_true (ai_move (ai, 2, 0));
37925        assert_true (ai_move (ai, 0, 5));
37926        assert_true (ai_move (ai, 6, 0));
37927        assert_true (ai_move (ai, 7, 6));
37928        assert_true (ai_move (ai, 6, 6));
37929        assert_true (ai_move (ai, 1, 1));
37930        assert_true (ai_move (ai, 0, 0));
37931        assert_true (ai_move (ai, 1, 0));
37932        assert_true (ai_move (ai, 0, 1));
37933        assert_true (ai_move (ai, 7, 0));
37934        assert_true (ai_move (ai, 0, 6));
37935        assert_true (ai_move (ai, 1, 7));
37936        assert_true (ai_move (ai, 0, 7));
37937        assert_true (ai_move (ai, 1, 6));
37938        assert_true (ai_move (ai, 6, 1));
37939    }
37940
37941    private static inline void test_complete_reversi_game_493 ()
37942    {
37943                                  /* 0 1 2 3 4 5 6 7 */
37944        string [] board = {/* 0 */ " . . . . . . . .",
37945                           /* 1 */ " . . . . . . . .",
37946                           /* 2 */ " . . . . . L . .",
37947                           /* 3 */ " . . . D L . . .",
37948                           /* 4 */ " . . L L D . . .",
37949                           /* 5 */ " . . D . D . . .",
37950                           /* 6 */ " . . . . . . . .",
37951                           /* 7 */ " . . . . . . . ."};
37952
37953        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
37954        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
37955
37956        assert_true (ai_move (ai, 2, 3));
37957        assert_true (ai_move (ai, 1, 3));
37958        assert_true (ai_move (ai, 1, 2));
37959        assert_true (ai_move (ai, 1, 5));
37960        assert_true (ai_move (ai, 1, 4));
37961        assert_true (ai_move (ai, 0, 3));
37962        assert_true (ai_move (ai, 0, 5));
37963        assert_true (ai_move (ai, 2, 1));
37964        assert_true (ai_move (ai, 0, 2));
37965        assert_true (ai_move (ai, 0, 1));
37966        assert_true (ai_move (ai, 3, 2));
37967        assert_true (ai_move (ai, 3, 5));
37968        assert_true (ai_move (ai, 2, 6));
37969        assert_true (ai_move (ai, 2, 7));
37970        assert_true (ai_move (ai, 3, 6));
37971        assert_true (ai_move (ai, 2, 2));
37972        assert_true (ai_move (ai, 2, 0));
37973        assert_true (ai_move (ai, 3, 1));
37974        assert_true (ai_move (ai, 3, 7));
37975        assert_true (ai_move (ai, 4, 2));
37976        assert_true (ai_move (ai, 3, 0));
37977        assert_true (ai_move (ai, 4, 0));
37978        assert_true (ai_move (ai, 5, 0));
37979        assert_true (ai_move (ai, 5, 6));
37980        assert_true (ai_move (ai, 4, 6));
37981        assert_true (ai_move (ai, 5, 7));
37982        assert_true (ai_move (ai, 4, 7));
37983        assert_true (ai_move (ai, 4, 1));
37984        assert_true (ai_move (ai, 5, 1));
37985        assert_true (ai_move (ai, 5, 4));
37986        assert_true (ai_move (ai, 6, 2));
37987        assert_true (ai_move (ai, 7, 2));
37988        assert_true (ai_move (ai, 5, 5));
37989        assert_true (ai_move (ai, 1, 0));
37990        assert_true (ai_move (ai, 0, 0));
37991        assert_true (ai_move (ai, 0, 4));
37992        assert_true (ai_move (ai, 1, 1));
37993        assert_true (ai_move (ai, 1, 6));
37994        assert_true (ai_move (ai, 5, 3));
37995        assert_true (ai_move (ai, 6, 3));
37996        assert_true (ai_move (ai, 6, 4));
37997        assert_true (ai_move (ai, 6, 5));
37998        assert_true (ai_move (ai, 0, 7));
37999        assert_true (ai_move (ai, 0, 6));
38000        assert_true (ai_move (ai, 1, 7));
38001        assert_true (ai_move (ai, 6, 0));
38002        assert_true (ai_move (ai, 6, 7));
38003        assert_true (ai_move (ai, 6, 6));
38004        assert_true (ai_move (ai, 7, 7));
38005        assert_true (ai_move (ai, 7, 6));
38006        assert_true (ai_move (ai, 7, 0));
38007        assert_true (game.pass ());
38008        assert_true (ai_move (ai, 7, 1));
38009        assert_true (ai_move (ai, 7, 3));
38010        assert_true (ai_move (ai, 7, 5));
38011        assert_true (ai_move (ai, 7, 4));
38012        assert_true (ai_move (ai, 6, 1));
38013    }
38014
38015    private static inline void test_complete_reversi_game_494 ()
38016    {
38017                                  /* 0 1 2 3 4 5 6 7 */
38018        string [] board = {/* 0 */ " . . . . . . . .",
38019                           /* 1 */ " . . . . . . . .",
38020                           /* 2 */ " . . . . L . . .",
38021                           /* 3 */ " . . . L D . . .",
38022                           /* 4 */ " . . L L D . . .",
38023                           /* 5 */ " . . D . D . . .",
38024                           /* 6 */ " . . . . . . . .",
38025                           /* 7 */ " . . . . . . . ."};
38026
38027        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
38028        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
38029
38030        assert_true (ai_move (ai, 4, 1));
38031        assert_true (ai_move (ai, 2, 6));
38032        assert_true (ai_move (ai, 2, 2));
38033        assert_true (ai_move (ai, 5, 1));
38034        assert_true (ai_move (ai, 2, 3));
38035        assert_true (ai_move (ai, 2, 1));
38036        assert_true (ai_move (ai, 1, 4));
38037        assert_true (ai_move (ai, 0, 5));
38038        assert_true (ai_move (ai, 0, 4));
38039        assert_true (ai_move (ai, 0, 3));
38040        assert_true (ai_move (ai, 6, 0));
38041        assert_true (ai_move (ai, 5, 6));
38042        assert_true (ai_move (ai, 3, 5));
38043        assert_true (ai_move (ai, 5, 4));
38044        assert_true (ai_move (ai, 1, 5));
38045        assert_true (ai_move (ai, 3, 6));
38046        assert_true (ai_move (ai, 4, 6));
38047        assert_true (ai_move (ai, 5, 2));
38048        assert_true (ai_move (ai, 6, 2));
38049        assert_true (ai_move (ai, 3, 2));
38050        assert_true (ai_move (ai, 6, 3));
38051        assert_true (ai_move (ai, 6, 5));
38052        assert_true (ai_move (ai, 6, 4));
38053        assert_true (ai_move (ai, 5, 3));
38054        assert_true (ai_move (ai, 1, 3));
38055        assert_true (ai_move (ai, 1, 2));
38056        assert_true (ai_move (ai, 3, 1));
38057        assert_true (ai_move (ai, 0, 2));
38058        assert_true (ai_move (ai, 2, 7));
38059        assert_true (ai_move (ai, 7, 2));
38060        assert_true (ai_move (ai, 5, 5));
38061        assert_true (ai_move (ai, 7, 5));
38062        assert_true (ai_move (ai, 2, 0));
38063        assert_true (ai_move (ai, 0, 6));
38064        assert_true (ai_move (ai, 5, 7));
38065        assert_true (ai_move (ai, 7, 3));
38066        assert_true (ai_move (ai, 7, 4));
38067        assert_true (ai_move (ai, 5, 0));
38068        assert_true (ai_move (ai, 4, 0));
38069        assert_true (ai_move (ai, 3, 0));
38070        assert_true (ai_move (ai, 6, 1));
38071        assert_true (ai_move (ai, 3, 7));
38072        assert_true (ai_move (ai, 4, 7));
38073        assert_true (ai_move (ai, 1, 1));
38074        assert_true (ai_move (ai, 1, 7));
38075        assert_true (ai_move (ai, 6, 6));
38076        assert_true (ai_move (ai, 7, 1));
38077        assert_true (ai_move (ai, 7, 0));
38078        assert_true (ai_move (ai, 0, 0));
38079        assert_true (ai_move (ai, 6, 7));
38080        assert_true (ai_move (ai, 7, 7));
38081        assert_true (ai_move (ai, 7, 6));
38082        assert_true (ai_move (ai, 1, 0));
38083        assert_true (ai_move (ai, 1, 6));
38084        assert_true (ai_move (ai, 0, 1));
38085        assert_true (game.pass ());
38086        assert_true (ai_move (ai, 0, 7));
38087    }
38088
38089    private static inline void test_complete_reversi_game_495 ()
38090    {
38091                                  /* 0 1 2 3 4 5 6 7 */
38092        string [] board = {/* 0 */ " . . . . . . . .",
38093                           /* 1 */ " . . . . . . . .",
38094                           /* 2 */ " . . . L . . . .",
38095                           /* 3 */ " . . . L D . . .",
38096                           /* 4 */ " . . L L D . . .",
38097                           /* 5 */ " . . D . D . . .",
38098                           /* 6 */ " . . . . . . . .",
38099                           /* 7 */ " . . . . . . . ."};
38100
38101        Game game = new Game.from_strings (board, Player.DARK, /* reverse */ false);
38102        ComputerPlayer ai = new ComputerReversiHard (game, /* depth */ 1, /* fixed heuristic */ true);
38103
38104        assert_true (ai_move (ai, 2, 1));
38105        assert_true (ai_move (ai, 2, 6));
38106        assert_true (ai_move (ai, 2, 2));
38107        assert_true (ai_move (ai, 5, 6));
38108        assert_true (ai_move (ai, 4, 6));
38109        assert_true (ai_move (ai, 5, 2));
38110        assert_true (ai_move (ai, 5, 4));
38111        assert_true (ai_move (ai, 4, 2));
38112        assert_true (ai_move (ai, 6, 2));
38113        assert_true (ai_move (ai, 3, 1));
38114        assert_true (ai_move (ai, 2, 0));
38115        assert_true (ai_move (ai, 1, 2));
38116        assert_true (ai_move (ai, 1, 3));
38117        assert_true (ai_move (ai, 1, 4));
38118        assert_true (ai_move (ai, 0, 2));
38119        assert_true (ai_move (ai, 4, 0));
38120        assert_true (ai_move (ai, 2, 3));
38121        assert_true (ai_move (ai, 5, 1));
38122        assert_true (ai_move (ai, 5, 3));
38123        assert_true (ai_move (ai, 7, 2));
38124        assert_true (ai_move (ai, 5, 0));
38125        assert_true (ai_move (ai, 3, 0));
38126        assert_true (ai_move (ai, 4, 1));
38127        assert_true (ai_move (ai, 6, 3));
38128        assert_true (ai_move (ai, 6, 4));
38129        assert_true (ai_move (ai, 0, 3));
38130        assert_true (ai_move (ai, 2, 7));
38131        assert_true (ai_move (ai, 0, 1));
38132        assert_true (ai_move (ai, 0, 5));
38133        assert_true (ai_move (ai, 1, 5));
38134        assert_true (ai_move (ai, 7, 3));
38135        assert_true (ai_move (ai, 3, 5));
38136        assert_true (ai_move (ai, 7, 1));
38137        assert_true (ai_move (ai, 5, 7));
38138        assert_true (ai_move (ai, 4, 7));
38139        assert_true (ai_move (ai, 5, 5));
38140        assert_true (ai_move (ai, 6, 5));
38141        assert_true (ai_move (ai, 3, 7));
38142        assert_true (ai_move (ai, 6, 7));
38143        assert_true (ai_move (ai, 3, 6));
38144        assert_true (ai_move (ai, 6, 1));
38145        assert_true (ai_move (ai, 7, 4));
38146        assert_true (ai_move (ai, 7, 5));
38147        assert_true (ai_move (ai, 1, 1));
38148        assert_true (ai_move (ai, 0, 4));
38149        assert_true (ai_move (ai, 0, 6));
38150        assert_true (ai_move (ai, 1, 6));
38151        assert_true (ai_move (ai, 1, 0));
38152        assert_true (ai_move (ai, 0, 0));
38153        assert_true (ai_move (ai, 0, 7));
38154        assert_true (ai_move (ai, 1, 7));
38155        assert_true (ai_move (ai, 7, 7));
38156        assert_true (game.pass ());
38157        assert_true (ai_move (ai, 7, 6));
38158        assert_true (ai_move (ai, 6, 6));
38159        assert_true (ai_move (ai, 7, 0));
38160        assert_true (ai_move (ai, 6, 0));
38161    }
38162}
38163