Games-Sudoku-General

 view release on metacpan or  search on metacpan

t/sudoku.t  view on Meta::CPAN

package main;

use strict;
use warnings;

use lib qw{ inc/mock };	# For the mock Clipboard object.

use Games::Sudoku::General;
use Test::More 0.88;

my $su = Games::Sudoku::General->new();

is $su->get( 'columns' ), 9, 'Default columns';

is $su->get( 'symbols' ), '. 1 2 3 4 5 6 7 8 9', 'Default symbols';

is $su->get( 'topology' ), <<'EOD', 'Default topology';
c0,r0,s0 c1,r0,s0 c2,r0,s0 c3,r0,s1 c4,r0,s1 c5,r0,s1 c6,r0,s2 c7,r0,s2 c8,r0,s2
c0,r1,s0 c1,r1,s0 c2,r1,s0 c3,r1,s1 c4,r1,s1 c5,r1,s1 c6,r1,s2 c7,r1,s2 c8,r1,s2
c0,r2,s0 c1,r2,s0 c2,r2,s0 c3,r2,s1 c4,r2,s1 c5,r2,s1 c6,r2,s2 c7,r2,s2 c8,r2,s2
c0,r3,s3 c1,r3,s3 c2,r3,s3 c3,r3,s4 c4,r3,s4 c5,r3,s4 c6,r3,s5 c7,r3,s5 c8,r3,s5
c0,r4,s3 c1,r4,s3 c2,r4,s3 c3,r4,s4 c4,r4,s4 c5,r4,s4 c6,r4,s5 c7,r4,s5 c8,r4,s5
c0,r5,s3 c1,r5,s3 c2,r5,s3 c3,r5,s4 c4,r5,s4 c5,r5,s4 c6,r5,s5 c7,r5,s5 c8,r5,s5
c0,r6,s6 c1,r6,s6 c2,r6,s6 c3,r6,s7 c4,r6,s7 c5,r6,s7 c6,r6,s8 c7,r6,s8 c8,r6,s8
c0,r7,s6 c1,r7,s6 c2,r7,s6 c3,r7,s7 c4,r7,s7 c5,r7,s7 c6,r7,s8 c7,r7,s8 c8,r7,s8
c0,r8,s6 c1,r8,s6 c2,r8,s6 c3,r8,s7 c4,r8,s7 c5,r8,s7 c6,r8,s8 c7,r8,s8 c8,r8,s8
EOD

my $gsftax = 'http://www.research.att.com/~gsf/sudoku/taxonomy.dat';

$su->problem( <<'EOD' );
...4..7894.6...1...8.....5.2.4..5....95.........9.2345.3..7.9.8.67..1...9....8..2
EOD

$su->set( name => 'Taxonomy' );
is $su->get( 'name' ), 'Taxonomy', 'Get and set name';

is $su->unload(), <<'EOD', 'Unload function';
. . . 4 . . 7 8 9
4 . 6 . . . 1 . .
. 8 . . . . . 5 .
2 . 4 . . 5 . . .
. 9 5 . . . . . .
. . . 9 . 2 3 4 5
. 3 . . 7 . 9 . 8
. 6 7 . . 1 . . .
9 . . . . 8 . . 2
EOD

$su->copy();
is( Clipboard->paste(), <<'EOD', 'Copy to clipboard' );
. . . 4 . . 7 8 9
4 . 6 . . . 1 . .
. 8 . . . . . 5 .
2 . 4 . . 5 . . .
. 9 5 . . . . . .
. . . 9 . 2 3 4 5
. 3 . . 7 . 9 . 8
. 6 7 . . 1 . . .
9 . . . . 8 . . 2
EOD

is $su->solution(), <<'EOD',
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 1 4 3 6 5 8 9 7
3 9 5 8 4 7 2 6 1
6 7 8 9 1 2 3 4 5
5 3 2 6 7 4 9 1 8
8 6 7 2 9 1 5 3 4
9 4 1 5 3 8 6 7 2
EOD
    "Constraint Taxonomy 1 (F) - Glenn Fowler $gsftax";

note <<'EOD';
The following test is a bit fragile in that if I fiddle with the
algorithm the results will probably change.
EOD

is scalar $su->steps(), <<'EOD', 'Steps for solution';
F [17 3]
F [70 3]
F [71 4]
F [74 1]
F [16 2]
F [26 6]
F [47 8]
F [54 5]
F [56 2]
F [57 6]
F [59 4]
F [61 1]
F [63 8]
F [69 5]
F [73 4]
F [78 6]
F [79 7]
F [2 3]
F [5 6]
F [20 9]
F [24 4]
F [33 8]
F [42 2]
F [43 6]
F [66 2]
F [67 9]
F [0 1]
F [18 7]
F [23 3]
F [34 9]



( run in 0.656 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )