Revision 22 (by dpavlin, 2007/06/28 09:43:40) added tests for minimal, extended build, renamed clear_affix to clear
#!/usr/bin/perl -w

use strict;
use blib;

use Test::More tests => 80;
use Data::Dumper;

my @test_words=( 'cars', 'dogs' );

my $debug = shift @ARGV;

BEGIN { use_ok( 'Lingua::Spelling::Alternative' ); }

ok(my $a = new Lingua::Spelling::Alternative( DEBUG => $debug ), "new");

ok($a->load_affix('./data/default.aff'), "load_affix default.aff");

my @out = qw(
bat build cloudy convey create
cross dirty disposed dog enter
fall file fix gray hundred
imply late multiply natural prevent
quick skate small twenty weak
);
my @count = (
15,16,15,15,15,
17,15,18,15,18,
15,15,15,15,18,
16,15,16,15,15,
15,15,15,15,15
);

my %minimal_base = (
	'cross' => 14,
	'dirty' => 15,
	'multiply' => 14,
	'file' => 7,
	'late' => 7,
	'ent' => 4,
	'natural' => 15,
	'hundr' => 1,
	'dispose' => 1,
	'imp' => 2,
	'convey' => 15,
	'hundre' => 1,
	'dispos' => 1,
	'multip' => 2,
	'hund' => 2,
	'weak' => 15,
	'fix' => 15,
	'ente' => 1,
	'skat' => 8,
	'cro' => 2,
	'enter' => 13,
	'gray' => 15,
	'twenty' => 15,
	'small' => 15,
	'buil' => 2,
	'dispo' => 2,
	'lat' => 8,
	'fil' => 8,
	'imply' => 14,
	'cloudy' => 15,
	'creat' => 8,
	'fall' => 15,
	'disposed' => 14,
	'create' => 7,
	'bat' => 15,
	'prevent' => 15,
	'build' => 14,
	'skate' => 7,
	'hundred' => 14,
	'dog' => 15,
	'cros' => 1,
	'quick' => 15
);

my %minimal;

foreach my $w (@out) {
	my @alt = $a->alternatives($w);
	diag "$w -> ".join(",",@alt) if ($debug);
	cmp_ok(($#alt+1), '==', shift @count, "$w => ".($#alt+1)." alternatives");
	my @min = $a->minimal(@alt);
	diag "minimal: ".join(",",@min) if ($debug);
	foreach (@min) {
		$minimal{$_}++;
	}
	cmp_ok($#alt, '==', $#min, "minimal $w");

	my $tmp = $a->minimal($w);
	unlike($tmp, qr/ARRAY/, "single minimal is scalar");
}

ok(eq_hash(\%minimal, \%minimal_base), "minimal results ok");

ok($a->clear, "clear");