The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Text::Names 'parseNames','cleanName','composeName','parseName';
use Test::More;
use utf8;
binmode(STDOUT,":utf8");

#is(cleanName("van fraassen b c"),"Van Fraassen, B. C.");

my %tests = (
    'Kuehni, R. G., Hardin, C. L.' => 'Kuehni, R. G.; Hardin, C. L.',
	'Bourget, David; Doe, John' => 'Bourget, David; Doe, John',	
	'David Bourget & John Doe' => 'Bourget, David; Doe, John',	
	'David Bourget and John Doe' => 'Bourget, David; Doe, John',	
	'Bourget D, Doe J' => 'Bourget, D.; Doe, J.',	
	'Bourget DJR' => 'Bourget, D. J. R.',
    'Bourget, D.J.R.' => 'Bourget, D. J. R.',
    'Bourget D.J.R.' => 'Bourget, D. J. R.',
    'D.J. Bourget' => 'Bourget, D. J.',
	'Bourget, DAVID' => 'Bourget, DAVID',
	'David BOURGET' => 'BOURGET, David',
    'David Chalmers, David Bourget and John Doe' => 'Chalmers, David; Bourget, David; Doe, John',
    'Chalmers, David, Bourget, David, Doe, John' => 'Chalmers, David; Bourget, David; Doe, John',
    'Chalmers, David John, Bourget, David, Doe, John C.' => 'Chalmers, David John; Bourget, David; Doe, John C.',
	'DAVID BOURGET' => 'BOURGET, DAVID',
    'John Doe Jr' => 'Doe Jr, John',
    'John M. Doe Jr' => 'Doe Jr, John M.',
    'Dr Afsar Abbas' => 'Abbas, Afsar',
    'R. de Sousa' => 'de Sousa, R.',
    'Jean Claude van Damme' => 'van Damme, Jean Claude',
    'Dr. Jean Claude van Damme, Prof R de Sousa' => 'van Damme, Jean Claude; de Sousa, R.',
    "Maureen A. O'Malley" => "O'Malley, Maureen A.",
    "Gusmão da Silva, Guilherme" => "Gusmão da Silva, Guilherme",
    "D Bourget, Zbigniew Z Lukasiak and John Doe" => "Bourget, D.; Lukasiak, Zbigniew Z.; Doe, John",
    "Bourget, D and John Doe" => "Bourget, D.; Doe, John",
    "Bourget, D, Chalmers C, and John Doe" => "Bourget, D.; Chalmers, C.; Doe, John",
    cleanName("Guilherme Gusmão da Silva") => "da Silva, Guilherme Gusmão",
    cleanName("van Untouched, Firstname") => "van Untouched, Firstname",
    cleanName("Van Untouched, Firstname") => "Van Untouched, Firstname",
    cleanName("VAN TOUCHED, firstname") => "van Touched, Firstname",
    cleanName("CL Adams") => "Adams, C. L.",
    cleanName("Hacker, PMS") => "Hacker, P. M. S.",
    cleanName("van fraassen b") => "van Fraassen, B.",
    cleanName("van fraassen b c") => "van Fraassen, B. C."
);
is(cleanName("Hacker, PMS"),"Hacker, P. M. S.");
is(cleanName("Doe, Bob"),"Doe, Bob");
#print cleanName("Guilherme Gusmão da Silva");
foreach my $t (keys %tests) {
	my $r = join('; ',parseNames($t));
    is( $r, $tests{$t}, "$t -> $r" );
}
done_testing;