The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Cisco::Abbrev;

use Test::More;

my @tests = map { chomp; [ split /\s+/ ] } grep /\S/, <DATA>;
my @lame = (undef, 'whatever', '1/42', '');

## can't be done in both directions.. just short --> long
my %ambiguous = (
    'PortCh5' => 'Port-channel5',
    'Eth0/5'  => 'Ethernet0/5',
);

plan tests => keys(%ambiguous) + 2*@tests + 2*@lame;

for my $test (@tests)
{
    my ($long, $short) = @$test;

    is(cisco_abbrev_int($long), $short, "abbrev($long) = $short");
    is(cisco_long_int($short), $long, "long_int($short) = $long");
}

## funky case of ambiguous abbrevs (depends on software version)
while (my ($short, $long) = each %ambiguous)
{
    is(cisco_long_int($short), $long, "long($short) = '$long'");
}

## handle undef inputs
for my $lame (@lame)
{
    no warnings 'uninitialized';
    is(cisco_long_int($lame), undef, "long($lame) = undef");
    is(cisco_long_int($lame), undef, "abbrev($lame) = undef");
}

__DATA__
FastEthernet0/1		Fa0/1
GigabitEthernet0/1	Gi0/1
TenGigabitEthernet0/1	Te0/1
Ethernet5		Et5
Vlan99			Vl99
Port-channel10		Po10
Tunnel504		Tu504
POS2/3/8		PO2/3/8
Serial4/44		Se4/44
Serial1/2/3:4/0.2	Se1/2/3:4/0.2
Multilink89		Mu89
Loopback0		Lo0
ATM4/3.1		AT4/3.1
Virtual-Access1.2438	Vi1.2438
Virtual-Template25	Vt25
Pos-channel5		PosCh5
Fddi8/2			FD8/2

EOBC0/0			EO0/0

MFR8			MFR8
Async5			Async5
Group-Async5		Group-Async5

FastEthernet1/0		Fa1/0
FastEthernet1/0.99	Fa1/0.99
GigabitEthernet0/2	Gi0/2
GigabitEthernet0/2.99	Gi0/2.99
Ethernet0/2		Et0/2
Ethernet0/2.99		Et0/2.99
TenGigabitEthernet1/1	Te1/1
TenGigabitEthernet1/1.99 Te1/1.99

POS2/0/0		PO2/0/0
Serial4/1/0		Se4/1/0
Serial4/1/0.500		Se4/1/0.500
ATM1/0/0		AT1/0/0
ATM1/0/0.45		AT1/0/0.45

Virtual-Access2589	Vi2589
Virtual-Access2.2589	Vi2.2589