The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/gnu/bin/perl -w
#
# Name:
#	test.pl.

use strict;

use Lingua::EN::Infinitive;

# --------------------------------------------------------------------

my($spell) = Lingua::EN::Infinitive -> new();

my($debug) = shift || 0;

my($expectedRule, $word, $expectedStem);

my($prefix1, $prefix2, $suffix, $rule);

my($head1) =
"<------Rule------>                                                <----------------Results--------------->";
my($head2) =
"Expect        Got           Word               Expect             Got                    Suffix        Ok?";
my($head3) = '-' x length($head2);

my($count) = 0;

while (<DATA>)
{
	next if (/^#/);

	$count++;

	if ($debug && ( ($count % 20) == 1) )
	{
		print "$head1\n";
		print "$head2\n";
		print "$head3\n";
	}

	chomp;
	($expectedRule, $word, $expectedStem)	= split;
	($prefix1, $prefix2, $suffix, $rule)	= $spell -> stem($word);

	# Or:
	#	$spell -> stem($word);
	#	$prefix1	= $spell -> {'word1'}";
	#	$prefix2	= $spell -> {'word2'};
	#	$suffix		= $spell -> {'suffix'};
	#	$rule		= $spell -> {'rule'};

	# Print some by accessing the data in the alternate manner.
	if ( ($debug) && ($rule eq '1') )
	{
		print "prefix1: $spell->{'word1'}\n";
		print "prefix2: $spell->{'word2'}\n";
		print "suffix:  $spell->{'suffix'}\n";
		print "rule:    $spell->{'rule'}\n";
	}

	my($result, $stem) = ('ok', "$prefix1/$prefix2");

	if ( ($expectedStem ne $prefix1) && ($expectedStem ne $prefix2) )
	{
		print "Error. No rule matches $word. Method stem() returned: <$prefix1> <$prefix2> <$suffix> <$rule>. \n" if ($debug);
		$result = 'not ok';
	}
	else
	{
		printf("%-10s    %-10s    %-15s    %-15s    %-24s%-10s    %-5s\n", $expectedRule, $rule,
			$word, $expectedStem, $stem, $suffix, $result) if ($debug);
	}

	print $word, '.' x (20 - length($word) ), "$result\n" if (! $debug);
}

# Success.
exit(0);

__DATA__
1			aches			ache
1			arches			arch
2			vases			vase
2			basses			bass
3			axes			axe
3			fixes			fix
4			hazes			haze
4			buzzes			buzz
6a			caress			caress
6b			bans			ban
7			Jones's			Jones
8			creater			creater
9			reacter			reacter
10			copier			copy
11			baker			bake
11			smaller			small
12a			curried			curry
12b			bored			bore
12b			seated			seat
# Can't handle these 2 with the special code as for the following 5 because after
# chopping the suffix, we are not left with a one-syllable word. Ie it's too hard.
# Yes, that was 5 not 7. Look for the doubled-consonant in the middle of the word.
# The special code is in Infinitive.pm @ line 1188.
#12b		bootstrapped	bootstrap
#12b		bootstrapping	bootstrap
12b			tipped			tip
12b			kitted			kit
12b			capped			cap
12b			chopped			chop
12b			curried			curry
12b			bored			bore
12b			seated			seat
13a			flies			fly
13b			palates			palate
14a			liveliest		lively
14b			wisest			wise
14b			strongest		strong
15			living			live
15			laughing		laugh
15			swaying			sway
15			catching		catch
15			smiling			smile
15			swimming		swim
15			running			run
15			floating		float
15			keyboarding		keyboard
15			wrestling		wrestle
15			traveling		travel
15			traipsing		traipse
16			stylist			style
16			dentist			dent
17			cubism			cube
17			socialism		social
18			scarcity		scarce
18			rapidity		rapid
19			immunize		immune
19			lionize			lion
20			livable			live
20			portable		port
22			nobility		noble
23			identifiable	identify
24			psychologist	psychology
25			photographic	photography
26			stylistic		stylist
27			martensitic		martensite
27			politic			polite
28			ladylike		lady
29			biologic		biology
30			battlement		battle
31			supplemental	supplement
32			thermometry		thermometer
33			inadvertence	inadvertent
34			potency			potent
35			discipleship	disciple
36			mystical		mystic
37			regional		region
37			national		nation
38			horribly		horrible
39			scantily		scanty
40			partly			part
41a			dutiful			duty
41b			harmful			harm
42a			likelihood		likely
42b			neighborhood	neighbor
42b			neighbourhood	neighbour
43a			penniless		penny
43b			listless		list
44a			heartiness		hearty
44b			coolness		cool
45			specification	specify
46			rationalization	rationalize
47			detection		detect
48			exertion		exert
49			creation		create
50			creator			create
51			detector		detect
52			creative		creation
52			decisive		decision
53			Australian		Australia
54			Jeffersonian	Jefferson
irregular	rove			reeve
irregular	dove			dive
irregular	snuck			sneak
irregular	wot				wit